/*--------------------------------------------------------------------------------------
*FunctionName：userInitCalendar(sIdName,sValue)
*Description：生成日期文本框
*Parameter：sIdName文本框的ID|Name,sValue文本框默认的数值
*Example：<script src="date.js"></script><script>userInitCalendar("date1",0);</script>
*Result：日期文本框
*Version：
*Author：李善举
*CompletedDate：2007-09-06
*--------------------------------------------------------------------------------------*/
function drawCalendar(sInputName,sInputValue)
{
	var width=20;
	var overColor="#000000";
	var outColor = "#cecece";
	var fontStyle = "cursor:pointer;color:#cd0000;font-size:12px;font-weight:bold;border:0px;text-align:center;";
	var firstStyle = "border:0px;text-align:center;border-top:1px solid #0000cd;";
	var inputStyle = "cursor:pointer;color:#000000;font-size:12px;font-weight:normal;border:1px solid "+outColor+";text-align:center;";
	with(document)
	{
		//添加文本框
		write("<input style=\""+inputStyle+"\" type=\"text\" id=\""+sInputName+"\" name=\""+sInputName+"\" readonly=\"true\" size=\"10\" maxlength=\"10\" value='"+sInputValue+"' onMouseOver=\"this.style.border='1px solid "+overColor+"'\" onMouseOut=\"this.style.border='1px solid "+outColor+"'\" onClick=\"showCalendar(event,1,'"+sInputName+"');\"/>　");
		//输出整个日历
		write("<div id=\""+sInputName+"_calendar\" name=\""+sInputName+"_calendar\" style=\"position:relative;display:none;\">");
		write("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"160\" style=\"font-size:12px;text-align:center;\">");
		write("<tbody>");
		write("<tr height=\"24\">");
		//调整月份
		write("<td width=\""+width+"\"><a style=\"cursor:pointer;padding-left:5px;\" onClick=\"adjustMonth(0,'"+sInputName+"');\" title=\"上一个月\">&lt;</a></td>");
		//调整年份
		write("<td width=\""+width+"\"><a style=\"cursor:pointer;\" onClick=\"adjustYear(0,'"+sInputName+"');\" title=\"上一年\">&lt;&lt;</td>");
		//输出当前年
		write("<td>");		
		write("<input style=\""+fontStyle+"\" type=\"text\" id=\""+sInputName+"_year\" name=\""+sInputName+"_year\" size='4' maxlength='4' onBlur=\"setCalendar('"+sInputName+"');\" />");
		write("</td>");
		//输出间隔
		write("<td>-</td>");
		//输出当前月
		write("<td>");
		write("<input style=\""+fontStyle+"\"  type=\"text\" id=\""+sInputName+"_month\" name=\""+sInputName+"_month\" size='2' maxlength='2' onBlur=\"setCalendar('"+sInputName+"');\"/>");
		write("</td>");
		//输出间隔
		write("<td>-</td>");
		//输出当前天
		write("<td id=\""+sInputName+"_day\" name=\""+sInputName+"_day\" style=\""+fontStyle+"\" width=\"30\"></td>");
		//调整年份
		write("<td  width=\""+width+"\"><a style=\"cursor:pointer;\"onClick=\"adjustYear(1,'"+sInputName+"');\" title=\"下一年\">&gt;&gt;</td>");
		//调整月份
		write("<td  width=\""+width+"\"><a style=\"cursor:pointer;padding-right:5px;\" onClick=\"adjustMonth(1,'"+sInputName+"');\" title=\"下一个月\">&gt;</td>");
		write("</tr>");
		//输出天干地
		write("<tr>");
		write("<td colspan=\"7\" id=\""+sInputName+"_lunar\" name=\""+sInputName+"_lunar\" style=\"color:#cd0000;\"></td>");
		write("<td colspan=\"2\" id=\""+sInputName+"_lunar\" name=\""+sInputName+"_lunar\" style=\"cursor:pointer;color:#0000cd;font-size:12px;\" onClick=\"showCalendar(event,0,'"+sInputName+"');\">关闭</td>");
		write("</tr>");
		write("<tr height='2'><td colspan='9'></td></tr>");
		//输出详日历
		write("<tr><td colspan=\"9\" style=\""+firstStyle+"\">");
		write("	<table width=\"100%\" style=\"border:0px solid #cccccc;font-size:12px;\" cellpadding=\"1\" cellspacing=\"0\">");
		write("	<tbody>");
		write("		<tr bgcolor=\"#cccccc\">");
		write("			<td>日</td>");
		write("			<td>一</td>");
		write("			<td>二</td>");
		write("			<td>三</td>");
		write("			<td>四</td>");
		write("			<td>五</td>");
		write("			<td>六</td>");
		write("		</tr>");
		//开始
		//---------------------------------------------------------
		for(i=1;i<=6;i++)
		{
			write("		<tr>");

			for(j=1;j<=7;j++)
			{
				write("			<td id=\""+sInputName+"_day_"+((i-1)*7+j)+"\" name=\""+sInputName+"_day_"+((i-1)*7+j)+"\" onClick=\"calendarFillInput(this,'"+sInputName+"');\" title='"+sInputName+"_day_"+((i-1)*7+j)+"' onMouseOver=\"x=this.style.backgroundColor;this.style.backgroundColor='#cccccc';this.style.textDecoration='none';\" onMouseOut=\"this.style.backgroundColor=x;this.style.textDecoration='underline';\"></td>");
			}
			write("		</tr>");				
		}
		//---------------------------------------------------------
		//结束
		write("	</tbody>");
		write("	</table>");
		write("</td></tr>");
		write("</tbody>");
		write("</table>");
		write("</div>");
	}
}
function getFirstDay(y,m)
{
	var today = new Date();
	today.setFullYear(y,m-1,1);
	return today.getDay();
}
//填充日历　
function redrawCalendar(tempDate,sInputName)
{
	var arrDate = tempDate.split("-");
	var year = document.getElementById(sInputName+"_year");
	var month = document.getElementById(sInputName+"_month");
	var lunar = document.getElementById(sInputName+"_lunar");
	var day = document.getElementById(sInputName+"_day");
	var y = parseInt(arrDate[0]);
	var m = parseInt(arrDate[1]);
	var d = parseInt(arrDate[2]);

	//改变年－月－日的值
	year.value = y;
	month.value = m;
	if(navigator.appName.indexOf("Explorer")>=0)
	{
		day.innerText = d;
		//填写天干地支
		lunar.innerText = lunarCalendar(y);
	}
	else
	{
		day.textContent = d;
		//填写天干地支
		lunar.textContent = lunarCalendar(y);
	}		

	//改变列表中的日历
	//---------------------------------------------------------
	//得到当月的第一天的星期数
	var first_day = getFirstDay(y,m);
	var total_days = getCalendarDays(y,m,d);

	for(i=1;i<=6;i++)
	{
		for(j=1;(i-1)*7+j<=first_day;j++)
		{
			setInnerText(sInputName+"_day_"+((i-1)*7+j),"");
		}
		for(;j<=7;j++)
		{
			if(((i-1)*7+j-first_day)>total_days)
			{
				setInnerText(sInputName+"_day_"+((i-1)*7+j),((i-1)*7+j-first_day-total_days));
				setNextMonthColor(sInputName+"_day_"+((i-1)*7+j));
			}
			else
			{
				setInnerText(sInputName+"_day_"+((i-1)*7+j),((i-1)*7+j-first_day));
				setCurrentMonthColor(sInputName+"_day_"+((i-1)*7+j));
			}
		}
	}
	//改变周末的颜色
	changeWeekendColor(sInputName);
	//---------------------------------------------------------
}
function setCurrentMonthColor(sParaName)
{
	var obj = document.getElementById(sParaName);
	obj.style.backgroundColor="#efefef";
	obj.style.color = "#0000cd";
	obj.style.textDecoration = "underline";
}
function setNextMonthColor(sParaName)
{
	var obj = document.getElementById(sParaName);
	obj.style.backgroundColor="#efefef";
	obj.style.color = "#666666";
	obj.style.textDecoration = "underline";
}
function changeWeekendColor(sInputName)
{
	var obj = null;
	var width = "22px";
	var height = "20px";
	var backcolor = "#E5E9F2";
	var fontcolor = "#cd0000";
	for(i=1;i<=42;i++)
	{
		obj = document.getElementById(sInputName+"_day_"+i);
		//设置单元格样式
		obj.style.width = width;
		obj.style.height = height;
		obj.style.borderLeft = "0px solid #cd0000";
		obj.style.borderTop = "0px solid #cd0000";
		obj.style.borderRight = "0px solid #cd0000";
		obj.style.borderBottom = "0px solid #cccccc";
		obj.style.textAlign = "center";
		obj.style.cursor = "pointer";
		
		if(navigator.appName.indexOf("Explorer")>=0 && obj.innerText!="" && (i%7==1 || i%7==0))
		{
			obj.style.backgroundColor=backcolor;	
			obj.style.color=fontcolor;
		}
		else
			if(navigator.appName.indexOf("Explorer")<0 && obj.textContent!="" && (i%7==1 || i%7==0))
			{
				obj.style.backgroundColor=backcolor;	
				obj.style.color=fontcolor;
			}
			else
			{
				;				
			}
		if(i>=35)
		{
			obj.style.border="0px";
		}
	}
}
function setInnerText(sParaName,sParaValue)
{
	var obj = document.getElementById(sParaName);
	if(navigator.appName.indexOf("Explorer")>=0)
	{
		obj.innerText = sParaValue;
	}
	else
	{
		obj.textContent = sParaValue;
	}
}
//验证日期的合法性
function checkCalendar(y,m,d)
{
	var years=new Array(1970,2070);
	//转换成整型数字
	y = parseInt(y);
	m = parseInt(m);
	if(m>12)
	{
		m = 1;
		y++;
	}
	if(m<1)
	{
		m = 12;
		y--;
	}
	if(y>years[1])
	{
		y = years[0];
	}
	else
		if(y<years[0])
		{
			y = years[1];
		}

	d = parseInt(d);
	var days = getCalendarDays(y,m,d);
	if(d>days)
	{
		d = days;
	}
	return y+"-"+m+"-"+d;
}
function getCalendarDays(y,m,d)
{
	if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
	{
		d = 31;
	}
	else
		if(m==4 || m==6 || m==9 || m==11)
		{
			d = 30;
		}
		else
		{
			//对于2月判断
			if(leapYear(y))
			{
				d = 29;
			}
			else
			{
				d = 28;
			}
		}
		return d;
}
//调整年数
function adjustYear(flag,sInputName)
{
	var year = document.getElementById(sInputName+"_year");
	var month = document.getElementById(sInputName+"_month");
	var day = document.getElementById(sInputName+"_day");
	var y,m,d;
	y = parseInt(year.value);
	m = parseInt(month.value);
	if(navigator.appName.indexOf("Explorer")>=0)
	{
		d = parseInt(day.innerText);
	}
	else
	{
		d = parseInt(day.textContent);
	}
	if(flag==0)
	{
		y--;
	}
	else
	{
		y++;
	}
	//验证日期的合法性
	var dateDefault = checkCalendar(y,m,d);
	//重新显示调整后的日历
	redrawCalendar(dateDefault,sInputName);
}
//调整月数
function adjustMonth(flag,sInputName)
{
	var year = document.getElementById(sInputName+"_year");
	var month = document.getElementById(sInputName+"_month");
	var day = document.getElementById(sInputName+"_day");
	var y,m,d;
	y = parseInt(year.value);
	m = parseInt(month.value);
	if(navigator.appName.indexOf("Explorer")>=0)
	{
		d = parseInt(day.innerText);
	}
	else
	{
		d = parseInt(day.textContent);
	}
	if(flag==0)
	{
		m--;
	}
	else
	{
		m++;
	}
	//验证日期的合法性
	var dateDefault = checkCalendar(y,m,d);
	//重新显示调整后的日历
	redrawCalendar(dateDefault,sInputName);
}
//计算天干地支
function lunarCalendar(yearNo)
{
	var t_year = (new Date()).getFullYear();
	if(isNaN(yearNo))
	{
		//非数字	
		alert("只能输入数字年份！");
		//return "";
	}
	else
		if(yearNo=="")
		{
			//没传值
			alert("请输入要查询的年份！");
			//return "";
		}
		else//是数字
			if(parseInt(yearNo)<4 || parseInt(yearNo)>9999)
			{
				//超出运算范围
				alert("请输入界于4-9999之间的年份！");
				//return "";
			}
			else//正确
			{
				t_year = parseInt(yearNo);
			}
	var tianganItems = "甲,乙,丙,丁,戊,己,庚,辛,壬,癸";
	var dizhiOneItems = "子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥";
	var dizhiTwoItems = "鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪";
	//将天干、地支拆分为数组。
	var tianganArray = tianganItems.split(",");
	var dizhiOneArray = dizhiOneItems.split(",");
	var dizhiTwoArray = dizhiTwoItems.split(",");		
	//定义天干名称
	var tianganName = "";
	//定义地支名称
	var dizhiOneName = "";
	//定义属相名称
	var dizhiTwoName = "";
	if((t_year-3)%10==0)
	{
		//天干整除
		tianganName = tianganArray[9];
	}
	else
	{
		//天干未整除
		tianganName = tianganArray[(t_year-3)%10-1];
	}		
	if((t_year-3)%12==0)
	{
		dizhiOneName = dizhiOneArray[11];
		dizhiTwoName = dizhiTwoArray[11];
	}
	else
	{
		dizhiOneName = dizhiOneArray[(t_year-3)%12-1];
		dizhiTwoName = dizhiTwoArray[(t_year-3)%12-1];
	}
	//返回结果串（格式：天干地支＋属相年）
	return tianganName+dizhiOneName+"("+dizhiTwoName+"年)";
}
//判断是否闰年
function leapYear(flag)
{
	flag = parseInt(flag);
	if(flag%400==0 || (flag%4==0 && flag%100!=0))
	{
		return true;
	}
	else
		return false;
}
function setCalendar(sInputName)
{
	//alert("tttt");
	var year = document.getElementById(sInputName+"_year");
	var month = document.getElementById(sInputName+"_month");
	var day = document.getElementById(sInputName+"_day");
	var y,m,d;
	if(isNaN(year.value) || isNaN(month.value))
	{
		y = (new Date()).getFullYear();
		m = parseInt((new Date()).getMonth())+1;
	}
	else
	{
		y = parseInt(year.value);
		m = parseInt(month.value);
	}
	if(navigator.appName.indexOf("Explorer")>=0)
	{
		d = day.innerText;
	}
	else
	{
		d = day.textContent;
	}
	//验证日期的合法性
	var dateDefault = checkCalendar(y,m,d);
	//重新显示调整后的日历
	redrawCalendar(dateDefault,sInputName);
}
function userInitCalendar(sInputName,sInputValue)
{	
	drawCalendar(sInputName,sInputValue);
	var today = new Date();
	y = today.getFullYear();
	//JS中月为0－11，故加1
	m = parseInt(today.getMonth())+1;
	d = today.getDate();
	//验证日期的合法性
	var dateDefault = checkCalendar(y,m,d);
	//alert(dateDefault);
	//return;
	//重新显示调整后的日历
	redrawCalendar(dateDefault,sInputName);
}
function calendarFillInput(obj,sInputName)
{
	var year = document.getElementById(sInputName+"_year");
	var month = document.getElementById(sInputName+"_month");
	var day = document.getElementById(sInputName+"_day");
	var obj2 = document.getElementById(sInputName);
	var temp = (obj.id).split("_");
	var y,m,d;
	y = year.value;
	m = month.value;
	//alert(temp[temp.length-1]+"==="+parseInt(obj.innerText));
	if(obj2.tagName!="INPUT")
	{
		alert("请添加文本框！");
		return false;
	}
	else
	{
		//alert("OK");
		if(navigator.appName.indexOf("Explorer")>=0)
		{			
			if(parseInt(temp[temp.length-1])>28 && parseInt(obj.innerText)<23)
			{
				if(m<12)
				{
					m = parseInt(m)+1;
				}
				else
				{
					m = 1;
					y = parseInt(y)+1;
				}
				
			}
			obj2.value = (obj.innerText=="")?(y+"-"+m+"-"+day.innerText):(y+"-"+m+"-"+obj.innerText);
		}
		else
		{
			if(parseInt(temp[temp.length-1])>28 && parseInt(obj.textContent)<28)
			{
				if(m<12)
				{
					m = parseInt(m)+1;
				}
				else
				{
					m = 1;
					y = parseInt(y)+1;
				}
			}
			obj2.value = (obj.textContent=="")?(y+"-"+m+"-"+day.textContent):(y+"-"+m+"-"+obj.textContent);
		}
		d = obj2.value.split("-")[2];
		//验证日期的合法性
		var dateDefault = checkCalendar(y,m,d);
		//重新显示调整后的日历
		redrawCalendar(dateDefault,sInputName);
		showCalendar(event,0,sInputName);
	}
}
//显示、隐藏日历
function showCalendar(obj,flag,sInputName)
{
	flag = parseInt(flag);
	var calendar = document.getElementById(sInputName+"_calendar");
	calendar.style.position = "absolute";
	//calendar.style.left = "-30px";
	//calendar.style.top = "-50px";
	//calendar.style.pixelLeft= parseInt(obj.offsetLeft)+20+"px";
	//calendar.style.pixelTop= parseInt(obj.offsetTop)+20+"px";
	var top = 0;
	var left = 0;
	if(document.all || window.event)
	{
		//IE
		top = (parseInt(obj.y)+20)+"px";
		left = (parseInt(obj.x))+"px"; 
	}
	else
	{
		//FF
		top = (parseInt(obj.pageY)+20)+"px";
		left = (parseInt(obj.pageX)-10)+"px"; 
	}	
	calendar.style.top = top;
	calendar.style.left = left;
	calendar.style.border="1px solid #cd0000";
	calendar.style.zIndex = "100";
	calendar.style.backgroundColor = "#ffefff";
	calendar.style.display = (flag==1)?"block":"none";
	//alert(calendar.parentElement.tagName);
}
