/******* VARIABLE DECLARATION *********/

var DateCtrl;
var CalForm;
var sMinDate="Jan 01 1000";
var sMaxDate="Dec 31 9999";
var sExWeekDay=1;
var sHolidays;
var errorDisplay = "Date should be between Book Start-Date and Book End-Date";

var ns4 = ( document.layers ? true: false );
var ie4 = ( document.all ? true: false );



function DateIsOk(Dt)
{
	var S=new String(Dt);
	if (charOccurs(S,"/")!=2)
	{
		alert("Invalid date");
		return false;
	}
	else
	{
		var Sarr=S.split("/");
		if (Sarr[0]==""){ alert("Invalid day");		return false;	}
		if (Sarr[1]==""){ alert("Invalid month");	return false;	}
		if (Sarr[2]==""){ alert("Invalid year");	return false;	}
		var D=new Date(1,1,2000);
		D.setYear(Sarr[2]);	D.setMonth(eval(Sarr[1])-1);	D.setDate(Sarr[0]);	
		if (D.getDate()!=Sarr[0] || D.getMonth()+1!=Sarr[1] || D.getFullYear()!=Sarr[2])
		{
			alert("Invalid date format");
			return false;
		}
		return true;
	}
}

function DataIsValid(dataIn, type, dataOut)
{
	if (dataIn.value == "")	return false;
	if (type=="I" || type=="C")
	{
		if (isNaN(dataIn.value))	return false;
		if (type=="I")	dataOut.value=parseInt(dataIn.value);
		if (type=="C")	dataOut.value=parseFloat(dataIn.value);
	}
	if (type=="D")
	{
		if (!DateIsOk(dataIn.value))
			return false;
		else
			dataOut.value=dataIn.value;
	}
	return true;
}


/********** Main Function will be Call from any form ********/
function DisplayCalendar(CallingForm,DefDt)
{
	if (CallingForm)
	{
		CalForm=CallingForm;
		/*if (CalForm.MinDate)
			sMinDate=CalForm.MinDate.value;
		if (CalForm.MaxDate)
			sMaxDate=CalForm.MaxDate.value;
		if (CalForm.ExWeekDay)
			sExWeekDay=CalForm.ExWeekDay.value;
		if (CalForm.Holidays)
			sHolidays=CalForm.Holidays.value;*/
	}
	
	document.write(HTMLCalendar(DefDt));
	
}


function HTMLCalendar(dDt)
{
	
	var CD=new Date();

	if (new Date(sMaxDate)<CD) 
	{ 
		  CD=new Date(sMaxDate);
	}

	if ( isNaN(new Date(dDt)))
		var Dt=dDt;
	else
		var Dt=new Date(dDt);

	Dt.setHours(0);	
	Dt.setMinutes(0);	
	Dt.setSeconds(0);

	var MinDate=new Date(sMinDate);
	var MaxDate=new Date(sMaxDate);

	var nExcludedWeekDay=eval(sExWeekDay);
	
	var SD=new Date(1,1,1000);
	SD.setFullYear(Dt.getFullYear());
	SD.setMonth(Dt.getMonth());
	SD.setDate(Dt.getDate()-(Dt.getDate()-1));

	var D=new Date(1,1,2000);
	D.setFullYear(SD.getFullYear());
	D.setMonth(SD.getMonth());
	D.setDate(SD.getDate()-SD.getDay());

	var ED=new Date(1,1,2000);
	ED.setFullYear(SD.getFullYear());
	ED.setMonth(SD.getMonth()+1);
	ED.setDate(0);

	var Mon=CD.getMonth()+1;

	var DateVal=CD.getDate();

	//var curDate=(DateVal<10? "0"+DateVal: DateVal) + "/" + (Mon<10? "0"+Mon: Mon)+"/"+CD.getFullYear();
	var curDate= (Mon<10? "0"+Mon: Mon)+ "/" + (DateVal<10? "0"+DateVal: DateVal)+"/"+CD.getFullYear();
		
		
	var DateVal;
	var sHTML;
	sHTML="";

	var WeekDays="SuMoTuWeThFrSa";
	var MonthName="JanFebMarAprMayJunJulAugSepOctNovDec";
	
	sHTML=sHTML + "<Table Border=5 CellPadding=0 CellSpacing=0><TR><TD>";
	sHTML=sHTML + "<Table Border=0 CellPadding=0 CellSpacing=0 borderColorDark='#eeeecc' borderColorLight=LightYellow>";
	sHTML=sHTML+"<TR BgColor='#e5e3e3'>";
		sHTML=sHTML+"<TD Align=Center ColSpan=3>";
			sHTML=sHTML+"<A href='javascript:Month_Click(-1)'><Img Src='Include/ArrowLeft.gif' border=0></A>";
			sHTML=sHTML+"<Font Name='Arial,Verdana,Times' Size=2 Color=Red><B> " + MonthName.substring(Dt.getMonth()*3,(Dt.getMonth()+1)*3) + " </B></Font>";
			sHTML=sHTML+"<A href='javascript:Month_Click(1)'><Img Src='Include/ArrowRight.gif' border=0></A>";
		sHTML=sHTML+"</TD>";
		sHTML=sHTML+"<TD Align=Center ColSpan=4>";
			sHTML=sHTML+"<A href='javascript:Year_Click(-1)'><Img Src='Include/ArrowLeft.gif' border=0></A>";
			sHTML=sHTML+"<Font Name='Arial,Verdana,Times' Size=2 Color=Red><B> " + Dt.getFullYear() + " </B></Font>";
			sHTML=sHTML+"<A href='javascript:Year_Click(1)'><Img Src='Include/ArrowRight.gif' border=0></A>";
		sHTML=sHTML+"</TD>";
	sHTML=sHTML+"</TR>";
	sHTML=sHTML+"<TR BgColor='#e5e3e3'>";
	
	for (i=0; i<7; i++)
			sHTML=sHTML+"<TD Width=20 height=20> <Font Name='Arial,Verdana,Times' Size=2 Color=Red><B>&nbsp;" + WeekDays.substring(i*2,(i+1)*2) +"</B></Font></TD>";
			
	sHTML=sHTML+"</TR>";
	
	var F=true;

	for (y=0; y<6; y++)
	{
		sHTML=sHTML+"<TR BgColor='#e5e3e3'>";
		
				for (x=0; x<7; x++)
				{
					if ((D)>=(SD) && (D)<=(ED))
					{	
						DateVal=D.getDate();
						if (eval(DateVal)<10)	DateVal="&nbsp;&nbsp;"+DateVal;
						
						if ((D)==(CD)) //(D.getDate()==CD.getDate() && D.getMonth()==CD.getMonth() && D.getYear()==CD.getYear())
						{
							if ((D)>=(MinDate) && (D)<=(MaxDate) && (((x+1)!=Math.abs(nExcludedWeekDay)) ||  nExcludedWeekDay>0) )
								sHTML=sHTML+"<TD Align=Center BgColor=Black Width=20 height=20><A Style='text-decoration:none;' href='javascript:Date_Click("+D.getDate()+")'><Font Name='Arial,Verdana,Times' Size=2 Color=Lime><B>" + DateVal +"</B></Font></A></TD>";
							else
								sHTML=sHTML+"<TD Align=Center BgColor=Black Width=20 height=20><Font Name='Arial,Verdana,Times' Size=2 Color=Lime><B>" + DateVal +"</B></Font></TD>";
						}
						else
						if ( (x+1)==Math.abs(nExcludedWeekDay) )	// sunday
						{
							if ((D)>=(MinDate) && (D)<=(MaxDate))
							{
								if (nExcludedWeekDay>0)
									//sHTML=sHTML+"<TD OnMouseOver=\"dateOvr(this,'#eeeecc');\" OnMouseout=\"dateOut(this,'lightpink');\" Align=Center Width=20 height=20 BgColor=LightPink><A Style='text-decoration:none' href='javascript:Date_Click("+D.getDate()+")'><Font Name='Arial,Verdana,Times' Size=2 Color=Black><B>" + DateVal +"</B></Font></A></TD>";
									sHTML=sHTML+"<TD Align=Center Width=20 height=20 BgColor=LightPink><A Style='text-decoration:none' href='javascript:Date_Click("+D.getDate()+")'><Font Name='Arial,Verdana,Times' Size=2 Color=Black><B>" + DateVal +"</B></Font></A></TD>";
								else
									sHTML=sHTML+"<TD Align=Center Width=20 height=20 BgColor=LightPink><Font Name='Arial,Verdana,Times' Size=2 Color=Black><B>" + DateVal +"</B></Font></TD>";
							
							}
							else
							{
								sHTML=sHTML+"<TD Align=Center Width=20 height=20 BgColor=LightPink><Font Name='Arial,Verdana,Times' Size=2 Color=a9a9a9><B>" + DateVal +"</B></Font></TD>";
							}
						}
						else
						{
							if ((D)>=(MinDate) && (D)<=(MaxDate))
								//sHTML=sHTML+"<TD OnMouseOver=\"dateOvr(this,'#eeeecc');\" OnMouseout=\"dateOut(this,'Red');\" Align=Center Width=20 height=20><Font Name='Arial,Verdana,Times' Size=2 Color=Black><A href='javascript:Date_Click("+D.getDate()+")' Style='text-decoration:none;'>" + DateVal +"</A></Font></TD>";
								sHTML=sHTML+"<TD  Align=Center Width=20 height=20><Font Name='Arial,Verdana,Times' Size=2 Color=Black><A href='javascript:Date_Click("+D.getDate()+")' Style='text-decoration:none;'>" + DateVal +"</A></Font></TD>";
							else
								sHTML=sHTML+"<TD Align=Center Width=20 height=20><Font Name='Arial,Verdana,Times' Size=2 Color=a9a9a9>" + DateVal +"</Font></TD>";
						}
					}
					else
					{
						if ( (x+1)==Math.abs(nExcludedWeekDay) )
							sHTML=sHTML+"<TD BgColor=LightPink Width=20 height=20>&nbsp;</TD>";
						else
							sHTML=sHTML+"<TD  Width=20 height=20>&nbsp;</TD>";
					}
					D.setDate(D.getDate()+1);
				 }
			sHTML=sHTML+"</TR>";
		}
	    sHTML=sHTML+"<TR BgColor='#eeeecc'>";
		sHTML=sHTML+"<TD Align=Center ColSpan=4>";
			sHTML=sHTML+"<A href=\"javascript:CurDate_Click('" + curDate + "');\"><Font Name='Arial,Verdana,Times' Size=2 Color=DarkBlue><B>" + curDate + "</B></Font></A>";
		sHTML=sHTML+"</TD>";
		sHTML=sHTML+"<TD Align=Center ColSpan=3>";
			sHTML=sHTML+"<A Style='text-decoration:none;' href='javascript:Date_Click(-1)'><Font Name='Arial,Verdana,Times' Size=2 Color=Red><B>Cancel</B></Font></A>";
		sHTML=sHTML+"</TD>";
	    sHTML=sHTML+"</TR>";
	sHTML=sHTML+"</Table>";
	sHTML=sHTML+"</TD></TR></Table>";
	
	//Year_Click(1);
		
	return sHTML;
}
	

function Date_Click(DateVal)
{
	if (DateVal != -1)			// cancel clicked
	{
		var D=new Date(CalForm.txtDate.value);
		var Mon=D.getMonth()+1;
		//DateCtrl.value=(DateVal<10? "0"+DateVal: DateVal) + "/" + (Mon<10? "0"+Mon: Mon)+"/"+D.getFullYear();
		DateCtrl.value=  (Mon<10? "0"+Mon: Mon) + "/" + (DateVal<10? "0"+DateVal: DateVal) +"/"+D.getFullYear();
	}
	
	if (ns4)
		document.layers["MACSCal"].visibility="hidden";
	else
		{document.all["MACSCal"].style.visibility = "hidden";
		 document.all["CalFrm"].style.visibility ="hidden";}
}

function CurDate_Click(curDate)
{
	DateCtrl.value=curDate;
	if (ns4)
		document.layers["MACSCal"].visibility="hidden";
	else
		{document.all["MACSCal"].style.visibility = "hidden";
		 document.all["CalFrm"].style.visibility ="hidden";}
}

function Month_Click(Direction)
{
	var oldDt=new Date(CalForm.txtDate.value);
	var newDt=new Date(oldDt.getFullYear(),oldDt.getMonth()+Direction,oldDt.getDate());
	var SD=new Date(1,1,2000);
		SD.setFullYear(newDt.getFullYear());
		SD.setMonth(newDt.getMonth());
		SD.setDate(newDt.getDate()-(oldDt.getDate()-1));
	var ED=new Date(1,1,2000);
		ED.setFullYear(SD.getFullYear());
		ED.setMonth(SD.getMonth()+1);
		ED.setDate(0);
	var tmpDt;
	if (Direction>0)
		tmpDt=SD;
	else
		tmpDt=ED;
		
	var minDt=new Date(sMinDate);
	var maxDt=new Date(sMaxDate);

	CalForm.txtDate.value=formatDate(newDt);

	if (ns4)
	{
		document.layers["MACSCal"].document.write(HTMLCalendar(newDt));
		document.layers["MACSCal"].document.close();
	}
	else
	{
		document.all["MACSCal"].innerHTML=HTMLCalendar(newDt);
	}
}

function Year_Click(Direction)
{
	var oldDt=new Date(CalForm.txtDate.value);
	var newDt=new Date(oldDt.getFullYear()+Direction,oldDt.getMonth(),oldDt.getDate());
	var SD=new Date(1,1,2000);
		SD.setFullYear(newDt.getFullYear());
		SD.setMonth(newDt.getMonth());
		SD.setDate(newDt.getDate()-(oldDt.getDate()-1));
	var ED=new Date(1,1,2000);
		ED.setFullYear(SD.getFullYear());
		ED.setMonth(SD.getMonth()+1);
		ED.setDate(0);
	var tmpDt;
	if (Direction>0)
		tmpDt=SD;
	else
		tmpDt=ED;
	var minDt=new Date(sMinDate);
	var maxDt=new Date(sMaxDate);

	CalForm.txtDate.value=formatDate(newDt);
	Month_Click(0);
}

function formatDate(Dt)
{
	var MonthName="JanFebMarAprMayJunJulAugSepOctNovDec";
	var PDt=MonthName.substring(Dt.getMonth()*3,(Dt.getMonth()+1)*3) + " "+
			String((Dt.getDate()<10? "0"+Dt.getDate(): Dt.getDate()) + " " +
			String(Dt.getFullYear()) );
	return new String(PDt);
}