function clearDefaultSearch(textbox){

	if(textbox.value == 'City, State/Province, or Country'){

		textbox.value='';

	}

	textbox.style.color='#000000';

}



function input1input2Controller ($input1, $input2) 

{

	var self = this;

	var curDate = new Date();

	var lastDay = new Date();

	lastDay.setFullYear(lastDay.getFullYear() + 1);

	//lastDay.setDate(lastDay.getDate() - 1);

	

	var CONSTANTS = {

		dateFormat: 'mm/dd/yyyy', 

		defaultInputBoxVal: 'mm/dd/yyyy', 

		inputBoxTextColor: '#000000', 

		followingTabOrderItemSelectorIds: ['#number-of-rooms', '#special-offer', '#searchTerms'],

		cutoffDate: lastDay

	};

	

	Date.format = CONSTANTS.dateFormat;

	

	this.getDPConfig = function($obj)

	{

		var self = this;

		var dateVal = $obj.val();

		var DEFAULT_VAL = CONSTANTS.defaultInputBoxVal;

		if (dateVal == DEFAULT_VAL || dateVal == '' || isNaN(dateVal))

		{

			dateVal = curDate.asString();

		}

		

		var configObj = {

			eventName: 'focus', 

			format:'m/d/Y',

			date: dateVal,

			current: dateVal,

			last: CONSTANTS.cutoffDate,

			calendars: 2,

			starts: 7,

			position: 'bottom',

			onBeforeShow: function(){

				var objVal = $obj.val();

				if (objVal != DEFAULT_VAL && objVal != '')

				{

					var objDateVal = new Date(objVal);

					if (objVal != dateVal)

					{

						if (!self.isDateValid(objDateVal, objVal, false))

						{

							$obj.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(dateVal, true);

						}

						else

						{

							$obj.DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(objVal, true);

						}

					}

					else

					{

						if (self.isDateValid(objDateVal, objVal, false))

						{

							$obj.DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(dateVal, true);

						}

						else

						{

							$obj.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(curDate.asString(), true);

						}

					}

				}

			},

			onChange: function(formated, dates){		

				$obj.val(formated).DatePickerHide().data("isCalendarOpen", false);

				self.performDateChecks($obj);

			},  

			

			onRender: function(date) {

				now = new Date();

				end = new Date(CONSTANTS.cutoffDate);

				if ($obj == $input1)

				{

					now.setDate(now.getDate() - 1);

					end.setDate(end.getDate() - 1);

				}

				return {

					disabled: (date.valueOf() < now.valueOf() || date.valueOf() > end.valueOf()),

					className: false

				}

			}

		};

		

		return configObj;

	};

	

	this.performDateChecks = function($obj)

	{

		var field1Val = $input1.val();

		var field2Val = $input2.val();

		var updatedField1Val = this.updateDateString(field1Val);

		var updatedField2Val = this.updateDateString(field2Val);

		var date1 = new Date(updatedField1Val);

		var date2 = new Date(updatedField2Val);

		

		if ($obj == $input1)

		{

			if (!self.isDateValid(date1, updatedField1Val, true))


			{

				date1 = new Date();

				//$input1.val(date1.asString());

				$input1.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(date1, true);

			}

			else

			{

				date1.setDate(date1.getDate() + 1);

				if (!self.isDateValid(date2, updatedField2Val, false) && field2Val != '' && field2Val != CONSTANTS.defaultInputBoxVal)

				{

					$input2.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(date1);

				}

				else

				{

					if (field2Val == '' || date2 <= date1 || field2Val == CONSTANTS.defaultInputBoxVal)

					{

						$input2.val(date1.asString()).DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(date1).css("color", CONSTANTS.inputBoxTextColor);

					}

				}

			}

		}

		else

		{ 

			if (!self.isDateValid(date2, updatedField2Val, true))

			{

				date2 = new Date();

				date2.setDate(date2.getDate() + 1);

				//$input2.val(date2.asString());

				$input2.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(date2, true);

			}

			else

			{

				date2.setDate(date2.getDate() - 1);

				if (!self.isDateValid(date1, updatedField1Val, false) && field1Val != '' && field1Val != CONSTANTS.defaultInputBoxVal)

				{

					$input1.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(date2);

				}

				else

				{

					if (field1Val == '' || date1 >= date2 || field1Val == CONSTANTS.defaultInputBoxVal)

					{

						$input1.val(date2.asString()).DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(date1).css("color", CONSTANTS.inputBoxTextColor);

					}

				}

				

			}

		}

                                           document.getElementById('nightnumber').value = this.getCountDay(new Date(this.updateDateString($input1.val())),new Date(this.updateDateString($input2.val())));
                                        };

this.getCountDay = function(date1,date2) 
										{
											var each_day = 1000 * 60 * 60 * 24;//milliseconds in a day
											var ms_date1 = date1.getTime();//milliseconds for date1
											var ms_date2 = date2.getTime();//milliseconds for date2
											var ms_date_diff = Math.abs(date1 - date2);//different of the two dates in milliseconds
											var days = Math.round(ms_date_diff / each_day);//divided the different with millisecond in a day
											return days;
										};

	

	
	this.updateDateString = function(str)

	{

		var tempArr = str.split("/");

		var curYearVal = String(new Date().getFullYear());

		var yearVal = tempArr[2];

		var yearRes;

		if (tempArr.length == 3)

		{

			yearRes = curYearVal.substring(0, (curYearVal.length - yearVal.length)) + yearVal;

			tempArr[2] = yearRes;

			str = tempArr.join("/");

		}

		

		return str;

	};

	

	this.isDateValid = function(date, dateConstructorStr, checkIfDateIsInRange)

	{

		var dateStr = date.asString();

		var tempArr = dateConstructorStr.split("/");

		

		if (isNaN(Date.parse(date)) || tempArr.length != 3)

		{

			return false;

		}

		else

		{

			if (checkIfDateIsInRange)

			{

				if ((date < curDate) || date > lastDay)

				{

					return false;

				}

			}

		}

		

		return true;

	};

	

	this.initializeFieldVal = function($obj) 

	{

		

		if ($obj.val() == CONSTANTS.defaultInputBoxVal)

		{

			$obj.val('').css("color", CONSTANTS.inputBoxTextColor);

		}

	};

	

	this.initializeCalendar = function($input) 

	{

		if ($input.val() != CONSTANTS.defaultInputBoxVal)

		{

			$input.css("color", CONSTANTS.inputBoxTextColor);

		}

		if ($input == $input1)

		{

			var $siblingInput = $input2;

		}

		else 

		{

			var $siblingInput = $input1;

		}

		$input.DatePicker(self.getDPConfig($input));

		$input.bind("focus", function() {

			self.initializeFieldVal($input);

			$siblingInput.DatePickerHide();

			return false;

		}).bind("click", function() {

			self.handleInputBoxClick($input);

			return false;

		}).bind("change", function() {

			self.performDateChecks($input);

		});

		this.prepareCalendarIcon($input);

	};

	

	this.prepareCalendarIcon = function($target)

	{

		var $image = $('#icon_' + $target.attr("id"));

		if ($image.attr("id"))

		{

			$target.data("icon", $image);

		}

		$image.bind("click", function(ev) {

			if (!$target.data("isCalendarOpen"))

			{

				$target.focus();

			}

			else

			{

				$target.data("isCalendarOpen", false);

			}

			return false;

		});

	};

	

	this.handleInputBoxClick = function($target)

	{

		if($target.data("isCalendarOpen"))

		{

			$target.DatePickerHide().data("isCalendarOpen", false);

		}

	};

	

	this.initializeStage = function() 

	{

		self.initializeCalendar($input1);

		self.initializeCalendar($input2);

		// FireFox tabindex bug resolution

		for(i=0; i< CONSTANTS.followingTabOrderItemSelectorIds.length; i++) {

			$(CONSTANTS.followingTabOrderItemSelectorIds[i]).bind("focus", function() {$input1.DatePickerHide(); $input2.DatePickerHide();});

		}

	};

}

function input1Controller ($input1) 

{

	var self = this;

	var curDate = new Date();

	var lastDay = new Date();

	lastDay.setFullYear(lastDay.getFullYear() + 1);


	

	var CONSTANTS = {

		dateFormat: 'mm/dd/yyyy', 

		defaultInputBoxVal: 'mm/dd/yyyy', 

		inputBoxTextColor: '#000000', 

		followingTabOrderItemSelectorIds: ['#number-of-rooms', '#special-offer', '#searchTerms'],

		cutoffDate: lastDay

	};

	

	Date.format = CONSTANTS.dateFormat;

	

	this.getDPConfig = function($obj)

	{

		var self = this;

		var dateVal = $obj.val();

		var DEFAULT_VAL = CONSTANTS.defaultInputBoxVal;

		if (dateVal == DEFAULT_VAL || dateVal == '' || isNaN(dateVal))

		{

			dateVal = curDate.asString();

		}

		

		var configObj = {

			eventName: 'focus', 

			format:'m/d/Y',

			date: dateVal,

			current: dateVal,

			last: CONSTANTS.cutoffDate,

			calendars: 2,

			starts: 7,

			position: 'bottom',

			onBeforeShow: function(){

				var objVal = $obj.val();

				if (objVal != DEFAULT_VAL && objVal != '')

				{

					var objDateVal = new Date(objVal);

					if (objVal != dateVal)

					{

						if (!self.isDateValid(objDateVal, objVal, false))

						{

							$obj.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(dateVal, true);

						}

						else

						{

							$obj.DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(objVal, true);

						}

					}

					else

					{

						if (self.isDateValid(objDateVal, objVal, false))

						{

							$obj.DatePickerSetHasUserSelectedADate(true).DatePickerSetDate(dateVal, true);

						}

						else

						{

							$obj.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(curDate.asString(), true);

						}

					}

				}

			},

			onChange: function(formated, dates){		

				$obj.val(formated).DatePickerHide().data("isCalendarOpen", false);

				self.performDateChecks($obj);

			},  

			

			onRender: function(date) {

				now = new Date();

				end = new Date(CONSTANTS.cutoffDate);

				if ($obj == $input1)

				{

					now.setDate(now.getDate() - 1);

					end.setDate(end.getDate() - 1);

				}

				return {

					disabled: (date.valueOf() < now.valueOf() || date.valueOf() > end.valueOf()),

					className: false

				}

			}

		};

		

		return configObj;

	};

	

	this.performDateChecks = function($obj)

	{

		var field1Val = $input1.val();

		var updatedField1Val = this.updateDateString(field1Val);

		var date1 = new Date(updatedField1Val);
		

		if ($obj == $input1)

		{

			if (!self.isDateValid(date1, updatedField1Val, true))


			{

				date1 = new Date();


				$input1.DatePickerSetHasUserSelectedADate(false).DatePickerSetDate(date1, true);

			}

			else

			{

				date1.setDate(date1.getDate() + 1);


			}

		}


	};

	

	
	this.updateDateString = function(str)

	{

		var tempArr = str.split("/");

		var curYearVal = String(new Date().getFullYear());

		var yearVal = tempArr[2];

		var yearRes;

		if (tempArr.length == 3)

		{

			yearRes = curYearVal.substring(0, (curYearVal.length - yearVal.length)) + yearVal;

			tempArr[2] = yearRes;

			str = tempArr.join("/");

		}

		

		return str;

	};

	

	this.isDateValid = function(date, dateConstructorStr, checkIfDateIsInRange)

	{

		var dateStr = date.asString();

		var tempArr = dateConstructorStr.split("/");

		

		if (isNaN(Date.parse(date)) || tempArr.length != 3)

		{

			return false;

		}

		else

		{

			if (checkIfDateIsInRange)

			{

				if ((date < curDate) || date > lastDay)

				{

					return false;

				}

			}

		}

		

		return true;

	};

	

	this.initializeFieldVal = function($obj) 

	{

		

		if ($obj.val() == CONSTANTS.defaultInputBoxVal)

		{

			$obj.val('').css("color", CONSTANTS.inputBoxTextColor);

		}

	};

	

	this.initializeCalendar = function($input) 

	{

		if ($input.val() != CONSTANTS.defaultInputBoxVal)

		{

			$input.css("color", CONSTANTS.inputBoxTextColor);

		}


		$input.DatePicker(self.getDPConfig($input));

		$input.bind("focus", function() {

			self.initializeFieldVal($input);

			return false;

		}).bind("click", function() {

			self.handleInputBoxClick($input);

			return false;

		}).bind("change", function() {

			self.performDateChecks($input);

		});

		this.prepareCalendarIcon($input);

	};

	

	this.prepareCalendarIcon = function($target)

	{

		var $image = $('#icon_' + $target.attr("id"));

		if ($image.attr("id"))

		{

			$target.data("icon", $image);

		}

		$image.bind("click", function(ev) {

			if (!$target.data("isCalendarOpen"))

			{

				$target.focus();

			}

			else

			{

				$target.data("isCalendarOpen", false);

			}

			return false;

		});

	};

	

	this.handleInputBoxClick = function($target)

	{

		if($target.data("isCalendarOpen"))

		{

			$target.DatePickerHide().data("isCalendarOpen", false);

		}

	};

	

	this.initializeStage = function() 

	{

		self.initializeCalendar($input1);

		// FireFox tabindex bug resolution

		for(i=0; i< CONSTANTS.followingTabOrderItemSelectorIds.length; i++) {

			$(CONSTANTS.followingTabOrderItemSelectorIds[i]).bind("focus", function() {$input1.DatePickerHide();});

		}

	};

}

$(window).load( function() {

	var $checkinField = $('#check-in-date');
	var $checkoutField = $('#check-out-date');
	
	var $groupsDateField = $('#check-in-date_groups');
	var $reservationDateField = $('#check-in-date_r');

	var datesController = new input1input2Controller($checkinField, $checkoutField);
	var groupsDateFieldController = new input1Controller ($groupsDateField) ;
	var reservationDateFieldController = new input1Controller ($reservationDateField) ;
	
	datesController.initializeStage();
	groupsDateFieldController.initializeStage();
	reservationDateFieldController.initializeStage();

});
