var iCalYears = 5;
var calIsOpen = false;

var calObject = '';

var calDiv = false;
var calTarget = false;
var calPosX = -1;
var calPosY = -1;
aMonthNames = new Array("January","February","March","April","May","June","July","August","September","October"
						,"November","December");
aMonthAbbrv = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
aDayHeaders = new Array("S","M","T","W","T","F","S");
//====================================================================================================
function showCal(element){
//	if(calTarget != element && calIsOpen ){
	if(calDiv == false){
		calIFrame   = document.createElement("IFRAME");
		calIFrame.className = "calIF";
		calIFrame.src = "about:blank";
		calIFrame.scrolling = "no";
		calIFrame.frameborder = "0";
		calDiv	=  document.createElement("DIV") ;
		calDiv.className = "caleDiv";
		calTable	= calDiv.appendChild( document.createElement("TABLE") );
		calHead		= calTable.appendChild( document.createElement("THEAD") );
		calHeadTR	= calHead.appendChild( document.createElement("TR") );
		calHeadTH	= calHeadTR.appendChild( document.createElement("TH") );
		calHeadTH.colSpan = 7;
		calHeadWeekTR 	= calHead.appendChild( document.createElement("TR") );
		// Days of the Week -------------------------------------------------------------
		for(var i = 0; i < 7; i++){
			var dowTH	= calHeadWeekTR.appendChild( document.createElement("TH") );
			dowTH.innerHTML = aDayHeaders[i];
		}
		calFoot		= calTable.appendChild( document.createElement("TFOOT") );
		calFootTR	= calFoot.appendChild( document.createElement("TR") );
		// Clear Button --------------------------------------------------------
		calFootTH	= calFootTR.appendChild( document.createElement("TH") );
		calFootTH.colSpan = 7;
		calFootClearBTN	= calFootTH.appendChild( document.createElement("<INPUT TYPE=BUTTON>") );
		calFootClearBTN.value = " Clear ";
		calFootClearBTN.onclick = calClear;
		// Close Button --------------------------------------------------------
		calFootCloseBTN	= calFootTH.appendChild( document.createElement("<INPUT TYPE=BUTTON>") );
		calFootCloseBTN.value = " Close ";
		calFootCloseBTN.onclick = calClose;
		calBody = calTable.appendChild( document.createElement("TBODY") );
	}
//Variables VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
	calTarget = element;
	calPosX = findPosX(element) + 1;
	calPosY = findPosY(element) + 25;

	aCalDate = element.value.split('-');
	
	if(aCalDate.length == 3){
		iCurYYYY = eval(aCalDate[2]);
		iCurDD = aCalDate[0];
		for( var monthCounter=0; monthCounter<12; monthCounter++ ){
			if(	aMonthAbbrv[monthCounter].toLowerCase() == aCalDate[1].toLowerCase() ){
				iCurMM = monthCounter;
			}
		}
		calDateSel = new Date(iCurYYYY, iCurMM, iCurDD);
	}else{
		calDateSel = new Date();
		iCurYYYY = calDateSel.getFullYear();
		iCurMM = calDateSel.getMonth();
		iCurDD = calDateSel.getDate();
	}

	calIFrame.style.left = calPosX;
	calIFrame.style.top = calPosY;

	calDiv.style.left = calPosX;
	calDiv.style.top = calPosY;
	
	// Month Dropdown --------------------------------------------------------
	sHTML =  '<select name="calMonth" onChange="changeMonth(this);">';
	for( var monthCounter=0; monthCounter<12; monthCounter++ ) {
		var selected = ( monthCounter == iCurMM )? 'selected':'';
		sHTML += "<option "+selected+" value="+monthCounter+">"+aMonthNames[monthCounter]+"</option>";
	}
	sHTML += '</select>';
	// Year Dropdown -----------------------------------------------------------
	sHTML +=  '<select name="calYear" onChange="changeYear(this);">';
	for( var yearCounter=iCurYYYY-iCalYears; yearCounter<=iCurYYYY+iCalYears; yearCounter++ ) {
		var selected = ( yearCounter == iCurYYYY )? 'selected':'';
		sHTML += "<option "+selected+" value="+yearCounter+" >"+ yearCounter +"</option>";
	}
	sHTML += '</select>';
	calHeadTH.innerHTML = sHTML;
	
	dspDate = new Date(iCurYYYY, iCurMM, 1);
	//VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
	fillCal();
	if(calIsOpen == false){
		calObject = calDiv;
		calIsOpen = true;
		document.body.appendChild(calDiv);
		document.body.appendChild(calIFrame);
	}
}
function calDatePicked(datePicked){
	calTarget.value = datePicked.innerHTML +'-'+ aMonthAbbrv[iDspMM].toUpperCase() +'-'+ iDspYYYY;
	calClose();
}
function dateOnMouseOver(tdDateOver){
	tdDateOver.className +=  ", dayMouseOver ";
//alert(tdDateOver.className);
}
function dateOnMouseOut(tdDateOut){
	tdDateOut.className = tdDateOut.className.replace(", dayMouseOver " , "");
//alert(tdDateOut.className);
}
function calClear() {
	calTarget.value = '';
	calClose();
}
function calClose() {
	document.body.removeChild(calObject);
	document.body.removeChild(calIFrame);

//	calObject.style.display = 'none';
//	calIFrame.style.display = 'none';
	calTarget = '';
	calIsOpen = false;
}
function fillCal(){
	iDspYYYY = dspDate.getFullYear();
	iDspMM = dspDate.getMonth();
	// Clear previous body ------------------------------------------------------  
	while(	calBody.hasChildNodes()	){
		calBody.removeChild(calBody.lastChild);
	}
	// Calendar Body ------------------------------------------------------------ 
	var row = document.createElement("TR");
	calBody.appendChild(row);
	//Start of Month blanks
	for(var i = 0; i < dspDate.getDay(); i++) {
		var td = document.createElement("TD");
		row.appendChild(td);
	}
	//Calendar Days
	while(iDspMM == dspDate.getMonth() ) {
		var td = document.createElement("TD");
		var iDspDD = dspDate.getDate();
		if(iDspDD == iCurDD && iDspMM == iCurMM && iDspYYYY == iCurYYYY ){
			sClassName = "daySelected";
			sOnMouseOut = this.className = sClassName;
		}else{
			sClassName = "day";		
			sOnMouseOut = this.className = sClassName;
	}
	td.innerHTML = iDspDD; 
	td.className = sClassName;
	td.onmouseout = function(){dateOnMouseOut(this)};
	td.onmouseover = function(){dateOnMouseOver(this)};
	td.onclick = function(){calDatePicked(this)};
	row.appendChild(td);
	if(dspDate.getDay() == 6) {
		row = document.createElement("TR");
		calBody.appendChild(row);
	}
	dspDate.setDate(iDspDD + 1);
	}
  //End of Month blanks 
	for(var i = dspDate.getDay(); i < 7; i++) {
		var td = document.createElement("TD");
		row.appendChild(td);
	}
}
function changeMonth(elemMonth){
	dspDate = new Date(iDspYYYY, elemMonth.value ,1)
	fillCal();
}
function changeYear(elemYear){
	iDspYYYY = eval(elemYear.value);
	var sHTML = "<select name='calYear' onChange='changeYear(this);'>";
	for( var yearCounter= iDspYYYY-iCalYears; yearCounter<= iDspYYYY+iCalYears; yearCounter++ ) {
		var selected = ( yearCounter == iDspYYYY )? 'selected':'';
		sHTML += "<option "+ selected +" value='"+ eval(yearCounter) +"'>"+ yearCounter +"</option>"
	}
	sHTML += "</select>";
	elemYear.outerHTML = sHTML;

	dspDate = new Date(iDspYYYY, iDspMM, 1)
	fillCal();
}

function findPosX(obj){
	var curleft = 0;
	if (obj.offsetParent)	{
		while (obj.offsetParent){
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x){
		curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}