var gdCtrl = new Object();
var goSelectTag = new Array();
var gcGray = "#E0E0E0";
var gcToggle = "#79D0FF";
var gcBG = "#F4F4F4";

var gdCurDate = new Date();
var giYear = gdCurDate.getFullYear();
var giMonth = gdCurDate.getMonth()+1;
var giDay = gdCurDate.getDate();

//主函数
function fPopCalendar(popCtrl, dateCtrl)
{
	event.cancelBubble=true;
  	gdCtrl = dateCtrl;
  	fSetYearMon(giYear, giMonth);
  	var point = fGetXY(popCtrl);
  	with (VicPopCal.style) 
	{
		left = point.x;
		top  = point.y+popCtrl.offsetHeight+1;
		visibility = 'visible';
		zindex ='99';
		position= 'absolute';
  	}
  	VicPopCal.focus();
}

function fSetDate(iYear, iMonth, iDay)
{
	var iMonthNew = new String(iMonth);
  	var iDayNew = new String(iDay);
  
  	if(iMonthNew.length < 2 ) 
	{
		iMonthNew = "0" + iMonthNew;
	}
  	if(iDayNew.length < 2 ) 
	{
		iDayNew = "0" + iDayNew;
	}
  
  	gdCtrl.value = iMonthNew+"-"+iDayNew+"-"+iYear;
  	fHideCalendar();
}

function fHideCalendar()
{
	VicPopCal.style.visibility = "hidden";
  	for (i in goSelectTag)
	{
  		goSelectTag[i].style.visibility = "visible";
	}
	goSelectTag.length = 0;
}

function fSetSelected(aCell)
{
	var iOffset = 0;
  	var iYear = parseInt(tbSelYear.value);
  	var iMonth = parseInt(tbSelMonth.value);

  	aCell.bgColor = gcBG;
  	with (aCell.children["cellText"])
	{
  		var iDay = parseInt(innerText);
  		if (color==gcGray)
		{
			iOffset = (Victor<10)?-1:1;
		}
		iMonth += iOffset;
		if (iMonth<1) 
		{
			iYear--;
			iMonth = 12;
		}
		else if (iMonth>12)
		{
			iYear++;
			iMonth = 1;
		}
  	}
  	fSetDate(iYear, iMonth, iDay);
}

function Point(iX, iY)
{
	this.x = iX;
	this.y = iY;
}

function fBuildCal(iYear, iMonth) 
{
 	var aMonth=new Array();
  	for(i=1;i<7;i++)
  	aMonth[i]=new Array(i);
	var dCalDate=new Date(iYear, iMonth-1, 1);
	//判断是星期几
	var iDayOfFirst=dCalDate.getDay();
	//判断当月的天数
	var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
	//控件中每一屏中左上角日期数
	var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
  	var iDate = 1;
  	var iNext = 1;
	//生成一个二维数组
	for (d = 0; d < 7; d++)
	{
		aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
	}
  	for (w = 2; w < 7; w++)
	{  	
		for (d = 0; d < 7; d++)
		{
			aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
		}
	}
  	return aMonth;				//返回个二维数组
}

function fDrawCal(iYear, iMonth, iCellHeight, iDateTextSize) 
{
	var WeekDay = new Array("Sun","Mon","Tues","Wed","Thurs","Fri","Sat");
  	var styleTD = " bgcolor='"+gcBG+"' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font:bold "+iDateTextSize+" ;";
	with (document) 
	{
		write("<tr>");
		for(i=0; i<7; i++)
		write("<td "+styleTD+"color:#990099' >" + WeekDay[i] + "</td>");
		write("</tr>");

	  	for (w = 1; w < 7; w++) 
		{
			write("<tr>");
			for (d = 0; d < 7; d++) 
			{
				write("<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' onclick='fSetSelected(this)'>");
				write("<font id=cellText Victor=''></font>");
				write("</td>")
			}
			write("</tr>");
		}
	}
}

function fUpdateCal(iYear, iMonth) 
{
	myMonth = fBuildCal(iYear, iMonth);
  	var i = 0;
  	for (w = 0; w < 6; w++)
  	{
		for (d = 0; d < 7; d++)
		{
			with (cellText[(7*w)+d]) 
			{
				Victor = i++;
				if (myMonth[w+1][d]<0) 
				{
					color = gcGray;			//不是本月显示为灰色
					innerText = -myMonth[w+1][d];
				}
				else
				{
					//本月内的双休日显示为红色，其它显示为黑色
					color = ((d==0)||(d==6))?"red":"#444444";	
					innerText = myMonth[w+1][d];
				}
			}
		}
	}
}

function fSetYearMon(iYear, iMon)
{
	tbSelMonth.options[iMon-1].selected = true;
  	for (i = 0; i < tbSelYear.length; i++)
	{
		if (tbSelYear.options[i].value == iYear)
		{
			tbSelYear.options[i].selected = true;
		}
	}
  	fUpdateCal(iYear, iMon);
}

function fPrevMonth()
{
	var iMon = tbSelMonth.value;
  	var iYear = tbSelYear.value;
	
	if (--iMon<1) 
	{
		iMon = 12;
	  	iYear--;
  	}

	fSetYearMon(iYear, iMon);
}

function fNextMonth()
{
	var iMon = tbSelMonth.value;
	var iYear = tbSelYear.value;

	if (++iMon>12) 
	{
		iMon = 1;
		iYear++;
  	}

  fSetYearMon(iYear, iMon);
}

function fGetXY(aTag)				//返回对象aTag的左与顶的位置
{
	var oTmp = aTag;
	var pt = new Point(0,0);
  	do 
	{
 		pt.x += oTmp.offsetLeft;
	  	pt.y += oTmp.offsetTop;
  		oTmp = oTmp.offsetParent;
	} while(oTmp.tagName!="BODY");
  	return pt;
}

var gMonths = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

with (document) 
{
	write("<Div id='VicPopCal' onclick='event.cancelBubble=true' style='POSITION:absolute;z-index:99;visibility:hidden;border:1px solid #999999;width:10;'>");
	write("<table border='0' bgcolor='#E0E0E0' cellpadding='1' cellspacing='1' >");
	write("<TR>");
	write("<td ><input type='button' name='PrevMonth' value='<' class='bevel' style='height:20;width:20;FONT:bold' onClick='fPrevMonth()'>");
	write("</td><td><SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
	for(i=1900;i<2015;i++)
		write("<OPTION value='"+i+"'>"+i+"</OPTION>");
	write("</SELECT></td><td>");
	write("<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
	for (i=0; i<12; i++)
		write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
	write("</SELECT></td><td>");
	write("<input type='button' class='bevel'  name='PrevMonth' value='>' style='height:20;width:20;FONT:bold' onclick='fNextMonth()'>");
	write("</td>");
	write("</TR><TR>");
	write("<td align='center' colspan='4'>");
	write("<DIV style='background-color:#CCCCCC'><table width='100%' border='0'  cellpadding='3' cellspacing='1'>");
	fDrawCal(giYear, giMonth, 12, 12);
	write("</table></DIV>");
	write("</td>");
	write("</TR><TR><TD align='center' colspan='4' nowrap>");
	write("<B style='cursor:hand;font:bold ' onclick='fSetDate(giYear,giMonth,giDay)' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>Today："+giMonth+"-"+giDay+"-"+giYear+"</B>");
	write("</TD></TR>");
	write("</TABLE></Div>");
	write("<SCRIPT event=onclick() for=document>fHideCalendar()</SCRIPT>");
}