﻿



$(document).ready(function () {

    $("select#existing_pickup_loc").change(function () {
        if ($(this).val() == "KIN") {
            $("form#get_res").attr("action", "https://secure.carsplus.com.au/webres/bayswater/res.html");
        }
        else {
            $("form#get_res").attr("action", "https://secure.carsplus.com.au/webres/bayswaterwa/res.html");
        }
    });


    //configure defaults
    var pickup_date = $("input#pickup_date");
    var pickup_loc = $("select#pickup_loc");
    var pickup_time = $("select#pickup_timeTemp");

    var return_date = $("input#return_date");
    var return_loc = $("select#return_locVis");
    var return_time = $("select#return_timeTemp");


    $.datepicker.setDefaults({
        dateFormat: "D dd M yy",
        duration: "",
        firstDay: 1
    });

    pickup_date.val(dateFormatter(Date.today().addDays(1)));

    $(".datepicker").datepicker({
        showOn: 'both',
        buttonImage: '/images/Calendar.gif',
        buttonImageOnly: true,
        beforeShowDay: function (date) {

            if (date.compareTo(Date.today()) < 0) {
                return [false, '', '']
            }
            //This prevents public holidays from being selectable
            if (date.getMonth() == 11 && ( //December
            date.getDate() == 25 ||
            date.getDate() == 26)) {
                return [false, '', "Public Holiday - Closed"]
            }

            if (date.getMonth() ==3 && ( //April
            date.getDate() ==6 ||
            date.getDate() == 9)) {
                return [false, '', "Public Holiday - Closed"]
            }
            /*
            if (date.getMonth() == 0 && ( //January
            date.getDate() == 1 ||
            date.getDate() == 26)) {
                return [false, '', "Public Holiday - Closed"]
            }
            */
            return [true, '']
        }
    });

    $("form#bookingForm").validate();

    //event handlers

    pickup_loc.change(function () {
        timeHandler($(this), pickup_date, pickup_time);
        return_loc.val($(this).val()).change();
        $("#return_loc").val($(this).val());
        pickup_date.change();
    }).change();



    pickup_date.change(function () {
        var d = Date.parse($(this).val());


        if (d.isBefore(Date.today())) {
            alert("Please select a date in the future");
            $(this).val(dateFormatter(Date.today().addDays(1)));
            return false;
        }

        $("#pickup_day").val(d.toString("dd"));
        $("#pickup_month").val(d.toString("MM"));
        $("#pickup_year").val(d.toString("yyyy"));


        return_date.val(dateFormatter(d.addDays(7))).change();

        timeHandler(pickup_loc, $(this), pickup_time);


    }).change();


    pickup_time.change(function () {
        var d = Date.parse($(this).val());
        $("#pickup_time").val(d.toString("HH:mm"));
        $("#return_time").val(d.toString("HH:mm"));
        var origval = return_time.val();
        try {
            return_time.val($(this).val());
        }
        catch (err) {
            return_time.val(origval);
        }
    });

    return_loc.change(function () {
        return_date.change();
    });

    return_date.change(function () {
        $("input#oldh").val(1);
        var d = Date.parse($(this).val());
        var pickupDate = Date.parse(pickup_date.val());
        if (d.isBefore(pickupDate)) {
            alert("Please select a date in the future");
            $(this).val(dateFormatter(pickupDate.addDays(1)));
        }
        else {
            timeHandler(return_loc, $(this), return_time);
        }
        $("#return_day").val(d.toString("dd"));
        $("#return_month").val(d.toString("MM"));
        $("#return_year").val(d.toString("yyyy"));

    }).change();

    return_time.change(function () {
        var d = Date.parse($(this).val());
        $("#return_time").val(d.toString("HH:mm"));
    });


});

function dateFormatter(d) {
    return d.toString("ddd dd MMM yyyy");
}

function timeHandler(location, dateSelect, timeSelect) {
    var bookingDate = Date.parse(dateSelect.val());
    timeSelect.empty().append("<option value=\"\">Select a time</option>");

    var locationValue = location.val();


    // SATURDAY
    if (bookingDate.is().saturday()) {
        switch (locationValue) {
            case "KIN":
                if (bookingDate.getMonth() == 3 && bookingDate.getDate() == 7) { //closed 7/4 in sydney
                    bookingDate.setHours(8);
                    var closeDate = bookingDate.clone().addHours(4);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                }
                else {
                    bookingDate.setHours(8);
                    var closeDate = bookingDate.clone().addHours(8);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                }
                break;
                
            case "PER":
                bookingDate.setHours(8);
                var closeDate = bookingDate.clone().addHours(5);
                while (bookingDate.isBefore(closeDate)) {
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                }
                break;

            default:
                bookingDate.setHours(8);
                var closeDate = bookingDate.clone().addHours(5);
                while (bookingDate.isBefore(closeDate)) {
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                }                
                break;
        }
    }
    // SUNDAY
    else if (bookingDate.is().sunday()) {
    switch (locationValue) {
            case "KIN":
                if (bookingDate.getMonth() == 3 && bookingDate.getDate() == 8) { //closed 8/4 in sydney
                        bookingDate.setHours(9);
                        var closeDate = bookingDate.clone().addHours(4);
                        while (bookingDate.isBefore(closeDate)) {
                            addTimeToOption(bookingDate, timeSelect);
                            bookingDate.addHours(1);
                        }
                }
                else {
                    bookingDate.setHours(9);
                    var closeDate = bookingDate.clone().addHours(7);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                }
                break;
            case "PER":
                bookingDate.setHours(9);
                var closeDate = bookingDate.clone().addHours(3);
                while (bookingDate.isBefore(closeDate)) {
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                }
                bookingDate.addHours(-1).addMinutes(30);
                addTimeToOption(bookingDate, timeSelect);
                bookingDate.addHours(1);
                break;

            case "BAY":

                if (bookingDate >= Date.parse('September 4th 2011')) {
                //this is the same as the perth booking times
                    bookingDate.setHours(9);
                    var closeDate = bookingDate.clone().addHours(3);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                    bookingDate.addHours(-1).addMinutes(30);
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                    break;                    

                }
                else {
                    timeSelect.empty().append("<option value=\"\">Closed</option>");
                }


                break;

            default:

                timeSelect.empty().append("<option value=\"\">Closed</option>");
                break;
        }
    }
    // WEEKDAY
    else {

        switch (locationValue) {
            case "KIN":
                if (bookingDate.getMonth() == 3 && bookingDate.getDate() == 25) { //closed 8/4 in sydney
                        bookingDate.setHours(9);
                        var closeDate = bookingDate.clone().addHours(4);
                        while (bookingDate.isBefore(closeDate)) {
                            addTimeToOption(bookingDate, timeSelect);
                            bookingDate.addHours(1);
                        }
                }
                else if (bookingDate.getMonth() == 9 && bookingDate.getDate() == 3) {
                    bookingDate.setHours(9);
                    var closeDate = bookingDate.clone().addHours(4);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                }
                else {
                    bookingDate.setHours(7);
                    var closeDate = bookingDate.clone().addHours(12);
                    while (bookingDate.isBefore(closeDate)) {
                        addTimeToOption(bookingDate, timeSelect);
                        bookingDate.addHours(1);
                    }
                }
                break;
            case "PER":
                bookingDate.setHours(8);
                var closeDate = bookingDate.clone().addHours(10);
                while (bookingDate.isBefore(closeDate)) {
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                }
                bookingDate.addHours(-1).addMinutes(30);
                addTimeToOption(bookingDate, timeSelect);
                bookingDate.addHours(1);
                break;

            default:
                bookingDate.setHours(8);
                var closeDate = bookingDate.clone().addHours(10);
                while (bookingDate.isBefore(closeDate)) {
                    addTimeToOption(bookingDate, timeSelect);
                    bookingDate.addHours(1);
                }
                bookingDate.addHours(-1).addMinutes(30);
                addTimeToOption(bookingDate, timeSelect);
                bookingDate.addHours(1);
                break;
        }

    }
    
    if (timeSelect.children().length > 1) {
        bookingDate.addHours(-1).addMinutes(30);
        addTimeToOption(bookingDate, timeSelect, true);
    }
}


function addTimeToOption(hourTime, timeSelect, isDisabled) {

    var dis = (isDisabled) ? "disabled=disabled" : "",
        close = (isDisabled) ? "closed" : "",
        val = hourTime.toString("h:mm tt");
    timeSelect.append("<option " + dis + " value=\"" + val + "\">" + val + " " + close + "</option>");
}


