﻿/// <reference path="jquery-1.3.2-vsdoc2.js" />
var dealerMainDiv;
var dealerSearchForm;
var dealerDevicePartNumber;
var dealerPostCode;
var dealerRadiusCombobox;
var dealerSizeCombobox;
var dealerErrorDiv;
var dealerResultDiv;
var dealerSearchLoadingDiv;
////////////////////////////////////////////////////////////////
//--------------------------------------------------------------
//set default value for labels and error messages if client did not define yet
//--------------------------------------------------------------
if (typeof (DefaultPartNumber) == 'undefined')
    DefaultPartNumber = 'Part Number';
    
if (typeof (DefaultPostCode) == 'undefined')
    DefaultPostCode = 'ZIP...';

if (typeof (NoPartNumberErrorMsg) == 'undefined')
    NoPartNumberErrorMsg = 'Please enter a part munber';

if (typeof (NoPostCodeErrorMsg) == 'undefined')
    NoPostCodeErrorMsg = 'Please enter a zip';

////////////////////////////////////////////////////////////////
//--------------------------------------------------------------
//Get parameters from query string (on address bar)
//--------------------------------------------------------------
var param_PartNumber = QUERY_STRING('partNumber');
var param_PostCode = QUERY_STRING('postCode');
var param_Radius = QUERY_STRING('radius');
var param_Page = QUERY_STRING('page');
var param_PageSize = QUERY_STRING('size');
////////////////////////////////////////////////////////////////
//--------------------------------------------------------------
//initialize
//--------------------------------------------------------------

$(document).ready(function() {
    Form_Init();
});
////////////////////////////////////////////////////////////////
//--------------------------------------------------------------
// BEGIN METHODS for Search Dealer
//--------------------------------------------------------------

function Form_Init() {
    //--------------------------------------------------------------
    //find controls inside page
    //--------------------------------------------------------------
    dealerDevicePartNumber = $("form#innova-dealer-search-box input[name=partNumber]");
    dealerPostCode = $("form#innova-dealer-search-box input[name=postCode]");
    dealerRadiusCombobox = $("form#innova-dealer-search-box select[name=Radius]");
    dealerSizeCombobox = $("form#innova-dealer-search-box select[name=Size]");
    dealerSearchForm = $("form#innova-dealer-search-box");
    dealerErrorDiv = $("#innova-dealer-search-box .error");
    dealerResultDiv = $("#innova-dealer-search-details");
    dealerMainDiv = $("#innova-dealer-search");
    dealerSearchLoadingDiv = $("#innova-dealer-search-loading");

    //init radius combo box
    dealerRadiusCombobox.html('<option value="5">5</option>' +
                                '<option value="10">10</option>' +
                                '<option value="15">15</option>' +
                                '<option value="20">20</option>' +
                                '<option value="25">25</option>' +
                                '<option value="50">50</option>' +
                                '<option value="100">100</option>');

    //If have enough parameter (year/make/model) transfer from another page, then search to show the details result.

    if (typeof (param_PartNumber) != 'undefined' && typeof (param_PostCode) != 'undefined' && typeof (param_Radius) != 'undefined') {
        param_PartNumber = param_PartNumber.replace("%2F", "/");
        dealerDevicePartNumber.val(param_PartNumber);
        dealerPostCode.val(param_PostCode);
        dealerRadiusCombobox.val(param_Radius);
        dealerSizeCombobox.val(param_PageSize);

        if(typeof (param_Page) == 'undefined') {
            param_Page = 0;
        }
        if (typeof (param_PageSize) == 'undefined') {
            param_PageSize = 0;
        }
        param_PartNumber = param_PartNumber.replace("/", "~");
        Search(param_PartNumber, param_PostCode, param_Radius, param_Page, param_PageSize);
    }
    else {
        if (typeof (param_PartNumber) == 'undefined')
            dealerDevicePartNumber.val(DefaultPartNumber);
        else
            dealerDevicePartNumber.val(param_PartNumber);

        if (typeof (param_PostCode) == 'undefined')
            dealerPostCode.val(DefaultPostCode);
        else
            dealerPostCode.val(param_PostCode);
            
        if(typeof (param_Radius) != 'undefined')
            dealerRadiusCombobox.val(param_Radius);
    }
    //--------------------------------------------------------------
    //attached events for controls
    //--------------------------------------------------------------
    dealerSearchForm.submit(SearchSubmit);

    //set method=get for search dlc to force transfering parameter (make, year, model) to the next page
    dealerSearchForm.attr("method", "get");
}

function SearchSubmit() {
    var partNumber = dealerDevicePartNumber.val();
    //Replace all / with ~
    partNumber = partNumber.replaceAll("/", "~");
    var postCode = dealerPostCode.val();
    var radius = dealerRadiusCombobox.val();
    var size = dealerSizeCombobox.val();

    return Search(partNumber, postCode, radius, 0, size);
}

function Search(partNumber, postCode, radius, page, size) {
    partNumber = EscapeSpecialChar($.trim(partNumber));
    postCode = $.trim(postCode);
    radius = $.trim(radius);
    
    if (partNumber == '') {
        dealerErrorDiv.html(NoPartNumberErrorMsg);
        return false;
    }
    if (postCode == '') {
        dealerErrorDiv.html(NoPostCodeErrorMsg);
        return false;
    }
    codeLength = postCode.length;
    //us code: get only first 5 characters
    if (codeLength == 5 || codeLength == 9) {
        postCode = postCode.substring(0, 5);
    }
    //ca code, insert a space in the middle of its length = 6
    else if (codeLength == 6 || codeLength == 7) {
        if (codeLength == 6) {
            postCode = postCode.substring(0, 3) + " " + postCode.substring(3);
        }
    }
    else {
        dealerErrorDiv.html(NoPostCodeErrorMsg);
        return false;
    }
    
    dealerErrorDiv.html("");
    if (dealerResultDiv.attr("id") != 'innova-dealer-search-details')
        return true;
    var url;
    if (page == 0) 
        url = "/Dealer/" + partNumber + "/" + postCode + "/" + radius + "?callback=?&size=" + size;
    else
        url = "/Dealer/" + partNumber + "/" + postCode + "/" + radius + "/" + page + "?callback=?&size=" + size;

    dealerSearchLoadingDiv.css("display", "block");
    window.location.hash = "top";

    $.getJSON(url,
        function(result) {
            dealerSearchLoadingDiv.css("display", "none");
            DisplayResult(result.Data);
        });

    return false;
}

function DisplayResult(data) {
    if (data.ErrorMessage != null && data.ErrorMessage != '') {
        dealerErrorDiv.html(data.ErrorMessage)
    }
    else {
        var result = '<br/><h3>Search Results:</h3>';
        if (data.Items == null) {
            result += '<p>There is no result found.</p>';
        }
        else {
            result += '<p>There are ' + data.TotalRecords + ' result(s) found</p>'
            result += '<table cellpadding=4 cellspacing=4 width=100%>';
            $.each(data.Items, function(i, item) {
            result += '<tr><td valign=top align=center> <img width="105" src="../../Content/images/dealer/' + item.ImageUrl + '"/></td>';
                result += '<td valign=top><p class="innova-dealer-header">' + item.Name + ' </p>';
                result += '<p class="innova-dealer-data">' + item.Address + '<br/>';
                if (item.Phone != '')
                    result += item.Phone + '<br/>';
                if (item.Distance == 'Online Store')
                    result += item.Distance;
                else
                    result += item.Distance + ' Miles from ' + item.PostCode;
                result += '</p>';
                
                //View Google map
                result += '<p><a href=\'http://maps.google.com/?q=' + item.Address + '\' target=_blank>Click here to view map</a></a>';
                result += '</td></tr>';
                result += '<tr><td colspan=2>&nbsp;</td></tr>';
            });
            result += '</table>';

            //add paging bar
            result += data.PagingBar;
        }
        dealerResultDiv.html(result);
    }
}

function PagingIndexChanged(index) {
    var partNumber = dealerDevicePartNumber.val();
    var postCode = dealerPostCode.val();
    var radius = dealerRadiusCombobox.val();
    var size = dealerSizeCombobox.val();
    partNumber = partNumber.replaceAll("/", "~");
    Search(partNumber, postCode, radius, index, size);
}
