// JavaScript Document

var monthsInYear	= new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var daysInMonth		= new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysInWeek		= new Array("S", "M", "T", "W", "T", "F", "S");


function getDays(month, year){
	// Test for leap year when February is selected.
	if (1 == month)
		return ((0 == year % 4) && (0 != (year % 100))) ||	(0 == year % 400) ? 29 : 28;
	else
		return daysInMonth[month];
}

function getToday(){
	// Generate today's date.
	this.now = new Date();
	this.year = this.now.getFullYear() ; // Returned year XXXX
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

function Calendar(){
	
	this.setOwner=function(owner,evt){
		if(owner.type!='DateBox'){ alert("Calendar.setOwner Error:owner type ("+owner.type+") is not TextBox Object");return false}
		if(this.owner!=owner){
			this.hide();
			this.owner=owner;
			this.reposit(evt);
		}
	};
	this.fillOwner=function(evt){
		var day=(evt)?parseInt(evt.target.innerHTML):parseInt(event.srcElement.innerText);
		if(!day)return;
		
		var month = parseInt(this.html.lbMonthesInYear.value)+1;
		var Year = this.html.lbYears[this.html.lbYears.selectedIndex].text;
		this.owner.text=day+"/"+month +"/"+Year;
		this.owner.updateHtml();
		this.hide();
	};
	this.clearOwner=function(){this.owner.text='';this.owner.updateHtml();};
	this.fillCalender=function(){
		var monthDays=getDays(this.html.lbMonthesInYear[this.html.lbMonthesInYear.selectedIndex].value,this.html.lbYears[this.html.lbYears.selectedIndex].text);
		var daysCount=1;
		var newCal = new Date(parseInt(this.html.lbYears[this.html.lbYears.selectedIndex].text),
											parseInt(this.html.lbMonthesInYear[this.html.lbMonthesInYear.selectedIndex].value), 1);
		var startDay = newCal.getDay();
		
		for (var i=0;i<6;i++){
			for (var j=0;j<daysInWeek.length;j++){
				if(startDay<=j && daysCount<=monthDays) this.html.tBodies[1].rows[i].cells[j].innerHTML=daysCount++;
				else this.html.tBodies[1].rows[i].cells[j].innerHTML="&nbsp;";
			}
			startDay=0
		}
	};
	this.show=function(){this.html.style.display="inline";};
	this.hide=function(){this.html.style.display="none";};
	this.toggleVisibility=function(){
		if(this.html.style.display=="none")
			this.show();
		else
			this.hide();
	};
	this.reposit=function(evt){
		
		/*var x=0;
		var y=0;
		currentNode=this.owner.html;
		while(currentNode && currentNode.tagName!='HTML'){
			x+=currentNode.offsetLeft;
			y+=currentNode.offsetTop;
			currentNode=currentNode.offsetParent;
		}
		this.html.style.left = (x+'px');
		this.html.style.top =((y+this.owner.html.offsetHeight)+'px');*/
		this.html.style.left = evt.clientX+'px';
		this.html.style.top =evt.clientY+'px';
	};
	
	this.owner=null;
	this.currentDate=new getToday();
	
	this.html=document.createElement("TABLE");
	this.html.bgcolor='#ffffff';
	this.html.border=0;
	this.html.cellpadding=0;
	this.html.cellspacing=1;
	this.html.id='calendar';
	this.html.style.backgroundColor='#ffffff';
	this.html.style.display='none';
	this.html.style.position='absolute';
	this.html.style.zIndex=2900;
	this.html.style.left=0;
	this.html.style.top=0;
	this.html.style.borderWidth='1px';
	this.html.style.borderColor='#666666';
	this.html.style.borderStyle='solid';
	this.html.style.fontFamily="Verdana, Arial, Helvetica, sans-serif";
	this.html.style.fontSize="10px";
	
	this.html.lbMonthesInYear=document.createElement("SELECT");
	this.html.lbMonthesInYear.onchange=this.fillCalender.fasten(this);
	this.html.lbYears=document.createElement("SELECT");
	this.html.lbYears.onchange=this.fillCalender.fasten(this);
	this.html.appendChild(document.createElement("TBODY"));
	var tr=document.createElement("TR");
	var td=document.createElement("TD");
	td.colSpan=7;
	
	for (var i=0;i< monthsInYear.length;i++){
		this.html.lbMonthesInYear.options[i]=new Option(monthsInYear[i],i);	
		this.html.lbMonthesInYear.options[i].selected = (this.currentDate.month==i)?'SELECTED':'';
	}
	var optionsCount=this.html.lbYears.options.length;
	for (var i=(this.currentDate.year-2);i<(this.currentDate.year+10);i++){
		this.html.lbYears.options[optionsCount]=new Option(i,i);	
		this.html.lbYears.options[optionsCount].selected = (this.currentDate.year==i)?'SELECTED':'';
		optionsCount++;
	}
  	td.appendChild(this.html.lbMonthesInYear);
  	td.appendChild(this.html.lbYears);
	tr.appendChild(td);
	this.html.tBodies[0].appendChild(tr);
	tr=document.createElement("TR");
	for (var i=0;i<daysInWeek.length;i++){
		var td=document.createElement("TD");
		td.appendChild(document.createTextNode(daysInWeek[i]));
		td.style.fontWeight='bold';
		td.style.backgroundColor="#CCCCCC";
		tr.appendChild(td);
	}
	this.html.tBodies[0].appendChild(tr);
	
	this.html.appendChild(document.createElement("TBODY"));
	this.html.tBodies[1].onclick=this.fillOwner.fasten(this);
	
	for (var i=0;i<6;i++){
		var tr=this.html.tBodies[1].insertRow(-1);
		for (var j=0;j<daysInWeek.length;j++){
			var td=tr.insertCell(-1);
			td.onmouseover=function(){this.bgColor="#FFFFCC"}
			td.onmouseout=function(){this.bgColor="#FFFFFF"}
			 td.style.cursor="pointer";
		}
	}
	
	this.html.appendChild(document.createElement("TBODY"));
	var tr=this.html.tBodies[2].insertRow(-1);
	td=tr.insertCell(-1);
	td.appendChild(document.createTextNode('clear'));
	td.bgColor="#666666";
	td.style.color="#FFFFFF";
	td.style.cursor="pointer";
	td.style.fontWeight='bold';
	td.onclick=this.clearOwner.fasten(this);
	
	td=tr.insertCell(-1);
	td.colSpan=5;
	td.innerHTML="Today:"+this.currentDate.day+"/"+(this.currentDate.month+1) +"/"  +this.currentDate.year;
	td=tr.insertCell(-1);
	td.appendChild(document.createTextNode('close'));
	td.bgColor="#666666";
	td.style.color="#FFFFFF";
	td.style.cursor="pointer";
	td.style.fontWeight='bold';
	td.onclick=this.hide.fasten(this);
	this.fillCalender();
}




