document.write("<div ID='calendardiv' style='visibility:hidden;position:absolute;left:0px;top:0px;' align='center'></div>");
var dtToday=new Date();
var Cal;
var MonthName=[	"January", "February", "March", "April", "May", "June","July", 
				"August", "September", "October", "November", "December"];

var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];	

var exDateTime;							//Existing Date and Time

//Configurable parameters
var WeekChar=1;							//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed.
var DateSeparator="-";					//Date Separator, you can change it to "/" if you want.
var TimeMode=24;						//default TimeMode value. 12 or 24

var SundayColor="#FFFFFF";				//Background color of Sunday.
var SundayFontColor="#990000";			//Background color of Sunday.
var SaturdayColor="#FFFFFF";			//Background color of Saturday.
var SaturdayFontColor="#990000";		//Background color of Saturday.
var WeekDayColor="#FFFFFF";				//Background color of weekdays.
var TodayColor="#FFFF00";				//Background color of today.
var TodayFontColor="#000000";			//Background color of today.
var SelDateColor="#003366";				//Backgrond color of selected date in textbox.
var SelDateFontColor="#FFFFFF";			//Backgrond color of selected date in textbox.
var YrSelColor="#000000";				//color of font of Year selector.


//end Global variable

function OpenCal(pCtrl,pFormat,pShowTime,pTimeMode,pTop,pLeft){

	Cal=new Calendar(dtToday, pCtrl);
	if ((pShowTime!=null) && (pShowTime))
	{
		Cal.ShowTime=true;
		if ((pTimeMode!=null) &&((pTimeMode=='12')||(pTimeMode=='24')))
			TimeMode=pTimeMode;
	}

	if (pFormat!=null)
		Cal.Format=pFormat.toUpperCase();
	
	exDateTime=pCtrl.value;
	if (exDateTime!="")				//Parse Date String
	{
		var Sp1;					//Index of Date Separator 1
		var Sp2;					//Index of Date Separator 2 
		var tSp1;					//Index of Time Separator 1
		var tSp1;					//Index of Time Separator 2
		var strMonth;
		var strDate;
		var strYear;
		var intMonth;
		var YearPattern;
		var strHour;
		var strMinute;
		var strSecond;

		//parse month
		Sp1=exDateTime.indexOf(DateSeparator,0)
		Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1));
		
		if ((Cal.Format.toUpperCase()=="DDMMYYYY") || (Cal.Format.toUpperCase()=="DDMMMYYYY")){
			strMonth=exDateTime.substring(Sp1+1,Sp2);
			strDate=exDateTime.substring(0,Sp1);
		} else if ((Cal.Format.toUpperCase()=="MMDDYYYY") || (Cal.Format.toUpperCase()=="MMMDDYYYY")){
			strMonth=exDateTime.substring(0,Sp1);
			strDate=exDateTime.substring(Sp1+1,Sp2);
		}

		if (isNaN(strMonth))
			intMonth=Cal.GetMonthIndex(strMonth);
		else
			intMonth=parseInt(strMonth,10)-1;	

		if ((parseInt(intMonth,10)>=0) && (parseInt(intMonth,10)<12))
			Cal.Month=intMonth;

		//parse Date
		if ((parseInt(strDate,10)<=Cal.GetMonDays()) && (parseInt(strDate,10)>=1))
			Cal.Date=strDate;

		//parse year
		strYear=exDateTime.substring(Sp2+1,Sp2+5);
		YearPattern=/^\d{4}$/;
		if (YearPattern.test(strYear))
			Cal.Year=parseInt(strYear,10);

		//parse time
		if (Cal.ShowTime==true){
			tSp1=exDateTime.indexOf(":",0)
			tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1));
			strHour=exDateTime.substring(tSp1,(tSp1)-2);
			Cal.SetHour(strHour);
			strMinute=exDateTime.substring(tSp1+1,tSp2);
			Cal.SetMinute(strMinute);
			strSecond=exDateTime.substring(tSp2+1,tSp2+3);
			Cal.SetSecond(strSecond);
		}	
	}

	RenderCal();

	if (typeof pTop != "undefined" && typeof pLeft != "undefined")
	{
		var pos = getAbsolutePos(Cal.Ctrl);
		document.getElementById('calendardiv').style.left = (pos.x + pLeft) + "px";
		document.getElementById('calendardiv').style.top = (pos.y + Cal.Ctrl.offsetHeight + pTop) + "px";
		document.getElementById('calendardiv').style.visibility = "visible";
	}
	else
	{
		var pos = getAbsolutePos(Cal.Ctrl);
		document.getElementById('calendardiv').style.left = pos.x + "px";
		document.getElementById('calendardiv').style.top = pos.y + Cal.Ctrl.offsetHeight + "px";
		document.getElementById('calendardiv').style.visibility = "visible";
	}
};


function getAbsolutePos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};


function CloseCal(){
	document.getElementById('calendardiv').style.visibility = "hidden";
};

function RenderCal(){
	var vCalHeader = "";
	var vCalData = "";
	var vCalTime;
	var i;
	var j;
	var SelectStr;
	var vDayCount=0;
	var vFirstDay;
	var HTMLDoc = "";

	vCalHeader  = "<table bgcolor='#000000' border='0' cellpadding='0' cellspacing='1' align='left' valign='top'>\n";

	//Month Selector
	vCalHeader += "<tr>\n";
	vCalHeader += "    <td bgcolor='#e1e1e1' align='right'>\n";
	vCalHeader += "        <a href='javascript:CloseCal()' style='text-decoration:none'>&times;&nbsp;</a>\n";
	vCalHeader += "    </td>\n";
	vCalHeader += "</tr>\n";
	vCalHeader += "<tr>\n";
	vCalHeader += "    <td>\n";
	vCalHeader += "        <table bgcolor='#FFFFFF' border='0' width='100%' cellpadding='3' cellspacing='0'>\n";
	vCalHeader += "        <tr>\n";
	vCalHeader += "            <td align='left'>\n";
	vCalHeader += "                <select name='MonthSelector' onChange='javascript:Cal.SwitchMth(this.selectedIndex);RenderCal();' class='cal_select'>\n";

	for (i=0;i<12;i++){

		if (i==Cal.Month)
			SelectStr="Selected ";
		else
			SelectStr="";	

		vCalHeader += "                 <option " + SelectStr + "value>" + MonthName[i] + "</option>\n";
	}
	vCalHeader += "                </select>\n";
	vCalHeader += "            </td>\n";

	//Year selector
	vCalHeader += "            <td align='right' nowrap>\n";
	vCalHeader += "                <a href='javascript:Cal.DecYear();RenderCal()'><b>&laquo</b></a>\n";
	vCalHeader += "                <font color='" + YrSelColor + "'>" + Cal.Year + "</font>\n";
	vCalHeader += "                <a href='javascript:Cal.IncYear();RenderCal()'><b>&raquo</b></a>\n";
	vCalHeader += "            </td>\n";
	vCalHeader += "        </tr>\n";
	vCalHeader += "        </table>\n";
	vCalHeader += "    </td>\n";
	vCalHeader += "</tr>\n";

	//Week day header
	vCalHeader += "<tr>";
	vCalHeader += "    <td>\n";
	vCalHeader += "        <table bgcolor='#003366' width='100%' border='0' cellpadding='1' cellspacing='0'>\n";
	vCalHeader += "        <tr>\n";
	for (i=0;i<7;i++){
		vCalHeader += "        <td align='center'>\n";
		vCalHeader += "            <font color='#FFFFFF'>" + WeekDayName[i].substr(0,WeekChar) + "</font>\n";
		vCalHeader += "        </td>";
	}
	vCalHeader += "        </tr>\n";
	vCalHeader += "        </table>\n";
	vCalHeader += "    </td>\n";
	vCalHeader+="</tr>";	


	HTMLDoc += vCalHeader;
	

	//Calendar detail
	CalDate=new Date(Cal.Year,Cal.Month);
	CalDate.setDate(1);
	vFirstDay=CalDate.getDay();

	vCalData += "<tr>";
	vCalData += "    <td>\n";
	vCalData += "        <table bgcolor='#FFFFFF' width='100%' border='0' cellpadding='0' cellspacing='4'>\n";
	vCalData += "        <tr>";

	for (i=0;i<vFirstDay;i++){
		vCalData += GenCell(null, null, "#FFFFFF");
		vDayCount++;
	}

	for (j=1 ;j<=Cal.GetMonDays(); j++){
		var strCell;
		vDayCount=vDayCount+1;

		if ((j==dtToday.getDate()) && (Cal.Month==dtToday.getMonth()) && (Cal.Year==dtToday.getFullYear()))
			strCell=GenCell(j,TodayFontColor,TodayColor,true);	//Highlight today's date
		else{
			if (j==Cal.Date)
				strCell=GenCell(j,SelDateFontColor,SelDateColor,true);
			else{	 
				if (vDayCount%7==0)
					strCell=GenCell(j,SaturdayFontColor,SaturdayColor,false);
				else if ((vDayCount+6)%7==0)
					strCell=GenCell(j,SundayFontColor,SundayColor,false);
				else
					strCell=GenCell(j,null,WeekDayColor);
			}		
		}						

		vCalData += strCell;

		if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
			vCalData += "</tr>\n<tr>";
	}


	vCalData += "        </table>\n";
	vCalData += "    </td>\n";
	vCalData += "</tr>";	
	HTMLDoc += vCalData;


	//Time picker
	if (Cal.ShowTime){
		var showHour;
		showHour=Cal.getShowHour();		
		vCalTime="<tr>\n<td colspan='7' align='center'>";
		vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:Cal.SetHour(this.value)\">";
		vCalTime+=" : ";
		vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:Cal.SetMinute(this.value)\">";
		vCalTime+=" : ";
		vCalTime+="<input type='text' name='second' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Seconds+" onchange=\"javascript:Cal.SetSecond(this.value)\">";
		if (TimeMode==12){
			var SelectAm =(parseInt(Cal.Hours,10)<12)? "Selected":"";
			var SelectPm =(parseInt(Cal.Hours,10)>=12)? "Selected":"";

			vCalTime+="<select name=\"ampm\" onchange=\"javascript:Cal.SetAmPm(this.options[this.selectedIndex].value);\">";
			vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>";
			vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>";
			vCalTime+="</select>";
		}	
		vCalTime+="\n</td>\n</tr>";


		HTMLDoc += vCalTime;

	}	

	HTMLDoc += "\n</table>";
	
	
	document.getElementById('calendardiv').innerHTML = HTMLDoc;
};

function GenCell(pValue,pFontColor,pColor,pBold){
	//Generate table cell with value
	var PCellStr;
	var bgColor;
	var vTimeStr;
	
	
	if (pColor!=null)
		bgColor = "bgcolor='" + pColor + "'";
	else
		bgColor = "";	

	if (Cal.ShowTime){
		vTimeStr += "Cal.Ctrl.value += ' '+"+"Cal.getShowHour()"+"+':'+"+"Cal.Minutes"+"+':'+"+"Cal.Seconds";
		if (TimeMode==12)
			vTimeStr+="+' '+ Cal.AMorPM";
	} else
		vTimeStr="";		

	if (pValue==null){
		PCellStr = "<td "+bgColor+" style='cursor:default;color:" + pFontColor + "'>\n";
		PCellStr += "&nbsp;\n";
	} else{
		PCellStr = "<td "+bgColor+" style='cursor:pointer;color:" + pFontColor + "' align='center' onclick=\"Cal.Ctrl.value='" + Cal.FormatDate(pValue) + "';" + vTimeStr + ";CloseCal();\">\n";
		
		if (pBold)
			PCellStr += "<b>" + pValue + "</b>\n";
		else
			PCellStr += pValue + "\n";
	}

	PCellStr += "</td>\n";

	return PCellStr;
};




//*********************************************************************************************************
//
// Calendar Object
//
//*********************************************************************************************************
function Calendar(pDate,pCtrl){
	//Properties
	this.Date=pDate.getDate();				//selected date
	this.Month=pDate.getMonth();			//selected month number
	this.Year=pDate.getFullYear();			//selected year in 4 digits
	this.Hours=pDate.getHours();	
	
	if (pDate.getMinutes()<10)
		this.Minutes="0"+pDate.getMinutes();
	else
		this.Minutes=pDate.getMinutes();
	
	if (pDate.getSeconds()<10)
		this.Seconds="0"+pDate.getSeconds();
	else		
		this.Seconds=pDate.getSeconds();
		
	this.Ctrl=pCtrl;
	this.Format="ddMMyyyy";
	this.Separator=DateSeparator;
	this.ShowTime=false;
	if (pDate.getHours()<12)
		this.AMorPM="AM";
	else
		this.AMorPM="PM";	
};

Calendar.prototype.GetMonthIndex = function(shortMonthName){
	for (i=0;i<12;i++)
	{
		if (MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase())
			return i;
	}
};


Calendar.prototype.IncYear = function(){
	Cal.Year++;
};


Calendar.prototype.DecYear = function(){
	Cal.Year--;
};

	
Calendar.prototype.SwitchMth = function(intMth){
	Cal.Month=intMth;
};


Calendar.prototype.SetHour = function(intHour){	
	var MaxHour;
	var MinHour;
	if (TimeMode==24){
		MaxHour=23;
		MinHour=0;
	} else if (TimeMode==12){
		MaxHour=12;
		MinHour=1;
	} else
		alert("TimeMode can only be 12 or 24");		

	var HourExp=new RegExp("^\\d\\d$");
	if (HourExp.test(intHour) && (parseInt(intHour,10)<=MaxHour) && (parseInt(intHour,10)>=MinHour))
	{	
		if ((TimeMode==12) && (Cal.AMorPM=="PM"))
		{
			if (parseInt(intHour,10)==12)
				Cal.Hours=12;
			else	
				Cal.Hours=parseInt(intHour,10)+12;
		} else if ((TimeMode==12) && (Cal.AMorPM=="AM")){
			if (intHour==12)
				intHour-=12;

			Cal.Hours=parseInt(intHour,10);
		} else if (TimeMode==24)
			Cal.Hours=parseInt(intHour,10);	
	}
};


Calendar.prototype.SetMinute = function(intMin){
	var MinExp=new RegExp("^\\d\\d$");
	if (MinExp.test(intMin) && (intMin<60))
		Cal.Minutes=intMin;
};


Calendar.prototype.SetSecond = function(intSec){	
	var SecExp=new RegExp("^\\d\\d$");
	if (SecExp.test(intSec) && (intSec<60))
		Cal.Seconds=intSec;
};


Calendar.prototype.SetAmPm = function(pvalue){
	this.AMorPM=pvalue;
	if (pvalue=="PM"){
		this.Hours=(parseInt(this.Hours,10))+12;
		if (this.Hours==24)
			this.Hours=12;
	} else if (pvalue=="AM")
		this.Hours-=12;	
};


Calendar.prototype.getShowHour = function()
{
	var finalHour;
    if (TimeMode==12){
    	
    	if (parseInt(this.Hours,10)==0){
			this.AMorPM="AM";
			finalHour=parseInt(this.Hours,10)+12;	
		} else if (parseInt(this.Hours,10)==12) {
			this.AMorPM="PM";
			finalHour=12;
		} else if (this.Hours>12){
			this.AMorPM="PM";
			
			if ((this.Hours-12)<10)
				finalHour="0"+((parseInt(this.Hours,10))-12);
			else
				finalHour=parseInt(this.Hours,10)-12;	
		} else {
			this.AMorPM="AM";
			
			if (this.Hours<10)
				finalHour="0"+parseInt(this.Hours,10);
			else
				finalHour=this.Hours;	
		}
	} else if (TimeMode==24){
		if (this.Hours<10)
			finalHour="0"+parseInt(this.Hours,10);
		else	
			finalHour=this.Hours;
	}	

	return finalHour;
};


Calendar.prototype.GetMonthName = function(IsLong){
	var Month=MonthName[this.Month];
	if (IsLong)
		return Month;
	else
		return Month.substr(0,3);
};


Calendar.prototype.GetMonDays = function(){
	//Get number of days in a month
	var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (this.IsLeapYear())
		DaysInMonth[1]=29;

	return DaysInMonth[this.Month];	
};


Calendar.prototype.IsLeapYear = function(){
	if ((this.Year%4)==0) {
		if ((this.Year%100==0) && (this.Year%400)!=0)
			return false;
		else
			return true;
	} else
		return false;
};


Calendar.prototype.FormatDate = function(pDate){

	if (this.Format.toUpperCase()=="DDMMYYYY")
		return (pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="DDMMMYYYY")
		return (pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="MMDDYYYY")
		return ((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="MMMDDYYYY")
		return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);			
};

//*********************************************************************************************************

function submitCheck() {

	if (document.frmName.CALSTART.value.replace(/\s+/i,"")=="Start date") {
		 alert("Please pick a start date");
		 document.frmName.CALSTART.focus();
		 return false;
	}
	}