
var BookNow = {		
	init: function(options)
    {
		BookNow.initElement();
		BookNow.openPopup(options.BookNowUrl);
    },
    
    initElement: function()
    {
    	$('form#book-now-form #checkIn').datepicker({
    		showOn: "button",
			buttonImage: "images/calendar.gif",
			buttonImageOnly: true,
			onSelect: function(dateText, inst) {
				this.focus();
			}
    	});
    	$('form#book-now-form #checkOut').datepicker({
    		showOn: "button",
			buttonImage: "images/calendar.gif",
			buttonImageOnly: true,
			onSelect: function(dateText, inst) {
				this.focus();
			}
    	});
    },
    
    openPopup: function(BookNowUrl)
    {
    	$('#book-now-check-button, #book-now-check-link').click(function() {
    		if (empty($('form#book-now-form input[name="checkIn"]').val())) {
    			alert('Please enter date of check in.');
    			return false;
    		}
    		var dateArrayIn = isDate($('form#book-now-form input[name="checkIn"]').val());
    		if (false === dateArrayIn) {
    			return false;
    		};
    		if (empty($('form#book-now-form input[name="checkOut"]').val())) {
    			alert('Please enter date of check out.');
    			return false;
    		}   		
    		var dateArrayOut = isDate($('form#book-now-form input[name="checkOut"]').val());
    		if (false === dateArrayOut) {
    			return false;
    		};
			var dateFromObj = Date.parse(dateArrayIn[0]);
    		var dateToObj = Date.parse(dateArrayOut[0]);
    		var oneDay = 1000*60*60*24;
    		if (dateToObj <= dateFromObj) {
    			alert('Please enter a correct period');
    			return false;
    		}
    		var nightsStay = (dateToObj - dateFromObj) / oneDay;
    		if (nightsStay > 31) {
    			alert('Please enter a period not exceeding 31 days');
				return false;
    		}
    		var adults = $('form#book-now-form select[name="adults"]').val();
    		var kids = $('form#book-now-form select[name="kids"]').val();
    		var data = 'arrivalMonth=' + dateArrayIn[1] + '&arrivalDay=' + dateArrayIn[3] + '&arrivalYear=' + dateArrayIn[5]
    		         + '&nightsStay=' + nightsStay + '&adults=' + adults + '&children=' + kids;
    		var popupUrl = BookNowUrl + '&' + data; 
    		
            var width  = 700;
            var height = 700;
            var left   = (screen.width - width) / 2;
            var top    = (screen.height - height) / 2;
            var params = 'width=' + width + ', height=' + height
                       + ', top=' + top + ', left=' + left
                       + ', directories=no'
                       + ', location=no'
                       + ', menubar=no'
                       + ', resizable=no'
                       + ', scrollbars=yes'
                       + ', status=no'
                       + ', toolbar=no';
            newwin = window.open(popupUrl, '', params);
            if (window.focus) {
                newwin.focus();
            }
    	});
    	return false;
    }
};

function isDate (dateStr) 
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; 
	var matchArray = dateStr.match(datePat); 
	if (matchArray == null) { 
		alert("Please enter date as either mm/dd/yyyy."); 
		return false; 
	} 
	var month = matchArray[1]; 
	var day = matchArray[3]; 
	var year = matchArray[5]; 
	if (month < 1 || month > 12) { 
		alert("Month must be between 1 and 12."); 
		return false; 
	} 
	if (day < 1 || day > 31) { 
		alert("Day must be between 1 and 31."); 
		return false; 
	} 
	if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { 
		alert("Month " + month + " doesn't have 31 days!"); 
		return false; 
	} 
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); 
		if (day > 29 || (day == 29 && !isleap)) { 
			alert("February " + year + " doesn't have " + day + " days!"); 
			return false; 
		} 
	} 
	return matchArray; 
}

function implode (glue, pieces) {
    var i = '', retVal='', tGlue='';
    if (arguments.length === 1) {
        pieces = glue;
        glue = '';
    }
    if (typeof(pieces) === 'object') {
        if (pieces instanceof Array) {
            return pieces.join(glue);
        }
        else {
            for (i in pieces) {
                retVal += tGlue + pieces[i];
                tGlue = glue;
            }
            return retVal;
        }
    }
    else {
        return pieces;
    }
}
