﻿/// <reference path="jquery-1.6.1.js" />
/// <reference path="jQuery/jquery.watermark.js" />

function InitializeTabs() {
    // Tabs
    $('#searchtabs').tabs({
        select: function(event, ui) {
            //Set title (if visible)
            var tabTitle = $("#" + ui.tab.id + " td.TabMiddle")[0].innerHTML;
            tabTitle = tabTitle.replace('#', 'Number');
            $(".h3_SearchOptionsTitle").html("SHOP BY " + tabTitle.toUpperCase());
            //Set active tab
            switch (ui.index) {
                case 0:
                    $("input[id$=hdnSearchType]").val("VIN"); break;
                case 1:
                    $("input[id$=hdnSearchType]").val("MakeModelYear"); break;
                case 2:
                    $("input[id$=hdnSearchType]").val("PartNumber"); break;
                case 3:
                    $("input[id$=hdnSearchType]").val("Vehicle"); LazyLoadMyVehicles(); break;
                case 4:
                    $("input[id$=hdnSearchType]").val("InterchangeGuide"); break;
                case 5:
                    $("input[id$=hdnSearchType]").val("CompatibilityGuide"); break;
            }
        }
    });

    //Show form after jquery tabs has initialized
    $('#searchtabs').css("display", "");

    //Set active tab
    switch ($("input[id$=hdnSearchType]").val()) {
        case "VIN":
            $('#searchtabs').tabs('select', 0); break;
        case "MakeModelYear":
            $('#searchtabs').tabs('select', 1); break;
        case "PartNumber":
            $('#searchtabs').tabs('select', 2); break;
        case "Vehicle":
            $('#searchtabs').tabs('select', 3); break;
        case "InterchangeGuide":
            $('#searchtabs').tabs('select', 4); break;
        case "CompatibilityGuide":
            $('#searchtabs').tabs('select', 5); break;
    }
}

//init tabs on asynch postback
//Source: http://blog.dreamlabsolutions.com/post/2009/03/25/jQuery-live-and-ASPNET-Ajax-asynchronous-postback.aspx
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler_Search_ASCX);
function EndRequestHandler_Search_ASCX(sender, args) {
    InitializeTabs();
}

//eliminate post-back by doing client-search
function submitModelSearch() {
    var year = $('select[id$=ddlYear] option:selected').text();
    var make = $('select[id$=ddlMake] option:selected').text();
    var model = $('select[id$=ddlModel] option:selected').text();

    //validation
    var isValid = true;
    var validationMsg = "";
    if (year == "Select Year") {
        isValid = false;
        validationMsg += "Year is required.<br />";
        $("#SearchModelYearMsg").css("display", "inline");
    } else {
        $("#SearchModelYearMsg").css("display", "none");
    }

    if (make == "Select a Make") {
        isValid = false;
        validationMsg += "Make is required.<br />";
        $("#SearchModelMakeMsg").css("display", "inline");
    } else
        $("#SearchModelMakeMsg").css("display", "none");

    if (model == "Select a Model") {
        isValid = false;
        validationMsg += "Model is required.<br />";
        $("#SearchModelModelMsg").css("display", "inline");
    } else {
        $("#SearchModelModelMsg").css("display", "none");
    }

    if (!isValid) {
        $("#tabs-2 .ValidationSummary").html(validationMsg).css("display", "block");
    } else {
        $("#tabs-2 .ValidationSummary").css("display", "none");
        SetOmnitureEvent_HomeSearch("MakeModelYear");
        document.location = $("#hdnProductCatalogURL").val() + "?y=" + year + "&m=" + make + "&mo=" + model;
    }
}

//initialize tab doc loads. SetTimeout to spin off new thread
InitializeTabs();

//initialize watermarks
$(document).ready(function() {
    //watermarks
    $("input[id$=txtCompatiblePartNo]").watermark({ html: "<nobr>[Enter Part Number]</nobr>", cls: 'Watermark-Text' });
    $("input[id$=txtVIN]").watermark({ html: "<nobr>[Enter a VIN]</nobr>", cls: 'Watermark-Text' });
    $("input[id$=txtInterchangePartNo]").watermark({ html: "<nobr>[Enter Part Number]</nobr>", cls: 'Watermark-Text' });
    $("input[id$=txtPartNumber]").watermark({ html: "<nobr>[Enter Part Number]</nobr>", cls: 'Watermark-Text' });
});

//Load Dropdowns
////////////////
//Makes
$(document).ready(function() {
    $('select[id$=ddlYear]').change(function() {
        GetVehicleMakes();
    });
    //Initialize only if init values exist
    if ($('select[id$=ddlYear]').val() != "" && $("#hdnSearchModelMakeVal").val() != "" && $("#hdnSearchModelModelVal").val() != "") {
        GetVehicleMakes();
    }
});

function GetVehicleMakes() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Services/SearchVehicle.asmx/GetVehicleMakes",
        data: '{yearId: "' + $('select[id$=ddlYear]').val() + '", defaultId: "' + $("#hdnSearchModelMakeVal").val() + '"}',
        dataType: "json",
        success: GetVehicleMakesSuccess,
        error: GetVehicleMakesError
    });
}

function GetVehicleMakesSuccess(result) {
    //disable field
    $("#ddlMake").attr("disabled", true);

    //clear all makes but the first
    $("#ddlMake").empty().append($("<option></option>").val("").text("Select a Make"));

    //load
    $.each(result.d, function() {
        var sel = (this["Sel"] == "1") ? true : false;
        $("#ddlMake").append($("<option></option>").attr("selected", sel).val(this["Value"]).text(this["Name"]));
    });

    //enabled if count is greater than one
    if ($("#ddlMake option").length > 1) $("#ddlMake").removeAttr("disabled");

    //reset default
    $("#hdnSearchModelMakeVal").val("");

    //refresh models
    GetVehicleModels();
}

function GetVehicleMakesError(result) {
    alert("Service Unavailable: Please try selecting the Year again.");
}

//Models
$(document).ready(function() {
    $('#ddlMake').change(function() {
        GetVehicleModels();
    });
});

function GetVehicleModels() {
    //validate that make has been selected
    var make = $('#ddlMake').val();
    if (make == "") return;
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Services/SearchVehicle.asmx/GetVehicleModels",
        data: '{yearId: "' + $('select[id$=ddlYear]').val() + '", makeId: "' + make + '", defaultId: "' + $("#hdnSearchModelModelVal").val() + '"}',
        dataType: "json",
        success: GetVehicleModelsSuccess,
        error: GetVehicleModelsError
    });
}

function GetVehicleModelsSuccess(result) {
    //disable field
    $("#ddlModel").attr("disabled", "disabled");

    //clear all makes but the first
    $("#ddlModel").empty().append($("<option></option>").val("").text("Select a Model"));

    //load
    $.each(result.d, function() {
        var sel = (this["Sel"] == "1") ? true : false;
        $("#ddlModel").append($("<option></option>").attr("selected", sel).val(this["Value"]).text(this["Name"]));
    });

    //enabled if count is greater than one
    if ($("#ddlModel option").length > 1) $("#ddlModel").removeAttr("disabled");

    //reset default
    $("#hdnSearchModelModelVal").val("");
}

function GetVehicleModelsError(result) {
    alert("Service Unavailable: Please try selecting the Make again.");
}

//VIN
//////////
//submit form on "enter"
$(document).ready(function() {
    //submit form on "enter"
    $("input[id$=txtVIN]").keypress(function(e) {
        if (e.keyCode == 13) {
            $("a[id$=btnSearchByVIN]").click();
            return false;
        }
    });

    //form submit event
    $("a[id$=btnSearchByVIN]").click(function() {
        //validate vin; then validate vin agaist DB (asynch)
        var vin = $("input[id$=txtVIN]").val().trim();
        if (vin == "") {
            $("#tabs-1 .ValidationMessage").text("VIN is required");
            $("#tabs-1 .ValidationMessage").css("display", "block");
            return false;
        } else {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/Services/SearchVehicle.asmx/ValidateVIN",
                data: '{vin: "' + vin + '"}',
                dataType: "json",
                success: ValidateVIN_Success,
                error: ValidateVIN_Fail
            });
        }
    });
});

//If part is valid, send user to shopping cart with newly added part
function ValidateVIN_Success(result) {
    if (result.d["IsValid"] == true) {
        $("#tabs-1 .ValidationMessage").css("display", "none");
        var url = $("#SearchByVinUrl").val();
        url = url.replace(new RegExp("\\{0\\}"), $("input[id$=txtVIN]").val().trim());
        //SetOmnitureEvent_HomeSearch("InterchangeGuide");
        document.location.href = url;
    } else {
        $("#tabs-1 .ValidationMessage").text(result.d["ValidationMessage"]);
        $("#tabs-1 .ValidationMessage").css("display", "block");
        return;
    }
}

function ValidateVIN_Fail(result) {
    alert("Unable to validate VIN. Please try again.");
}

//Vehicles
//////////
//Bind click to validate
$(document).ready(function() {
    $('#lgnvVehicles_vehicles').change(function() {
        //Validate
        if ($(this).val() == "-1") {
            return;
        } else {
            var url = $("#SearchByVehiclesURL").val();
            url = url.replace(new RegExp("\\{0\\}"), $(this).val());
            SetOmnitureEvent_HomeSearch("Vehicle");
            document.location.href = url;
            return;
        }
    });
});

function LazyLoadMyVehicles() {
    if ($("#lgnvVehicles_vehicles").attr('isLoaded') == 'true')
        return;

    $('#pMyVehiclesLoading').show();
    $('#locNoVehiclesMsg_content').hide();
    $('#locVehiclesMsg_content').hide();
    $('#lgnvVehicles_vehicles').hide();
    
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Services/SearchVehicle.asmx/GetMyVehicles",
        data: '{}',
        dataType: "json",
        success: LazyLoadMyVehicles_Success,
        error: LazyLoadMyVehicles_Fail
    });
}

function LazyLoadMyVehicles_Success(result) {
    if (result != null && result.d != null) {
        $("#lgnvVehicles_vehicles").attr('isLoaded', 'true');
        $.each(result.d, function() {
            var sel = (this["Sel"] == "1") ? true : false;
            $("#lgnvVehicles_vehicles").append($("<option></option>").attr("selected", sel).val(this["Value"]).text(this["Name"]));
        });
        // more that [select vehicle]
        $('#pMyVehiclesLoading').hide();
        if (result.d.length > 1) {
            $('#locNoVehiclesMsg_content').hide();
            $('#locVehiclesMsg_content').show();
            $('#lgnvVehicles_vehicles').show();
        } else {
            $('#locNoVehiclesMsg_content').show();
            $('#locVehiclesMsg_content').hide();
            $('#lgnvVehicles_vehicles').hide();
        }
    }
}

function LazyLoadMyVehicles_Fail(result) {
    alert("Unable to retrieve my vehicles. Please try again.");
}


//Interchange Guide
////////////////////
//submit form on "enter"
$(document).ready(function() {
    //submit form on "enter"
    $("input[id$=txtInterchangePartNo]").keypress(function(e) {
        if (e.keyCode == 13) {
            $("a[id$=btnSearchByInterchange]").click();
            return false;
        }
    });

    //form submit event
    $("a[id$=btnSearchByInterchange]").click(function() {
        if (ValidateSearchByInterchange()) {
            var url = $("#SearchByInterchangeUrl").val();
            url = url.replace(new RegExp("\\{0\\}"), $("input[id$=txtInterchangePartNo]").val());
            SetOmnitureEvent_HomeSearch("InterchangeGuide");
            document.location.href = url;
        }
        return false;
    });
});

//validate search by interchange
function ValidateSearchByInterchange() {
    if ($("input[id$=txtInterchangePartNo]").val() == "") {
        $("#tabs-5 .ValidationMessage").css("display", "inline");
        return false;
    } else {
        $("#tabs-5 .ValidationMessage").css("display", "none");
        return true;
    }
}

//Part Number
////////////////////
//submit form on "enter"
$(document).ready(function() {
    //submit form on "enter"
    $("input[id$=txtPartNumber]").keypress(function(e) {
        if (e.keyCode == 13) {
            $("a[id$=btnAddPartNumber]").click();
            return false;
        }
    });

    //form submit event
    $("a[id$=btnAddPartNumber]").click(function() {
        //validate blank parts; then validate part number (asynch)
        var partNumber = $("input[id$=txtPartNumber]").val();
        if (partNumber == "") {
            $("#tabs-3 .ValidationMessage").css("display", "block");
            return false;
        } else {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/Services/SearchVehicle.asmx/ValidatePartNumber",
                data: '{partNumber: "' + partNumber + '"}',
                dataType: "json",
                success: ValidatePartNumber_Success,
                error: ValidatePartNumber_Fail
            });
        }
    });
});

//If part is valid, send user to shopping cart with newly added part
function ValidatePartNumber_Success(result) {
    if (result.d == true) {
        $("#tabs-3 .ValidationMessage").css("display", "none");
        var url = $("#AddPartNumberUrl").val();
        url = url.replace(new RegExp("\\{0\\}"), $("input[id$=txtPartNumber]").val());
        //SetOmnitureEvent_HomeSearch("InterchangeGuide");
        document.location.href = url;
    } else {
        $("#tabs-3 .ValidationMessage").css("display", "block");
        return;
    }
}

function ValidatePartNumber_Fail(result) {
    alert("Unable to validate part number. Please try again.");
}

//Buyer's Guide
////////////////
$(document).ready(function() {
    //submit form on "enter"
    $("input[id$=txtCompatiblePartNo]").keypress(function(e) {
        if (e.keyCode == 13) {
            $("a[id$=btnSearchByCompatibility]").click();
            return false;
        }
    });

    //form submit event
    $("a[id$=btnSearchByCompatibility]").click(function() {
        if (ValidateSearchByCompatibility()) {
            var url = $("#SearchByCompatibilityUrl").val();
            url = url.replace(new RegExp("\\{0\\}"), $("input[id$=txtCompatiblePartNo]").val());
            SetOmnitureEvent_HomeSearch("CompatibilityGuide");
            document.location.href = url;
        }
        return false;
    });
});

//validate
function ValidateSearchByCompatibility() {
    if ($("input[id$=txtCompatiblePartNo]").val() == "") {
        $("#tabs-6 .ValidationMessage").css("display", "inline");
        return false;
    } else {
        $("#tabs-6 .ValidationMessage").css("display", "none");
        return true;
    }
}

//submit omniture event for search: VIN, MakeModelYear, Vehicle, InterchangeGuide, CompatibilityGuide
function SetOmnitureEvent_HomeSearch(searchMethod) {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Services/Omniture.asmx/SetEvent_HomeSearch",
        data: '{searchMethod: "' + searchMethod + '"}',
        dataType: "json",
        success: GetOmnitureDataFromSession_Success,
        error: GetOmnitureDataFromSession_Fail
    });
}

function showVinDropdown(searchButton) {
    if (typeof (vinHistory) != 'undefined') {
        $("#last_10_vins_input").show();
        $('#vinSearchTextbox').hide();

        var options = convertVinHistoryToOptionsFormat(vinHistory);

        $('#last_10_vins_input').flexbox(options,
            {
                watermark: '[Enter or select a VIN]',
                width: 170,
                maxVisibleRows: 10,
                onSelect: function() {
                    $('input[id*=txtVIN]').val(this.value);
                }
            }
        );
        $("#last_10_vins_input_ctr").width("193px");
        $("#last_10_vins_input_ctr").css("top", "24px");
        if ($('input[id*=txtVIN]').val() != "") {
            $('#last_10_vins_input_input').removeClass("watermark");
        }

        $("#last_10_vins_input_input").change(function() {
            if ($("#last_10_vins_input_input").val() == "[Enter or select a VIN]") //check for watermark
                $('input[id*=txtVIN]').val('');
            else {
                $('input[id*=txtVIN]').val($("#last_10_vins_input_input").val());
            }
        });
    }
}

function convertVinHistoryToOptionsFormat(vinHistory) {
    var result = { "results": [], "total": 0 };
    $(vinHistory).each(function() {
        result.results[result.results.length] = { "id": this.toString(), "name": this.toString() };
        result.total = result.total + 1;
    });

    return result;
}
