//only support IE4+
var mArray	= new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var dArray 	= new Array("Sun","Mon","Tue","Wen","For","Fri","Sat");
var datesArray 		= new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var today 			= new Date();			//todays date
var cD 				= today.getDay();		//current day of week 0-6
var cT				= today.getDate();		//current day 1-31
var cM				= today.getMonth();		//current month 0-11
var cMDs 			= datesArray[cM];		//number of days in current month
var cY				= today.getFullYear();	//js method	not used here//current Year

var newT			= cT;					//cal selected date
var newM			= cM;					//cal selected month
var newY			= cY;					//cal selected year
var newDs			= cMDs;					//days for selected Month
var newD			= cD;					//day of week

var numCalendars	= 2;					//number of calendars you want to create
var calDirection	= "vertical";			//put "horizontal" or "vertical"
var calopen 		= 0;					//boolean set state of iframe "0" closed "1" open;
var o_input 		= 0;
var o_month = 0; 
var o_date = 0;
var o_from;var o_to;var v_from;var v_to;
var d_makefrom=0; var d_maketo=0;

var s_lang="us";
var o_currentDate = false;

var i_firstMonth = cM;
var i_sfirstYear = cY; var i_sfirstMonth = cM;
var i_ofirstYear = cY; var i_ofirstMonth = cM;

var b_calinit = 0;
var o_row = null;
var i_numcal = 0;
var o_calbody = null; //where to write the calendar
var s_closecal = "<div class='calClose'>"
							 + "<a href='#' onclick='parent.closeCal();return false;'>Close</a>"
							 + "Select date:</div>";
var a_input = 0;
var s_inputtype = "object"; //for text input or select list input
var b_alldateshow = false; //true
var b_infloatdiv = false;
var o_caldiv=0;var calopen=0;
var t_calcloser = null;

var s_lastinputtype = null;

function findFirstDay(){
	firstDay = new Date();
	firstDay.setDate(1);
	firstDay.setMonth(newM);
	firstDay.setFullYear(newY);
	return firstDay.getDay();
}

function ty_makeDate(which){
	d_makedate = new Date(newY,newM,which);
	if(!b_alldateshow && cT>which && cM == newM && cY == newY){	

		s_makeDate = "<td class='calDateOff'>";
		s_makeDate+= which;
	}else{
		if(d_makefrom||d_maketo){
			s_makeDate = ((d_makedate.toString()==d_makefrom.toString())||(d_makedate.toString()==d_maketo.toString())) 
										? "<td class='calDateSel'>" 
										: (d_makedate>d_makefrom&&d_makedate<d_maketo&&d_makefrom) 
											? "<td class='calDateRng'>" 
											: "<td class='calDate'>";
		}else{
			s_makeDate = "<td class='calDate'>";
		}
		s_makeDate+= "<a href='#' onclick='parent.ty_setDate("+newM+","+which+",this.parentNode,"+newY+");return false;' class='calDateA'>";
		s_makeDate+= which;
		s_makeDate+="</a>";
	}
	s_makeDate+="</td>\n";
	return s_makeDate;
}
/***************************************
***************************************/
function ty_maketr(what){
	s_tr = "<tr>\n";
	s_tr+= what;
	s_tr+= "</tr>\n";
	return s_tr;
}
/***************************************

***************************************/
function ty_changeMonths(which){
	i_numcal = 0;
	o_calbody.innerHTML ="";
	if(which < 0){
		which=11;
		newY--;
	}
	vm_makeCal(which);
}
/***************************************

***************************************/
function vm_makeCal(whichMonth){
	b_calinit = 1;
	o_cal= "";
	o_caltr="";o_caltd="";
	newM = whichMonth;
	if (newM>=12){
		newM=whichMonth-12;
		newY++;
	}
	if(i_numcal==0){
		i_firstMonth = newM;
		switch(s_inputtype){
			case "object":
				i_ofirstMonth  = newM;
				i_ofirstYear = newY;
			break;
			default:
				i_sfirstMonth  = newM;
				i_sfirstYear = newY;
		}
	}
	newDs = datesArray[newM];
	isLeap 	= (newY % 4 == 0 && (newY % 100 !=0 || newY % 400 ==0 )) ? 1:0
	if (newM==1) newDs=newDs+isLeap;
	newD = findFirstDay();
	countDay = newD;
	s_calclass = (calDirection=="vertical")? "calTableV" : "calTableH";
	o_cal+="<table month='"+newM+"' year='"+newY+"' cellpadding='0' cellspacing='0' border='0' class='"+s_calclass+"'>\n";
	o_caltr+= "<tr class='calRowHighlight'>\n";
	o_caltd+= "<td colspan='7' class='calLabel'>";
	o_caltd+= newY+"/"+mArray[newM];
	o_caltd+= "</td>";
	o_caltr+=o_caltd;
	o_caltr+="</tr>\n";
	o_cal+=o_caltr;
	//ÏÔÊ¾ÐÇÆÚ
	o_caltd = "";
	for(i=0;i < dArray.length;i++){
		o_caltd+="<td class='calDayName'>";
		o_caltd+=dArray[i];
		o_caltd+="</td>\n";
	}
	o_caltr = ty_maketr(o_caltd);
	o_caltd = "";
	i_calRows = 0;
	for (d=1;d<=newDs;d++){
		if(d==1)
			for(bd=0;bd < newD;bd++)
				o_caltd += "<td class='calDate'>&nbsp;</td>\n";
		o_caltd += ty_makeDate(d);
		countDay++;
		if(countDay==7){
			countDay=0;
			o_caltr = ty_maketr(o_caltd);
			o_cal+=o_caltr;
			o_caltd = "";
			i_calRows++
		}
		if(d==newDs && countDay!=0){
			for (bd=countDay;bd < 7;bd++) o_caltd += "<td class='calDate'>&nbsp;</td>\n";
			o_caltr = ty_maketr(o_caltd);
			o_cal+=o_caltr;			
			o_caltd ="";
			i_calRows++
		}
	}
	if(i_calRows < 6){
		o_caltd = "";
		for(bd=0;bd < 7;bd++) o_caltd += "<td class='calDate'>&nbsp;</td>\n";
		o_caltr = ty_maketr(o_caltd);
		o_cal+= o_caltr;
	}
	o_cal+="</table>";
	if(b_alldateshow)
		o_calbody.innerHTML += (i_numcal==0) 
							? s_closecal+"<a href='#' onclick='parent.ty_changeMonths("+i_firstMonth+"-1);return false' class='calNavA'>Last month</a>" 
							: "";
	else
		o_calbody.innerHTML += (i_numcal==0) 
							? (newM==cM&&newY==cY) 
								? s_closecal+"<span class='calNavA'>&nbsp;</span>" 
								: s_closecal+"<a href='#' onclick='parent.ty_changeMonths("+i_firstMonth+"-1);return false' class='calNavA'>Last month</a>" 
							: "";
	//////////
	o_calbody.innerHTML += o_cal;
	i_numcal++;
	if(i_numcal==numCalendars)
		o_calbody.innerHTML+= "<a href='#' onclick='parent.ty_changeMonths("+i_firstMonth+"+1);return false;' class='calNavA'>Next month</a>"
	if(i_numcal < numCalendars)
		vm_makeCal(newM+1);
	else if (i_firstMonth > newM){
		newY--;
	}
}
function ty_setDate(whatMonth,whatDate,whatTD,whatYear){
	whatMonth = whatMonth+1;
	if (parseInt(whatMonth)<10) whatMonth = "0" + whatMonth;
	if (parseInt(whatDate)<10) whatDate = "0" + whatDate;
	o_currentDate = whatTD;
	o_currentDate.className = "calDateSel";
	if(typeof(o_input)=="object"){
		if(s_lang=="us")
			o_input.value = (whatMonth)+"-"+whatDate+"-"+whatYear;
		else if(s_lang=="cn")
			o_input.value = whatYear+"-"+(whatMonth)+"-"+whatDate
	}
	closeCal();
}
function splitDate(s_input, s_mode){
	this.delimitor = (s_input.indexOf("/")>-1) ? "/" : (s_input.indexOf(".")>-1) ? "." : (s_input.indexOf("-")>-1) ? "-" : (s_input.indexOf(",")>-1) ? "," : "/";
	a_input = s_input.split(this.delimitor);
	this.date = -1;this.month = -1;this.year = -1;
	if(a_input.length==3&&!isNaN(a_input[0])&&!isNaN(a_input[1])&&!isNaN(a_input[2])){
		if(s_mode=="us"){
			this.month = parseInt(a_input[0],10)-1;
			this.date = parseInt(a_input[1],10);
			this.year = a_input[2];
		}else if(s_mode=="cn"){
			this.year = a_input[0];
			this.month = parseInt(a_input[1],10)-1;
			this.date = parseInt(a_input[2],10);
		}
		if(this.month>11||this.month<0)this.month=-1;
		if(this.date>31||this.month<0)this.date=-1;
		i_yrlength = this.year.toString().length;
		if(i_yrlength==2)this.year = "20"+this.year;//fix this in the next 96 years...
		if(i_yrlength<1||i_yrlength==3||this.year<cY)this.year=-1;
	}
}
/******************************************************
	
*******************************************************/
function makeCalendar(o_input,s_mode,b_alldate){
	document.getElementById("calbox").style.zIndex=9999;
	document.getElementById("calbox").innerHTML="<iframe id=\"calframe\" src=\"javascript:'calendar'\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\"></iframe>"
	
	s_iecalcss = "<link rel='STYLESHEET' type='text/css' href='"+document.getElementById("calendarcss").href+"' />";
	o_califrame = document.getElementById("calframe")
	calframe.document.open();
	calframe.document.write("<html><head>"+s_iecalcss+"</head><body id='calbox' class='calendar'></body></html>");
	calframe.document.close();	
	
	i_numcal = 0;
	if(calDirection=="vertical")
		document.getElementById("calframe").className = "calframeV";
	else 
		document.getElementById("calframe").className = "calframeH";
	o_calbody = calframe.document.getElementById("calbox");
	o_calbody.innerHTML="";
	o_udate = new splitDate(o_input.value,s_mode);

	v_from = new splitDate(o_input.value,s_mode);
	v_to = new splitDate("",s_mode);

	d_makefrom = (v_from.month!=-1) ? new Date(v_from.year,v_from.month,v_from.date) : 0;
	d_maketo = (v_to.month!=-1) ? new Date(v_to.year,v_to.month,v_to.date) : 0;
switch(b_calinit){
case 0:
	if(o_udate.month!=-1&&o_udate.year!=-1&&o_udate.date!=-1){
		newY=o_udate.year;
		newM=o_udate.month;
		newD=o_udate.date;
		vm_makeCal(o_udate.month);	
	}else{
		newY=cY;newM=cM;newD=cD;
		vm_makeCal(cM);	
	}
break;
default:
		switch(s_inputtype){
			case "object":
				newM = i_ofirstMonth;
				newY = i_ofirstYear;
			break;
			default:
				newM = i_sfirstMonth;
				newY = i_sfirstYear;
		}
		vm_makeCal(newM); 
	}
	s_lastinputtype = typeof(o_input);
}
function openCal(v_input,s_caldir,b_alldate){
	calDirection = s_caldir;
	s_lang = "cn";
	b_alldateshow = b_alldate;
	
	clearTimeout(t_calcloser);
	
	s_inputtype = typeof(v_input);
	o_input = (s_inputtype!="object") ?  document.getElementById(v_input) : v_input;
	calopen = 0;
	o_caldiv = document.getElementById("calbox");
	document.getElementById("calbox").style.cssText="z-index:2;";
	
	//window.document.attachEvent("onmouseup",closeCal);
	o_caldiv.style.display = "block";
	if(calDirection=="vertical")
		o_caldiv.className = "calboxonV";
	else 
		o_caldiv.className = "calboxonH";
	makeCalendar(o_input,s_lang)
	//calculate and set position of calendar
	o_cal = document.getElementById("calbox"); 
	
	setPos(o_input,o_cal);
	setTimeout("calopen = 1",50);
}
/******************************************************
*******************************************************/
function setPos(o_input,o_cal){
	//modified by LJLIN
	var t = o_input.offsetTop;
	var l = o_input.offsetLeft;
	var w = o_input.offsetWidth;
	var h = o_input.offsetHeight;
	if(!b_infloatdiv){
		while(o_input=o_input.offsetParent){
//			if('DIV,LAYER'.indexOf(o_input.tagName)>-1)
//				break;
			t += o_input.offsetTop;
			l += o_input.offsetLeft;
		}
	}
	if(calDirection=="vertical"){
		i_calx = parseInt(l)+parseInt(w);
		i_caly = parseInt(t)+(parseInt(h)/2)-(parseInt(o_cal.offsetHeight)/2);
		o_cal.style.top = (i_caly>0) ? i_caly+"px" : "0px";
		o_cal.style.left = i_calx+"px";
	}
	else{
		i_calx = parseInt(l)+(parseInt(w)/2)-(parseInt(o_cal.offsetWidth)/2);
		i_caly = parseInt(t)+parseInt(h);
		o_cal.style.top = i_caly+"px";
		o_cal.style.left = (i_calx>0) ? i_calx+"px" : "0px";
	}

	if(screen.availWidth<(i_calx+o_cal.offsetWidth))
		o_cal.style.left = screen.availWidth - o_cal.offsetWidth;
}
/******************************************************
*******************************************************/
function openCalInFloatDiv(v_input,s_caldir,b_alldate){
	b_infloatdiv = true;
	openCal(v_input,s_caldir,b_alldate);
	b_infloatdiv = false;
}
/***************************************

***************************************/
function closeCal(){
	if(o_caldiv&&calopen)t_calcloser = setTimeout("hideCalendar()",50);
	calopen=0;
	b_calinit=0;
	//window.document.detachEvent("onmouseup",closeCal);
}
function hideCalendar(){
	o_caldiv.style.display = "none"
}
/***************************************
***************************************/
window.document.writeln("<div id=calbox></div>");
