﻿var timeHours = [
{"h24":"00","h12":"12"},{"h24":"01","h12":"01"},{"h24":"02","h12":"02"},{"h24":"03","h12":"03"},
{"h24":"04","h12":"04"},{"h24":"05","h12":"05"},{"h24":"06","h12":"06"},{"h24":"07","h12":"07"},
{"h24":"08","h12":"08"},{"h24":"09","h12":"09"},{"h24":"10","h12":"10"},{"h24":"11","h12":"11"},
{"h24":"12","h12":"12"},{"h24":"13","h12":"01"},{"h24":"14","h12":"02"},{"h24":"15","h12":"03"},
{"h24":"16","h12":"04"},{"h24":"17","h12":"05"},{"h24":"18","h12":"06"},{"h24":"19","h12":"07"},
{"h24":"20","h12":"08"},{"h24":"21","h12":"09"},{"h24":"22","h12":"10"},{"h24":"23","h12":"11"}];
var timeMinutes = [":00",":15",":30",":45"];
var diyLocations = {};
var defaultPUText = "Type the pick-up location here";
var defaultDOText = "Type the return location here";
var diyDateFormat = "dd M yy";
var isClick = false;

$(function() {
    $.getJSON("/diyGetJsonLocations.aspx", "groupid=" + FORM_LOCGROUP + "&vendor=" + FORM_VENDOR, function(data) {
        diyLocations = data;
        initLocation();
    });
    $.getJSON("/diyGetJsonCountries.aspx", function(data) {
        initCountryRes(data);
    });
    initDatePicker("txtDatePU", diyDateFormat, "2", "imgDatePU");
    initDatePicker("txtDateDO", diyDateFormat, "4", "imgDateDO");
    initTimeDDL("ddlTimePU");
    initTimeDDL("ddlTimeDO");
    initReturnSection();
    initButton();
    initCountry();
    setDefaultValue();
});

function setDefaultValue() {
    var qsDatePU = getQueryString("DatePU");
    var qsDateDO = getQueryString("DateDO");
    var qsTimePU = getQueryString("TimePU");
    var qsTimeDO = getQueryString("TimeDO");
    var qsDriverAge = getQueryString("DriverAge");
    var qsCarClass = getQueryString("CarClass");

    if (qsDatePU != ""){
        $("#txtDatePU").val(qsDatePU.replace(/-/gi," "));
    }
    if (qsDateDO != "") {
        $("#txtDateDO").val(qsDateDO.replace(/-/gi, " "));
    }
    if (qsTimePU != "") {
        $("#ddlTimePU").val(qsTimePU);
    }
    if (qsTimeDO != "") {
        $("#ddlTimeDO").val(qsTimeDO);
    }
    if (qsDriverAge != "") {
        $("#ddlDriverAge").val(qsDriverAge);
    }
    if (qsCarClass != "") {
        $("#ddlCarClass").val(qsCarClass);
    }
}

function initLocation() {
    var qsLocationCodePU = getQueryString("LocationCodePU");
    var qsLocationCodeDO = getQueryString("LocationCodeDO");

    if (qsLocationCodePU != '') {
        FORM_PU_ID = qsLocationCodePU
    }
    if (qsLocationCodeDO != '') {
        FORM_DO_ID = qsLocationCodeDO
    }
    
    switch (FORM_SEARCH) {
        case "ddl":
            initLocationDDL("txtLocationPU", FORM_PU_ID);
            initLocationDDL("txtLocationDO", FORM_DO_ID);
            break;
        default:
            initLocationAuto("txtLocationPU", "txtLocationCodePU", defaultPUText, FORM_PU_ID);
            initLocationAuto("txtLocationDO", "txtLocationCodeDO", defaultDOText, FORM_DO_ID);            
    };
} //initLocation

function initLocationDDL(ddlId, defaultLocationID) {
    var optionValue;
    var optionText;
    $("#" + ddlId + " option").remove();
    $.each(diyLocations, function(index, item) {
        optionValue = item.value;
        optionText = item.label + ', ' + item.state;
        $("#" + ddlId).append($("<option></option>").attr("value", optionValue).text(optionText));
    });
    if (defaultLocationID != "") {
        $("#" + ddlId).val(defaultLocationID);
    };
} // initLocationDDL

function initLocationAuto(textboxId, hiddenId, textboxDefaultText, defaultLocationID) {
    var inputTextbox = $("#" + textboxId);
    var inputHidden = $("#" + hiddenId);
    inputTextbox
        .val(textboxDefaultText)
	    .autocomplete({
	        delay: 0,
	        minLength: 2,
	        source: getLocations,
	        select: function(event, ui) {
	            inputTextbox.val(ui.item.label);
	            inputHidden.val(ui.item.value);
	            return false;
	        },
	        close: function(event, ui) {
	            if (inputTextbox.val() == "") {
	                inputTextbox.val(textboxDefaultText)
	            };
	        },
	        focus: function(event, ui) {
	            return false;
	        },
	        selectFirst: true
	    })
	    .blur(function() {
	        if (inputTextbox.val() == "") {
	            inputTextbox.val(textboxDefaultText);
	            inputHidden.val("");
	        };
	    })
	    .focus(function() {
	        if (inputTextbox.val() == textboxDefaultText) {
	            inputTextbox.val("")
	        };
	    })
	    .data("autocomplete")._renderItem = renderCustomItem;
	    
	    if (defaultLocationID != "") {
	        $.each(diyLocations, function(index, item) {
	            if (item.value == defaultLocationID) {
	                inputTextbox.val(item.label);
	                inputHidden.val(item.value);
	            };
	        });
	    };
} // initLocationAuto

function renderCustomItem(ul, item) {
    return $("<li></li>")
		        .data("item.autocomplete", item)
		        .append("<a" + (item.airport == "1" ? " class='airport'>" : ">") + item.htm + "</a>")
		        .appendTo(ul)
} // renderCustomItem

(function($) {
    $(".ui-autocomplete-input").live("autocompleteopen", function() {
        var autocomplete = $(this).data("autocomplete"),
        		menu = autocomplete.menu;
        if (!autocomplete.options.selectFirst) {
            return;
        }
        menu.activate($.Event({ type: "mouseenter" }), menu.element.children().first());
    });
} (jQuery));

function getLocations(request, response) {
    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
    var suggestions = $.map(diyLocations, function(item) {
        var itemText = item.label;
        if (item.ac != '') {
            itemText = itemText + ' (' + item.ac + ')';
        };
        var matchIndex = itemText.search(matcher);
        if (matchIndex > -1) {
            return {
                htm: itemText.replace(
                            new RegExp(
						        "(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "i"
					        ), "<strong>$1</strong>") + "<br/><small>" + item.state + "</small>",
                value: item.value,
                label: item.label,
                airport: item.airport,
                sortIndex: ((matchIndex == 0) ? (0) : parseInt(item.rn))

            };
        };
    });
    response(suggestions.sort(sortLocations));
} // getLocations

function sortLocations(a, b) {
    var i = a.sortIndex - b.sortIndex;
    if (i == 0) {
        if (a.label.toLowerCase() < b.label.toLowerCase()) {
            i = -1
        };
        if (a.label.toLowerCase() > b.label.toLowerCase()) {
            i = 1
        };
    };
    return i;
} // sortLocations

function initCountryRes(diyCountries) {
    $("#ddlCountryRes option").remove();
    $.each(diyCountries, function(index, item) {
        $("#ddlCountryRes").append($("<option></option>").attr("value", item.value).text(item.label));
    });
    switch (FORM_COUNTRY) {
        case "New Zealand":
            $("#ddlCountryRes").val("NZ");
            break;
        default:
            $("#ddlCountryRes").val("AU");
    };
    var qsCountryRes = getQueryString("CountryRes");
    if (qsCountryRes != "") {
        $("#ddlCountryRes").val(qsCountryRes);
    }
} // initCountryRes

function initDatePicker(textboxId, dateFormat, plusDay, imgId) {
    $("#" + textboxId)
	    .datepicker({
	        dateFormat: dateFormat,
	        minDate: new Date(),
	        onClose: function(dateText, inst) {
	            if (textboxId == "txtDatePU") {
	                var datePU = new Date(dateText);
	                var dateDO = new Date($("#txtDateDO").val());
	                if (datePU > dateDO) {
	                    dateDO = datePU;
	                    dateDO.setDate(datePU.getDate() + 2);
	                    $("#txtDateDO").datepicker("setDate", dateDO);
	                };
	            };
	            if (textboxId == "txtDateDO") {
	                var datePU = new Date($("#txtDatePU").val());
	                var dateDO = new Date(dateText);
	                if (datePU > dateDO) {
	                    $("#txtDatePU").datepicker("setDate", dateDO);
	                };
	            };
	        }
	    })
	    .datepicker("setDate", "+" + plusDay + "d");

    $("#" + imgId).click(function() {
        $("#" + textboxId).datepicker("show");
    });
} // initDatePicker

function initTimeDDL(ddlId) {
    var times;
    var defaultValue = "09:00";

    times = $.map(timeHours, function(hour) {
        var list;
        switch (FORM_DATETIME) {
            case "12":
                list = $.map(timeMinutes, function(minute) {
                    if (parseInt(hour.h24) > 11) {
                        return { text: hour.h12 + minute + " PM", value: hour.h24 + minute };
                    } else {
                        return { text: hour.h12 + minute + " AM", value: hour.h24 + minute };
                    }
                });
                break;
            default:
                list = $.map(timeMinutes, function(minute) {
                    return { text: hour.h24 + minute , value: hour.h24 + minute };
                });
        };
        return list;
    });

    $("#" + ddlId + " option").remove();
    $.each(times, function(index, item) {
        $("#" + ddlId).append($("<option></option>").attr("value", item.value).text(item.text));
    });
    $("#" + ddlId).val(defaultValue);
    
} // initTimeDDL

function initReturnSection() {
    var qsSameReturnLoc = getQueryString("SameReturnLoc");
    switch (qsSameReturnLoc) {
        case "0":
            $("#SameReturnLoc").removeAttr('checked');
            $("#SameReturnLoc").click(function() {
                $("#txtLocationDO").slideToggle();
            });
            break;
        default:
            $("#txtLocationDO").hide();
            $("#SameReturnLoc").attr('checked', 'checked');
            $("#SameReturnLoc").click(function() {
                $("#txtLocationDO").slideToggle();
            });            
    }
} // initReturnSection

function initButton() {
    $("#btnSearch").click(function() {
        if (($("#txtLocationPU").val() == "Loading...") || ($("#ddlCountryRes option").length == 1)) {
            alert("The form is still loading. Please wait.\nTry refresh page if this takes too long.");
            return false;
        };
        if (isClick) {
            return false;
        };
        var domain = window.location.hostname;
        if (domain.indexOf("diycarhire.com.au") > -1) {
            domain = "www.diycarhire.com.au";
        };
        var pageUrl = "http://" + domain + "/book/Compare.aspx";
        var regSpace = /(\s)/ig;
        var regComma = /(,)/ig;
        var regDate = /(\d{1,2})(\s)([a-zA-Z]{3})(\s)(\d{4})/; // 99 xxx 9999
        var locationPU = $("#txtLocationPU").val();
        var locationDO = $("#txtLocationDO").val();
        var locationCodePU = $("#txtLocationCodePU").val();
        var locationCodeDO = $("#txtLocationCodeDO").val();
        var sameReturnLoc = ($("#SameReturnLoc:checked").length ? "1" : "0");
        var datePU = $("#txtDatePU").val();
        var dateDO = $("#txtDateDO").val();
        var timePU = $("#ddlTimePU").val();
        var timeDO = $("#ddlTimeDO").val();
        var countryRes = $("#ddlCountryRes").val();
        var driverAge = $("#ddlDriverAge").val();
        var carClass = $("#ddlCarClass").val();
        var hasError = false;
        var errorMessage = [];

        if (FORM_SEARCH == "ddl") {
            locationCodePU = locationPU;
            locationCodeDO = locationDO;
            locationPU = $("#txtLocationPU option:selected").text();
            locationDO = $("#txtLocationDO option:selected").text();
            locationPU = $.trim(locationPU).substr(0, locationPU.indexOf(","));
            locationDO = $.trim(locationDO).substr(0, locationDO.indexOf(","));
        };

        // clear class (if any)
        $("input.hasError").removeClass("hasError");

        // check start
        if ((locationPU == "") || (locationPU == defaultPUText)) {
            errorMessage.push("Please select a pickup location.");
            $("#txtLocationPU").addClass("hasError");
            hasError = true;
        }
        else {
            locationPU = $.trim(locationPU).replace(regSpace, "+");
            if (locationCodePU == "") {
                errorMessage.push("Please select a pickup location.");
                $("#txtLocationPU").addClass("hasError");
                hasError = true;
            }
            else {
                locationCodePU = parseInt(locationCodePU);
            };
        };

        if (sameReturnLoc == "0") {
            if ((locationDO == "") || (locationDO == defaultPUText)) {
                errorMessage.push("Please select a return location.");
                $("#txtLocationDO").addClass("hasError");
                hasError = true;
            }
            else {
                locationDO = $.trim(locationDO).replace(regSpace, "+");
                if (locationCodeDO == "") {
                    errorMessage.push("Please select a return location.");
                    $("#txtLocationDO").addClass("hasError");
                    hasError = true;
                }
                else {
                    locationCodeDO = parseInt(locationCodeDO);
                };
            };
        }
        else {
            locationDO = "";
            locationCodeDO = "";
        };

        if (datePU == "") {
            errorMessage.push("Please enter a pickup date.");
            $("#txtDatePU").addClass("hasError");
            hasError = true;
        }
        else {
            if (!(regDate.test(datePU))) {
                errorMessage.push("Please select a pickup date by clicking the calender icon.");
                $("#txtDatePU").addClass("hasError");
                hasError = true;
            }
            else {
                datePU = $.trim(datePU).replace(regSpace, "-");
            };
        };

        if (dateDO == "") {
            errorMessage.push("Please enter a return date.");
            $("#txtDateDO").addClass("hasError");
            hasError = true;
        }
        else {
            if (!(regDate.test(dateDO))) {
                errorMessage.push("Please select a return date by clicking the calender icon.");
                $("#txtDateDO").addClass("hasError");
                hasError = true;
            }
            else {
                dateDO = $.trim(dateDO).replace(regSpace, "-");
            };
        };
        // check end

        if (hasError) {
            alert(errorMessage.join("\n"));
            return false;
        }
        else {
            isClick = true;
            //$("#btnSearch").val("Please Wait");
            $("#btnSearch").toggleClass("btnClicked");
            var qs = [];
            qs.push("LocationPU=" + locationPU);
            qs.push("LocationDO=" + locationDO);
            qs.push("LocationCodePU=" + locationCodePU);
            qs.push("LocationCodeDO=" + locationCodeDO);
            qs.push("SameReturnLoc=" + sameReturnLoc);
            qs.push("DatePU=" + datePU);
            qs.push("DateDO=" + dateDO);
            qs.push("TimePU=" + timePU);
            qs.push("TimeDO=" + timeDO);
            qs.push("CountryRes=" + countryRes);
            qs.push("DriverAge=" + driverAge);
            qs.push("CarClass=" + carClass);

            var qsMod = getQueryString("Mod");
            var qsSearch = getQueryString("Search");
            if (qsMod != "") {
                qs.push("Mod=" + qsMod);
            };
            if (qsSearch != "") {
                FORM_VENDOR = qsSearch;
            };
            if (FORM_VENDOR != "") {
                qs.push("Search=" + FORM_VENDOR);
            };
            //alert(qs.toString().replace(regComma, "&"));

            var compareUrl = pageUrl + "?" + qs.toString().replace(regComma, "&");
            //$("#divMessage").html("Still waiting? Click <a href='" + compareUrl + "' target='_parent'>here</a> to next step.");
            window.location = compareUrl;
        };
    });
}

function initCountry() {
    $("#ddlCountry option").each(function(index) {
        if ($(this).text() == FORM_COUNTRY) {
            $("#ddlCountry").val($(this).val());
            return false;
        };
    });
    $("#ddlCountry").change(function() {
        //alert($("#ddlCountry").val());
        window.location = "http://www." + $("#ddlCountry").val();
    });
}

function getQueryString(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}
