document.write("<div id='CalendarLayer' style='position:absolute; width:142px;height:169px; top:100px; left:200px; z-index:9998; border:0px; Display:none'>");
document.write("<iframe id=frmCalendar src='javascript/Calendar.htm' height=100% width=142 frameborder=0 style='border:1px solid #000000;z-index:9999; background:#fff;'></iframe></div>");

//********************************
//常量
//********************************

var DAY_POSTFIX = "_DAYDDL";//日控件后缀

var YEAR_MONTH_POSTFIX = "_YMDDL";//年月后缀

var WEEKDAY_POSTFIX = "_WKLBL";//星期后缀

var IMG_POSTFIX = "_CALIMG";//选择图片后缀

var LIMIT_POSTFIX = "_LMTTXT";//可用日期文本框后缀

var DISABLE_POSTFIX = "_DISTXT";//限制日期文本框后缀

var DEFAULT_POSTFIX = "_DEFAULT";//日期初值文本框后缀

var TD_DAY = "CalendarDayTD";//日期格ID

var ArrWeekDayName = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

var ArrDaysOfMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var MonthName = new Array("Jan.", "Feb.", "Mar.", "Apr.", "May.", "Jun.", "Jul.", "Aug.", "Sep.", "Oct.", "Nov.", "Dec.");

//全局变量
var isIE = document.all?true:false;
if(isIE){
  var Calendar = frmCalendar;
}else{
  var Calendar = document.getElementById('frmCalendar');
}

var ServerDate = new Date(2001,1,1);
var arrDayTd=new Array(37); 
var currYear;
var currMonth;
var currGroupName;


//********************************
//获取系统时间
//********************************
function GetSystemDate()
{
	try{
		var strDate = frmCalendar.frmServerDate.document.all.txtServerTime.value;
		var tmpArrDate = strDate.split('-');
		ServerDate = new Date(tmpArrDate[2], tmpArrDate[0]-1, tmpArrDate[1]);
	}catch(e){
		//alert("Can't get server's date");
	}
}

//********************************
//显示日历
//********************************
//objImg	按钮图片ID
//********************************
function ShowCalendar(objImg)
{
    var layerStyle  = document.getElementById('CalendarLayer').style;

	
	var imgTop  = objImg.offsetTop;
	var imgHeight  = objImg.clientHeight;
	var imgLeft = objImg.offsetLeft;
	var imgType  = objImg.type; 
	
	var tmpObj = objImg.offsetParent;
	while (tmpObj != null){
		imgTop += tmpObj.offsetTop; 
		imgLeft += tmpObj.offsetLeft;
		tmpObj = tmpObj.offsetParent;
	}
	
	layerStyle.top  = imgTop + imgHeight;
	layerStyle.left = imgLeft;

	//Show Calendar
	layerStyle.display = '';
	
	var strGroupName = GetGroupName(objImg, IMG_POSTFIX);

	currGroupName = strGroupName;
	
 	InitDateLimit(strGroupName);

 	var selectDt = GetDate(strGroupName);
	SetCalDate(selectDt.getFullYear(), selectDt.getMonth() + 1);
	
	return false;
}

//********************************
//设置日历头部
//********************************
//intYear	年
//intMonth	月
//********************************
function SetCalHeader(intYear, intMonth)
{
    if(isIE){
	Calendar.document.all.YearHeader.innerText  = intYear;
	}else{
    Calendar.contentWindow.document.getElementById('YearHeader').textContent = intYear;
    }
	if(isIE){
	Calendar.MonthHeader.innerText = MonthNumToName(intMonth);
	}else{
    Calendar.contentWindow.document.getElementById('MonthHeader').textContent = MonthNumToName(intMonth);
    }
	
}


//********************************
//取得月份文字
//********************************
//intMonth	月
//********************************
function MonthNumToName(intMonth) {
    return MonthName[intMonth - 1];
}


//********************************
//获取当月天数
//********************************
//intYear	年
//intMonth	月
//********************************
function GetMonthCount(intYear, intMonth)
{
	var intDyas = ArrDaysOfMonth[intMonth - 1];
	if((intMonth == 2) && IsLeapYear(intYear)) {
		intDyas = 29;
	}
	
	return intDyas;
}

//********************************
//判断是否为闰年
//********************************
//intYear	年
//********************************
function IsLeapYear(intYear) 
{
	if((intYear % 4 == 0 && intYear % 100 != 0) || intYear % 400 == 0 ) {
		return true;
	}
		
	return false;
}
 

//********************************
//设置日历月份
//********************************
//intYear	年
//intMonth	月
//********************************
function SetCalDate(intYear, intMonth) 
{	
	currYear = intYear;
	currMonth = intMonth;
	
	SetCalHeader(intYear, intMonth);

	for (var i = 0; i < 37; i++){
		arrDayTd[i]=-1;
	}
	
	var currDay = 1;
	var intDays = GetMonthCount(intYear, intMonth) + 1;
	var firstday = new Date(intYear, intMonth - 1, 1).getDay();

	for (var i = firstday; currDay < intDays; i ++){
		arrDayTd[i] = currDay;
		currDay ++;
	}
	
	for (var i = 0; i < 37; i++)
	{   
	    if(isIE){
		var objTd = Calendar.document.getElementById(TD_DAY + i);
		}else{
		var objTd = Calendar.contentWindow.document.getElementById(TD_DAY + i);
		}
		 		
		if (arrDayTd[i] != -1) {

			var currDate = new Date(intYear, intMonth - 1, arrDayTd[i]);
			if(isDateEnable(currDate))
			{ 
				objTd.innerHTML = "<b>" + arrDayTd[i] + "</b>";
				objTd.className = "dayNormal";
			}
			else
			{
				objTd.innerHTML = "<b>" + arrDayTd[i] + "</b>";
	  			objTd.className = "dayDisable"
			}
		}
		else
		{
  			objTd.innerHTML="";
  			objTd.className ="dayNone";
  			
		}
	}
}

//********************************
//初始化日期限制
//********************************
//objImg	按钮图片ID
//********************************
var arrLimitDates;
var arrDisableDates;
function InitDateLimit(strGroupName) {

	//可用
	arrLimitDates = new Array();
	
	var limitObjID = strGroupName + LIMIT_POSTFIX;
	var limitObj = document.getElementById(limitObjID);
		
	if(limitObj != null) {
		var strLimit = limitObj.value;
		if(strLimit != "") {
			var arrLimit = strLimit.split(';');
			var limitLen = arrLimit.length;
			var arrTmp, dateFrom, dateTo, arrDate;
			for(var i = 0; i < limitLen; i++) {
				if(arrLimit[i] != "") {
					var arrLimitGroup = new Array();
					
					arrTmp = arrLimit[i].split(',');
					
					arrDate = arrTmp[0].split('-');
					dateFrom = new Date(arrDate[0], arrDate[1]-1, arrDate[2], 0, 0, 0);
					arrLimitGroup.push(dateFrom);
					
					if(arrTmp[1] != null) {
						arrDate = arrTmp[1].split('-');
						dateTo = new Date(arrDate[0], arrDate[1]-1, arrDate[2], 23, 59, 59);
						arrLimitGroup.push(dateTo);
					}
								
					arrLimitDates.push(arrLimitGroup);
				}	
			}
		}
	}
	
	//限制
	arrDisalbeDates = new Array();
	
	var disObjID = strGroupName + DISABLE_POSTFIX;
	var disObj = document.getElementById(disObjID);
		
	if(disObj != null) {
		var strDis = disObj.value;
		if(strDis != "") {
			var arrDis = strDis.split(';');
			var disLen = strDis.length;
			var arrTmp, dateFrom, dateTo, arrDate;
			for(var i = 0; i < disLen; i++) {
				if(arrDis[i] != "") {
					var arrDisGroup = new Array();
					
					arrTmp = arrDis[i].split(',');
					
					arrDate = arrTmp[0].split('-');
					dateFrom = new Date(arrDate[0], arrDate[1]-1, arrDate[2], 0, 0, 0);
					arrDisGroup.push(dateFrom);
					
					if(arrTmp[1] != null) {
						arrDate = arrTmp[1].split('-');
						dateTo = new Date(arrDate[0], arrDate[1]-1, arrDate[2], 23, 59, 59);
						arrDisGroup.push(dateTo);
					}
								
					arrDisalbeDates.push(arrDisGroup);
				}	
			}
		}
	}
	
	currGroupName = strGroupName;
}

//********************************
//检查日期是否可用
//********************************
//dtCurr	待检查日期
//********************************
function isDateEnable(dtCurr){

	var isEnable = false;
	dtCurr.setHours(23, 59, 59);
				
	if(dtCurr < ServerDate) {
		return false;
	}
	
	var limitLen = arrLimitDates.length;
	
	var arrDate;
	if( limitLen > 0 ) {
		for( var i = 0; i < limitLen; i++) {
			arrDate = arrLimitDates[i];
			if((arrDate.length == 2) && (dtCurr >= arrDate[0] && dtCurr <= arrDate[1])){
				isEnable = true;
				break;
			}else if((arrDate.length == 1) && (dtCurr >= arrDate[0])){
				isEnable = true;
				break;
			}
		}
	
		if(!isEnable) {
			return false;
		}
	}
	
	var disLen = arrDisalbeDates.length;
	
	if( disLen > 0 ) {
		for( var i = 0; i < limitLen; i++) {
			arrDate = arrDisalbeDates[i];
			if((arrDate.length == 2) && (dtCurr >= arrDate[0] && dtCurr <= arrDate[1])){
				isEnable = false;
				break;
			}else if((arrDate.length == 1) && (dtCurr >= arrDate[0])){
				isEnable = false;
				break;
			}
		}
	
		if(!isEnable) {
			return false;
		}		
	}

	return true;
}


//********************************
//检查年月是否可用
//********************************
//intYear	待检查年
//intMonth	待检查月
//********************************
function isYearMonthEnable(intYear, intMonth) {
	var isEnable = false;
	
	var limitLen = arrLimitDates.length;
	
	var arrDate;
	if( limitLen > 0 ) {
		for( var i = 0; i < limitLen; i++) {
		
			var tmpYear;
			var tmpMonth;
			
			arrDate = arrLimitDates[i];
			if(arrDate.length == 1) {
				var tmpYear = arrDate[0].getFullYear();
				var tmpMonth = arrDate[0].getMonth() + 1;
				
				if(intYear > tmpYear || (intYear >= tmpYear && intMonth >= tmpYear)) {
					isEnable = true;
				}
			}else if(arrDate.length == 2) {
				var tmpYearEnd;
				var tmpMonthEnd;
				
				var tmpYear = arrDate[0].getFullYear();
				var tmpMonth = arrDate[0].getMonth() + 1
				var tmpYearEnd = arrDate[1].getFullYear();
				var tmpMonthEnd = arrDate[1].getMonth() + 1				
				
				if((intYear > tmpYear && intYear < tmpYearEnd) ||
				   (intYear == tmpYear && intYear == tmpYearEnd && intMonth >= tmpMonth && intMonth <= tmpMonthEnd) ||
				   (intYear == tmpYear && intYear != tmpYearEnd && intMonth >= tmpMonth) ||
				   (intYear != tmpYear && intYear == tmpYearEnd && intMonth <= tmpMonthEnd)) {
					isEnable = true;
				}	
			}
		}
		
		if(!isEnable) {
			return false;
		}
	}

	return true;
}

//********************************
//前月
//********************************
function PrevMonth() 
{
	if(currMonth > 1){
		currMonth --
	}else{
		currYear --;
		currMonth = 12;
	}
	SetCalDate(currYear,currMonth);
}

//********************************
//后月
//********************************
function NextMonth() 
{
	if(currMonth == 12){
		currYear ++;
		currMonth = 1;
	}else{
		currMonth ++;
	}
	SetCalDate(currYear, currMonth);
}


//********************************
//页面点击事件
//********************************
window.document.onclick = function(e)
{ 

	    var _event = window.event?window.event:e;
		var _event_target = _event.srcElement?_event.srcElement:_event.target;

	with(_event_target)
	{ 
		if(id.indexOf(IMG_POSTFIX) == -1) {;
			HideCalendar();
		}
	}
} 

//********************************
//页面点击事件
//********************************
function CalendarDayClick(objDayTd)
{
	if(objDayTd.className != "dayNormal") {
		return;
	}
	
	var intYear = currYear;
	var intMonth = currMonth;
	
	var intDay = parseInt(objDayTd.innerText||objDayTd.textContent,10);

	var dtSelect = new Date(intYear, intMonth - 1, intDay);
	
	SetDate(currGroupName, dtSelect);
	
	
	
	try {
	
	    document.getElementById('D_DAYDDL').options[intDay-1].selected == "selected";
		doAfterDateSelected();
    }catch(e){
    }
	HideCalendar();
}

//********************************
//隐藏日历
//********************************
function HideCalendar() {
	document.getElementById('CalendarLayer').style.display = "none";
}

//********************************
//或许组名
//********************************
//objOfGroup	组控件
//strPostfix	该控件后缀
//********************************
function GetGroupName(objOfGroup, strPostfix){
	var objId = objOfGroup.id;
	var intLen = objId.length - strPostfix.length;
	var strGroupName = objId.substr(0,intLen);
	return strGroupName;
}
//********************************
//根据年月设置天数
//********************************
//objDay		日期控件
//intYear		年
//intMonth		月
//********************************
function InitDayDropDownList(objDay, intYear, intMonth) {
	//取得天数
	//alert( intYear);
	var intDays = ArrDaysOfMonth[intMonth - 1];
	
	if(intMonth == 2 && IsLeapYear(intYear)) {
		//2月且为闰年
		intDays = 29;
	}
	
	//前次天数
	intPreDays = objDay.options.length;
	//alert(intPreDays);

	
	//Clear All 
	for(var i = 0; i < intPreDays; i ++) {
		//objDay.remove(0);
	}
	var strGroupName = GetGroupName(objDay, DAY_POSTFIX);
	if(strGroupName != currGroupName) {
		InitDateLimit(strGroupName);
	}
	
	//Append
	for(var i = 1; i <= intDays; i ++) {
		var tmpDate = new Date(intYear, intMonth - 1, i);
		if(isDateEnable(tmpDate)) {
			//生成选项
			var optTmp = document.createElement("OPTION");
			//添加选项
			objDay.options.add(optTmp);
			//设置选项
			optTmp.innerText = i;
			optTmp.value = i;
		}
	}
	
	//设置星期
	ChgDay(objDay);
}

//********************************
//改变年月
//********************************
//objYearMonth		年月控件对象
//********************************
function ChgYearMonth(objYearMonth) {
	//获取年月
	var strValue = objYearMonth.value;
	var arrValue = strValue.split("-");
	var intYear = parseInt(arrValue[0],10);
	var intMonth = parseInt(arrValue[1],10);

	//获取组名
	
	var strGroupName = GetGroupName(objYearMonth, YEAR_MONTH_POSTFIX);
	
	//生成日控件ID
	
	var strDayID = strGroupName + DAY_POSTFIX;
	var objDay = document.getElementById(strDayID);
	
	InitDayDropDownList(objDay, intYear, intMonth);
}

//********************************
//改变日
//********************************
//ojbDay		日控件
//********************************
function ChgDay(objDay) {
	//获取日控件ID
	var strDayID = objDay.id;
	
	//获取组名
	var strGroupName = GetGroupName(objDay, DAY_POSTFIX);
	
	var strYearMonthID = strGroupName + YEAR_MONTH_POSTFIX;
	var objYearMonth = document.getElementById(strYearMonthID);
	
	var strWeekDayID = strGroupName + WEEKDAY_POSTFIX;
	var objWeekDay = document.getElementById(strWeekDayID);

	if(objWeekDay != null) {
		//获取年月
		var strValue = objYearMonth.value;
		var arrValue = strValue.split("-");
		var intYear = parseInt(arrValue[0],10);
		var intMonth = parseInt(arrValue[1],10);
		
		//获取日
		var intDay = parseInt(objDay.value,10);
		
		//生成日期
		var dtSelect = new Date(intYear, intMonth - 1, intDay);
        
		//设置星期
		SetWeekDay(objWeekDay, dtSelect);
	}
	
	try {
		doAfterDateSelected();
    }catch(e){
    }
}			

//********************************
//设置星期
//********************************
//ojbWeekDay		星期控件
//dtSelect			选择的日期
//********************************
function SetWeekDay(objWeekDay, dtSelect) {
	objWeekDay.innerHTML = ArrWeekDayName[dtSelect.getDay()];
}

//********************************
//设置日期
//********************************
//strGroupName		组名
//dtSelect			选择的日期
//********************************
function SetDate(strGroupName, dtSelect) {
    //alert(dtSelect);
	var strYearMonthID = strGroupName + YEAR_MONTH_POSTFIX;
	var objYearMonth = document.getElementById(strYearMonthID);

	var strDayID = strGroupName + DAY_POSTFIX;
	var objDay = document.getElementById(strDayID);

	var strDefaultID = strGroupName + DEFAULT_POSTFIX;
	var objDef = document.getElementById(strDefaultID);

	//初始化控件选择范围
	InitDateLimit(strGroupName);
	for(var i = 0; i < objYearMonth.options.length;) {
		var strValue = objYearMonth.options[i].value;
		var arrValue = strValue.split("-");
		var intYear = parseInt(arrValue[0],10);
		var intMonth = parseInt(arrValue[1],10);
		if(!isYearMonthEnable(intYear, intMonth)) {
			objYearMonth.remove(i);
		}else{
			i ++;
		}
	}
	
	
	if(dtSelect == null && objDef != null && objDef.value != "") {
		try{ 
			var strDef = objDef.value;
			var arrValue = strDef.split("-");
			var intYear = parseInt(arrValue[0],10);
			var intMonth = parseInt(arrValue[1],10);
			var intDay = parseInt(arrValue[2],10);
			dtSelect = new Date(intYear, intMonth - 1, intDay);
		}catch(ex) {
			dtSelect = null;
		}
	}
	if(dtSelect == null || dtSelect < ServerDate) {
		dtSelect = ServerDate;
	}

	if(!isDateEnable(dtSelect)) {
		var limitLen = arrLimitDates.length;
		var arrDate;
		if( limitLen > 0 ) {
			for( var i = 0; i < limitLen; i++) {
				arrDate = arrLimitDates[i];
				if(arrDate[0] > dtSelect) {
					dtSelect = arrDate[0];
					break;
				}
			}
		}		
	}
	
	objYearMonth.value =  dtSelect.getFullYear() + "-" + (dtSelect.getMonth() + 1);
	
	ChgYearMonth(objYearMonth);
	//设置日
	objDay.value = dtSelect.getDate();	
	
	
	ChgDay(objDay);	
	if(!isIE){
	//alert(document.getElementById('D_DAYDDL').getElementsByTagName('option').length);
	//window.location.reload();
	//document.getElementById('D_DAYDDL').getElementsByTagName('option')[0].innerHTML == "12";
	}
}

//********************************
//初始化
//********************************
//objDay		日期
//********************************
function InitDate(strDayID) {
	var objDay = document.getElementById(strDayID); 
	var strGroupName = GetGroupName(objDay, DAY_POSTFIX);

	SetDate(strGroupName);
}

//********************************
//设置日期
//********************************
//ojbYearMonth		年月控件
//objDay			日控件
//dtSelect			选择的日期
//********************************
function GetDate(strGroupName) {	
	var strYearMonthID = strGroupName + YEAR_MONTH_POSTFIX;
	var objYearMonth = document.getElementById(strYearMonthID);
	
	var strDayID = strGroupName + DAY_POSTFIX;
	var objDay = document.getElementById(strDayID);
	
	//获取年月
	var strValue = objYearMonth.value;
	var arrValue = strValue.split("-");
	var intYear = parseInt(arrValue[0],10);
	var intMonth = parseInt(arrValue[1],10);
	
	//获取日
	var intDay = parseInt(objDay.value,10);
	
	//生成日期
	var dtSelect = new Date(intYear, intMonth - 1, intDay);
	
	return dtSelect;
}

