var CheckInDateCTRLName = '';
var CheckOutDateCTRLName = '';
var NightsDropDownListCTRLName = '';
var PreviousCellBackGroundColor = "";
var LastRequestedMonth = 1;
var LastRequestedYear = 2001;
function OnMouseOverCell(objCell)
{
	PreviousCellBackGroundColor = objCell.style.backgroundColor;
	objCell.style.backgroundColor = "#fcf05c";
}
function OnMouseOutCell(objCell)
{
	objCell.style.backgroundColor = PreviousCellBackGroundColor;
}
function ChangeCalender( nYear , nMonth , nDay , strTextBoxName )
{
	var objTxt = document.getElementsByName( strTextBoxName )[0];
	objTxt.CurrentJsCalendar.ChangeDate( nYear , nMonth , nDay );
	objTxt.focus();
}
function ReturnDay(nYear , nMonth , nDay , strTextBoxName)
{
	var objTxt = document.getElementsByName( strTextBoxName )[0];
	objTxt.value = "" + nMonth + "/" + nDay + "/" + nYear;
	objTxt.PreventHidingCalendar = false;
	CloseDateFrame( objTxt );
}
function GetDateInRange(nMonth , nYear , strTextBoxName)
{
	var nFinalMonth = nMonth;
	var nFinalYear = nYear;
	var todaydate=new Date(); 
	var objDate = new Date( nYear , nMonth - 1 , GetNumberOfDaysInMonth( nMonth , nYear) );
	var OneYearLaterDate = new Date( todaydate.getFullYear() + 1 , todaydate.getMonth() - 1 , 1 );
	if( (objDate - todaydate) < 1 )
	{
		nFinalMonth = todaydate.getMonth() + 1; 
		nFinalYear = todaydate.getFullYear();
	}
	else
	{
		var Date1 = new Date( nYear , nMonth  -1 , 1);
		if( ( ( OneYearLaterDate - Date1 ) < 1) )
		{
			nFinalMonth = OneYearLaterDate.getMonth();
			nFinalYear =  OneYearLaterDate.getFullYear();
		}			
	}
	var objTxt = document.getElementsByName( strTextBoxName )[0];
	objTxt.CurrentJsCalendar.ChangeDate( nFinalYear , nFinalMonth , 1 );
	objTxt.focus();
}
function OnChangeYearDropDown(objYearDrp , strTextBoxName)
{
	var nMonth = LastRequestedMonth;
	var nYear = GetIntegerFromString( objYearDrp.value );
	GetDateInRange( nMonth , nYear, strTextBoxName);
}
function OnChangeMonthDropDown(objMonthDrp  , strTextBoxName)
{
	var nMonth = GetIntegerFromString( objMonthDrp.value );
	var nYear = LastRequestedYear;
	GetDateInRange( nMonth , nYear, strTextBoxName);
}
function GetNumberOfDaysInMonth( nMonth , nYear)
{
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
	if( nMonth == 2 ){return (((nYear%100!=0)&&(nYear%4==0))||(nYear%400==0))?29:28;}
	else{return dim[ nMonth - 1];}
}
function OpenDateFrame(objTxt)
{
	var strTxtID = objTxt.id;
	var strFrameID = strTxtID.replace("TxtDate" , "DateFrame");
	var strDivID = strTxtID.replace("TxtDate" , "DateDiv");
	var objFrame = document.getElementById(strFrameID); 
	var objDiv = document.getElementById(strDivID); 
	if( objDiv.style.display != "" )
	{
		objTxt.CurrentJsCalendar = new JsCalendar( strDivID , strFrameID , objTxt.name );
		objFrame.style.display = "";
		objDiv.style.display = "";
		objDiv.onmouseover = function(){ objTxt.PreventHidingCalendar = true; };
		objDiv.onmouseout = function(){  objTxt.PreventHidingCalendar = false;  };
	}
}
function CloseDateFrame(objTxt)
{
	window.status =objTxt.PreventHidingCalendar;
	if( objTxt.PreventHidingCalendar != true )
	{
		var strTxtID = objTxt.id;
		var strFrameID = strTxtID.replace("TxtDate" , "DateFrame");
		var strDivID = strTxtID.replace("TxtDate" , "DateDiv");
		var objFrame = document.getElementById(strFrameID); 
		objFrame.style.display = "none";
		var objDiv = document.getElementById(strDivID); 
		objDiv.style.display = "none";
		OnChangeDateTextBoxes( objTxt  );
		ValidateDates();
	}
}
function GetIntegerFromString(strText)
{
	switch( strText )
	{
		case "01":
			return 1;
		case "02":
			return 2;
		case "03":
			return 3;
		case "04":
			return 4;
		case "05":
			return 5;
		case "06":
			return 6;
		case "07":
			return 7;
		case "08":
			return 8;
		case "09":
			return 9;
		default:
			return parseInt( strText ); 
	}
}
function SetDateToTextBox(objTxt , objDate)
{
	objTxt.value = "" + (objDate.getMonth() + 1) + "/" + objDate.getDate() + "/" + objDate.getFullYear();
}
function GetDateFromString( strDate ) 
{
	var Portions = strDate.split("/");
	if( Portions.length == 3 ){return  new Date( GetIntegerFromString(Portions[2]) , GetIntegerFromString( Portions[0] ) - 1 , GetIntegerFromString(Portions[1]) );}
	else
	{
		Portions = strDate.split("-");
		if( Portions.length == 3 ){return  new Date( GetIntegerFromString(Portions[0]) , GetIntegerFromString( Portions[1] ) - 1 , GetIntegerFromString(Portions[2]) ) ;}
	}
	return null;
}
function OnChangeDateTextBoxes(objTxt)
{
	var objDrp = document.getElementsByName( NightsDropDownListCTRLName )[0];
	if( objTxt.name.indexOf(CheckInDateCTRLName) > -1 )
	{
		var CheckInDate  = GetDateFromString( document.getElementsByName( CheckInDateCTRLName + ":TxtDate" )[0].value  );
		if( CheckInDate != null )
		{
			try{objTxt.CurrentJsCalendar.Refresh();}catch(e){}
			var CheckOutDate  = CheckInDate; 
			CheckOutDate.setDate( CheckOutDate.getDate() + GetIntegerFromString( objDrp.value ) );   
			SetDateToTextBox( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0] , CheckOutDate );
		}
	}
	else
	{
		if( objTxt.name.indexOf(CheckOutDateCTRLName) > -1 )
		{
			var CheckOutDate  = GetDateFromString( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0].value  );
			if( CheckOutDate != null )
			{
				try{objTxt.CurrentJsCalendar.Refresh();}catch(e){}
				var CheckInDate = GetDateFromString( document.getElementsByName( CheckInDateCTRLName + ":TxtDate" )[0].value  );; 
				var nDiff = GetIntegerFromString( CheckOutDate - CheckInDate );
				nDiff = nDiff / 1000;
				nDiff = nDiff / 60;
				nDiff = nDiff / 60;
				nDiff = nDiff / 24;
				nDiff = parseInt( nDiff );
				var MaxDays = -1;
				for( i=0 ; i<objDrp.options.length ; i++){
					if( MaxDays <= -1 || GetIntegerFromString( objDrp.options[i].value ) > MaxDays ){MaxDays = GetIntegerFromString( objDrp.options[i].value );}
				}
				if( nDiff <= MaxDays && nDiff > 0){objDrp.value = nDiff;}
			}
		}
	}
}
function ValidateDates()
{
	var CheckInDate  = GetDateFromString( document.getElementsByName( CheckInDateCTRLName + ":TxtDate" )[0].value  );
	var CheckOutDate  = GetDateFromString( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0].value  );
	var MaxDays = -1;
	var i=0;
	var objDrp = document.getElementsByName( NightsDropDownListCTRLName )[0];
	for( i=0 ; i<objDrp.options.length ; i++)
	{
		if( MaxDays <= -1 || GetIntegerFromString( objDrp.options[i].value ) > MaxDays ){MaxDays = GetIntegerFromString( objDrp.options[i].value );}
	}	
	var nDiff = GetIntegerFromString( CheckOutDate - CheckInDate );
	nDiff = nDiff / 1000;
	nDiff = nDiff / 60;
	nDiff = nDiff / 60;
	nDiff = nDiff / 24;
	nDiff =parseInt( nDiff );
	if( nDiff < 1 )
	{
		var objCheckOutDate = CheckInDate;
		objCheckOutDate.setDate( objCheckOutDate.getDate() + GetIntegerFromString( objDrp.value ) );   
		SetDateToTextBox( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0] , objCheckOutDate );
	}
	else
	{
		if( nDiff > MaxDays )
		{
			var objCheckOutDate = CheckInDate;
			objCheckOutDate.setDate( objCheckOutDate.getDate() + MaxDays );   
			SetDateToTextBox( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0] , objCheckOutDate );
		}
	}
	CheckInDate  = GetDateFromString( document.getElementsByName( CheckInDateCTRLName + ":TxtDate" )[0].value  );
	CheckOutDate  = GetDateFromString( document.getElementsByName( CheckOutDateCTRLName + ":TxtDate" )[0].value  );
	nDiff = GetIntegerFromString( CheckOutDate - CheckInDate );
	nDiff = nDiff / 1000;
	nDiff = nDiff / 60;
	nDiff = nDiff / 60;
	nDiff = nDiff / 24;
	nDiff =parseInt( nDiff );
	objDrp.value = nDiff;
}
function OnChangeNightsDropDownList(objDrp , CheckInDateCTRL , CheckOutDateCTRL)
{
	var CheckInDate  = GetDateFromString( document.getElementsByName( CheckInDateCTRL + ":TxtDate" )[0].value  ); 		
	var objCheckOutDate = CheckInDate;
	objCheckOutDate.setDate( objCheckOutDate.getDate() + GetIntegerFromString( objDrp.value ) );   
	SetDateToTextBox( document.getElementsByName( CheckOutDateCTRL + ":TxtDate" )[0] , objCheckOutDate );
}
function JsCalendar(strDivID , strFrameID , strTxtBoxName)
{
	var CalendarDiv = document.getElementById( strDivID );
	var CalendarFrame = document.getElementById( strFrameID );
	var objTxt = document.getElementsByName( strTxtBoxName )[0];
	var strTextBoxName = strTxtBoxName;
	var SELF = this;
	Init();
	function Init()
	{
		var nMonth = GetIntegerFromString( objTxt.value.split("/")[0] );		
		var nDay = GetIntegerFromString( objTxt.value.split("/")[1] );		
		var nYear = GetIntegerFromString( objTxt.value.split("/")[2] );		
		GetCalendarHTML( nYear , nMonth , nDay );
	}
	this.ChangeDate = function( CurrentYear , CurrentMonth, CurrentDay )
	{
		GetCalendarHTML( CurrentYear , CurrentMonth, CurrentDay  );
	}
	this.Refresh = function()
	{
		try{Init();}catch(e){}
	}
	function GetCalendarHTML(CurrentYear , CurrentMonth, CurrentDay )
	{
		LastRequestedMonth = CurrentMonth;
		LastRequestedYear  = CurrentYear;
		var NextMonth = CurrentMonth  + 1;
		var NextYear = CurrentYear ;
		if( NextMonth > 12 )
		{
			NextMonth = 1;
			NextYear = CurrentYear + 1;
		}
		var PrevMonth  = CurrentMonth - 1;
		var PrevYear = CurrentYear;
		if( PrevMonth < 1 )
		{
			PrevMonth = 12;
			PrevYear = CurrentYear - 1;
		}
		var ArrMonthNames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];	
		var todaydate = new Date(); 
		var FirstDayNameInCurrentMonth = new Date( CurrentYear , CurrentMonth -1 , 1 ).getDay();
		var DaysInPreviousMonth = GetNumberOfDaysInMonth( PrevMonth , PrevYear );
		var DaysInCurrentMonth = GetNumberOfDaysInMonth( CurrentMonth , CurrentYear );

		var strTableHTML = "";
		strTableHTML += '<table classname="cells" class="cells">';
		strTableHTML += '<thead classname="caldayheading" class="caldayheading">';
		strTableHTML += '<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>';
		strTableHTML += '</thead>';
		strTableHTML += '<tr>';
		var i=0 ;
		var nCount = 1;
		var isLessThanOrEqualToday = false;
		var isWeekEnd = false;
		for(i=0 ; i<7 ;i++)
		{
			isLessThanOrEqualToday = false;
			if( i == 0 || i== 6 ){isWeekEnd = true;}
			else{isWeekEnd = false;}
			if( i < FirstDayNameInCurrentMonth )
			{
				//previous Month Days
				var nDay = DaysInPreviousMonth - ( FirstDayNameInCurrentMonth - i - 1 );
				if( (new Date( PrevYear , PrevMonth  -1 , nDay) - todaydate) < 1 ){isLessThanOrEqualToday = true;}

				if( isLessThanOrEqualToday ){strTableHTML += '	<td classname="noselect" class="noselect">'+  nDay  +'</td>';}
				else{strTableHTML += "	<td classname=\"notmnth\" class=\"notmnth\"  onclick=\"ReturnDay("+ PrevYear  +","+ PrevMonth +","+ nDay +",'" + strTextBoxName +"');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+  nDay  +"</td>";}
			}
			else
			{
				if( (new Date( CurrentYear  , CurrentMonth  -1 , nCount) - todaydate) < 1 ){isLessThanOrEqualToday = true;}
				if( isLessThanOrEqualToday ){strTableHTML += '	<td classname="noselect" class="noselect">'+  nCount  +'</td>';}
				else
				{
					if( isWeekEnd ){strTableHTML += "	<td classname=\"wkend\" class=\"wkend\"  onclick=\"ReturnDay("+ CurrentYear  +","+ CurrentMonth  +","+ nCount +" ,'" + strTextBoxName + "');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+  nCount  +"</td>";}
					else{strTableHTML += "	<td classname=\"wkday\" class=\"wkday\" onclick=\"ReturnDay("+ CurrentYear  +","+ CurrentMonth  +","+ nCount +",'" + strTextBoxName + "');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+  nCount  +"</td>";}
				}
				nCount++;
			}
		}	
		strTableHTML += '  </tr>';
		var isNewRow = true;
		var nWeekDaysCount = 0;
		while( nCount <= DaysInCurrentMonth )
		{
			isLessThanOrEqualToday = false;
			if( isNewRow )
			{
				strTableHTML += '<tr>';
				isNewRow  = false;
			}
			if( (new Date( CurrentYear  , CurrentMonth  -1 , nCount) - todaydate) < 1 ){isLessThanOrEqualToday = true;}
			if( nWeekDaysCount == 0 || nWeekDaysCount == 6 ){isWeekEnd = true;}else{isWeekEnd = false;}
			if( isLessThanOrEqualToday ){strTableHTML += '	<td classname="noselect" class="noselect">'+  nCount  +'</td>';}
			else
			{
				if( isWeekEnd ){strTableHTML += "	<td classname=\"wkend\" class=\"wkend\"   onclick=\"ReturnDay("+ CurrentYear  +","+ CurrentMonth  +","+ nCount +",'" + strTextBoxName +"');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+  nCount  +"</td>";}
				else{strTableHTML += "	<td classname=\"wkday\" class=\"wkday\"   onclick=\"ReturnDay("+ CurrentYear  +","+ CurrentMonth  +","+ nCount +",'"+ strTextBoxName +"');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+  nCount  +"</td>";}
			}
			nCount++;
			nWeekDaysCount++;
			if( nWeekDaysCount == 7 )
			{
				nWeekDaysCount = 0;
				strTableHTML += '</tr>';
				isNewRow = true;
			}
		}
		if( isNewRow == false )
		{
			i=0;
			var nNextMonthDay = 1;
			for(i=nWeekDaysCount ; i<7 ;i++)
			{
				var NextMonthDay1 = new Date( NextYear , NextMonth  -1 , 1);
				var OneYearLaterDay1 = new Date( todaydate.getFullYear() + 1 , todaydate.getMonth() - 1 , 1 );
				if( !( ( OneYearLaterDay1 - NextMonthDay1 ) < 1) ){strTableHTML += "<td classname=\"notmnth\" class=\"notmnth\"   onclick=\"ReturnDay("+ NextYear  +","+ NextMonth  +","+ nNextMonthDay +",'"+ strTextBoxName +"');\" onmouseover=\"OnMouseOverCell(this);\" onmouseout=\"OnMouseOutCell(this);\">"+ nNextMonthDay +"</td>";}
				else{strTableHTML += '<td classname="noselect" class="noselect">'+  nNextMonthDay  +'</td>';}
			nNextMonthDay++;
			}
			strTableHTML += '</tr>';
			isNewRow = true;	
		}
		var strHeaderHTML = "";
		strHeaderHTML += '<div classname="mainheading" class="mainheading">';
		if( !((new Date( PrevYear   , PrevMonth  -1 , DaysInPreviousMonth) - todaydate) < 1) ){strHeaderHTML += "<input title=\"Go to the previous month\" value=\"&lt;\" type=\"button\" onclick=\"ChangeCalender("+ PrevYear  +","+ PrevMonth +",1,'"+ strTextBoxName +"');\"/>";}
		i=0;
		strHeaderHTML += "<select id=\"MonthDrp\" onchange=\"OnChangeMonthDropDown(this,'"+ strTextBoxName +"');\">";
		for(i=0 ; i<12 ;i++)
		{
			var nMonth = i+1;
			strHeaderHTML += '<option value="'+ nMonth +'"';
			if( nMonth == CurrentMonth ){strHeaderHTML += ' Selected ';}
			strHeaderHTML += '>'+ ArrMonthNames[i] +'</option>';
		}	    
		strHeaderHTML += '</select>';
		var nMinYear = todaydate.getFullYear();
		var nMaxYear = nMinYear + 1;
		strHeaderHTML += "<select id=\"YearDrp\" onchange=\"OnChangeYearDropDown(this , '"+ strTextBoxName +"');\">";
		if( nMinYear == CurrentYear ){strHeaderHTML += '<option selected value="'+ nMinYear +'">'+ nMinYear +'</option>';}
		else{strHeaderHTML += '<option value="'+ nMinYear +'">'+ nMinYear +'</option>';}
		if( nMaxYear == CurrentYear ){strHeaderHTML += '<option selected value="'+ nMaxYear +'">'+ nMaxYear +'</option>';}
		else{strHeaderHTML += '<option value="'+ nMaxYear +'">'+ nMaxYear +'</option>';}
		strHeaderHTML += '</select>';	
		var Date1 = new Date( NextYear , NextMonth  -1 , 1);
		var Date2 = new Date( todaydate.getFullYear() + 1 , todaydate.getMonth() - 1 , 1 );
		if( !( ( Date2 - Date1 ) < 1) ){strHeaderHTML += "<input title=\"Go to the next month\" value=\"&gt;\" type=\"button\"  onclick=\"ChangeCalender("+ NextYear  +","+ NextMonth +",1,'"+ strTextBoxName +"');\">";}
		strHeaderHTML += '</div>';

		var strHTML = '<table classname="calendar" class="calendar" id="cal_calendar">';
		strHTML += '<tr><td>' + strHeaderHTML + '</td></tr>';
		strHTML += '<tr><td>' + strTableHTML + '</td></tr>';
		strHTML += '</table>';
		CalendarDiv.innerHTML = strHTML; 
		return strHTML; 
	}
}//end of function JsCalendar(strDivID , strFrameID)