﻿

var siteName = "/ICMWeb";//虛擬目錄名稱;只在顯示圖片(上一年，上一月，下一年，下一月)時有用

//用戶控件日期
function UCtrlDate()
{
	this.ID = "UCtrlDate1";
	this.Width = "100%";
	this.Year = 0;
	this.Month = 0;
	this.Day = 0;
	this.Parent = document.body;	//容器
	this.EnableDay = 0;	//有效天數
	this.TWDate = true; //true表台灣日期, false表西元日期
	this.IsImg=true;//是否顯示圖片(上一年，上一月，下一年，下一月)
	this.currentTD = null;	//當前TD
	this.Value = GetDate;
	
	//定義圖片
	this.IMG_NextMonth_Enabled = siteName +"/images/right.gif";
	this.IMG_NextMonth = siteName +"/images/right1.gif";
	this.IMG_PreMonth_Enabled = siteName +"/images/left.gif";
	this.IMG_PreMonth = siteName +"/images/left1.gif";
	this.IMG_NextYear =  siteName +"/images/right.gif";
	this.IMG_PreYear = siteName +"/images/left.gif";
	//定義顏色
	this.CBG_Title = "#EEFFDD";	//標題背景色
	this.CF_Title = "#000000";//標題字體色
	this.CBG_Head = "#FFFFFF";//星期的背景色
	this.CF_Head = "#000000";//星期的字體色
	this.CBG_Body_Enabled = "#FFFFFF";//主體有效背景色
	this.CF_Body_Enabled = "#000000"//主體有效字體色
	this.CBG_Body = "#FFFFFF";//主體無效背景色
	this.CF_Body = "#CBCBCB"//主體無效字體色
	this.CBG_Selected = "#FFFF00";//當前被選中的背景色
	this.CF_Selected = "#000000";//當前被選中的字體色
	this.CBG_OnMouseOver = "#FFFF00"; //鼠標放上去的背景色
	//定義字體大小
	this.FZ_Title = "12px";//標題字體大小
	this.FZ_Head = "12px";//星期字體大小
	this.FZ_Body = "12px";//主體字體大小
	
	//代理
	this.OnClick = null;

	Init(this,new Date());
	this.OnLoad = CreateTable;
}

//初使化變量
function Init(sender,curDate)
{
	sender.Year = curDate.getFullYear();
	sender.Month = curDate.getMonth()+1
	sender.Day = curDate.getDate();

}

//創建主體表格
function CreateTable()
{
	var args = CreateTable.arguments;
	var sender = null;
	if(args.length==1) sender = args[0];
	else sender = this;
	
	var ctDate = new Date();
	if(sender.Year==0) sender.Year = ctDate.getFullYear();
	if(sender.Month==0) sender.Month = ctDate.getMonth()+1;
	if(sender.Day==0) sender.Day = ctDate.getDate();

	var table = document.createElement("table");
	table.cellPadding=3;
	table.cellSpacing=0;
	table.rules="none";
	table.bordercolordark="#FFFFFF";
	table.borderColor = "#ebebeb";
	table.bgColor="#FFFFFF";
	table.width = sender.Width;
	table.id = sender.ID + "_Table";
	table.border = 1;
	CreateCaption(sender,table);
	CreateHead(sender,table);
	CreateBody(sender,table);
	sender.Parent.appendChild(table);
}

//創建標題
function CreateCaption(sender,table)
{
	var row = table.insertRow(table.rows.length);
	row.bgColor = sender.CBG_Title;
	row.style.height="22px";
	
	//上一年
	var cell = row.insertCell(0);
	cell.align = "center";
	cell.style.width = sender.Width/7;
	cell.style.color = sender.CF_Title;
	cell.style.fontSize = sender.FZ_Title;
	uctrlA = document.createElement("A");
	uctrlA.href="javascript:";
	uctrlA.PUCtrl = sender;
	uctrlA.onclick = PreYear;
	if(sender.EnableDay<=0)
	{
		if(!sender.IsImg) uctrlA.innerHTML = "上年";
		else CreateIMG(uctrlA,sender.IMG_PreYear);
	}
	cell.appendChild(uctrlA);
	//上一月
	var cell1 = row.insertCell(1);
	cell.style.width = sender.Width/7;
	cell1.align = "center";
	cell1.style.color = sender.CF_Title;
	cell1.style.fontSize = sender.FZ_Title;
	var pDate = new Date();
	var preDate = new Date(sender.Year + "/" + sender.Month + "/" + pDate.getDate());
	var isShow = false;
	if(preDate>pDate) isShow = true;
	if(sender.EnableDay<=0) isShow = true;
	uctrlA = document.createElement("A");
	uctrlA.href="javascript:";
	uctrlA.PUCtrl = sender;
	if(isShow) uctrlA.onclick = PreMonth;
	if(isShow)
	{
		if(!sender.IsImg)  uctrlA.innerHTML = "上月";
		else CreateIMG(uctrlA,sender.IMG_PreMonth_Enabled);
		cell1.appendChild(uctrlA);
	}
	else 
	{
		if(!sender.IsImg) cell1.innerHTML =  "上月";
		else CreateIMG(uctrlA,sender.IMG_PreMonth);
		cell1.appendChild(uctrlA);
	}
	//顯示年月日
	cell = row.insertCell(2);
	cell.style.width = sender.Width/7*3;
	cell.align = "center";
	cell.valign = "middle";
	cell.colSpan = 3;
	cell.style.color = sender.CF_Title;
	cell.style.fontSize = sender.FZ_Title;
	cell.PUCtrl = sender;
	if(sender.TWDate)
	{
		var txtYear = "<input type='text'  onblur='GoYear(this);' size='3' style='height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" +  (sender.Year-1911) + "'>";
		var txtMonth = "<input type='text' onblur='GoMonth(this);' size='1' style='height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";
		strHead = "民國" +  txtYear + "年 " + txtMonth + "月";
		//strHead = "民國" +  (sender.Year-1911) + "年 " + getMonthText(sender.Month) + "月";
	}
	else
	{
		var txtYear = "<input type='text' onblur='GoYear(this);'' size='4' style='width:40px;height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" +  (sender.Year) + "'>";
		var txtMonth = "<input type='text' onblur='GoMonth(this);' size='2' style='width:20px;height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";
		strHead = txtYear + " 年 " + txtMonth + "月";
		//strHead =  sender.Year + " 年 " + getMonthText(sender.Month) + "月";
	}
	cell.innerHTML = strHead;
	//下一月
	cell = row.insertCell(3);
	cell.style.width = sender.Width/7;
	cell.align = "center";
	cell.style.color = sender.CF_Title;
	cell.style.fontSize = sender.FZ_Title;
	var pDate = new Date();
	var cpDate = new Date(addDate(4,sender.EnableDay,pDate));
	var preDate = new Date(sender.Year + "/" + sender.Month + "/" + GetMaxDay(sender));//cpDate.getDate());
	var isNextMonth = false;
	if(preDate<cpDate) isNextMonth = true;
	if(sender.EnableDay<=0) isNextMonth = true;
	uctrlA = document.createElement("A");
	uctrlA.href="javascript:";
	uctrlA.PUCtrl = sender;
	if(isNextMonth) uctrlA.onclick = NextMonth;
	if(isNextMonth)
	{
		if(!sender.IsImg)  uctrlA.innerHTML = "下月";
		else CreateIMG(uctrlA,sender.IMG_NextMonth_Enabled);
		cell.appendChild(uctrlA);
	}
	else 
	{
		if(!sender.IsImg)  cell.innerHTML = "下月";
		else CreateIMG(uctrlA,sender.IMG_NextMonth);
		cell.appendChild(uctrlA);
	}
	//下一年
	cell = row.insertCell(4);
	cell.style.width = sender.Width/7;
	cell.align = "center";
	cell.style.color = sender.CF_Title;
	cell.style.fontSize = sender.FZ_Title;
	uctrlA = document.createElement("A");
	uctrlA.href="javascript:";
	uctrlA.PUCtrl = sender;
	uctrlA.onclick = NextYear;
	if(sender.EnableDay<=0)
	{
		if(!sender.IsImg) uctrlA.innerHTML = "下年";
		else CreateIMG(uctrlA,sender.IMG_NextYear);
	}
	cell.appendChild(uctrlA);
}

//創建星期
function CreateHead(sender,table)
{
	var row = table.insertRow(table.rows.length);
	row.bgColor = sender.CBG_Head;
	for(var i=0;  i<7; i++)
	{
		var cell = row.insertCell(i);
		cell.style.color = sender.CF_Head;
		cell.style.fontSize = sender.FZ_Head;
		cell.style.width = sender.Width/7;
		cell.align = "center";
		cell.innerHTML = WeekName(sender,i);
	}
}

//創建主體
function CreateBody(sender,table)
{
	var curDate = new Date(sender.Year + "/" + sender.Month + "/1" );
	var swk = curDate.getDay(); //取得當前月的第一天是星期幾
	var row = table.insertRow(table.rows.length);
	var dayID = 1;
	
	//第一行
	for(var i=0; i<swk; i++)
	{
		var cell = row.insertCell(i);
		cell.align = "center";
		cell.innerHTML = "&nbsp;";
	}
	for(var i=swk; i<7; i++)
	{
		var cell = row.insertCell(i);
		cell.align = "center";
		EnableDay(sender,cell,dayID++,i);
	}
	//中間行
	var lastDay = GetMaxDay(sender);
	var rows = parseInt((lastDay-dayID+1) / 7);
	for(var r=0; r<rows; r++)
	{
		row = table.insertRow(table.rows.length);
		for(var i=0; i<7; i++)
		{
			var cell = row.insertCell(i);
			cell.align = "center";
			EnableDay(sender,cell,dayID++,i);
		}
	}
	//最後行
	if(dayID<=lastDay)
	{
		row = table.insertRow(table.rows.length);
		var item = 0;
		while(dayID<=lastDay)
		{
			item++;
			var cell = row.insertCell(item-1);
			cell.align = "center";
			EnableDay(sender,cell,dayID++,item-1);
		}
		for(var i=0; i<7- item; i++)
		{
			var cell = row.insertCell(item+i);
			cell.align = "center";
			cell.innerHTML = "&nbsp;";
		}
	}

}

//有效日期
function EnableDay(sender,cell,dayID,item)
{
	var fontColor = sender.CF_Body_Enabled;
	if(item==0 || item==6) fontColor = "#FF0000";
	var curDate = new Date(sender.Year + "/" + sender.Month + "/" + dayID);
	var nowDate = new Date();
	nowDate = new Date(nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate());
	//var nowDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
	//alert(curDate<nowDate);
	if(sender.Year + "/" + sender.Month + "/" + dayID == nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate())
	{
			sender.currentTD = cell;
			cell.style.backgroundColor = sender.CBG_Selected;  //當前選中的字體背景色
			cell.style.color = sender.CF_Body_Enabled;//有效的字體色
			cell.style.fontSize = sender.FZ_Body;
			cell.PUCtrl = sender;
			cell.onclick = TD_OnClick;
			cell.style.color = fontColor;
			cell.innerHTML =  dayID;
	}
	else if(curDate<nowDate)
	{
		if(sender.EnableDay<=0)
		{
				cell.onmouseover = TD_OnMouseOver;
				cell.onmouseout = TD_OnMouseOut;
				cell.PUCtrl = sender;
				cell.onclick = TD_OnClick;
				cell.style.backgroundColor = sender.CBG_Body_Enabled;　//有效的背景色
				cell.style.color = sender.CF_Body_Enabled;//有效的字體色
				cell.style.fontSize = sender.FZ_Body;
				cell.style.color = fontColor;
				cell.innerHTML = dayID;
		}
		else
		{
			cell.style.backgroundColor = sender.CBG_Body;　//無效的背景色
			cell.style.color = sender.CF_Body;//無效的字體色
			cell.style.fontSize = sender.FZ_Body;
			cell.innerHTML =   dayID;
		}
	}
	else
	{
		nowDate.setDate(nowDate.getDate() + sender.EnableDay);
		if(curDate>=nowDate)
		{
			if(sender.EnableDay<=0)
			{
				cell.onmouseover = TD_OnMouseOver;
				cell.onmouseout = TD_OnMouseOut;
				cell.PUCtrl = sender;
				cell.onclick = TD_OnClick;
				cell.style.backgroundColor = sender.CBG_Body_Enabled;　//有效的背景色
				cell.style.color = sender.CF_Body_Enabled;//有效的字體色
				cell.style.fontSize = sender.FZ_Body;
				cell.style.color = fontColor;
				cell.innerHTML =  dayID;
			}
			else
			{
				cell.style.backgroundColor = sender.CBG_Body;　//無效的背景色
				cell.style.color = sender.CF_Body;//無效的字體色
				cell.style.fontSize = sender.FZ_Body;
				cell.innerHTML =   dayID;
			}
		}
		else
		{
			cell.onmouseover = TD_OnMouseOver;
			cell.onmouseout = TD_OnMouseOut;
			cell.PUCtrl = sender;
			cell.onclick = TD_OnClick;
			cell.style.backgroundColor = sender.CBG_Body_Enabled;　//有效的背景色
			cell.style.color = sender.CF_Body_Enabled;//有效的字體色
			cell.style.fontSize = sender.FZ_Body;
			cell.style.color = fontColor;
			cell.innerHTML = dayID;

		}
		
	}
}

function DeleteTable(sender)
{
	sender.Parent.removeChild(document.getElementById(sender.ID + "_Table"));
}

///獲得當前日期
function GetDate()
{
	if(this.TWDate)
	{
		return (this.Year-1911) + "-" + this.Month + "-" + this.currentTD.innerHTML;
	}
	else
	{
		return this.Year + "-" + this.Month + "-" + this.currentTD.innerHTML;
	}
}

function NextYear()
{
	sender = eval(this.PUCtrl);
	var cDate =  new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
	var strDate = addDate(6,1,cDate);
	var curDate = new Date(strDate);
	Init(sender,curDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function NextMonth()
{
	sender = eval(this.PUCtrl);
	var cDate =  new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
	var strDate = addDate(5,1,cDate);
	var curDate = new Date(strDate);
	Init(sender,curDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function PreYear()
{
	sender = eval(this.PUCtrl);
	var cDate =  new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
	var strDate = addDate(6,-1,cDate);
	var curDate = new Date(strDate);
	Init(sender,curDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function PreMonth()
{
	sender = eval(this.PUCtrl);
	var cDate =  new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
	var strDate = addDate(5,-1,cDate);
	var curDate = new Date(strDate);
	Init(sender,curDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function GoYear()
{
	var args = GoYear.arguments;
	var uctrlYear = args[0];
	var year = uctrlYear.value;
	//alert(year);
	//var td = uctrlYear.parentElement;
	var td = uctrlYear.parentNode;
	var sender = td.PUCtrl
	
	if(sender.TWDate) year= parseInt(year)+1911;
	var cDate =  new Date( year + "/" + sender.Month + "/" + sender.Day);
	Init(sender,cDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function GoMonth()
{
	var args = GoMonth.arguments;
	var uctrlMonth = args[0];
	//var td = uctrlMonth.parentElement;
	var td = uctrlMonth.parentNode;
	var sender = td.PUCtrl
	if(parseInt(uctrlMonth.value)<1) uctrlMonth.value= 1;
	if(parseInt(uctrlMonth.value)>12)uctrlMonth.value= 12;
	var cDate =  new Date(sender.Year + "/" + uctrlMonth.value + "/" + sender.Day);
	Init(sender,cDate);
	DeleteTable(sender);
	CreateTable(sender);
}

function TD_OnMouseOver()
{
	sender = eval(this.PUCtrl);
	this.style.backgroundColor = sender.CBG_OnMouseOver;
	this.style.cursor = "hand";
}
function TD_OnMouseOut()
{
	sender = eval(this.PUCtrl);
	if(sender.currentTD!=this)
		this.style.backgroundColor = sender.CBG_Body_Enabled;
}
function TD_OnClick()
{
	sender = eval(this.PUCtrl);
	if(sender.currentTD!=this)
	{
	    sender.currentTD = this;
	    try{
		sender.currentTD.style.backgroundColor = sender.CBG_Body_Enabled;
		sender.currentTD.style.color = sender.CF_Body_Enabled;
		sender.currentTD.style.backgroundColor = sender.CBG_Selected;
		sender.currentTD.style.color = sender.CF_Selected;
		}catch(e){}
		
	}
	if(sender.OnClick!=null) 
	   sender.OnClick(sender,sender.Value());
	//if(sender.BinderControl!=null)
	//	sender.BinderControl.value = sender.Value();
}


//獲得當前月的最大天數
function GetMaxDay(sender)
{
	var iYear=sender.Year;
	var iMonth=sender.Month;
    switch(iMonth)
    {
    	case 1:
    	case 3:
    	case 5:
    	case 7:
    	case 8:
    	case 10:
    	case 12:
				return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			var d = new Date(iYear+"/2/29");
			if(d.getMonth()==1)	return 29;
			else return 28
		}
}

//返回星期
function WeekName(sender,id)
{
	var weekName = "";
	if(sender.TWDate)
	{
		switch(id)
		{
			case 0:
				weekName = "日";
				break;
			case 1:
				weekName = "一";
				break;
			case 2:
				weekName = "二";
				break;
			case 3:
				weekName = "三";
				break;
			case 4:
				weekName = "四";
				break;
			case 5:
				weekName = "五";
				break;
			case 6:
				weekName = "六";
				break;
		}
	}
	else
	{
	switch(id)
		{
			case 0:
				weekName = "Su";
				break;
			case 1:
				weekName = "Mo";
				break;
			case 2:
				weekName = "Tu";
				break;
			case 3:
				weekName = "We";
				break;
			case 4:
				weekName = "Th";
				break;
			case 5:
				weekName = "Fr";
				break;
			case 6:
				weekName = "Sat";
				break;
		}
	}
	return weekName;
}

//獲得月份
function getMonthText(iMonth)
{

	switch(iMonth)
	{
		case 1:
			return "1";
		case 2:
			return "2";
		case 3:
			return "3";
		case 4:
			return "4";
		case 5:
			return "5";
		case 6:
			return "6";
		case 7:
			return "7";
		case 8:
			return "8";
		case 9:
			return "9";
		case 10:
			return "10";
		case 11:
			return "11";
		case 12:
			return "12";
		default:
			return "";
	}
}

//日期+
function addDate(type,NumDay,dtDate)
{
   var date = new Date(dtDate)
	type = parseInt(type) 
	lIntval = parseInt(NumDay)
	switch(type)
	{
		case 6 ://年
			date.setYear(date.getFullYear() + lIntval)
			break;
		case 7 : //季
			date.setMonth(date.getMonth() + (lIntval * 3) )
			break;
		case 5 ://月
			date.setMonth(date.getMonth() + lIntval)
			break;
		case 4 ://天
			date.setDate(date.getDate() + lIntval)
			break
		case 3 ://時
			date.setHours(date.getHours() + lIntval)
			break
		case 2 ://分
			date.setMinutes(date.getMinutes() + lIntval)
			break
		case 1 ://秒
			date.setSeconds(date.getSeconds() + lIntval)
			break;
		default:
	 } 
	return date.getFullYear() +'/' +  (date.getMonth()+1) + '/' +date.getDate()+ ' '+ date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
 }
 
 //創建圖片
 function CreateIMG(parentObj,src)
 {
	var uctrlImg = document.createElement("IMG");
	uctrlImg.src = src;
	uctrlImg.border = 0;
	parentObj.appendChild(uctrlImg);
 }
