﻿



$(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 ||
            date.getDate() == 27)) {
                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 (pickup_loc.val() != "KIN") {
            if (d.isBefore(Date.today().addDays(1))) {
                alert("Online bookings must be at least one day in advance");
                $(this).val(dateFormatter(Date.today().addDays(1)));
                return false;
            }
        }
        else {
            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 () {
        var d = Date.parse($(this).val());
        var pickupDate = Date.parse(pickup_date.val());
        if (d.isBefore(pickupDate.clone().addDays(3))) {
            alert("Minimum online booking is for three days");
            $(this).val(dateFormatter(pickupDate.addDays(7)));
        }
        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":
                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":
                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;

            default:
                //alert("This depot is not open on Sunday");
                timeSelect.empty().append("<option value=\"\">Closed</option>");
                break;
        }
    }
    // WEEKDAY
    else {

        switch (locationValue) {
            case "KIN":
                //special use case for October 4
                if (bookingDate.getMonth() == 9 && bookingDate.getDate() == 4) {
                    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>");
}

