
function Booking() {
    this.maxOccupancy = 5;
    this.maxChildren = 4;
    this.maxRooms = 5;
}

Date.prototype.zeroTime = function() {
    this.setHours(0, 0, 0, 0);
    return this;
}

Booking.prototype.init = function()
{
    var self = this;
    this.updateRooms();

    $('#field-numRooms').change(function(){self.updateRooms();});
    $('#book-form #bookingSubmit').click(function(){
        window.open(self.getUrl());
    });
    $("#field-arrivalDate, #field-departureDate").datepicker({
		showOn: 'button',
		dateFormat: 'dd/mm/yy',
		yearRange: '-00:+02',
		buttonImage: 'resources/images/calendar.png',
		buttonImageOnly: true,
		beforeShowDay: function(date) {
			var selectable = (date.zeroTime() >= new Date().zeroTime()),
			css = '',
			tooltip = '';
			return [selectable, css, tooltip];
		},
        onSelect: function(date, datepicker) {
            var pad = function(data) {data = data+'';if (data.length == 1) {return '0'+data;}return data;};
            
            if ($(this).attr('id') == "field-arrivalDate")
            {
                $('#arrivalDate').val(datepicker.selectedYear+'-'+pad(datepicker.selectedMonth+1)+'-'+pad(datepicker.selectedDay));
            }
            if ($(this).attr('id') == "field-departureDate")
            {
                $('#departureDate').val(datepicker.selectedYear+'-'+pad(datepicker.selectedMonth+1)+'-'+pad(datepicker.selectedDay));
            }
        }
	});
}

Booking.prototype.getUrl = function()
{
	var url = "https://www.yourreservation.net/ibe/14394-Down-Hall-Country-Hse/main.html?quick=quick";
    
    if($('#arrivalDate').val() != '') {
		url += "&calArrivalDateField=" + $("#arrivalDate").val();
	}
	
	if($('#departureDate').val() != '') {
		url += "&calDepartureDateField=" + $("#departureDate").val();
	}
    
    if($('#field-promoCode').val() != '') {
		url += "&rateAccessCode=" + $("#field-promoCode").val();
    }
    
	var adults = '';
	var children = '';
	var childrenAges = '';
    
    $('#book-form .rooms .room').each(function(i)
    {
        i++;
        adults += "&adults" + i + '=' + $(this).find('.adultCount').val();
        children += "&children" + i + '=' + $(this).find('.childrenCount').val();
        if (parseInt($(this).find('.childrenCount').val()) > 0)
        {
            childrenAges += "&childrenAges" + i + "=";
            $(this).find('.childrensAges select').each(function(i){
                if (i > 0)
                    childrenAges += ",";
                childrenAges += $(this).val();
            });
        }
    });
    
	url += adults + children + childrenAges;
    
    return url;
}

Booking.prototype.createRoom = function(number)
{
    var self = this;
    
    if ($('#room-'+number).length > 0)
        return;
    var newRoom = $('#roomTemplate div').clone();
    newRoom.data('roomNum',number);
    newRoom.attr('id','room-'+number);
    newRoom.find('.roomNumber').html(number);
    newRoom.html(newRoom.html().replace(/%id%/g, number));
    newRoom.appendTo($('#book-form .rooms'));
    
    newRoom.find('.childrensAges').hide();
    $('#field-room-'+number+'-children').change(function(){self.updateAgeBoxes(this);});
    $('#field-room-'+number+'-children').change();
    
}

Booking.prototype.updateAgeBoxes = function(numChildrenField)
{
    numChildrenField = $(numChildrenField);
    var numChildren = parseInt(numChildrenField.val());
    var room = numChildrenField.parents('.room');
    var container = room.find('.childrensAges');
    var roomNumber = room.data('roomNum');
    if (numChildren < 1)
    {
        container.hide().find('select').remove();
        return;
    }
    container.show();
    for(var i=1; i<=this.maxChildren;i++)
    {
        if (i <= numChildren)
        {
            if (container.find('select').eq(i-1).length == 0)
            {
                var newSelect = $('#childrenAgeTemplate select').clone();
                newSelect.html(newSelect.html().replace(/%id%/g, roomNumber));
                newSelect.appendTo(container);
            }
        }
        else
        {
            if (container.find('select').eq(i-1).length != 0)
            {
                container.find('select').eq(i-1).remove();
            }
        }
    }
}

Booking.prototype.removeRoom = function(number)
{
    $('#room-'+number).remove();
}

Booking.prototype.updateRooms = function()
{
    var numRooms = parseInt($('#field-numRooms').val());
    var i;
    for(i=1; i<=numRooms; i++)
    {
        this.createRoom(i);
    }
    for(i=numRooms+1; i<=this.maxRooms; i++)
    {
        this.removeRoom(i);
    }
}

var bookingControl;

$(document).ready(function(){
    bookingControl = new Booking();
    bookingControl.init();
});
