﻿var days = [];
var thisMonthDates = [];
var reqDays = [];

$.extend($.expr[':'], {
    got: function(el, i, m) {
        return ($(el).html() == m[3]);
    }
});

$(function() {
    $('#dialog').dialog({
        autoOpen: false,
        modal: true,
        resizable: false,
        title: 'Booking Request'
    });

    $("#calendar").datepicker({
        minDate: min_date,
        maxDate: max_date,
        onChangeMonthYear: function(y, m, o) {
            markThisMonth(o.selectedMonth);
        },
        onSelect: function(dateText) {
            $(document).oneTime(230, function() {
                markThisMonth(new Date(dateText).getMonth());
            });

            var d = new Date(dateText).format('mm/dd/yyyy');
            if (thisMonthDates.exists(d)) {
                $('#dialog').html('Sorry! This date already booked!');
                $('#dialog').dialog('option', 'width', 400);
                $('#dialog').dialog('option', 'height', 100);
                $('#dialog').dialog('option', 'buttons', { 'Close': function() { $(this).dialog("close"); } });
                $('#dialog').dialog('open');
            }
            else {
                $('#dialog').html('<img src="http://res.mywdk.com/images/ajax-loader.gif" valign="absmiddle" /> Processing, please wait...');
                $('#dialog').dialog('option', 'width', 400);
                $('#dialog').dialog('option', 'height', 400);
                $('#dialog').dialog('option', 'buttons', {
                    'Close': function() { $(this).dialog("close"); },
                    'Send': function() {
                        if ($('#fragmentBooking #book_name').val() == "") {
                            $('#fragmentBooking #book_name').addClass('invalid');
                            return;
                        }
                        if ($('#fragmentBooking #book_email').val() == "") {
                            $('#fragmentBooking #book_email').addClass('invalid');
                            return;
                        }
                        $('#fragmentBooking #book_name').removeClass('invalid');
                        $('#fragmentBooking #book_email').removeClass('invalid');

                        $('#status').html('<img src="http://res.mywdk.com/images/ajax-loader.gif" valign="absmiddle" /> Processing, please wait...');

                        $.post('/api/book.aspx',
								{
								    name: $('#fragmentBooking #book_name').val(),
								    email: $('#fragmentBooking #book_email').val(),
								    checkin: $('#fragmentBooking #book_checkin').val(),
								    checkout: $('#fragmentBooking #book_checkout').val(),
								    comments: $('#fragmentBooking #book_comments').val()
								},
								function(data) {
								    if (data.status == 200) {
								        $('#status').html("Your request has been sent");
								    }
								    else {
								        $('#status').html(data.message);
								    }
								    $('#dialog').dialog('option', 'buttons', { 'Close': function() { $(this).dialog("close"); } });
								}, "json");
                    }
                });
                $('#dialog').dialog('open');
                $.get('/api/fragment.booking.htm', function(data) {
                    $('#dialog').html(data);
                    var _thisWeek = new Date(dateText).getMondaySunday();
                    var _thisSunday = _thisWeek[0].subtract('day', 1); ; //begining of US week
                    var _thisMonday = _thisWeek[1].subtract('day', 1); //end of US week
                    $('#fragmentBooking #book_checkin').val(_thisSunday.format('mm/dd/yyyy'));
                    $('#fragmentBooking #book_checkout').val(_thisMonday.format('mm/dd/yyyy'));
                });
            }
        }
    });

    $('#calendar a[class!=busy]').addClass('freeday');
    $("#calendar").css({ marginBottom: 10, paddingLeft: 35 });

    $("#calendar").datepicker('setDate', min_date);

    $.getJSON('/api/get.aspx', function(data) {
        days = data;
        markThisMonth(new Date(min_date).getMonth());
    });
});

function markThisMonth(m) {
    thisMonthDates = days.filter(function(element, index, array) {
        return (new Date(element).getMonth() == m);
    });
    var reqDays = [];
    for (var i = 0; i < thisMonthDates.length; i++) {
        var thisDate = new Date(thisMonthDates[i]);
        reqDays.push(thisDate.getDate());
    }
    $(document).oneTime(230, function() {
        markReserved(reqDays);
    });
}

function markReserved(arr) {
    for (var i = 0; i < arr.length; i++) {
        $('#calendar a:got(' + arr[i] + ')').removeClass('ui-state-default');
        $('#calendar a:got(' + arr[i] + ')').removeClass('ui-state-active');
        $('#calendar a:got(' + arr[i] + ')').addClass('busy');
    }
}
