	
	//if disable minimum stay date detect, we will use default 2 days for instead
	var MIN_STAY_ENABLED	=false;
	
	//Month definitions
	var MON_JANUARY		=0;
	var MON_FEBRUARY	=1;
	var MON_MARCH		=2;
	var MON_APRIL		=3;
	var MON_MAY		=4;
	var MON_JUNE		=5;
	var MON_JULY		=6;
	var MON_AUGUST		=7;
	var MON_SEPTEMBER	=8;
	var MON_OCTOBER		=9;
	var MON_NOVEMBER	=10;
	var MON_DECEMBER	=11;
	
	//day of week definitions
	var DAY_SUNDAY		=0;
	var DAY_MONDAY		=1;
	var DAY_TUESDAY		=2;
	var DAY_WEDNESDAY	=3;
	var DAY_THURSDAY	=4;
	var DAY_FRIDAY		=5;
	var DAY_SATURDAY	=6;
	
	//one day
	var ONEDAY		=3600 * 1000 * 24;
	
	
	//this year
	var THISYEAR;
	
	//martin day array	
	var DAYS_MARTIN;
	
	//Presidents Day array
	var DAYS_PRESIDENTS;
	
	//4thJuly array
	var DAYS_4THJULY;
	
	//labor days array
	var DAYS_LABOR;
	
	//thanksgiving days array
	var DAYS_THANKSGIVING;
			
	//christmas days array
	var DAYS_CHRISTMAS;
	
	//new year days array
	var DAYS_NEWYEAR;
	
	//new year days array (previous years
	var DAYS_NEWYEAR_LASTYEAR;
	
	
	
	//06/07/2008   MM/DD/YYYY  YYYY
	function parseSection_ee(date,format,section){
	
		var pos	=format.indexOf(section);
		if (pos>=0){
			return Number(date.substring(pos,pos+section.length));
		}else
			return -1;
	}

	
	function parseYear_ee(date,format){
		//parse by "YYYY"
		var year	=parseSection_ee(date,format,"YYYY");
		if (isNaN(year) || year<0){
			//parse by "YY"
			year	=parseSection_ee(date,format,"YY");
		}
		
		if (!isNaN(year) && year>0){
			var year = year % 100;
			year += (year < 38) ? 2000 : 1900;
		}
		
		
		return year;
	}



	function parseMonth_ee(date,format){
		//parse by "MM"
		var month	=parseSection_ee(date,format,"MM");
		if (month>=0)	return month;	
		
		//parse by "M"
		month	=parseSection_ee(date,format,"M");
		return month;
	}

	function parseDay_ee(date,format){
		//parse by "DD"
		var day	=parseSection_ee(date,format,"DD");
		if (day>=0)	return day;	
		
		//parse by "D"
		day	=parseSection_ee(date,format,"D");
		return day;
	}

	function isDigital_ee(c){
			return (c=='0' || c=='1' || c=='2' || c=='3' || c=='4' || c=='5' || c=='6' || c=='7' || c=='8' || c=='9');
	}

	function isDigitalChar_ee(c){
			return (c=='Y' || c=='M' || c=='D');
	}

	function isDelimChar_ee(c){
			return (c=='/' || c=='-');
	}
	
	function formatTest_ee(date,format){

		if (format==null)
			format	="";
		
		if (date==null)
			date	="";
			
		if (date=="" || format=="" || date.length!=format.length)
			return false;
		
		for (var i=0; i<date.length; i++){
			var c1	=date.charAt(i);
			var c2	=format.charAt(i);
			
			if (!(isDelimChar_ee(c1) && isDelimChar_ee(c2))  && !(isDigital_ee(c1) && isDigitalChar_ee(c2))){
				return false;
			}
		}
	
		return true;
	}
	
	function getDate_ee(date, format){

		if (!formatTest_ee(date,format))
			return null;
		
		format	=format.toUpperCase();		


		var year	=parseYear_ee(date,format);

		var mon		=parseMonth_ee(date,format);

		var day		=parseDay_ee(date,format);
		
		//return not found, if month or day not positive value
		if (mon<=0 || day<=0 || mon>12 || day>31)
			return null;		

		year	=getRealYear_ee(year);
		
		return new Date(year,mon-1,day);		
	}
	
	function getRealYear_ee(year){

		if (isNaN(year) || year<=0){
			var currDate	=new Date();
			year	=currDate.getYear();
		}
		if (year>1000)
			return year;
		
		year 	= year % 100;
		year += (year < 38) ? 2000 : 1900;
		
		return year;		
	}
	
	
	function parseDate_ee(date){

		var d	=null
		
		if (d==null)	d	=getDate_ee(date,"MM/DD/YYYY");
		if (d==null)	d	=getDate_ee(date,"M/DD/YYYY");
		if (d==null)	d	=getDate_ee(date,"MM/D/YYYY");
		if (d==null)	d	=getDate_ee(date,"M/D/YYYY");

		if (d==null)	d	=getDate_ee(date,"MMDDYYYY");
		if (d==null)	d	=getDate_ee(date,"MDDYYYY");
		if (d==null)	d	=getDate_ee(date,"MMDYYYY");
		if (d==null)	d	=getDate_ee(date,"MDYYYY");

		if (d==null)	d	=getDate_ee(date,"MM/DD/YY");
		if (d==null)	d	=getDate_ee(date,"M/DD/YY");
		if (d==null)	d	=getDate_ee(date,"MM/D/YY");
		if (d==null)	d	=getDate_ee(date,"M/D/YY");

		if (d==null)	d	=getDate_ee(date,"MMDDYY");
		if (d==null)	d	=getDate_ee(date,"MDDYY");
		if (d==null)	d	=getDate_ee(date,"MMDYY");

		if (d==null)	d	=getDate_ee(date,"MM/DD");
		if (d==null)	d	=getDate_ee(date,"MM/D");
		if (d==null)	d	=getDate_ee(date,"M/DD");
		if (d==null)	d	=getDate_ee(date,"M/D");

		if (d==null)	d	=getDate_ee(date,"MMDD");
		if (d==null)	d	=getDate_ee(date,"MMD");
		if (d==null)	d	=getDate_ee(date,"MDD");
		if (d==null)	d	=getDate_ee(date,"MD");

		
		if (d==null)
			d	=new Date();
		
		return d;
		//Example: 704, 7/4, 7-4, 7-04, 7/4/06 or 7042006 are all valid for July 4, 2006.

	}
	
	//format a date object to MM/DD/YYYY string 
	function formatDate_ee(date){
		if (date==null)
			return "";

		var curr_date = date.getDate();
		var curr_month = date.getMonth();
		curr_month++;
		var curr_year = date.getFullYear();
		return curr_month + "/" + curr_date + "/" + curr_year;
	}
	
	
	function isWeekDay(date,WEEKDAYCONST){
		var day			=date.getDay();
		return day==WEEKDAYCONST;
	}

	function isWeekDayStr(dateStr,WEEKDAYCONST){
		var date		=getDate_ee(dateStr);
		var day			=d.getDay();
		return day==WEEKDAYCONST;
	}
	
	/**************************************************************************************
		  
		  Martin Luther King weekend
		  
	 ***************************************************************************************/	
		
		
	
	/**
	  Martin Luther King weekend

	  This is always the 3rd Monday in January.  
	  If any of the dates touch the preceding Friday, Saturday, or Sunday.......... 3 night minimum stay

	  Example 1:  If someone wanted to stay Monday, Tuesday, Wednesday   --- 2 night minimum stay (It doesn't touch one of the "hot days", even though they are staying on the actual holiday)
	  Example 2:  If somone wanted to stay Sunday, Monday, Tuesday  --- it's a 3 night minimum (touches Sunday)
	  Example 3:  If someone wanted to stay Wednesday, Thursday, Friday  --- it's a 3 night minimum (touches Friday)	
	 **/
	function getMartinDay_ee(year){
		var startDate	=new Date(year,MON_JANUARY,1);
		
		return findNextDay_ee(startDate,DAY_MONDAY,3);		
	} 


	/**
	   Get marting weekend days array
	   preceding Friday, Saturday, or Sunday of martin day
	 **/
	function getMartinWeekendDays_ee(year){
		
		if (year==THISYEAR && DAYS_MARTIN){
			return DAYS_MARTIN;
		}
		
		var day	=getMartinDay_ee(year);
		day	=new Date(day.getTime()-3*ONEDAY);

		return getDateArray_ee(day,3);
	} 	

	
	/**
	   Get minimum stay of martin days
	 **/	
	function getMinStay_MartinWeekendDays_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 3;
		}

		if (date.getMonth()!=MON_JANUARY){
			return 0;
		}
			
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getMartinWeekendDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 3;
		}else{
			return 0;
		}
	}		


	/**************************************************************************************
		  
		  Presidents Day weekend
		  
	 ***************************************************************************************/	


	/**
	  Presidents Day weekend

	  This is always the 3rd Monday in Febuary.  
	  If any of the dates touch the preceding Friday, Saturday, or Sunday.......... 3 night minimum stay
	 **/
	function getPresidentsDay_ee(year){
		var startDate	=new Date(year,MON_FEBRUARY,1);
		
		return findNextDay_ee(startDate,DAY_MONDAY,3);		
	} 
		

	/**
	   Get Presidents weekend days array
	   preceding Friday, Saturday, or Sunday of Presidents day
	 **/
	function getPresidentsWeekendDays_ee(year){
		
		if (year==THISYEAR && DAYS_PRESIDENTS){
			return DAYS_PRESIDENTS;
		}
		
		var day	=getPresidentsDay_ee(year);
		day	=new Date(day.getTime()-3*ONEDAY);
		return getDateArray_ee(day,3);
	} 	


	/**
	   Get minimum stay of Presidents days
	 **/	
	function getMinStay_PresidentsWeekendDays_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 3;
		}

		if (date.getMonth()!=MON_FEBRUARY){
			return 0;
		}

			
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getPresidentsWeekendDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 3;
		}else{
			return 0;
		}
	}
	

	/**************************************************************************************
		  
		  4th of July weekend
		  
	 ***************************************************************************************/	



	/**
		4th of July weekend

		This date varies.  

		If it lands on a Wednesday... then we consider it a non-holiday weekend.

		If it lands on any other day, then the weekend closest to it is the holiday weekend.
		Example 1:  4th of July is on a Tuesday.  Then the Fri, Sat., Sund, Mond. Tues are the "hot dates".  If any of the dates lands on one of these days, then it's a 3 night minimum.
		Example 2:  4th of July is on a Thursday.  Then Thurs, Fri, Sat, Sund are the "hot dates".  If any of the dates lands on one of these days, then it's a 3 night minimum.
		Example 3:  4th of July is on a Friday, Sat, or Sunday.  Then the hot dates are Fri, Sat, & Sunday.  If any of the dates lands on one of these days, then it's a 3 night minimum.

	 **/
	function get4thJulyDays_ee(year){

		if (year==THISYEAR && DAYS_4THJULY){
			return DAYS_4THJULY;
		}

		var dateJuly	=new Date(year,MON_JULY,4);
		var day			=dateJuly.getDay();
		var startDate;

		switch (day){
			case DAY_WEDNESDAY:
				return null;

			case DAY_MONDAY://July 1 ~ 4
				startDate	=new Date(dateJuly.getTime() - 3 * ONEDAY);
				return getDateArray_ee(startDate,4);//friday, saturday,sunday,monday

			case DAY_TUESDAY: //June 30 ~ July 4
				startDate	=new Date(dateJuly.getTime() - 4 * ONEDAY);
				return getDateArray_ee(startDate,5);//friday, saturday,sunday,monday,tuesday
			
			case DAY_THURSDAY://July 4 ~ July 7
				startDate	=dateJuly;
				return getDateArray_ee(startDate,4);//thursday,friday,saturday,sunday
			
			case DAY_FRIDAY:
			case DAY_SATURDAY:
			case DAY_SUNDAY:
				if (day==DAY_FRIDAY)
					startDate	=dateJuly;
				else if (day==DAY_SATURDAY)
					startDate	=new Date(dateJuly.getTime()-ONEDAY);
				else
					startDate	=new Date(dateJuly.getTime()- 2 * ONEDAY);

				return getDateArray_ee(startDate,3);//friday,saturday,sunday
		}
				
		return null;
					
	} 	


	/**
	   Get minimum stay of 4th of July days
	 **/	
	function getMinStay_4thJulyDays_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 3;
		}


		if (date.getMonth()!=MON_JULY){
			return 0;
		}
					
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=get4thJulyDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 3;
		}else{
			return 0;
		}
	}

	/**************************************************************************************
		  
		  Labor Day
		  
	 ***************************************************************************************/	


	/**
		Labor Day

		This is always the first Monday in September.
		If any of the dates touch the preceding Friday, Saturday, or Sunday............ 3 night minimum
	 **/
	function getLaborDay_ee(year){
		var startDate	=new Date(year,MON_SEPTEMBER,1);
		
		return findNextDay_ee(startDate,DAY_MONDAY,1);		
	} 

		

	/**
	   Get labor weekend days array
	   preceding Friday, Saturday, or Sunday of labor day
	 **/
	function getLaborWeekendDays_ee(year){
		if (year==THISYEAR && DAYS_LABOR){
			return DAYS_LABOR;
		}

		var day	=getLaborDay_ee(year);
		day	=new Date(day.getTime()-3*ONEDAY);
		return getDateArray_ee(day,3);
	}


	/**
	   Get minimum stay of LaborWeekendDays
	 **/	
	function getMinStay_LaborWeekendDays_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 3;
		}
		

		if (date.getMonth()!=MON_SEPTEMBER){
			return 0;
		}
					
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getLaborWeekendDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 3;
		}else{
			return 0;
		}
	}


	/**************************************************************************************
		  
		 Thanksgiving
		  
	 ***************************************************************************************/	



	/**
		Thanksgiving

		This is always the 4th Thursday in November.
		Thursday, Friday, Saturday, Sunday are all considered "hot dates".  
		If any of the dates lands on one of these days, then it's a 3 night minimum.

	 **/
	function getThanksgivingDay_ee(year){
		var startDate	=new Date(year,MON_NOVEMBER,1);
		return findNextDay_ee(startDate,DAY_THURSDAY,4);		
	} 

		

	/**
	   Get Thanksgiving weekend days array
	   Thursday, Friday, Saturday, Sunday are all considered "hot dates".  
	 **/
	function getThanksgivingWeekendDays_ee(year){
		if (year==THISYEAR && DAYS_THANKSGIVING){
			return DAYS_THANKSGIVING;
		}

		var day	=getThanksgivingDay_ee(year);
//document.write("thanksgiving11="+day+"<BR>");		
		return getDateArray_ee(day,4);
	}


	/**
	   Get minimum stay of ThanksgivingWeekendDays
	 **/	
	function getMinStay_ThanksgivingWeekendDays_ee(date){
		
//document.write("getminStay_thansgiving="+date.getMonth()+".vs."+MON_NOVEMBER+"<br>");
		
		//get default minimum stay
		if (date==null){
			return 3;
		}
		
		if (date.getMonth()!=MON_NOVEMBER){
			return 0;
		}
					
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getThanksgivingWeekendDays_ee(year);


/*
if (!dateArray){
	document.write("<br>getMinsaty_array=NULL<br>");
}else{
	document.write("<br>getminstay_array=");
	for (var i=0; i<dateArray.length; i++){
		document.write(dateArray[i]);
		document.write(",");
	}
	document.write("<br>");
	document.write("current date="+date);
}
*/

	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 3;
		}else{
			return 0;
		}
	}
	

	/**************************************************************************************
		  
		 Christmas days
		  
	 ***************************************************************************************/	


	/**
	   	Get Christmas days array
		Christmas Period = Dec 20-26
	 **/
	function getChristmasDays_ee(year){
		if (year==THISYEAR && DAYS_CHRISTMAS){
			return DAYS_CHRISTMAS;
		}

		var day	=new Date(year,MON_DECEMBER, 20);
		return getDateArray_ee(day,7);
	}

	/**
	   Get minimum stay of ChristmasDays
	 **/	
	function getMinStay_ChristmasDays_arrival_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 5;
		}

		if (date.getMonth()!=MON_DECEMBER){
			return 0;
		}
					
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var startDate;
		var dateArray;
			
		//if arrival date is Dec.20 ~ 21, mininum stay is 5 days
		startDate	=new Date(year,MON_DECEMBER, 20);
		dateArray	= getDateArray_ee(startDate,2);
	
		if (isTouchDates_ee(date,dateArray)){
			return 5;
		}
		

		//if arrival date is Dec.22 ~ 26, mininum stay is 10 days(because it will cross the new years days)
		startDate	=new Date(year,MON_DECEMBER, 22);
		dateArray	= getDateArray_ee(startDate,5);
	
		if (isTouchDates_ee(date,dateArray)){
			return 10;
		}

		
		return 0;
	}

	/**
	   Get minimum stay of ChristmasDays
	 **/	
	function getMinStay_ChristmasDays_departure_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 5;
		}

		if (date.getMonth()!=MON_DECEMBER){
			return 0;
		}
					
		//get minimum stay if date is among the weekend	
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getChristmasDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 5;
		}else{
			return 0;
		}
	}


	/**************************************************************************************
		  
		 New Years days
		  
	 ***************************************************************************************/	


	/**
	   	Get New Years days array
		New Years = Dec 27 - Jan 2
		
		So, if someone chooses to leave on the 27, 28, 29, 30, 31, then there is a 10 night minimum.
		If someone chooses to leave on 01 or 02, then there is a 5 night minimum		
	 **/
	function getNewYearsDays_ee(year){
		if (year==THISYEAR && DAYS_NEWYEAR){
			return DAYS_NEWYEAR;
		}else if (year==THISYEAR-1 && DAYS_NEWYEAR_LASTYEAR){
			return DAYS_NEWYEAR_LASTYEAR;
		}
		
		var day	=new Date(year,MON_DECEMBER, 27);
		return getDateArray_ee(day,7);
	}



	/**
	   Get minimum stay of NewYearsDays
	 **/	
	function getMinStay_NewYearsDays_arrival_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 5;
		}


		if (date.getMonth()!=MON_DECEMBER && date.getMonth()!=MON_JANUARY){
			return 0;
		}

			
		//get minimum stay if date is among the weekend	

		//(1)THIS YEAR!
		var year	=getRealYear_ee(date.getYear());
		var dateArray	=getNewYearsDays_ee(year);
	
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 5;
		}
		
		//(2)LAST YEAR!
		var year	=getRealYear_ee(date.getYear())-1;
		dateArray	=getNewYearsDays_ee(year);
		//if touch the days
		if (isTouchDates_ee(date,dateArray)){
			return 5;
		}
		
		return 0;
	}
	

	/**
	   Get minimum stay of NewYearsDays
	   This is the minimum stay when the specified date is departure date
	 **/	
	function getMinStay_NewYearsDays_departure_ee(date){
		
		//get default minimum stay
		if (date==null){
			return 5;
		}

		if (date.getMonth()!=MON_DECEMBER && date.getMonth()!=MON_JANUARY){
			return 0;
		}

		var year	=getRealYear_ee(date.getYear());
		
		//So, if someone chooses to leave on the 27, 28, 29, 30, 31, then there is a 10 night minimum.
		var startDate	=new Date(year,MON_DECEMBER, 27);
		var dateArray	=getDateArray_ee(startDate,5);
		if (isTouchDates_ee(date,dateArray)){
			return 10;
		}

		//If someone chooses to leave on 01 or 02, then there is a 5 night minimum	
		startDate	=new Date(year,MON_JANUARY,1);
		dateArray	=getDateArray_ee(startDate,2);
		if (isTouchDates_ee(date,dateArray)){
			return 5;
		}
	
		return 0;
	}
	

	/**************************************************************************************
		  
		Other functions
		  
	 ***************************************************************************************/	
	
	
	/**
	 find next day, begin at start date
	 dayOfWeek:  The next day value, day of week.
	 count: The number of that day, first(1), second(2), third(3), or forth(4).
	 */
	function findNextDay_ee(startDate,dayOfWeek,count){
		
//document.write("find next day_ee="+startDate+"<br>");


		while (count>0){
			var day	=startDate.getDay();
			if (day==dayOfWeek){
				count--;
				if (count==0)
					break;
			}
			startDate	=new Date(startDate.getTime() + ONEDAY);
		}	
		
		return startDate;
	}
	

	/**
	 Get date array
	 startDate: the start date
	 count: count of date array
	 */
	function getDateArray_ee(startDate,count){
		var dateArray	=new Array();
		for (var i=0; i<count; i++){
			dateArray[i]	=new Date(startDate.getTime() + i * ONEDAY);
		}
		return dateArray;
	}


	/**
	 Get blocked arrival date array
	 departure date, the real departure date
	 return: a blocked date array
	 */
	function getBlockedDateArray_arrival_ee(departureDate){
		if (isString_ee(departureDate)){
			departureDate	=parseDate_ee(departureDate);
		}
		
		if (departureDate==null)
			return null;
	
//document.write("arrival_ee,departDate="+departureDate+"<br>");
	
		
		var minDays	=getMinStay_departure_ee(departureDate);
//document.write("arrival_ee,arrivalDate,min="+minDays+"<br>");
		
		if (minDays<2)
			minDays	=2;
			
		var arrivalDate	=new Date(departureDate.getTime()-minDays * ONEDAY);
		var nextDay	=new Date(arrivalDate.getTime() + ONEDAY);
		
		//return getDateArray_ee(nextDay,minDays-1);
		return getDateArray_ee(nextDay,0); //jxb 2007.02.14
	}
	
	/**
	 *  if current arrival date is blocked
	 */
	function isBlockedArrivalDate(arrivalDate, departureDate){

//document.write("isBlockedarrival date.arrivaldate="+arrivalDate+",depart="+departureDate+"<br>");
	
		var dateArray	=getBlockedDateArray_arrival_ee(departureDate);

/*
if (!dateArray){
	document.write("<br>blockedarray=NULL<br>");
}else{
	document.write("<br>blockedarray=");
	for (var i=0; i<dateArray.length; i++){
		document.write(dateArray[i]);
		document.write(",");
	}
	document.write("<br>");
}
*/
		
		return isTouchDates_ee(arrivalDate, dateArray);
	}

	/**
	 Get blocked departure date array
	 arrival date, the real arrival date
	 return: a blocked date array
	 */
	function getBlockedDateArray_departure_ee(arrivalDate){
		if (isString_ee(arrivalDate)){
			arrivalDate	=parseDate_ee(arrivalDate);
		}
		
		if (arrivalDate==null)
			return null;
		
		var minDays	=getMinStay_arrival_ee(arrivalDate);
		if (minDays<2)
			minDays	=2;
			
		var nextDay	=new Date(arrivalDate.getTime() + ONEDAY);
		
		return getDateArray_ee(nextDay,minDays-1);
		
	}

	/**
	 *  if current departure date is blocked
	 */
	function isBlockedDepartureDate(arrivalDate, departureDate){
		var dateArray	=getBlockedDateArray_departure_ee(arrivalDate);
		return isTouchDates_ee(departureDate, dateArray);
	}
	
	/**
		if current variable is a date variable
	 **/	
	function isDate_ee(d){
		if (d==null)
			return false;
			
		try{
			return d.getTime()>0;
		}catch(e){
			return false;
		}
	}
	
	/**
		if current variable is a String variable
	 **/	
	function isString_ee(s){
		if (s==null)
			return false;
			
		try{
			return s=="" || s.charAt(0)!='';
		}catch(e){
			return false;
		}
	}
	
	
	/**
	 if two days are equal
	 */
	function isEqualDate_ee(date1, date2){
		var year1	=getRealYear_ee(date1.getYear());
		var mon1	=date1.getMonth();
		var day1	=date1.getDate();

		var year2	=getRealYear_ee(date2.getYear());
		var mon2	=date2.getMonth();
		var day2	=date2.getDate();
		

		return (year1==year2) && (mon1==mon2) && (day1==day2);
	}

	//get integer from a float value
    function getInt_ee(f){
    	if (!f)
    		return 0;
    		
    	var x	=""+f;
    	var i	=x.indexOf(".");
    	if (i>=0){
    		x	=x.substring(0,i);
    	}
    	try{
    		return parseInt(x);
    	}catch(e){
    		return 0;
    	}
    	
    }

	/**
	 if first date is great equal than the second
	 */
	function isGreatEqualDate_ee(date1, date2){

		var time1	=date1.getTime();
		var time2	=date2.getTime();		
		if (time1>=time2)
			return true;
		if (time1 + ONEDAY<time2)
			return false;
		
		return isEqualDate_ee(date1, date2);
	}


	/**
   	   if first date is less equal than the second
	 */
	function isLessEqualDate_ee(date1, date2){
		
		var time1	=date1.getTime();
		var time2	=date2.getTime();		
		if (time1<=time2)
			return true;
		if (time1 - ONEDAY>time2)
			return false;


		return isEqualDate_ee(date1, date2);
	}


	/**
	 if a date touches an date array
	 */
	function isTouchDates_ee(date, dateArray){

		if (isString_ee(date)){
			date	=parseDate_ee(date);
		}
		
		if (dateArray==null || dateArray.length==0)
			return false;
		

		if (dateArray.length==1){
			return isEqualDate_ee(date,dateArray[0]);
		}
		
		var date1	=dateArray[0];
		var date2	=dateArray[dateArray.length-1];

//document.write("tarche date="+date+", date1="+date1+" ...  date2="+date2+"<br>");
		
		var greatEqual	=isGreatEqualDate_ee(date,date1);
		var lessEqual	=isLessEqualDate_ee(date,date2);

//document.write("touch result="+greatEqual+","+lessEqual);
		
//		document.write("date="+date);
//		document.write("<br>"+greatEqual+","+lessEqual);
//		document.write("<br>");

		return  greatEqual && lessEqual;
		
		/*		
		for (var i=0; i<dateArray.length; i++){
			if (isEqualDate_ee(date,dateArray[i]))
				return true;
		}
		
		return false;
		*/
	}

	
	/**************************************************************************************
		  
		 Get minimum stay
		  
	 ***************************************************************************************/	


	/**
	   	get minimum stay (for arrival date only)
	 **/
	function getMinStay_arrival_ee(date){
		return getMinStay_ee(date,true);
	}

	/**
	   	get minimum stay(for departure date only)
	 **/
	function getMinStay_departure_ee(date){
		return getMinStay_ee(date,false);
	}
		
	
	/**
	 **  get minimum stay, for both departure date and arrival date
	 **/
	function getMinStay_ee(date, isArrival){
		
		if (!MIN_STAY_ENABLED){
			return 2;
		}
		
		var minDays;
		
		//Martin Luther King weekend
		minDays		=getMinStay_MartinWeekendDays_ee(date);
		if (minDays>0) return minDays;
		
		
		//Presidents Day weekend
		minDays		=getMinStay_PresidentsWeekendDays_ee(date);
		if (minDays>0) return minDays;


		//4th of July weekend
		minDays		=getMinStay_4thJulyDays_ee(date);
		if (minDays>0) return minDays;

		
		//labor weekend days
		minDays		=getMinStay_LaborWeekendDays_ee(date);
		if (minDays>0) return minDays;


		//Thanksgiving weekend days
		minDays		=getMinStay_ThanksgivingWeekendDays_ee(date);
		if (minDays>0) return minDays;
		

		//Christmas days(for arrival date only)
		if (isArrival){
			minDays		=getMinStay_ChristmasDays_arrival_ee(date);
			if (minDays>0) return minDays;
		}else{
		//for departure date only
			minDays		=getMinStay_ChristmasDays_departure_ee(date);
			if (minDays>0) return minDays;
		}


		//New Years days(for arrival date only)
		if (isArrival){
			minDays		=getMinStay_NewYearsDays_arrival_ee(date);
			if (minDays>0) return minDays;
		}else{
		//New Years days(for departure date only)
			minDays		=getMinStay_NewYearsDays_departure_ee(date);
			if (minDays>0) return minDays;
		}

		
		return 2;
	}
	
	
	//*******************************************
	//     initialization
	//*******************************************
    THISYEAR	=getRealYear_ee((new Date()).getYear());
    

	//martin day array	
	DAYS_MARTIN=getMartinWeekendDays_ee(THISYEAR);
	
	//Presidents Day array
	DAYS_PRESIDENTS=getPresidentsWeekendDays_ee(THISYEAR);

	//4thJuly array
	DAYS_4THJYLY=get4thJulyDays_ee(THISYEAR);
	
	//labor days array
	DAYS_LABOR=getLaborWeekendDays_ee(THISYEAR);
	
	//thanksgiving days array
	DAYS_THANKSGIVING=getThanksgivingWeekendDays_ee(THISYEAR);

/*
document.write("days_thanksgiving..");	
for (var i=0; i<DAYS_THANKSGIVING.length; i++){
   document.write(DAYS_THANKSGIVING[i]);
   document.write(",");
}	
document.write("<br>");
*/
			
	//christmas days array
	DAYS_CHRISTMAS=getChristmasDays_ee(THISYEAR);
	
	//new year days array
	DAYS_NEWYEAR=getNewYearsDays_ee(THISYEAR);
	DAYS_NEWYEAR_LASTYEAR=getNewYearsDays_ee(THISYEAR-1);
	
	
	
	