﻿
	MyCal.color="green";
	MyCal.ca="#99cc00";
	MyCal.cb="#e5f5e5";
function MyCal(numYear,numMonth,numDate){
	if(typeof(oMain)!='undefined'){
		alert("one instance of MyCal per page only")
		return null;
		}
	var arg=MyCal.arguments;
	if(arg.length==3){
		this.year=arg[0];
		this.month=arg[1];
		this.date=arg[2];
		}
	else{
		var t=new Date();
		this.year=t.getYear();
		this.month=t.getMonth();
		this.date=t.getDate();
		}
	this.green=["#99cc00","#e5f5e5"];
	this.blue=["#00ccff","#e5eff5"];
	this.yellow=["#ffcc00","#ffefef"];
	this.gray=["#999999","#f0f0f0"];
	this.DayName="Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(",");
	this.MonthDay=[[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]];
	this.MonthName="Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(",");
	for(var i in this.MonthName)
		this.MonthName[this.MonthName[i]]=i;
	this.setColor=function(str){
		if(typeof(this[str])=="undefined"){
			alert("no such color:"+str);
			return;
			}
		if(typeof(oYear)!="undefined"){
			var t=document.all("imgArr");
			for(var i=0;i<t.length;i++)
				t[i].src=t[i].src.replace(MyCal.color,str);
			}
		MyCal.color=str;
		MyCal.ca=this[str][0];
		MyCal.cb=this[str][1];
		}
	this.chgYear=function(d){
		var m=oYear.innerText;
		this.year=parseInt(m)+d;
		this.refresh();
		}
	this.chgMonth=function(d){
		var i=parseInt(this.MonthName[oMonth.innerText])+d;
		if(i==12)
			i=0;
		else if(i==-1)
			i=11;
		this.month=i;
		this.refresh();
		}
	this.chgDate=function(ob){
		if(ob==event.srcElement)
			return;
		var x=event.srcElement.innerText;
		if(x=="")
			return;
		oDate.cells[this.date+this.day+7].style.fontWeight="normal";
		this.date=parseInt(x);
		event.srcElement.style.fontWeight="bold";
		}
	this.setDate=function(ob){
		var y0=this.year,m0=this.month;
		if(ob==event.srcElement)
			return;
		var t=ob.id.replace("sel","").toLowerCase();
		var x=event.srcElement.innerText;
		this[t]=parseInt(t=="year"?x:this.MonthName[x]);
		ob.style.display="none";
		if(y0!=this.year||m0!=this.month)
			this.refresh();
		}
	this.refresh=function(){
		oMonth.innerText=this.MonthName[this.month];		
		oYear.innerText=this.year;
		oBg.innerText=this.month+1;
		oMain.filters[0].apply();
		oMain.innerHTML=this.drawTable();
		oDate.cells[this.date+this.day+7].style.fontWeight="bold";
		oMain.filters[0].play();
		}
	this.outPut=function(){
		var str='<div class="cal_0" id=oCal onselectstart="return false;">'+
		'	<div class=d1 id=oBg>'+(this.month+1)+'</div>'+
		'	<table class="cal_1" cellspacing=0 cellpadding=0>'+
		'		<tr>';
				for(var i=0;i<7;i++)
					str+='<th>'+this.DayName[i]+'</th>';
				str+=
		'		</tr>'+
		'		<tr><td colspan=7 align=left id=oMain style="filter:blendtrans(duration=0.5)">'+
						this.drawTable()+
		'		</td><tr>'+
		'		<td colspan=7>&nbsp;</td>'+
		'		</tr>'+
		'	</table>'+
		'	<div class="sel cc scroll" id=selYear style="left:45;width:60" onclick="CalOb.setDate(this)">';
				for(var i=2001;i<2050;i++)
					str+='<div class="selitem p1">'+i+'</div>';
				str+=
		'	</div>'+
		'	<div class="sel cc" id=selMonth style="left:108;width:48" onclick="CalOb.setDate(this)">';
				for(var i=0;i<12;i++)
					str+='<div class="selitem p2">'+this.MonthName[i]+'</div>';
				str+=
		'	</div>'+
		'</div>';
		document.write(str);
		CalOb=this;
		oDate.cells[this.date+this.day+7].style.fontWeight="bold";
		oDate.cells[this.date+this.day+7].style.fontSize="12px";
		attchEvent();
		}
	this.drawTable=function(){
		var day=new Date(this.year,this.month,1);
		day=day.getDay();
		this.day=day-1;
		var m=this.year%4==0&&this.year%100||this.year%400==0?1:0;
		m=this.MonthDay[m][this.month];	
		var r="<table style='table-layout:fixed' cellpadding=0 cellpacing=0 id=oDate onclick='CalOb.chgDate(this)'>";
		r+="<tr height=3><td width=20></td><td width=23></td><td width=23></td>"+
			"<td width=23></td><td width=20></td><td></td><td></td></tr>";
		for(var i=0,k=0;i<6;i++){
			r+="<tr>";
			for(var j=0;j<7;j++){
				var k=i*7+j+1;
				var ts="<td>&nbsp;</td>"
				if(k>day&&k<=m+day){
					ts="<td";
					if(j==0||j==6)
						ts+=" style='color:red'";
					ts+=">"+(k-day)+"</td>";
					}
				r+=ts;
				}
			r+="</tr>";
			}
		r+="</table>";
		return r;
		}
	function attchEvent(){
		oYear.onmouseover=function(){
			selYear.style.display="block";
			}
		oYear.onmouseout=function(){
			if(event.offsetY<10)
				selYear.style.display="none";
			}
		oMonth.onmouseover=function(){
			selMonth.style.display="block";
			}
		oMonth.onmouseout=function(){
			if(event.offsetY<10)
				selMonth.style.display="none";
			}
		selYear.onmouseout=selOut;
		selYear.onmouseover=selOver;
		selMonth.onmouseout=selOut;
		selMonth.onmouseover=selOver;
		var t=document.all.imgArr;
		for(var i=0;i<t.length;i++){
			t[i].onmousedown=imgDown;
			t[i].onmouseup=imgUp;
			}
		}
	function imgDown(){
		this.src=this.src.replace(/.{5}$/,"1.gif");
		}
	function imgUp(){
		this.src=this.src.replace(/.{5}$/,"0.gif");
		}
	function selOver(){
		var ob=event.srcElement;
		if(ob==this)
			return;
		ob.style.backgroundColor=MyCal.cb;
		}
	function selOut(){
		var ob=event.srcElement;
		if(ob==this)
			this.style.display="none";
		else 
			ob.style.backgroundColor="white";
		}
	}

var tt=new MyCal();
tt.setColor("blue");//
tt.outPut();
