

function getFirstDate(day, month, year) {

    for (var i = 0; i < 31; i++) {
        var tmp = new Date(year,month,i);
        if(tmp.getDay() == day)
        {
            return tmp.getDate();
        }
    }
}

var jIceModule = jQuery.noConflict();
jIceModule(document).ready(function(){
	var oneDay = 86400000;
	var today = new Date();
	var monthNames = [window.modicebooking.JANUARY,window.modicebooking.FEBRUARY,window.modicebooking.MARCH,window.modicebooking.APRIL,window.modicebooking.MAY,window.modicebooking.JUNE,window.modicebooking.JULY,window.modicebooking.AUGUST,window.modicebooking.SEPTEMBER,window.modicebooking.OCTOBER,window.modicebooking.NOVEMBER,window.modicebooking.DECEMBER];
    var dayNamesMin = [window.modicebooking.SUNDAY_MIN,window.modicebooking.MONDAY_MIN, window.modicebooking.TUESDAY_MIN,window.modicebooking.WEDNESDAY_MIN,window.modicebooking.THURSDAY_MIN,window.modicebooking.FRIDAY_MIN,window.modicebooking.SATURDAY_MIN];
    var minDays = window.modicebooking.MIN_BOOKING_DAYS;
    var maxDays = window.modicebooking.MAX_BOOKING_DAYS;
    var maxDate = window.modicebooking.MAX_DATE;
    var nightsTheme = jIceModule('select#iceNights').length;
    var arrivalDays = window.modicebooking.ARRIVAL_WEEKDAY;
    var departureDays = window.modicebooking.DEPARTURE_WEEKDAY;
    var showIcon = window.modicebooking.SHOW_ICON;
    var inclusiveBooking = window.modicebooking.INCLUSIVE_BOOKING;
    inclusiveBooking = (inclusiveBooking == '1') ? true : false;

    if (typeof JSON.decode === 'function')
    {
        var items = JSON.decode(jIceModule('input[name="iceItemsInfo"]').val());
    }
    else
    {
        var items = JSON.parse(jIceModule('input[name="iceItemsInfo"]').val());
    }

    jIceModule('#iceItemID').change(function(){
        var itemID = jIceModule(this).val();

        var maxAdults = items[itemID].adults;
        var maxChildren = items[itemID].childrens;
        var maxGuests = items[itemID].guests;

        //Now update the guests/adults and children fields if booking and pricing is by guest count
        var options = '';
        if(jIceModule('div#iceGuests select[name="iceAdults"]').length) {
            options = '';
            for (var i = 1; i <= maxGuests; i++) {
                options += '<option value="'+i+'">'+i+'</option>';
            }
            jIceModule('div#iceGuests select').html(options);
        }

        if(jIceModule('div#iceAdults select[name="iceAdults"]').length) {
            options = '';
            for (var i = 1; i <= maxAdults; i++) {
                options += '<option value="'+i+'">'+i+'</option>';
            }
            jIceModule('div#iceAdults select[name="iceAdults"]').html(options);
        }

        if(jIceModule('div#iceChildren select[name="iceChildren"]').length) {
            if(maxChildren < 1)
            {
                jIceModule('div#iceChildren').fadeOut('fast');
            }
            else
            {
                jIceModule('div#iceChildren').fadeIn('fast');
            }
            var options = '';
            for (var i = 0; i <= maxChildren; i++) {
                options += '<option value="'+i+'">'+i+'</option>';
            }
            jIceModule('div#iceChildren select[name="iceChildren"]').html(options);
        }

    });

	jIceModule('#iceArrival').datepicker({
		dateFormat: window.modicebooking.DATE_FORMAT,
		constrainInput: true,
		minDate: today,
        maxDate: maxDate,
        firstDay: window.modicebooking.FIRST_DAY,
        dayNamesMin: dayNamesMin,
        monthNames: monthNames,
        beforeShowDay: function(date){
            var day = date.getDay();
            if(!arrivalDays)
            {
                return [1];
            }
            if(arrivalDays.match(day))
            {
                return [1];
            }
            else
            {
                return [0];
            }
        }
	});

	var minDepartureDate = new Date();
	if(jIceModule('#iceArrival').val())
	{
		var date = jIceModule('#iceArrival').datepicker('getDate');
        if(date)
        {
            minDepartureDate = new Date(date.getTime()+oneDay);
        }
	}

    jIceModule('#iceDeparture').datepicker({
        dateFormat: window.modicebooking.DATE_FORMAT,
        constrainInput: true,
        minDate: minDepartureDate,
        maxDate: maxDate,
        firstDay: window.modicebooking.FIRST_DAY,
        dayNamesMin: dayNamesMin,
        monthNames: monthNames,
        beforeShowDay: function(date){
            var day = date.getDay();
            if(!departureDays)
            {
                return [1];
            }

            if(departureDays.match(day))
            {
                return [1];
            }
            else
            {
                return [0];
            }
        }
    });

    if(showIcon == '1')
    {
        jIceModule('#iceArrival').datepicker("option","buttonImage",window.modicebooking.MODULE_IMAGE_DIR+"calendarIcon.png");
        jIceModule('#iceArrival').datepicker("option","buttonImageOnly",true);
        jIceModule('#iceArrival').datepicker("option","showOn","both");
        if(!nightsTheme)
        {
            jIceModule('#iceDeparture').datepicker("option","buttonImage",window.modicebooking.MODULE_IMAGE_DIR+"calendarIcon.png");
            jIceModule('#iceDeparture').datepicker("option","buttonImageOnly",true);
            jIceModule('#iceDeparture').datepicker("option","showOn","both");
        }
    }


	jIceModule('#iceArrival').change(function()
	{
        jIceModule('#iceDeparture').val('');
        var arrivalDate = jIceModule('#iceArrival').datepicker('getDate');
        var arrivalTime = arrivalDate.getTime();

        var timeOffsetMin = 0;
        var timeOffsetMax = 0;
        if(inclusiveBooking) {
            timeOffsetMin = minDays*(oneDay-1);
            timeOffsetMax = maxDays*(oneDay-1);
        } else {
            timeOffsetMin = minDays*oneDay;
            timeOffsetMax= maxDays*oneDay;
        }
        //TODO var að vinna í að implementa timeoffset!
        jIceModule('#iceDeparture').datepicker('option','minDate',new Date(arrivalTime+timeOffsetMin));

        if(maxDays) {
           jIceModule('#iceDeparture').datepicker('option','maxDate',new Date(arrivalTime+timeOffsetMax));
        }

        if(nightsTheme) {
            updateDepartureForNights();
        } else {
            jIceModule('#iceNights').val(0);
        }


	});

    jIceModule('#iceDeparture').change(function(){
        if(jIceModule('#iceNights')) {
            var departureTime = jIceModule('#iceDeparture').datepicker('getDate').getTime();
            var arrivalTime = jIceModule('#iceArrival').datepicker('getDate').getTime();

            var timeDiff = departureTime-arrivalTime;
            if(inclusiveBooking) {
                timeDiff += oneDay;
            }
            
            jIceModule('#iceNights').val(Math.round((timeDiff) / oneDay)) ;
        }
    });

    if(nightsTheme) {
        jIceModule('select#iceNights').change( function() {
            updateDepartureForNights();
        });
    }


    function updateDepartureForNights()
    {
        var arrivalTime = jIceModule('#iceArrival').datepicker('getDate');
        var numberOfDays = parseInt(jIceModule('select#iceNights option:selected').val());
        var departureTime = new Date(arrivalTime.getTime() + (numberOfDays*oneDay));
        jIceModule('#iceDeparture').datepicker('setDate',departureTime);
    }

	jIceModule('#iceSubmit').click(function(e){
		hideErrors();
		if(jIceModule('#iceDeparture').val().length < 3 || jIceModule('#iceDeparture').val().length < 3){
			jIceModule('#iceDateSelector .iceError').text(window.modicebooking.ERROR_RECHECK_DATES);
			jIceModule('#iceDateSelector .iceError').fadeIn("fast");
			e.preventDefault();
			return;
		}

        var arrival = jIceModule('#iceArrival').datepicker('getDate').getTime();
        var departure = jIceModule('#iceDeparture').datepicker('getDate').getTime();
        var today = new Date();
        today = new Date(today.getFullYear(),today.getMonth(),today.getDate());
        today = today.getTime();
		if(departure < arrival){
			jIceModule('#iceDateSelector .iceError').text(window.modicebooking.ERROR_DEPARTURE_BEFORE_ARRIVAL);
			jIceModule('#iceDateSelector .iceError').fadeIn("fast");
			e.preventDefault();
		}
		else if(arrival < today){
			jIceModule('#iceDateSelector .iceError').text(window.modicebooking.ERROR_ARRIVAL_PAST);
			jIceModule('#iceDateSelector .iceError').fadeIn("fast");
			e.preventDefault();
		}
		else if(departure < today){
			jIceModule('#iceDateSelector .iceError').text(window.modicebooking.ERROR_DEPARTURE_PAST);
			jIceModule('#iceDateSelector .iceError').fadeIn("fast");
			e.preventDefault();
		}
		else if(!inclusiveBooking && arrival == departure){
			jIceModule('#iceDateSelector .iceError').text(window.modicebooking.ERROR_RECHECK_DATES);
			jIceModule('#iceDateSelector .iceError').fadeIn("fast");
			e.preventDefault();
		}
	});
});

function hideErrors(){
	jIceModule('#iceDateSelector .iceError').fadeOut("fast");
}   
