/**
 * 获取一个日期选择器
 * @param prefix	SELECT元素的name属性的前缀
 * @param precision	日期精度，支持的表达式：YY,MM,DD,HH,MI,SS
 * @param myDate	预先选中的日期
 * @param 日期选择器的HTML字符串
 */
function getDateSelect(prefix, precision, myDate)
{
	var dateSelect=null;
	if(myDate==null)
	{
		myDate=new Date();
	}
	if(precision==null)
	{
		precision="SS";
	}
	else
	{
		precision=precision.toUpperCase();
	}

	var year=myDate.getYear();
	dateSelect=_getSelect(prefix+"_year", year, year-100, year+10, "onchange=\"_setDate(this)\"")+"年";
	if(precision=="YY" || precision=="YYYY")
	{
		return dateSelect;
	}
	var month=myDate.getMonth()+1;
	dateSelect+=_getSelect(prefix+"_month", month, 1, 12, "onchange=\"_setDate(this)\"")+"月";
	if(precision=="MM")
	{
		return dateSelect;
	}
	var date=myDate.getDate();
	dateSelect+=_getSelect(prefix+"_date", date, 1, getDayCount(year, month-1))+"日";
	if(precision=="DD")
	{
		return dateSelect;
	}
	var hours=myDate.getHours();
	dateSelect+=_getSelect(prefix+"_hour", hours, 0, 23)+"时";
	if(precision=="HH")
	{
		return dateSelect;
	}
	var minutes=myDate.getMinutes();
	dateSelect+=_getSelect(prefix+"_minute", minutes, 0, 59)+"分";
	if(precision=="MI")
	{
		return dateSelect;
	}
	var seconds=myDate.getSeconds();
	dateSelect+=_getSelect(prefix+"_second", seconds, 0, 59)+"秒";
	if(precision=="SS")
	{
		return dateSelect;
	}
	else
	{
		return null;
	}
}
/**
 * 解析日期，格式：YYYY-MM-DD HH24:MI:SS  或者：YYYY-MM-DD
 * @param sDate	要解析的日期表达式
 * @return 日期对象
 */
function parseDate(sDate)
{
	var year=0,month=0,date=0,hours=0,minutes=0,seconds=0;
	if(sDate==null || sDate.length<1)
	{
		return null;
	}
	else if(sDate.length<8 || sDate.length>30)
	{
		alert("非法的日期表达式“"+sDate+"”。");
		return null;
	}
	else
	{
		var start=0;
		var end=sDate.indexOf("-",start);
		if(end!=4 || isNaN(sDate.substring(start,end)))
		{
			alert("无法从表达式“"+sDate+"”中解析年份。");
			return null;
		}
		else
		{
			year=sDate.substring(start,end);
			if(end>=sDate.length)
			{
				alert("表达式“"+sDate+"”无法解析。");
				return null;
			}
			else
			{
				start=end+1;
				end=sDate.indexOf("-",start);
				if(end<=start || isNaN(sDate.substring(start,end)))
				{
					alert("无法从表达式“"+sDate+"”中解析月份。");
					return null;
				}
				else
				{
					month=sDate.substring(start,end)-1;
					if(month<0 || month>11)
					{
						alert("表达式“"+sDate+"”中的月份值错误。");
						return null;
					}
					else if(end>=sDate.length)
					{
						alert("表达式“"+sDate+"”无法解析。");
						return null;
					}
					else
					{
						start=end+1;
						end=sDate.indexOf(" ",start);
						if(end==-1)
							end=sDate.length;
						if(end<=start || isNaN(sDate.substring(start,end)))
						{
							alert("无法从表达式“"+sDate+"”中解析日期。");
							return null;
						}
						else
						{
							date=sDate.substring(start,end);
							if(date<0 || date>getDayCount(year, month))
							{
								alert("表达式“"+sDate+"”中的日期值错误。");
								return null;
							}
							else if(end>=sDate.length)
							{
								
							}
							else
							{
								start=end+1;
								end=sDate.indexOf(":",start);
								if(end==-1)
									end=sDate.length;
								if(end<=start || isNaN(sDate.substring(start,end)))
								{
									hours=0;
								}
								else
								{
									hours=sDate.substring(start,end);
									if(hours<0 || hours>23)
									{
										alert("表达式“"+sDate+"”中的小时值错误。");
										return null;
									}
									else if(end>=sDate.length)
									{
										
									}
									else
									{
										start=end+1;
										end=sDate.indexOf(":",start);
										if(end==-1)
											end=sDate.length;
										if(end<=start || isNaN(sDate.substring(start,end)))
										{
											minutes=0;
										}
										else
										{
											minutes=sDate.substring(start,end);
											if(minutes<0 || minutes>59)
											{
												alert("表达式“"+sDate+"”中的分钟值错误。");
												return null;
											}
											else if(end>=sDate.length)
											{
												
											}
											else
											{
												start=end+1;
												end=sDate.indexOf(":",start);
												if(end==-1)
													end=sDate.length;
												if(end<=start || isNaN(sDate.substring(start,end)))
												{
													seconds=0;
												}
												else
												{
													//alert("start="+start+" ("+sDate.substring(0, start)+"), end="+end+" ("+sDate.substring(end)+"), "+sDate.substring(start,end));
													seconds=sDate.substring(start,end);
													if(seconds<0 || seconds>59)
													{
														alert("表达式“"+sDate+"”中的秒钟值错误。");
														return null;
													}
													else
													{
														//alert("seconds="+seconds);
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	//alert(year+"-"+(month+1)+"-"+date+" "+hours+":"+minutes+":"+seconds);
	var d=new Date();
	d.setYear(year);
	d.setMonth(month);
	d.setDate(date);
	d.setHours(hours);
	d.setMinutes(minutes);
	d.setSeconds(seconds);
	return d;
}
function _getSelect(name, selected, begin, end, attrib)
{
	var str="<select name=\""+name+"\""+(attrib==null?"":" "+attrib)+">";
	for(var i=begin; i<=end; i++)
	{
		if(i<10) str+="<option value='0"+i+"'";
		else str+="<option value='"+i+"'";
		if(i==selected)
			str+=" selected";
		str+=">"+i+"</option>";
	}
	str+="</select>";
	return str;
}
/**
 * 获取一个月的天数
 * @param nian	年份值
 * @param yue	月份值（从0开始，例如：0，1，2，3，4，5，6，7，8，9，10，11）
 * @return 天数，如果月份值非法，将返回-1
 */
function getDayCount(nian, yue)
{
	var ri=-1;
	if(yue==3 || yue==5 || yue==8 || yue==10)
	{
		ri=30;
	}
	else if(yue==1)
	{
		if((nian%4==0 && nian%100!=0) || nian%400==0)
			ri=29;
		else
			ri=28;
	}
	else if(yue>=0 && yue<=11)
	{
		ri=31;
	}
	return ri;
}
/**
* 改变天数
* @param obj	SELECT 对象
*/
function _setDate(obj)
{
	var year=-1;
	var month=-1;
	var dateSelect=null;
	if(obj.value.length>2)//年
	{
		year=parseInt(obj.value);
		var s=obj;
		var count=0;
		for(var i=0; i<1000&&(s=s.nextSibling)!=null; i++)
		{
			if(s.tagName=="SELECT")
			{
				count++;
			}
			if(month==-1 && count==1)
			{
				month=s.selectedIndex;
			}
			else if(count==2)
			{
				dateSelect=s;
				break;
			}
		}
	}
	else//月
	{
		month=obj.selectedIndex;
		var s=obj;
		for(var i=0; i<1000&&(s=s.previousSibling)!=null; i++)
		{
			if(s.tagName=="SELECT")
			{
				year=parseInt(s.value);
				break;
			}
		}
		s=obj;
		for(var i=0; i<1000&&(s=s.nextSibling)!=null; i++)
		{
			if(s.tagName=="SELECT")
			{
				dateSelect=s;
				break;
			}
		}
	}
	if(year==null || year==-1)
	{
		alert("无法获取年份值。");
	}
	else if(month==null || month==-1)
	{
		alert("无法获取月份值。");
	}
	else if(dateSelect==null)
	{
		alert("无法获取日期下拉列表。");
	}
	else
	{
		var dCount=getDayCount(year, month);
		if(dCount==-1)
		{
			alert("当月的天数计算失败（year="+year+", month="+month+"）。");
		}
		else if(dCount==dateSelect.length)
		{
		}
		else if(dCount<dateSelect.length)
		{
			for(var i=dateSelect.length-1; i>=dCount; i--)
			{
				dateSelect.options[i]=null;
			}
		}
		else
		{
			for(var i=dateSelect.length; i<dCount; i++)
			{
				dateSelect.options[i]=new Option(i+1, i+1);
			}
		}
	}
}