////////////////////////////////////////////////////////////////////////////////////////////////////
//	文件: www\js\dateedit.js 
//	作者: Daniel
//	描述: 提供给dateedit控件的客户端函数文件
////////////////////////////////////////////////////////////////////////////////////////////////////

var g_oPreviousDate;		//前一个日历控件对象
var g_fnDocOnclick;		//保存document的onclick函数
var g_fnDocOnkeydown;	//保存document的onkeydown函数
var g_iYearValue;		//年控件数值的全局变量
var g_iMonthValue;		//月控件数值的全局变量
var g_iDayValue	;		//日控件数值的全局变量

var dCurrentDate = new Date(); //当前时间

var i_week=0;
//当前日期
var szCurrentDate = dCurrentDate.getYear() + "-" + (dCurrentDate.getMonth() + 1) + "-" + dCurrentDate.getDate(); 

function fnDCancelBubble() {
	event.cancelBubble = true
	
}
gblDDisabledVar = new Array();
function IsDDisabledVar(vname)
{
	var len,i;
	len = gblDDisabledVar.length;
	for (i=0;i<len;i++)
		if (gblDDisabledVar[i]==vname)
			return true;
	return false;
}
function DDisableVar(vname)
{
	var len = gblDDisabledVar.length;
	var i;
	for (i=0;i<len;i++){
		if (gblDDisabledVar[i]==vname)
			return;
	}
	gblDDisabledVar[len] = vname;
}
function DEnableVar(vname)
{
	var len = gblDDisabledVar.length;
	var i;
	for (i=0;i<len;i++){
		if (gblDDisabledVar[i]==vname){
			gblDDisabledVar = DArrayCutElem(gblDDisabledVar,i);
			return;
		}
	}
}
function DArrayCutElem(arr,idx)
{
	if (arr.length<=idx || idx<0)
		return arr;
	if (idx==0)
		return arr.slice(1);
	if (idx==arr.length-1)
		return arr.slice(0,idx);
	return arr.slice(0,idx).concat(arr.slice(idx+1));
}
function Dtrim(val)
{
	var str = val+"";
	if (str.length == 0) return str;
	var re = /^\s*/;
	str = str.replace(re,'');
	re = /\s*$/;
	return str.replace(re,'');
}

//函数：建立星期的显示形式


function writeweek(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)
{		
		if(i_week<1)
		{
			document.write("<INPUT type=hidden value="+Sunday+" name=week0>");
			document.write("<INPUT type=hidden value="+Monday+" name=week1>");
			document.write("<INPUT type=hidden value="+Tuesday+" name=week2>");
			document.write("<INPUT type=hidden value="+Wednesday+" name=week3>");
			document.write("<INPUT type=hidden value="+Thursday+" name=week4>");
			document.write("<INPUT type=hidden value="+Friday+" name=week5>");
			document.write("<INPUT type=hidden value="+Saturday+" name=week6>");
			i_week+=1;
		}
		
}


//	函数: 绘制日历
//	参数: szYearName, szMonthName, szDayName, iYearValue, iMonthValue, iDayValue
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       szDayName:		日控件名称
//       iYearValue:	年控件数值
//       iMonthValue:	月控件数值
//       iDayValue:		日控件数值
//	返回: 无

function fnDrawCalendar(szYearName, szMonthName, szDayName, iYearValue, iMonthValue, iDayValue) 
	{
	
	var myMonth = fnBuildCalendar(iYearValue, iMonthValue);
	document.write("<table id='tab" + szDayName + "' width='100%' border=0 cellspacing=0 cellpadding=1 style='cursor: default;'>");
	document.write("<tr>");
	for (i = 0; i < 7; i ++) {
		document.write("<td align='center' style='FONT-FAMILY: 宋体,Arial; FONT-SIZE: 12; COLOR: navy;' nowrap>" + myMonth[0][i] + "</td>");
		
	}
	document.write("</tr>");
	for (w = 1; w < 7; w ++) {
		
		document.write("<tr>");
		for (d = 0; d < 7; d ++) {
			if(myMonth[w][d] +'' == 'undefined')
			{
				document.write("<td id='calCell' align='CENTER' valign='top' style='FONT-FAMILY: 宋体,Arial; FONT-SIZE: 12; CURSOR: hand;' onclick='fnSetSelectedDay(this, \"" + szYearName + "\", \"" + szMonthName + "\", \"" + szDayName + "\")'><font id='calDateText'>&nbsp;</font></td>");
			}
			else
			{
				document.write("<td id='calCell' align='CENTER' valign='top' style='FONT-FAMILY: 宋体,Arial; FONT-SIZE: 12; CURSOR: hand;' onclick='fnSetSelectedDay(this, \"" + szYearName + "\", \"" + szMonthName + "\", \"" + szDayName + "\")'><font id='calDateText'>"+myMonth[w][d]+"</font></td>");
			}
		}
		
		
		document.write("</tr>");
	}
	document.write("</table>");
	
}
//函数：显示当前日期
//参数：ID  显示对象的ID
//返回：无
function disptoday(id)
{
	document.all(id).innerText=document.all(id).innerText+szCurrentDate;
}
//	函数: 点击年月标签
//	参数: szObjectName
//       szObjectName:	年月标签控件名称
//	返回: 无

function fnClickLabel(szObjectName) {
    document.all("lbl" + szObjectName).style.display = "none";
	document.all("slc" + szObjectName).style.display = "block";
	document.all("slc" + szObjectName).focus();
}

//	函数: 年月标签失去焦点
//	参数: szObjectName
//       szObjectName:	年月标签控件名称
//	返回: 无

function fnLabelOnblur(szObjectName) {
    document.all("lbl" + szObjectName).style.display = "block";
	document.all("slc" + szObjectName).style.display = "none";
}

//	函数: 更新日历前准备数据
//	参数: oTable, szYearName, szMonthName, iFlag
//       oTable:		日历表格对象
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       iFlag:			前后移标记（1: 加一个月 －1: 减一个月）
//	返回: 无

function fnForUpdateCalendar(oTable, szYearName, szMonthName, iFlag) {
	var oLblYear = document.all("lbl" + szYearName);
	var oLblMonth = document.all("lbl" + szMonthName);
	var iYearValue = parseInt(oLblYear.innerText);
	var iMonthValue = parseInt(oLblMonth.innerText);
	iMonthValue = iMonthValue + iFlag;
	if (iMonthValue > 12 || iMonthValue < 1) {
		iMonthValue -= 12 * iFlag;
	    iYearValue += iFlag;
	}
	fnUpdateCalendar(oTable, iYearValue, iMonthValue, szYearName, szMonthName);
}

//	函数: 更新日历
//	参数: oTable, iYearValue, iMonthValue, szYearName, szMonthName
//       oTable:		日历表格对象
//       iYearValue:	年控件数值
//       iMonthValue:	月控件数值
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//	返回: 无

function fnUpdateCalendar(oTable, iYearValue, iMonthValue, szYearName, szMonthName) {
	var oLblYear = document.all("lbl" + szYearName);
	
	var oSlcYear = document.all("slc" + szYearName);
	var oLblMonth =	document.all("lbl" + szMonthName);
	
	var oSlcMonth = document.all("slc" + szMonthName);
	//alert("lbl" + szMonthName);
	oLblYear.innerText = iYearValue;
	oLblMonth.innerText = iMonthValue;
	
	for (i = 0; i < oSlcYear.options.length; i++) {
	    if (oSlcYear.options(i).value == iYearValue) {
	        oSlcYear.selectedIndex = i;
	    }
	}
	for (i = 0; i < oSlcMonth.options.length; i++) {
	    if (oSlcMonth.options(i).value == iMonthValue) {
	        oSlcMonth.selectedIndex = i;
	    }
	}
	
	var myMonth = fnBuildCalendar(iYearValue, iMonthValue);
	
	for (w = 1; w < 7; w ++) {
		for (d = 0; d < 7; d ++) {
			var oCell = oTable.cells[((7 * w) + d)];
			var szDateValue = iYearValue + "-" + iMonthValue + "-" + myMonth[w][d];
			var szDateValue_g = g_iYearValue + "-" + g_iMonthValue + "-" + g_iDayValue;
			//var szCurrentDate = dCurrentDate.getYear() + "-" + (dCurrentDate.getMonth() + 1) + "-" + dCurrentDate.getDate();
			
			if (szDateValue == szCurrentDate && szDateValue == szDateValue_g) {
				oCell.children["calDateText"].color = "white";
				
				//oCell.style.background = "url(img/today.gif) no-repeat center";
			} else if (szDateValue == szCurrentDate){
				
				oCell.children["calDateText"].color = "black";
				
				//oCell.style.background = "url(img/today.gif) no-repeat center";
				
			} else if (szDateValue == szDateValue_g){
				
				oCell.children["calDateText"].color = "red";
				
				//oCell.style.background = "url(img/today.gif) no-repeat center";
			} else {
				
				oCell.children["calDateText"].color ="";
				
				oCell.style.background = "";
				
			}
			
			if (isNaN(myMonth[w][d])) {
				oCell.children["calDateText"].innerText = " ";
			} else {
				oCell.children["calDateText"].innerText = myMonth[w][d];
			}
		}
	}
}

//	函数: 构造日历数组
//	参数: iYearValue, iMonthValue
//       iYearValue:	年控件数值
//       iMonthValue:	月控件数值
//	返回: 日历数组

function fnBuildCalendar(iYearValue, iMonthValue) 
{
	var aMonth = new Array(7);
	 aMonth[0] = new Array(7);
	 aMonth[1] = new Array(7);
	 aMonth[2] = new Array(7);
	 aMonth[3] = new Array(7);
	 aMonth[4] = new Array(7);
	 aMonth[5] = new Array(7);
	 aMonth[6] = new Array(7);
	/*
	aMonth[0][0] = "星期日";
	aMonth[0][1] = "星期一";
	aMonth[0][2] = "星期二";
	aMonth[0][3] = "星期三";
	aMonth[0][4] = "星期四";
	aMonth[0][5] = "星期五";
	aMonth[0][6] = "星期六";*/
	
	aMonth[0][0] = document.all("week0").value;
	aMonth[0][1] = document.all("week1").value;
	aMonth[0][2] = document.all("week2").value;
	aMonth[0][3] = document.all("week3").value;
	aMonth[0][4] = document.all("week4").value;
	aMonth[0][5] = document.all("week5").value;
	aMonth[0][6] = document.all("week6").value;
	/*
	aMonth[0][0] = "Sunday";
	aMonth[0][1] = "Monday";
	aMonth[0][2] = "Tuesday";
	aMonth[0][3] = "Wednesday";
	aMonth[0][4] = "Thursday";
	aMonth[0][5] = "Friday";
	aMonth[0][6] = "Saturday";*/
	
	var dDayInCurrentMonth = new Date(iYearValue, iMonthValue - 1, 1);
	
	var iDayOfFirst = dDayInCurrentMonth.getDay();
	var dDayBeforeNextMonth = new Date(iYearValue, iMonthValue, 0);
	
	var iDaysInMonth = dDayBeforeNextMonth.getDate();
	var iVarDate = 1;
	for (d = iDayOfFirst; d < 7; d++) {
		aMonth[1][d] = iVarDate;
		iVarDate++;
	}
	for (w = 2; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (iVarDate <= iDaysInMonth) {
				aMonth[w][d] = iVarDate;
				iVarDate++;
			}
		}
	}
	return aMonth;
}

//	函数: 切换显示状态
//	参数: szYearName, szMonthName, szDayName, oCalendar, bPosition, iX, iY
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       szDayName:		日控件名称
//       oCalendar:		日历控件对象
//       bPosition:		日历控件位置(0: 下 1: 上)
//       iX:			横坐标数值
//       iY:			纵坐标数值
//	返回: 无

function fnSwitchVisibility(szYearName, szMonthName, szDayName, oCalendar, bPosition, iX, iY) {
	fnDCancelBubble();
	
	if (IsDDisabledVar(szYearName)) {
		return;
	}
	if (document.onclick != null) {
	    document.onclick();
	}
	oTemp = document.all(szYearName);
	var left = 0;
	var top = 0;
	for (; oTemp != document.body; oTemp = oTemp.offsetParent) {
		left += oTemp.offsetLeft;
		top  += oTemp.offsetTop;
	}
	
	oCalendar.style.left = event.clientX - 111 + iX - event.offsetX
	if (bPosition == 1)
		oCalendar.style.top = event.clientY - 150 + iY - event.offsetY
	else 
		oCalendar.style.top = event.clientY + 10 + iY - event.offsetY

	iYearValue = Dtrim(document.all(szYearName).value);
	iMonthValue = Dtrim(document.all(szMonthName).value);
	iDayValue = Dtrim(document.all(szDayName).value);
	
	var re = /^[\-\+]?([1-9]\d*|0|[1-9]\d{0,2}(,\d{3})*)$/;
	
	dTemp = new Date();
	
	if (iYearValue == "" || !re.test(iYearValue) ) {
	    iYearValue = dTemp.getYear();
	}
	if (iMonthValue == "" || !re.test(iMonthValue)) {
	    iMonthValue = dTemp.getMonth() + 1;
	   
	}
	else if (iMonthValue>12)
	    	iMonthValue = 12
	if (iDayValue == "" || !re.test(iDayValue)) {
			//iDayValue = dTemp.getDate();
	        iDayValue = "";
	}
	g_iYearValue = iYearValue;
	g_iMonthValue = iMonthValue;
	g_iDayValue = iDayValue;
	//alert(g_iDayValue);
	//alert("tab" + szDayName);
	
	fnUpdateCalendar(document.all("tab" + szDayName), iYearValue, iMonthValue, szYearName, szMonthName);
	if (g_oPreviousDate && g_oPreviousDate.id != oCalendar.id) {
		g_oPreviousDate.style.display = "none";
	}
	if (oCalendar.style.display == "block") {
		oCalendar.style.display = "none";
		if (g_fnDocOnclick + "" != "undefined") {
			document.onclick = g_fnDocOnclick;
			document.onkeydown = g_fnDocOnkeydown;
			g_fnDocOnclick = "";
			g_fnDocOnkeydown = "";
		}
	} else {
		oCalendar.style.display = "block";
		g_oPreviousDate = oCalendar;
		g_fnDocOnclick = document.onclick;
		g_fnDocOnkeydown = document.onkeydown;
		document.onclick = fnDocOnclick;
		document.onkeydown = fnDocOnkeydown;
	}
}

//	函数: 选择日期
//	参数: oCellElement, szYearName, szMonthName, szDayName
//       oCellElement:	单元元素对象
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       szDayName:		日控件名称
//	返回: 无

function fnSetSelectedDay(oCellElement, szYearName, szMonthName, szDayName) {
	if (oCellElement.id == "calCell") {
		var szYear = "";
		var szMonth = "";
		var szDay = "";
		if (!isNaN(parseInt(oCellElement.children["calDateText"].innerText))) {
			szYear = document.all("lbl" + szYearName).innerText;
			szMonth = document.all("lbl" + szMonthName).innerText;
			szDay = oCellElement.children["calDateText"].innerText;
		}
		document.all(szYearName).value = szYear;
		document.all(szMonthName).value = szMonth;
		document.all(szDayName).value = szDay;
		//if (document.all("tuiFormChanged")) {
		//	document.all("tuiFormChanged").value = 1;
		//}
		fnHideCalendar();
	}
	return true;
}

//	函数: 隐藏日历控件
//	参数: 无
//	返回: 无

function fnHideCalendar() {
	if (g_oPreviousDate) {
		g_oPreviousDate.style.display = "none";
	}
	if (g_fnDocOnclick + "" != "undefined") {
			document.onclick = g_fnDocOnclick;
			document.onkeydown = g_fnDocOnkeydown;
			g_fnDocOnclick = "";
			g_fnDocOnkeydown = "";
	}
}

//	函数: document的onclick函数
//	参数: 无
//	返回: 无

function fnDocOnclick() {
	fnHideCalendar();
}

//	函数: document的onkeydown函数
//	参数: 无
//	返回: 无

function fnDocOnkeydown() {
    if (window.event.keyCode==9 || window.event.keyCode==27) {
		fnHideCalendar();
	}
}

//	函数: 设置日历控件禁用状态
//	参数: szYearName, szMonthName, szDayName
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       szDayName:		日控件名称
//	返回: 无

function fnSetDateEditDisabled(szYearName, szMonthName, szDayName) {
	document.all(szYearName).disabled = true;
	document.all(szMonthName).disabled = true;
	document.all(szDayName).disabled = true;
	DDisableVar(szYearName);
}

//	函数: 设置日历控件起用状态
//	参数: szYearName, szMonthName, szDayName
//       szYearName:	年控件名称
//       szMonthName:	月控件名称
//       szDayName:		日控件名称
//	返回: 无

function fnSetDateEditEnabled(szYearName, szMonthName, szDayName) {
	document.all(szYearName).disabled = false;
	document.all(szMonthName).disabled = false;
	document.all(szDayName).disabled = false;
	DEnableVar(szYearName);
}

//	函数: 设置日历控件数据是否改变的状态
//	参数: 无
//	返回: 无

function fnDateEditChanged() {
	if (document.all("tuiFormChanged")) {
		document.all("tuiFormChanged").value = 1;
	}
}

