
//Routines that involve the dynamic building/accessing data from the calendar are written in JScript
//Initialize variables
var curYear = "";
var curMonth = "";
var curDayCell = -1;
var HiLiteCell = -1;
//var arymonths = new Array('1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月');
var arymonths;
var aryyears = new Array();
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31);
//var arydays = new Array('日', '一', '二', '三', '四', '五', '六');
var arydays;
var strToday;
var strYear;
var cDayCell;
var cDayNum;
var cDayCap;
var gblnShowCal=true;
var gblnShowCboCal=true;
var gblnShowBtnToday=true;
var gstrCal_FORMAT='1';
var gstrCal_TYPE='null';
var gstrevent_OncboMonthClick='Y';
var gstrRtn_TYPE='1';	//1-YYYY/MM/DD 2-YYYY/MM

var gstrCalSaturdayColor = 'null';
var gstrCalSundayColor = 'null';

var myMonth;
var myDay;
var mblnSetDate;
mblnSetDate=false;

var nowdate;

var intYearSelectionType;
var strYearSelectStartToEnd;
	
//==function 前一個月份的按鈕
function prev_click(){
	myNewMonth = parseInt(curMonth)-1;
	if( myNewMonth <= 0){
		myNewMonth = 12;
		curYear=parseInt(curYear)-1;
	}
	curMonth=myNewMonth;
	DrawCalendar();
}

//==function 下一個月份的按鈕
function next_click(){
	myNewMonth = parseInt(curMonth)+1;
	if( myNewMonth >= 13){
		myNewMonth = 1;
		curYear=parseInt(curYear)+1;
	}
	curMonth=myNewMonth;
	DrawCalendar();
}

//==function 是否為其他月份或年份 是的話要把一些預設值還原
//'Routines that involve checking valid dates are written in VBScript.
function NewMonth(inDate){
	thisMonth = datePart("m",inDate,"","");
	myMonth = datePart("m",inDate,"","");
	thisYear = datePart("yyyy",inDate,"","");
	var blnNewMonth = true;
	if (curYear == thisYear){
		if( curMonth = thisMonth){
			blnNewMonth = false;}
		else{			
			curYear = thisYear;
			curMonth = thisMonth;
			curDayCell = -1;
			HiLiteCell = -1;
		}
	}
	else{
		curYear = thisYear
		curMonth = thisMonth
		curDayCell = -1
		HiLiteCell = -1
	}
	return blnNewMonth;
	}

//==function 取得這個月第一天的weekday
function __ATGetStartDay(){
	return datePart("w",curYear + "/" + curMonth + "/1","","")+1;
}

//==function 
//function public_SetMonth(inDate){
//	if( isDate(inDate)){
//		if( NewMonth(inDate)){
//			DrawCalendar();
//		}
//	else{
//		//'msgbox "Invalid Date!", 0, "Dynamic Month Calendar"
//		//alert("Invalid Date!");
//	}
//	}
//}

//==function
//function public_SetValue(inDate){
//	if(isDate(inDate)){
//		HiLiteDay();}
//	else{
//		//'msgbox "Invalid Date!", 0, "Dynamic Month Calendar"
//	}
//}


//==function
function __ATSetCalendar(){
    //if(!mblnSetDate){
    //alert(__ATDateTextBox.getAttribute("DefaultDate"));
    //If establish " DefaulteDate " establishes " DedefaulteDate ", does not establish " Today " 
    var strSetDay="";
    //set default day by TextBox Value
    if(__ATDateTextBox.getAttribute("EnableSetByTextboxValue")!=null){
    	if(__ATDateTextBox.getAttribute("EnableSetByTextboxValue")=="True"){
    		strSetDay = __ATDateTextBox.value;
    	}	
    }
    
    if(strSetDay.length==0){
    	if(__ATDateTextBox.getAttribute("DefaultDate")==null){
      	strSetDay = __ATCalendarWin.getAttribute("_ATToday");
    	}
  		else{
  			strSetDay = __ATDateTextBox.getAttribute("DefaultDate");
  		}
  	}
  	
  	__ATSetDay(__ATConvertDateString(strSetDay,0), "");
    mblnSetDate = true;
    //}
}

//==
//function public_Clear(){
//	if( isDate(curMonth & "/" & curYear)){
//		DrawCalendar();
//	}
//}


//==
function btnToday_OnClcik(){
	__ATSetDay( __ATCalendarWin._ATToday, "");
	nowdate=__ATCalendarWin._ATToday;
	__ATDateTextBox.value = __ATCalendarWin.getAttribute("_ATToday");
	
	if(document.addEventListener){
		var evt = document.createEvent("Events");
		evt.initEvent("change", true, true);
		__ATDateTextBox.dispatchEvent(evt);
	}
	else{
	 	__ATDateTextBox.fireEvent("onchange");
	}
}

//==
function __ATSetDay(inDate, inCaption){
	if(isDate(inDate)){
		if(NewMonth(inDate)){
			DrawCalendar();
		}
		//為了配合每個小月曆都可能有不同的DateType，所以每次都要重畫
		DrawCalendar();

		if(!gblnShowCal)return;

		thisDay = datePart("d",inDate,"","");
		var strStartDay = __ATGetStartDay()
		setCell =  strStartDay - 1 + (thisDay - 1);

		if(curDayCell == -1){
			curDayCell = setCell;
			HiLiteDay();
		}
    else{
			curDayCell = setCell;
			HiLiteDay();
		}
		
		SetDayCaption(setCell, inCaption);
	}
}


//function public_SetCalander(blnShowCal){
//	if(typeof(blnShowCal)=='boolean') gblnShowCal=blnShowCal;
//}
//function public_SetCboCal(blnShowCboCal){
//	if(typeof(blnShowCboCal)=='boolean') gblnShowCboCal=blnShowCboCal;
//}
//function public_SetBtnToday(blnShowBtnToday){
//	if(typeof(blnShowBtnToday)=='boolean') gblnShowBtnToday=blnShowBtnToday;
//}
//
//function public_SetCal_FORMAT(strCal_FORMAT){
//	if(typeof(strCal_FORMAT)=='string') gstrCal_FORMAT=strCal_FORMAT;
//}
//
//function public_get_Cal_FORMAT(){
//	return gstrCal_FORMAT;
//}

//function public_SetCal_TYPE(strCal_TYPE){
//	if(typeof(strCal_TYPE)=='string') gstrCal_TYPE=strCal_TYPE;
//}
//
//function public_get_Cal_TYPE(){
//	return gstrCal_TYPE;
//}


//function public_Setevent_OncboMonthClick(str){
//	if(typeof(str)=='string') gstrevent_OncboMonthClick=str;
//}
//
//function public_SetRTN_TYPE(str){
//	if(typeof(str)=='string') gstrRtn_TYPE=str;
//}
//
//function public_get_RTN_TYPE(){
//	return gstrRtn_TYPE;
//}
//
//function public_get_ISCboMonthON(){
//	return gstrevent_OncboMonthClick;
//}
//
//function public_get_Month(){
//	return curMonth;
//}
//
//function public_get_Year(){
//		return curYear;
//}

//function getdate(){
//  	window.external.raiseEvent("event_OnCalDayClick", nowdate);
//}

//function public_get_Day(){
//	if (curDayCell == -1)
//		return "";
//	else
//		return cDayNum(curDayCell).innerText;
//}

function SetDayCaption(iCell, sCaption){
	//cDayCap(iCell).innerText = sCaption;
	cDayCap.item(iCell).innerText = sCaption;
}

//function public_get_DayCaption(){
//	if (curDayCell == -1)
//		return "";
//	else
//		return cDayCap(curDayCell).innerText;
//}

function getDays() {
	// Test for leap year when February is selected.
	if (2 == curMonth)
	   	return ((0 == curYear % 4) && (0 != (curYear % 100))) ||
			  (0 == curYear % 400) ? 29 : 28;
	else
		return daysInMonth[curMonth - 1];
}

//function public_get_EndDay(intYear,intMonth) {
//	// Test for leap year when February is selected.
//	if (2 == intMonth)
//	   	return ((0 == intYear % 4) && (0 != (intYear % 100))) ||
//			  (0 == intYear % 400) ? 29 : 28;
//	else
//		return daysInMonth[intMonth - 1];
//}

function DrawCalendar(){

  if (document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectType")!=null)
  {
    if(document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectType")==1)
    {intYearSelectionType=1;}
    else
    {intYearSelectionType=0;}
  }

	//if(__ATDateTextBox.DateType!=null)gstrCal_TYPE = __ATDateTextBox.DateType.replace("_","");
	if(__ATDateTextBox.getAttribute("DateType")!=null)gstrCal_TYPE = __ATDateTextBox.getAttribute("DateType").replace("_","");
	if(gstrCal_TYPE=='null' || gstrCal_TYPE.length==0){
		gstrCal_TYPE=document.getElementsByName("GSSintDateType").item(0).value;
	}

	if(__ATDateTextBox.getAttribute("CalSaturdayColor")!=null){
		gstrCalSaturdayColor = __ATDateTextBox.getAttribute("CalSaturdayColor");}
	else{
		gstrCalSaturdayColor=document.getElementsByName("GSSCalSaturdayColor").item(0).value;
	}

	if(__ATDateTextBox.getAttribute("CalSundayColor")!=null){
		gstrCalSundayColor = __ATDateTextBox.getAttribute("CalSundayColor");}
	else{
		gstrCalSundayColor=document.getElementsByName("GSSCalSundayColor").item(0).value;
	}


	var t='';
	var strShowYear;
	var strCal_TYPE;
	var strColor;

	if((gstrCal_TYPE=='')||(gstrCal_TYPE=='0')||(gstrCal_TYPE=='3')||(gstrCal_TYPE=='8')||(gstrCal_TYPE=='13')||(gstrCal_TYPE=='19')){
		strCal_TYPE='1';}
	else{
    strCal_TYPE='2';}
 
	if(strCal_TYPE=='1'){
		strShowYear=curYear;}
	else{
		strShowYear=curYear-1911;
		if(strShowYear.toString().length==2) strShowYear='0'+ strShowYear.toString();
		if(strShowYear.toString().length==1) strShowYear='00'+ strShowYear.toString();}
	
	if(gblnShowCal){

		t = t + "<table border=0 width='100%' height='10%' cellspacing=0 cellpadding=0><tr>";
		
		//LIGHTGREY
		t = t + "<td width='100%'><table border=0 width='100%'  height='10%' bgcolor='#6699cc' cellspacing=0 cellpadding=0 style='BORDER-BOTTOM: 1px darkgray solid;BORDER-TOP: darkgray solid thin; BORDER-LEFT: darkgray solid thin; BORDER-RIGHT: darkgray solid thin'><tr>";
	 	t = t + "<td width=10 align='left'><font face='Trebuchet MS' color='white'><strong><DIV ID=prev STYLE='cursor:pointer;cursor:hand'>&lt;&lt;</DIV></strong></font></td>";
		t = t + "<td id='DynaCal_Title' align='center'><font id='DynaCal_Title_Font' face='Trebuchet MS' color='white' style='font-size:12px;'>";
		t = t + strShowYear + strYear + " ";
		t = t + " ";
		t = t + arymonths[curMonth - 1];
	 	t = t + "</font></td>";
	     	t = t + "<td width=10 align='right'><font face='Trebuchet MS' color='white'><strong><DIV ID=next STYLE='cursor:pointer;cursor:hand'>&gt;&gt;</DIV></strong></font></td></tr></table></td></tr></table>";
	   	
		t = t + "<table border=0 cols=7 rows=7 width=100% height=10% cellspacing=0 cellpadding=0 style='BORDER-BOTTOM: darkgray solid thin; BORDER-LEFT: darkgray solid thin; BORDER-RIGHT: darkgray solid thin'>";
		
		//Write out column headers Sun, Mon, ... Sat
		t = t + "<tr>";
		for (icol=0; icol<7; icol++){
			t = t + "<td id='DynaCal_Weekday' width=14.25% height=10% align=center  valign=center STYLE='font-size:12px;border:gray 0px solid;' class=DayHeading style='font-family: Trebuchet MS; font-size: 10pt; Background: #e0e0e0'><b id='DynaCal_Weekday'>" + arydays[icol] + "</b></td>";
		}
		t = t + "</tr>";
		
		//Build grid for calendar days
		var firstcell = __ATGetStartDay() - 1;
		var lastday = getDays();
		iDay = 1;
		icol = 0; irow = 0;
		sDayNum = "";
		t = t + "<tr height=5% STYLE='cursor:pointer;cursor:hand'>";
		for (x=0; x<42; x++){
			if (x < firstcell)
				sDayNum = "";
			else if (iDay > lastday)
				sDayNum = "";
			else {
				sDayNum = iDay;
				iDay++;
			}
			
			if(icol==6){
				strColor=gstrCalSaturdayColor;}
			else if(icol==0){
				strColor=gstrCalSundayColor;}
			else{
				strColor="black";}

			t = t + "<td id='DayCell' name='DayCell' align=center width=14.25%  STYLE='border:gray 0px solid;font-family:Verdana;font-size:10px;background:white;color:"+strColor+"'><span id=DayNum name=DayNum>" + sDayNum + "</span><br>";
			t = t + "<span id='DayCap' name='DayCap'> </span></td>";
			icol++;
			if (icol == 7){
				icol = 0;
				t = t + "</tr>";
				irow++;
				if (irow == 6)
					break;
				else
					t = t + "<tr height=16.5% STYLE='cursor:pointer;cursor:hand'>";
			}
		}
		t = t + "</table>";
	}
	else{
		t = t + "<CENTER id='DynaCal_Line' style='BORDER-BOTTOM: darkgray solid thin; BORDER-LEFT: darkgray solid thin; BORDER-RIGHT: darkgray solid thin;'></CENTER>"
		
	}
	
	//year textbox ans month combobox html
	if(gblnShowCboCal){
		t = t + "<CENTER id='DynaCal_Year' style='BORDER-BOTTOM: darkgray solid thin; BORDER-LEFT: darkgray solid thin; BORDER-RIGHT: darkgray solid thin;'>";
    if (intYearSelectionType == 1)
    {
		  t = t + "<SELECT id=DynaCal_cboYEAR name=DynaCal_cboYEAR STYLE='border-color:Black;border-width:1px;border-style:solid;width:60px;font-size:12px;' visible=true value=" + curYear + " onchange=\"JavaScript:CtlcboYearVal();\"></SELECT>";
		  t = t + "<SELECT id=DynaCal_cboMonth name=DynaCal_cboMonth STYLE='border-color:Black;border-width:1px;border-style:solid;width:60px;font-size:12px;' value=" + curMonth + " onchange=\"JavaScript:CtlcboYearVal();\"></SELECT>";
		
    }
    else
    {		
		  t = t + "<INPUT style='font-size:12px;border-color:Black;border-width:1px;border-style:solid;width:15px;' TYPE='BUTTON' VALUE='-' onclick=\"JavaScript:CtltxtYearVal(-1);\">";
		  t = t + " <INPUT id='DynaCal_txtYEAR' TYPE='TEXT' style='border-color:Black;border-width:1px;border-style:Solid;height:20px;width:40px;text-align:right;' size=4 name='DynaCal_txtYEAR' value=" + strShowYear;
		  if(strCal_TYPE=='1') 
		    t = t + " maxlength=4";
		  else
		    t = t + " maxlength=3";
	    if (document.getElementById&&!document.all){
			 t = t + " onchange=\"JavaScript:CtltxtYearVal(0);\"  onkeypress=\"JavaScript:if ((event.which<48) || (event.which>57)) event.which='';\">";
		  }
		  else{
			 t = t + " onchange=\"JavaScript:CtltxtYearVal(0);\"  onkeypress=\"JavaScript:if ((window.event.keyCode<48) || (window.event.keyCode>57)) window.event.keyCode='';\">";
		  }
		  t = t + " <INPUT style='font-size:12px;border-color:Black;border-width:1px;border-style:solid;width:15px;' TYPE='BUTTON' VALUE='+' onclick=\"JavaScript:CtltxtYearVal(1);\"> ";
    
		t = t + "<SELECT id=DynaCal_cboMonth name=DynaCal_cboMonth STYLE='border-color:Black;border-width:1px;border-style:solid;width:60px;font-size:12px;' value=" + curMonth + " onchange=\"JavaScript:CtltxtYearVal(0);\"></SELECT>";
		}
		//if(!gblnShowCal) t = t + " <input type='button' name='btnOK' value='Go' style='font-size:9px;' onclick=\"window.external.raiseEvent('event_OncboMonthClick',getDays());\">";

		t = t + "</CENTER>";
	}
	
	//today button html
	if(gblnShowBtnToday){
		t = t + "<CENTER id=DynaCal_btnToday style='BORDER-BOTTOM: darkgray solid thin; BORDER-LEFT: darkgray solid thin; BORDER-RIGHT: darkgray solid thin;'>"
		//t = t + "<BUTTON id='btnToday' style='width=50%;font-size:12px;cursor:pointer;cursor:hand'>今天</BUTTON></CENTER>"
		t = t + "<input id='btnToday' type='button' style='border-color:Black;border-width:1px;border-style:solid;width:50px;font-size:12px;cursor:pointer;cursor:hand' value='" + strToday + "' /></CENTER>"
	}

	__ATCalendarWin.innerHTML = '';
	__ATCalendarWin.innerHTML = t;
	//alert(t);
	if(gblnShowCboCal) 
	{
	 CreateMonthOptions();
	 if (intYearSelectionType == 1)
	   CreateYearOptions();
	}
	//Assign collections

//	cDayCell = document.all.item("DayCell");
//	cDayNum = document.all.item("DayNum");
//	cDayCap = document.all.item("DayCap");
	cDayCell = document.getElementsByName("DayCell");
	cDayNum = document.getElementsByName("DayNum");
	cDayCap = document.getElementsByName("DayCap");
	
}

function CreateMonthOptions(){
	var intcboMonth='';
	for (var i=0; i<arymonths.length; i++){
		var newitem = document.createElement("OPTION");
		newitem.text = arymonths[i];
		intcboMonth=parseInt(i)+parseInt(1)
		newitem.value = intcboMonth;
		document.getElementById("DynaCal_cboMonth").options.add(newitem);
		//document.all.DynaCal_cboMonth.options.add(newitem);
	}
	document.getElementById("DynaCal_cboMonth").value=curMonth;
	//document.all.DynaCal_cboMonth.value=curMonth
}

function CreateYearOptions(){
  var strOptionYears,strOptionYearsStart=1900,strOptionYearsEnd=2200;
  var blnCurYear=false;
//  if(document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectStartToEnd")!=null)
//  {
//    strOptionYearsStart = document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectStartToEnd").split("~")[0]
//    strOptionYearsEnd = document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectStartToEnd").split("~")[1]
//  }
  if (document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectStartToEnd")!=null)
  {strYearSelectStartToEnd = document.getElementById(__ATDateTextBox.parentElement.id).getAttribute("YearSelectStartToEnd")}
  if(strYearSelectStartToEnd!=null)
  {
    strOptionYearsStart = strYearSelectStartToEnd.split("~")[0]
    strOptionYearsEnd = strYearSelectStartToEnd.split("~")[1]
  }
if((parseInt(strOptionYearsStart) < curYear) && (curYear <= parseInt(strOptionYearsEnd)))
  {blnCurYear=true;}
  
	var intcboYearh='';
	for (var yearnum=0;yearnum < (parseInt(strOptionYearsEnd) - parseInt(strOptionYearsStart)+1);yearnum++)
	{
	   aryyears[yearnum] = parseInt(strOptionYearsStart) + yearnum ;
	}
	for (var i=0; i<aryyears.length; i++){
		var newitem = document.createElement("OPTION");
		//convert year disply mode
		if((gstrCal_TYPE=='')||(gstrCal_TYPE=='0')||(gstrCal_TYPE=='3')||(gstrCal_TYPE=='8')||(gstrCal_TYPE=='13')||(gstrCal_TYPE=='19'))
    {strCal_TYPE='1';}
    else
    {strCal_TYPE='2';}
     
    if(strCal_TYPE=='1')
    {strOptionYears=parseInt(aryyears[i]);}
    else
    {
		  strOptionYears=parseInt(aryyears[i])-1911;
		  if(strOptionYears.toString().length==2) strOptionYears='0'+ strOptionYears.toString();
		  if(strOptionYears.toString().length==1) strOptionYears='00'+ strOptionYears.toString(); 
    }
		newitem.text = strOptionYears;
		intcboYearh=parseInt(aryyears[i])
		newitem.value = intcboYearh;
		document.getElementById("DynaCal_cboYear").options.add(newitem);
	}
	if(blnCurYear)
	{document.getElementById("DynaCal_cboYear").value=curYear;}
	else
	{document.getElementById("DynaCal_cboYear").value=parseInt(strOptionYearsStart);}
	//document.all.DynaCal_cboMonth.value=curMonth
}
function CtltxtYearVal(intAddYear){
	var intYear;
	if((gstrCal_TYPE=='')||(gstrCal_TYPE=='0')||(gstrCal_TYPE=='3')||(gstrCal_TYPE=='8')||(gstrCal_TYPE=='13')||(gstrCal_TYPE=='19')){ //YYYY
		intYear=parseInt(document.all.DynaCal_txtYEAR.value)+intAddYear
		if(intYear<0) intYear=0;
		document.all.DynaCal_txtYEAR.value=intYear;
	}
	else{
		for (var i=0;i<document.getElementById("DynaCal_txtYEAR").value.length;i++){
			if(document.getElementById("DynaCal_txtYEAR").value.substr(i,1).toString()!='0'){
				intYear=document.getElementById("DynaCal_txtYEAR").value.substr(i,document.getElementById("DynaCal_txtYEAR").value.length-i);
				break;}
			intYear=0;
		}
		intYear=parseInt(intYear)+intAddYear;
		if(intYear<0) intYear=0;
		document.getElementById("DynaCal_txtYEAR").value=intYear;
		if(document.getElementById("DynaCal_txtYEAR").value.length==2) document.getElementById("DynaCal_txtYEAR").value='0' + document.getElementById("DynaCal_txtYEAR").value;
		if(document.getElementById("DynaCal_txtYEAR").value.length==1) document.getElementById("DynaCal_txtYEAR").value='00' + document.getElementById("DynaCal_txtYEAR").value;
		intYear=intYear+1911
	}
	if(parseInt(intYear)>9999) intYear=9999;
	curYear = intYear;
	curMonth = document.getElementById("DynaCal_cboMonth").value;
	__ATHideCal=false; 
	if(gblnShowCal) DrawCalendar();
}

function CtlcboYearVal(){
	curYear = document.getElementById("DynaCal_cboYEAR").value;
	curMonth = document.getElementById("DynaCal_cboMonth").value;
	__ATHideCal=false; 
	if(gblnShowCal) DrawCalendar();
}

function HiLiteDay(){
	if (curDayCell != HiLiteCell){
		if (HiLiteCell != -1){
			//cDayCell(HiLiteCell).style.background = "white";
			cDayCell.item(HiLiteCell).style.background = "white";
		}
		HiLiteCell = curDayCell;
		
		//cDayCell(HiLiteCell).style.background = "LightGrey";
		cDayCell.item(HiLiteCell).style.background = "LightGrey";
	}
}

//當點選到日期上的cell
function CellClick(curcell){	
	if (cDayNum.item(curcell).innerHTML != ""){
		curDayCell = curcell;
		HiLiteDay();	

	    __ATDateTextBox.value=curYear + "/" + curMonth + "/" + (curDayCell-__ATGetStartDay()+2).toString();
	    __ATDateTextBox.setAttribute("DefaultDate",__ATDateTextBox.value,0)
	 
	   	if(document.addEventListener){
				var evt = document.createEvent("Events");
				evt.initEvent("change", true, true);
				__ATDateTextBox.dispatchEvent(evt);
			}
			else{
	    	__ATDateTextBox.fireEvent("onchange");
	  	}
			__ATHideCal=false;
	}
	else{
		__ATHideCal=true;
	}
}

function DayCellClick(event) {
	var objSpan;
	//define IE or FireFox
	if (event.target) {
		objSpan = event.target;
	} else {
		objSpan = event.srcElement;
	}
	
	if ("DayCell" == objSpan.id){
		for (i=0; i<42; i++)
			if (cDayCell.item(i) == objSpan){
				CellClick(i);
				break;
			}
	}
}
function DayNumClick(event) {
	
	var objSpan;
	//define IE or FireFox
	if (event.target) {
		objSpan = event.target;
	} else {
		objSpan = event.srcElement;
	}

	if ("DayNum" == objSpan.id){
		for (i=0; i<42; i++)
			if (cDayNum.item(i) == objSpan){
				CellClick(i);
				break;
			}
	}
}
function DayCapClick(event) {

	var objSpan;
	//define IE or FireFox
	if (event.target) {
		objSpan = event.target;
	} else {
		objSpan = event.srcElement;
	}
	
	if ("DayCap" == objSpan.id){
		for (i=0; i<42; i++)
			if (cDayCap(i) == objSpan){
				CellClick(i);
				break;
			}
	}
}

function CheckClick(event){
	
	var objSpanID;
	//define IE or FireFox
	if (event.target) {
		objSpanID = event.target.id;
	} else {
		objSpanID = event.srcElement.id;
	}

//Traps the click events for anything I care about.
	if ("DayCell" == objSpanID){
		DayCellClick(event);		
		return;
	}
	if ("DayNum" == objSpanID){
		DayNumClick(event);
		__ATHideCal=false;
		return;
	}
	if ("DayCap" == objSpanID){
		DayCapClick(event);
		__ATHideCal=false;
		return;
	}
	if ("btnToday" == objSpanID){
		btnToday_OnClcik();
		__ATHideCal=false;
		return;
	}
	if ("prev" == objSpanID){
		prev_click();
		__ATHideCal=true;
		return;
	}
	if ("next" == objSpanID){
		next_click();
		__ATHideCal=true;
		return;
	}
	if (objSpanID!=""){
		__ATHideCal=true;
		return;
	}
}


/*

Name: jsDate
Desc: VBScript native Date functions emulated for Javascript
	
*/

// used by dateAdd, dateDiff, datePart, weekdayName, and monthName
// note: less strict than VBScript's isDate, since JS allows invalid dates to overflow (e.g. Jan 32 transparently becomes Feb 1)
function isDate(p_Expression){
	return !isNaN(new Date(p_Expression));		// <<--- this needs checking
}


// REQUIRES: isDate()
function dateAdd(p_Interval, p_Number, p_Date){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	if(isNaN(p_Number)){return "invalid number: '" + p_Number + "'";}	

	p_Number = new Number(p_Number);
	var dt = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": {// year
			dt.setFullYear(dt.getFullYear() + p_Number);
			break;
		}
		case "q": {		// quarter
			dt.setMonth(dt.getMonth() + (p_Number*3));
			break;
		}
		case "m": {		// month
			dt.setMonth(dt.getMonth() + p_Number);
			break;
		}
		case "y":		// day of year
		case "d":		// day
		case "w": {		// weekday
			dt.setDate(dt.getDate() + p_Number);
			break;
		}
		case "ww": {	// week of year
			dt.setDate(dt.getDate() + (p_Number*7));
			break;
		}
		case "h": {		// hour
			dt.setHours(dt.getHours() + p_Number);
			break;
		}
		case "n": {		// minute
			dt.setMinutes(dt.getMinutes() + p_Number);
			break;
		}
		case "s": {		// second
			dt.setSeconds(dt.getSeconds() + p_Number);
			break;
		}
		case "ms": {		// second
			dt.setMilliseconds(dt.getMilliseconds() + p_Number);
			break;
		}
		default: {
			return "invalid interval: '" + p_Interval + "'";
		}
	}
	return dt;
}

// REQUIRES: isDate()
// NOT SUPPORTED: firstdayofweek and firstweekofyear (defaults for both)
function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear){
	if(!isDate(p_Date1)){return "invalid date: '" + p_Date1 + "'";}
	if(!isDate(p_Date2)){return "invalid date: '" + p_Date2 + "'";}
	var dt1 = new Date(p_Date1);
	var dt2 = new Date(p_Date2);

	// get ms between dates (UTC) and make into "difference" date
	var iDiffMS = dt2.valueOf() - dt1.valueOf();
	var dtDiff = new Date(iDiffMS);

	// calc various diffs
	var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
	
	var nMilliseconds = iDiffMS;
	var nSeconds = parseInt(iDiffMS/1000);
	var nMinutes = parseInt(nSeconds/60);
	var nHours = parseInt(nMinutes/60);
	var nDays  = parseInt(nHours/24);
	var nWeeks = parseInt(nDays/7);


	// return requested difference
	var iDiff = 0;		
	switch(p_Interval.toLowerCase()){
		case "yyyy": return nYears;
		case "q": return nQuarters;
		case "m": return nMonths;
		case "y": 		// day of year
		case "d": return nDays;
		case "w": return nDays;
		case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		case "h": return nHours;
		case "n": return nMinutes;
		case "s": return nSeconds;
		case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}

// REQUIRES: isDate(), dateDiff()
// NOT SUPPORTED: firstdayofweek and firstweekofyear (does system default for both)
function datePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}

	var dtPart = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": return dtPart.getFullYear();
		case "q": return parseInt(dtPart.getMonth()/3)+1;
		case "m": return dtPart.getMonth()+1;
		case "y": return dateDiff("y", "1/1/" + dtPart.getFullYear(), dtPart);			// day of year
		case "d": return dtPart.getDate();
		case "w": return dtPart.getDay();	// weekday
		case "ww":return dateDiff("ww", "1/1/" + dtPart.getFullYear(), dtPart);		// week of year
		case "h": return dtPart.getHours();
		case "n": return dtPart.getMinutes();
		case "s": return dtPart.getSeconds();
		case "ms":return dtPart.getMilliseconds();	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}


// REQUIRES: isDate()
// NOT SUPPORTED: firstdayofweek (does system default)
function weekdayName(p_Date, p_abbreviate){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);
	var retVal = dt.toString().split(' ')[0];
	var retVal = Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[dt.getDay()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}
// REQUIRES: isDate()
function monthName(p_Date, p_abbreviate){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);	
	var retVal = Array('January','February','March','April','May','June','July','August','September','October','November','December')[dt.getMonth()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}

// ====================================

// bootstrap different capitalizations
function IsDate(p_Expression){
	return isDate(p_Expression);
}
function DateAdd(p_Interval, p_Number, p_Date){
	return dateAdd(p_Interval, p_Number, p_Date);
}
function DateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear){
	return dateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear);
}
function DatePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear){
	return datePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear);
}
function WeekdayName(p_Date){
	return weekdayName(p_Date);
}
function MonthName(p_Date){
	return monthName(p_Date);
}


