var winCal;
var dtToday=new Date();
var Cal;
var docCal;	
var exDateTime;//Existing Date and Time
var pDay='';
var pMonth='';
var pYear='';
//Configurable parameters

var WeekChar=3;

var ShowLongMonth=true;
var ShowMonthYear=true;//Show Month and Year in Calendar header.
var SundayColor="#6699FF";//Background color of Sunday.
var SaturdayColor="#CCCCFF";//Background color of Saturday.
var WeekDayColor="white";//Background color of weekdays.
var TodayColor="green";//Background color of today.
var SelDateColor="yellow";//Backgrond color of selected date in textbox.

function NewCal(pDay,pMonth,pYear){
	Cal=new CalendarCh(dtToday);
	exDateTime=document.getElementById(pDay).value;
	if(exDateTime!=""){
		var strMonth;
		var strDate;
		var strYear;
		var intMonth;
		var YearPattern=/^\d{4}$/;
		//parse month
		strDate=document.getElementById(pDay).value;
		strMonth=document.getElementById(pMonth).value;
		strYear=document.getElementById(pYear).value;
		
		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;
		if((parseInt(strDate,10)<=Cal.GetMonDaysCh()) && (parseInt(strDate,10)>=1))Cal.Date=strDate;
		if(YearPattern.test(strYear))Cal.Year=parseInt(strYear,10);
	}
	winCal=window.open("","DateTimePicker","location=no,toolbar=no,status=no,menubar=no,fullscreen=no,width=195,height=150,resizable=0,top=200,left=400");
	docCal=winCal.document;
	RenderCal(pDay,pMonth,pYear);
}
function RenderCal(pDay,pMonth,pYear){
	var vCalHeader;
	var vCalData;
	var vCalTime;
	var i;
	var j;
	var SelectStr;
	var vDayCount=0;
	var vFirstDay;
	
	docCal.open();
	docCal.writeln("<html><head><title>Calendar</title>");
	docCal.writeln("<script>var winMain=window.opener;</script>");
/* ganbox.com
 * 	docCal.writeln("<link type=\"text/css\" rel=\"stylesheet\" href=\"https://"+window.location.hostname+"/styles/calendar.css?foo="+Math.random()+"\" title=\"js\"/>");
 * 	*/
	docCal.writeln("<link type=\"text/css\" rel=\"stylesheet\" href=\"/styles/calendar.css?foo="+Math.random()+"\" title=\"js\"/>");
	docCal.writeln("</head><body><form name='Calendar'>");

	vCalHeader="<table border=\"1\" cellpadding=\"1\" cellspacing=\"0\" width='100%' align=\"center\" valign=\"top\" id=\"calendar\">\n";
	vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0><tr><td align='left'>\n";
	vCalHeader+="<select name=\"MonthSelector\" id=\"calendar_month_sel\" onChange=\"javascript:winMain.Cal.SwitchMth(this.selectedIndex);winMain.RenderCal('"+pDay+"','"+pMonth+"','"+pYear+"');\">\n";
	for (i=0;i<12;i++){
		if(i==Cal.Month){
			SelectStr="Selected";
		}else{
			SelectStr="";
		}
		vCalHeader+="<option "+SelectStr+" value >"+MonthName[i]+"\n";
	}
	vCalHeader+="</select></td>";
	//Year selector

	var CurentYear=dtToday.getFullYear();
	vCalHeader+="\n<td class=\"calendar_year_sel\">";
	if(Cal.Year > CurentYear)vCalHeader+="<a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal('"+pDay+"','"+pMonth+"','"+pYear+"')\">&lt;</a>";
	vCalHeader+="<span>"+Cal.Year+"</span>";
	if(Cal.Year <= CurentYear)vCalHeader+="<a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal('"+pDay+"','"+pMonth+"','"+pYear+"')\">&gt;</a>";
	vCalHeader+="</td></tr></table></td>\n</tr>";
	//Week day header
	vCalHeader+="<tr bgcolor=\"#FE9405\">";
	for (i=0;i<7;i++)
	{
		vCalHeader+="<td align='center'>"+WeekDayName[i].substr(0,WeekChar)+"</td>";
	}
	vCalHeader+="</tr>";	
	docCal.write(vCalHeader);
	
	//Calendar detail
	CalDate=new Date(Cal.Year,Cal.Month);
	CalDate.setDate(1);
	vFirstDay=CalDate.getDay();
	vCalData="<tr>";
	for(i=1;i<vFirstDay;i++){
		vCalData=vCalData+GenCell();
		vDayCount=vDayCount+1;
	}
	
	
	
	for(j=1;j<=Cal.GetMonDaysCh();j++){
		var strCell;
		vDayCount=vDayCount+1;
		if((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear())){
			strCell=GenCell(j,true,TodayColor,Cal.Month,Cal.Year,pDay,pMonth,pYear);//Highlight today's date
		}else{
			if (j==Cal.Date){
				strCell=GenCell(j,true,SelDateColor,Cal.Month,Cal.Year,pDay,pMonth,pYear);
			}else{	 
				if(vDayCount%7==0){
					strCell=GenCell(j,false,SundayColor,Cal.Month,Cal.Year,pDay,pMonth,pYear);
				}else if((vDayCount+1)%7==0){
					strCell=GenCell(j,false,SaturdayColor,Cal.Month,Cal.Year,pDay,pMonth,pYear);
				}else{
					strCell=GenCell(j,null,WeekDayColor,Cal.Month,Cal.Year,pDay,pMonth,pYear);
				}
			}	
		}		
		vCalData=vCalData+strCell;
		if((vDayCount%7==0)&&(j<Cal.GetMonDaysCh()))vCalData=vCalData+"</tr>\n<tr>";
	}
	
	
	docCal.writeln(vCalData);
	docCal.writeln("\n</table>");
	docCal.writeln("</form></body></html>");
	docCal.close();
}

function GenCell(pValue,pHighLight,pColor,clMonth,clYear,pDay,pMonth,pYear)//Generate table cell with value
{
	var PValue;
	var PCellStr;
	var vColor;
	var vHLstr1;//HighLight string
	var vHlstr2;
	var vTimeStr;
	
	if (pValue==null){
		PValue="";
	}else{
		PValue=pValue;
	}	
	if(pColor!=null){
		vColor="bgcolor=\""+pColor+"\"";
	}else{
		vColor="";
	}
	if((pHighLight!=null)&&(pHighLight)){
		{vHLstr1="color='red'><b>";vHLstr2="</b>";}
	}else{
		vHLstr1=">";vHLstr2="";	
	}
	
	clMonth=clMonth+1;
	
	PCellStr="<td width='20' "+vColor+" align='center'><font face='Arial' size='2'"+vHLstr1+"<a href=\"javascript:void(0);\" onclick=\"winMain.setValues("+PValue+","+clMonth+","+clYear+",'"+pDay+"','"+pMonth+"','"+pYear+"');window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>";
	return PCellStr;
}

function CalendarCh(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.MyWindow=winCal;
	this.Ctrl=pCtrl;;
}

function GetMonthIndex(shortMonthName){
	return shortMonthName;
}
CalendarCh.prototype.GetMonthIndex=GetMonthIndex;

function IncYear(){
	Cal.Year++;
}
CalendarCh.prototype.IncYear=IncYear;

function DecYear(){
	Cal.Year--;
}
CalendarCh.prototype.DecYear=DecYear;
	
function SwitchMth(intMth){
	Cal.Month=intMth;
}
CalendarCh.prototype.SwitchMth=SwitchMth;	

function GetMonthName(IsLong){
	var Month=MonthName[this.Month];
	if(IsLong){
		return Month;
	}else{
		return Month.substr(0,3);
	}
}
CalendarCh.prototype.GetMonthName=GetMonthName;

function GetMonDaysCh(){
	var DaysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];
	if(this.IsLeapYear()){
		DaysInMonth[1]=29;
	}
	return DaysInMonth[this.Month];	
}
CalendarCh.prototype.GetMonDaysCh=GetMonDaysCh;

function IsLeapYear(){
	if((this.Year%4)==0){
		if((this.Year%100==0) && (this.Year%400)!=0){
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}
CalendarCh.prototype.IsLeapYear=IsLeapYear;

function FormatDate(pDate){
	return(fixMonth(pDate));
	//return(this.Year+DateSeparator+fixMonth((this.Month+1))+DateSeparator+fixMonth(pDate));	
}
CalendarCh.prototype.FormatDate=FormatDate;
function fixMonth(month){
	if(month < 10)month="0"+month;
	return month;
}
function setValues(inDay,inMonth,inYear,pDay,pMonth,pYear){
	var dayBox=$(pDay);
	var monthBox=$(pMonth);
	var yearBox=$(pYear);
	var setDay=inDay-1;
	var setMonth=inMonth-1;
	
	var my_year=dtToday.getFullYear();
	var setYear=inYear-my_year;
	
	if(setDay < 32 && dayBox)dayBox.options[setDay].selected=true;
	if(setMonth < 13 && monthBox)monthBox.options[setMonth].selected=true;
	if(setYear < 3000 && yearBox)yearBox.options[setYear].selected=true;
	
}
CalendarCh.prototype.setValues=setValues;
