﻿<!--

	/*
		將傳入的字串前後空白去掉
	*/
	function gfunTrim(Src)
	{
		return Src.replace(/^[\s]+/g, "").replace(/[\s]+$/g,"")
	}
	
	/*
		將傳入的字串格式化成 yyyy/MM/dd
	*/
	function funFormatDate(fdate) 
	{
        if (fdate != '' && fdate !='&nbsp;') 
        { 
 			return fdate.substr(0,fdate.length-4) + "/" + fdate.substr(fdate.length-4,2) + "/" + fdate.substr(fdate.length-2,2) 
        }
        else 
        {
            return "";
        }    
    }

    /*
		檢查傳入的日期字串是否為日期型態
    */ 
	function isDate(date)
	{
    	var tyear,tmonth,tdate,tmp;
    	var Adate = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
    	
    	if (date.indexOf('/') >= 0)
    	{
    		var aryDate = date.split('/');
    		
    		if (aryDate.length != 3)
    		{
    			return false;
    		}
    		else
    		{
    			tyear = Number(aryDate[0]);
    			tmonth = Number(aryDate[1]);
    			tdate = Number(aryDate[2]);
    		}
    	}
    	else
    	{
    		if (date.length == 6) 
    		{
    			date = String(Number(date) + 19110000);
    		}  
	    	
    		if (date.length == 8)
    		{
	    		tyear = Number(date.substr(0,4));
				tmonth = Number(date.substr(4,2));
    			tdate = Number(date.substr(6,2));
    		}
    		else
    		{
	    		tyear = Number(date.substr(0,4));
				tmonth = Number(date.substr(5,2));
    			tdate = Number(date.substr(8,2));
    		}
    	}
    	
    	if (isNaN(tyear) || isNaN(tmonth) || isNaN(tdate))
    	{
    		return false;
    	}

    	if (tmonth>0 && tmonth<13) 
    	{
    		if (tmonth == 2) 
    		{
    			if (tyear % 400 != 0) 
    			{
    				if (tyear % 4 == 0) 
    				{
    					tmp = tyear / 4;
    					if (tmp % 100 == 0) 
    					{
    						if (tdate <= 0 || tdate > Adate[tmonth]) 
    						{
    							return false;
    						}
    					} 
    					else 
    					{
    						if (tdate <= 0 || tdate > 29) 
    						{
    							return false;
    						}
    					}
    				} 
    				else 
    				{
    					if (tdate <= 0 || tdate > Adate[tmonth]) 
    					{
    						return false;
    					}
    				}
    			} 
    			else 
    			{
    				if (tdate <= 0 || tdate > 29) 
    				{
    					return false;
    				}
    			}
    		} 
    		else 
    		{
    			if (tdate <= 0 || tdate > Adate[tmonth]) 
    			{
    				return false;
    			}
    		}
    	} 
    	else 
    	{
    		return false;
    	}
    	return true;
    }
 
	/*
		檢查傳入的字串是否為日期格式, 正確會回傳日期格式 yyyy/mm/dd, 錯誤回傳空字串
	*/
	function funCheckDate(strChkDate)
	{
		if (strChkDate.length == 0)
			return "";
			
		if (strChkDate.indexOf("/") < 0)
		{
			if (strChkDate.length == 8)
				strChkDate = funFormatDate(strChkDate)
			else
				return "";
		}
		else
		{
			var aryDate = new Array();
			aryDate = strChkDate.toString().split('/');
			if (aryDate[0].toString().length != 4)
			{
				return '';
			}
		}

		if (isDate(strChkDate))
			return strChkDate
		else
			return "";
	}

	function gfunCheckBan(strNO)
	{
		var SUM = 0;
		var cx = new Array;
		cx[0] = 1;
		cx[1] = 2;
		cx[2] = 1;
		cx[3] = 2;
		cx[4] = 1;
		cx[5] = 2;
		cx[6] = 4;
		cx[7] = 1;

		if (strNO.length != 8) 
		{
			return false;
		}
		var cnum = strNO.split("");
		for (i=0; i<=7; i++) 
		{
			if (strNO.charCodeAt() < 48 || strNO.charCodeAt() > 57) 
			{
				return false;
			}
			SUM += cc(cnum[i] * cx[i]);
		}
		if (SUM % 10 == 0) 
			return true
		else if (cnum[6] == 7 && (SUM + 1) % 10 == 0) 
			return true
		else 
			return false;
	}

	function cc(n)
	{
		if (n > 9) 
		{
			var s = n + "";
			n1 = s.substring(0,1) * 1;
			n2 = s.substring(1,2) * 1;
			n = n1 + n2;
		}
		return n;
	}
	
	function gfunLen(strSrc)
	{
		var intLength = 0;
		var intStringLength = 0;
		
		try
		{
			intLength = strSrc.length;
			for(var i=0; i< intLength; i++)
			{
				if (strSrc.charCodeAt(i) > 255)
				{
					intStringLength += 2;
				}
				else
				{
					intStringLength += 1;
				}
			}
		}
		catch (ex)
		{
			intStringLength = 0;
		}
		
		
		return intStringLength;
	}
	
	function gfunCheckID(strID)
	{
		if (strID.length != 10)
			return false;

		var strLetter = 'ABCDEFGHJKLMNPQRSTUVXYWZIO';		
		var d0 = strID.toUpperCase().charAt(0);	
		var d1 = strID.charAt(1);
		var d2 = strID.charAt(2);
		var d3 = strID.charAt(3);
		var d4 = strID.charAt(4);
		var d5 = strID.charAt(5);
		var d6 = strID.charAt(6);
		var d7 = strID.charAt(7);
		var d8 = strID.charAt(8);
		var d9 = strID.charAt(9);
		
		var iPos = strLetter.indexOf(d0);
		if (iPos < 0)
			return false
		else 
		{
			iPos += 1;
			var checksum = 8*d1+7*d2+6*d3+5*d4+4*d5+3*d6+2*d7+1*d8+1*d9;
			var x = iPos + 9
			var check1 = parseInt(x/10);
			var check2 = (x%10)*9;
			checksum=checksum + check2 + check1;
			if (checksum%10 == 0) 
				return true
			else 
				return false;
		}
	}
	
	function CalcSimpleBusinessDate(ct, motoNum)
	{
		count = 0;
		dt = new Date(ct);
		elp = eval(motoNum);
		if (elp >=0)
			seed = 1;
		else
			seed = -1;
		elp = Math.abs(elp);
		while (count < elp)
		{
			dt = new Date(seed * 86400000 + dt.getTime());
			n = dt.getDay() 
			if (n != 0 && n != 6)
				count++;
		}
		year = dt.getFullYear();
		month = dt.getMonth() + 1;
		if (month < 10) 
			month = '0' + month;
		date = dt.getDate();
		if (date < 10) 
			date = '0' + date;
		return(year + '/' + month + '/' + date);
	}

	function checkNum(dstText)
	{
		data = dstText.match(/[^0-9^.]/g);
		if (data || !dstText) return false;
			return true;
	}

	function CalcSimpleBusinessDate(ct, motoNum)
	{
		count = 0;
		dt = new Date(ct);
		elp = eval(motoNum);
		if (elp >=0)
			seed = 1;
		else
			seed = -1;
		elp = Math.abs(elp);
		while (count < elp)
		{
			dt = new Date(seed * 86400000 + dt.getTime());
			n = dt.getDay() 
			if (n != 0 && n != 6)
				count++;
		}
		year = dt.getFullYear();
		month = dt.getMonth() + 1;
		if (month < 10) 
			month = '0' + month;
		date = dt.getDate();
		if (date < 10) 
			date = '0' + date;
		return(year + '/' + month + '/' + date);
	}

	function MM_openBrWindow(theURL,winName,features) { //v2.0
		window.open(theURL,winName,features);
	}
	//Begin dHTML Toolltip Timer
	var tipTimer;
	//End dHTML Toolltip Timer

	function locateObject(n, d) { //v3.0
		var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.subString(p+1)].document; n=n.subString(0,p);}
		if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=locateObject(n,d.layers[i].document); return x;
	}

	function hideTooltip(object)
	{
		if (document.all)
		{
			locateObject(object).style.visibility="hidden"
			locateObject(object).style.left = 1;
			locateObject(object).style.top = 1;
			return false
		}
		else if (document.layers)
		{
			locateObject(object).visibility="hide"
			locateObject(object).left = 1;
			locateObject(object).top = 1;
			return false
		}
		else
			return true
	}

	function showTooltip(object,e, tipContent, backcolor, bordercolor, textcolor, displaytime)
	{
		window.clearTimeout(tipTimer)
	
		if (document.all)
		{
			locateObject(object).style.top=document.body.scrollTop+event.clientY+10
		
			locateObject(object).innerHTML='<table style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; border: '+bordercolor+'; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; background-color: '+backcolor+'" width="10" border="0" cellspacing="1" cellpadding="1"><tr><td nowrap><font style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; color: '+textcolor+'">'+unescape(tipContent)+'</font></td></tr></table> '

			if ((e.x + locateObject(object).clientWidth) > (document.body.clientWidth + document.body.scrollLeft))
			{	
				locateObject(object).style.left = (document.body.clientWidth + document.body.scrollLeft) - locateObject(object).clientWidth-10;
			}
			else
			{
				locateObject(object).style.left=document.body.scrollLeft+event.clientX
			}
			locateObject(object).style.visibility="visible"
			tipTimer=window.setTimeout("hideTooltip('"+object+"')", displaytime);
			return true;
		}
		else if (document.layers)
		{
			locateObject(object).document.write('<table width="10" border="0" cellspacing="1" cellpadding="1"><tr bgcolor="'+bordercolor+'"><td><table width="10" border="0" cellspacing="0" cellpadding="2"><tr bgcolor="'+backcolor+'"><td nowrap><font style="font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 11px; color: '+textcolor+'">'+unescape(tipContent)+'</font></td></tr></table></td></tr></table>')
			locateObject(object).document.close()
			locateObject(object).top=e.y+20

			if ((e.x + locateObject(object).clip.width) > (window.pageXOffset + window.innerWidth))
			{
				locateObject(object).left = window.innerWidth - locateObject(object).clip.width-10;
			}
			else
			{
				locateObject(object).left=e.x;
			}
			locateObject(object).visibility="show"
			tipTimer=window.setTimeout("hideTooltip('"+object+"')", displaytime);
			return true;
		}
		else
		{
			return true;
		}
	}

	function checkNum(dstText)
	{
		data = dstText.match(/[^0-9^.]/g);
		if (data || !dstText) return false;
			return true;
	}

	function isChecked(elm)
	{
		for (i = 0;  i < elm.length;  i++)
		{
		if (elm[i].checked)
			return true;
		}
		return false;
	}

	function makeArray()
	{
		var args=makeArray.arguments;
		for (var i = 0; i < args.length; i++)
		{
			this[i]=args[i];
		}
		this.length=args.length;
	}

	function isAllSpace(elm)
	{
		for (i = 0;  i < elm.length;  i++)
		{
			if (elm.charAt(i)!=" ")
				return false;
		}
		return true;
	}

	function isFilled(elm)
	{
		if (isAllSpace(elm.value) || elm.value==null) return false;
		else return true;
	}

	function isEMail(elm)
	{
		i=elm.value.indexOf("@");
		j=elm.value.indexOf(".",i);
		k=elm.value.indexOf(",");
		kk=elm.value.indexOf(";");
		kkk=elm.value.indexOf(" ");
		jj=elm.value.lastIndexOf(".") + 1;
		len=elm.value.length;
		if (len==0 || (i <= 0) || (j <= (1+1)) || (k != -1) || (kk != -1) || (kkk != -1) || (len-jj < 2) || (len-jj > 3)) 
			return false;
		else
			return true;
	}
	
	function isInt(elm)
	{
		var elmstr = elm.value + "";
		for (var i = 0; i < elmstr.length; i++)
		{
			if (elmstr.charAt(i) < "0" || elmstr.charAt(i) > "9")
			{
				return false;
			}
		}
		return true;
	}

	function isFloat(elm)
	{
		var elmstr = elm.value + "";
		for (var i = 0; i < elmstr.length; i++)
		{
			if (elmstr.charAt(i) < "0" || elmstr.charAt(i) > "9")
			{
				if (elmstr.charAt(i) != ".") return false;
			}
		}
		return true;
	}

	//身份證號檢查
	function isIdentityCard(elm)
	{
		var myid = elm.value.toUpperCase();
		if(myid.length > 10)
			return false; //"您的身分證字號超過10個字 !\n";
		if(myid.length < 10)
			return false; //"您的身分證字號不滿10個字 !\n";
		var c = myid.charAt(0);
		if(c < "A" || c > "Z")
			return false; //"您的身分證字號第一碼必須是大寫的英文字母 !\n";
		c = myid.charAt(1);
		if(c != "1" && c != "2")
			return false; //"您的身分證字號第二碼有問題 !\n";
		for(i=1;i<10;i++)
			if(isNaN(parseFloat(myid.charAt(i))))
				return false; //"您的身分證字號第二到十碼有問題 !\n";
		var alph = new Array("A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","X","Y","W","Z","I","O");
		var num = new Array("10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35");
		var n = 0;
		for(i = 0; i < alph.length; i++)
			if(myid.charAt(0) == alph[i])
				n=i;
		var tot1=parseFloat(num[n].charAt(0)) + (parseFloat(num[n].charAt(1)) * 9);
		var tot2=0;
		for(i=1;i<myid.length-1;i++)
			tot2=tot2 + parseFloat(myid.charAt(i))*(9-i);
		var tot3=parseFloat(myid.charAt(9));
		var tot4=tot1 + tot2 + tot3;
		if((tot4 % 10)!=0)
			return false; //"您的身分證字號有問題 !\n";
		return true;
	}


	//開啟放行視窗
	function OpenReleaseWindow()
	{
		var strWin;
		var strUrl;
		
		strUrl='/RMWeb/Control/ReleaseFrame.aspx';	
		
		strWin="dialogWidth=290px;dialogHeight=170px;center=yes;help=no;status=no;scrollbars=no;resize=no"
		
		try 
		{
			result=window.showModalDialog(strUrl,"ReleaseWindow",strWin);	
		}
		catch (ex)
		{

		}

		if (result == "1") 
		{
			window.Form1.btnRun.click();		
			return true;
		}
		else
		{
			return false;
		}
	}

	/*
		功能：顯示視窗選取User回傳
		參數：strType ==> 1.部門可變動 2.部門不可變動 3.所有單位可變動 4.所有單位不可變動 5.核貸委員選取 6.審查處選取核貸委員
			  strOrganID ==> 單位代碼，可空白
			  strUserID ==> 使用者代碼，可空白
			  strRejectUsers ==> 排除的UserID 可多個, 以('||')隔開, 若沒有, 給空字串即可
		回傳值：單位代碼/單位名稱|$|使用者代碼/使用者名稱
		Ex: 000300/資訊處|$|A02976/藍小忠
	*/
	/*
	function gfunSelectUser(strType, strOrganID, strUserID, strRejectUsers) 
	{
		if (strType == '')
		{
			return '';
		}
	
		if (strType != '1' && strType != '2' && strType != '3' && strType != '4'　&& strType != '5' && strType != '6')
		{
			return '';
		}
		
		var strRtn;
		
		try
		{
			strRtn = window.showModalDialog("/A12/ECA120.aspx?Type=" + strType + "&OrganID=" + strOrganID + "&UserID=" + strUserID + "&RejectUsers=" + strRejectUsers,"","dialogHeight:240px; dialogWidth: 500px; edge: Raised;center: Yes; help: No; resizable: No; status: No;").toString();
		}
		catch (ex)
		{
			strRtn = "";
		}

		return strRtn;		
	}
	*/
	/*
	//檢核小數點輸入格式			
	function gfunCheckNumeric(strInputValue, intLength,  intPrecision)
	{
		//strInputValue	輸入值
		//inLength 數值合法總長度
		//intPrecision 小數以下合法位數
					
		if (isNaN(strInputValue))
		{
			return false;
		}	
					
		var intInputLength = strInputValue.length;
		var intIntegerLength =( parseInt(intLength) - parseInt(intPrecision) );	
		var intPos=strInputValue.indexOf(".")+1;
					
		if (intPos> 0) 
		{
			var intInputIntegerLength =(intPos-1);
			var intInputDecLength =( intInputLength - intPos);
		}
		else
		{					
			var intInputIntegerLength = intInputLength ;
			var intInputDecLength = 0;
		}
					
		if ((intInputIntegerLength +intInputDecLength) > intLength) 
		{
			return false;
		}
		
		if (intPrecision == 0  &&  intInputDecLength > 0 ) 
		{
			return false;
		}	
		
		if (intInputIntegerLength > intIntegerLength  ) 
		{
			return false;
		}		
	
		if (intInputDecLength > intPrecision  ) 
		{
			return false;
		}
		return true;
	}			

			function funStopMsgProcess()
			{
				if (document.getElementById("__divShowMsg_") != null)
				{
					document.body.removeChild(document.getElementById("__divShowMsg_"));
				}			
			}
		
			function _funCreateMsgProcess()
			{
				funStopMsgProcess();
			
				var objTableFrame = document.createElement("table");
				objTableFrame.style.cssText = "FONT-SIZE: 10pt; BORDER-COLLAPSE: collapse; width:100%; height:100%;";
				objTableFrame.border="1";
				
				//標題欄
				var objRow = objTableFrame.insertRow();
				objRow.style.cssText = "height:25px";			
				var objCell = objRow.insertCell();
				objCell.style.cssText = "font-size: 10pt; color: #FFFFFF;"
				objCell.bgColor = "#0000FF";
				objCell.width = "100%";
				objCell.align = "middle";
				objCell.innerHTML = "訊 息 顯 示";
				
				//訊息欄
				objRow = objTableFrame.insertRow();
				objRow.style.cssText = "height:60px";		
				objCell = objRow.insertCell();
				objCell.bgColor = "White";
				objCell.width = "100%";
				objCell.align = "middle";

							
				//訊息欄的顯示動作
				var objTableMsg = document.createElement("table");
				objTableMsg.style.cssText = "FONT-SIZE: 10pt; BORDER-COLLAPSE: collapse; width:100%; height:100%;";
				objTableMsg.border="0";
				objTableMsg.bgColor = "#FFFFFF";
				//狀態img
				var objRowM = objTableMsg.insertRow();
				objRowM.style.cssText = "height:35px";
				
				var objCellM = objRowM.insertCell();
				objCellM.style.cssText = "font-size: 10pt; color: #FFFFFF;"
				objCellM.bgColor = "#FFFFFF";
				objCellM.width = "100%";
				objCellM.align = "middle";
				objCellM.innerHTML = "<img src='../images/waitbar.gif' width='140px' height='25px'  alt='請稍後'>";
				
				//狀態文字
				objRowM = objTableMsg.insertRow();
				objRowM.style.cssText = "height:25px";
				
				objCellM = objRowM.insertCell();
				objCellM.style.cssText = "font-size: 10pt; color: #000000;"
				objCellM.bgColor = "#FFFFFF";
				objCellM.width = "100%";
				objCellM.align = "middle";
				
				var objSpan = document.createElement("span");
				objSpan.id = "__spanShowProcess_";
				objCellM.appendChild(objSpan);

				objCell.appendChild(objTableMsg);
				
				//區塊
				var objDiv = document.createElement("div");
				objDiv.id = "__divShowMsg_";
				objDiv.style.cssText = "DISPLAY: none; WIDTH: 200px; POSITION: absolute; HEIGHT: 85px";
				objDiv.appendChild(objTableFrame);
								
				document.body.appendChild(objDiv);
			}
			
			function funProcess(varTitle, varProcess)
			{
				var objDiv = document.getElementById("__divShowMsg_");
				if (objDiv == null)
				{
					_funCreateMsgProcess();
				}
				//document.body.scroll = "no";
				objDiv = document.getElementById("__divShowMsg_");
				var varLeft=0;
				var varTop=0;
				var varH2 = document.body.scrollTop ;
				varLeft = ((document.body.clientWidth - 200) / 2);
				varTop = ((document.body.clientHeight - 85) / 2) + varH2 ;			
				objDiv.style.display="block";
				objDiv.style.top = varTop; //+ "px";
				objDiv.style.left = varLeft; //+ "px";
				document.getElementById("__spanShowProcess_").innerHTML = varTitle;

				//varProcess ++; 
				window.setTimeout("funProcess('" + varTitle + "', " + varProcess + ")", 100);
			}

//----------------------------------------------------------------------------------------------
	
	//開啟放行視窗
	function OpenReleaseWindow()
	{
		var strWin;
		var strUrl;
		
		strUrl='../../Control/ReleaseFrame.aspx';	
		
		strWin="dialogWidth=290px;dialogHeight=170px;center=yes;help=no;status=no;scrollbars=no;resize=no"
		
		try 
		{
			result=window.showModalDialog(strUrl,"ReleaseWindow",strWin);	
		}
		catch (ex)
		{

		}

		if (result == "1") 
		{
			window.Form1.btnRun.click();		
			return true;
		}
		else
		{
			return false;
		}
	}
	
	

	//Open Search Window
	function OpenSearchWindow(strQueryField,strOptionValue,strReturnField,intWinWidth,intWinHeight,intWinTop,intWinLeft)
	{					
		strUrl='../../Control/SearchForm.aspx';
		strQu='Qu='+strQueryField;		
		strOp='Op='+strOptionValue;		
		strRe='Re='+strReturnField;											 
		strUrl=strUrl+'?'+strQu+'&'+strOp+'&'+strRe;
		
		//若前端輸入之視窗長、寬、位置為0,則待入預設值
		if (intWinWidth==0)		{intWinWidth=200}				
		if (intWinHeight==0)	{intWinHeight=380}				
		if (intWinTop==0)		{intWinTop=100}				
		if (intWinLeft==0)		{intWinLeft=500}				
		
		var win = window.open (strUrl,
			'SearchForm',
			'toolbar=no,width='+intWinWidth+',height='+intWinHeight+',top='+intWinTop+',left='+intWinLeft+',directories=no,status=no,scrollbars=yes,resizable=1,menubar=no')
								
		win.focus();
		//showModalDialog Test!!!
		//strUnitId=document.Form1.txtUnitId.value;		
		//temp1='../../Control/SearchFrame.aspx';
		//temp2='Qu=UnitName';		
		//temp3='Op='+strUnitId;		
		//temp4='Re=txtUnitId';											 
		//strUrl=temp1+'?'+temp2+'&'+temp3+'&'+temp4;
		
		//strWin="dialogWidth=200px;dialogHeight=380px;dialogtop=100;dialogleft=500;help=no;status=no;scrollbars=no;resize=no"
		//result=window.showModalDialog(strUrl,
		//	"SearchForm",
		//	strWin);

	}
	
	//function checkQueryFieldAtLocal()
	//		{}
			
	//function checkUpdateFieldAtLocal()
	//		{}
	*/
	var undefined;

function isUndefined(property) {
  return (typeof property == 'undefined');
}

/****************************************************************************************\
Date.DateAdd(interval, number)
說明 
	傳回內容為某個基準日期加上數個時間間隔單位後的日期。 

語法
	object.DateAdd(interval, number)
	參數		說明 
	interval	必要項。字串運算式，表示所要加上去之時間間隔單位。其值請參考設定部份。 
	number		必要項。數值運算式，表示要加上之時間間隔單位的次數。
				其數值可以為正數(可得未來日期)，亦可以為負數(可得過去的日期)。 

設定
	引數 interval 的設定值如下:
	設定	說明			設定	說明
	yyyy	西元年			w		一週的日數
	q		季 				ww		週        
	m		月 				h		時        
	y		一年的日數 		n		分        
	d		日 				s		秒        

註解
	您可以使用 DateAdd 函數計算基準日期加上或減去您所指定的時間間隔後的結果。
	例如，您可以用 DateAdd 來計算從今天起三十天後或三十天前的日期是那一天；
	或者計算距離現在 45 分鐘前或 45 分鐘後的時間。
	如果時間間隔是以 [天] 來計算，interval 引數可以是 [一年的日數] ("y")，[日] ("d")，或 [一週的日數] ("w")。
\****************************************************************************************/
if (isUndefined(Date.prototype.DateAdd) == true) {
	Date.prototype.DateAdd = function (interval, number) {
		var nd = new Date(this);
		switch (interval) {
			case 'y':
			case 'd':
			case 'w':
				nd.setDate(nd.getDate() + number);
				break;
			case 'yyyy':
				nd.setYear(nd.getFullYear() + number);
				break;
			case 'q':
				nd.setMonth(nd.getMonth() + number * 3);
				break;
			case 'm':
				nd.setMonth(nd.getMonth() + number);
				break;
			case 'ww':
				nd.setDate(nd.getDate() + number * 7);
				break;
			case 'h':
				nd.setHour(nd.getHours() + number);
				break;
			case 'n':
				nd.setMinutes(nd.getMinutes() + number);
				break;
			case 's':
				nd.setSeconds(nd.getSeconds() + number);
				break;
			default:
		}
		return nd;
	};
}

/****************************************************************************************\
Date.toFormatString(interval, isAddZeroChar, index, iLength)
說明 
	傳回格式化的日期字串。

語法
	object.toFormatString(interval, isAddZeroChar, index, iLength)
	參數			說明 
	interval		必要項。字串運算式，表示所要回傳的方式。其值請參考設定部份。
	isAddZeroChar	必要項。布林運算式，表示是否以雙位數字回傳；即只有個位數時，於十位數補零。
	index			非必要項。數值運算式，要回傳字串的起始索引值，由零開始；預設為0。
					當index小於零時，則由右邊起算傳回特定數量的字元。
	iLength			非必要項。數值運算式，要回傳字串的長度；預設為字串原長度。

設定
	引數 interval 的設定值如下:
	設定	說明											備註
	ed		yyyy/mm/dd										
	et24	hh:nn:ss										(24hr)
	et12	hh:nn:ss am/pm									(12hr)
	edt24	yyyy/mm/dd hh:nn:ss								(24hr)
	edt12	yyyy/mm/dd hh:nn:ss	am/pm						(12hr)
	cd		yyyy年mm月dd日
	ct24	hh時nn分ss秒									(24hr)
	ct12	上午/下午 hh時nn分ss秒							(12hr)
	ct12e	上午/下午 hh:nn:ss								(12hr)
	cdt24	yyyy年mm月dd日 hh時nn分ss秒						(24hr)
	cdt12	yyyy年mm月dd日 上午/下午 hh時nn分ss秒			(12hr)
	td		民國yyy年mm月dd日
	tdt24	民國yyy年mm月dd日 hh時nn分ss秒					(24hr)
	tdt12	民國yyy年mm月dd日 上午/下午 hh時nn分ss秒		(12hr)
	esd		mm/dd
	csd		mm月dd日
備註
	以日期時間Wed Mar-9-2005 14:6:43為例：
	當interval為ed、isAddZeroChar為true時，將回傳2005/03/09；
	當interval為ed、isAddZeroChar為false時，將回傳2005/3/9；
	當interval為cdt24、isAddZeroChar為false時，將回傳2005年3月9日 14時6分43秒。
\****************************************************************************************/
if (isUndefined(Date.prototype.toFormatString) == true) {
	Date.prototype.toFormatString = function (interval, isAddZeroChar, index, iLength) {
		var n = new Date(this);
		var s = '';
		var t = '';
		switch (interval) {
			case 'ed':
			case 'edt24':
			case 'edt12':
				s = n.getFullYear() + '/' + 
					(isAddZeroChar ? (new String(n.getMonth() + 101).substr(1, 2)) : (n.getMonth() + 1)) + '/' + 
					(isAddZeroChar ? (new String(n.getDate() + 100).substr(1, 2)) : (n.getDate()));
				break;
			case 'cd':
			case 'cdt24':
			case 'cdt12':
				s = n.getFullYear() + '年' + 
					(isAddZeroChar ? (new String(n.getMonth() + 101).substr(1, 2)) : (n.getMonth() + 1)) + '月' + 
					(isAddZeroChar ? (new String(n.getDate() + 100).substr(1, 2)) : (n.getDate())) + '日';
				break;
			case 'td':
			case 'tdt24':
			case 'tdt12':
				if (isAddZeroChar) {
					s = '民國' + new String(n.getFullYear() - 911).substr(1, 3) + '年' +
						new String(n.getMonth() + 101).substr(1, 2) + '月' + 
						new String(n.getDate() + 100).substr(1, 2) + '日';
				} else {
					s = '民國' + (n.getFullYear() - 1911) + '年' + (n.getMonth() + 1) + '月' + n.getDate() + '日';
				}
				break;
			case 'esd':
				if (isAddZeroChar) {
					s = new String(n.getMonth() + 101).substr(1, 2) + '/' + new String(n.getDate() + 100).substr(1, 2);
				} else {
					s = (n.getMonth() + 1) + '/' + n.getDate();
				}
				break;
			case 'csd':
				if (isAddZeroChar) {
					s = new String(n.getMonth() + 101).substr(1, 2) + '月' + 
						new String(n.getDate() + 100).substr(1, 2) + '日';
				} else {
					s = (n.getMonth() + 1) + '月' + n.getDate() + '日';
				}
				break;
			default:
				break;
		}
		var hh = n.getHours();
		var h1 = (isAddZeroChar ? new String(hh + 100).substr(1, 2) : hh);
		var h2 = hh % 12;
		if (h2 == 0) {
			h2 = 12;
		} else {
			h2 = (isAddZeroChar ? new String(h2 + 100).substr(1, 2) : h2);
		}
		var nn = (isAddZeroChar ? new String(n.getMinutes() + 100).substr(1, 2) : n.getMinutes());
		var ss = (isAddZeroChar ? new String(n.getSeconds() + 100).substr(1, 2) : n.getSeconds());
		switch (interval) {
			case 'et24':
			case 'edt24':
				t = h1 + ':' + nn + ':' + ss;
				break;
			case 'et12':
			case 'edt12':
				t = h2 + ':' + nn + ':' + ss + ' ' + ((Math.floor(hh / 12) == 0) ? 'AM' : 'PM');
				break;
			case 'ct24':
			case 'cdt24':
			case 'tdt24':
				t = h1 + '時' + nn + '分' + ss + '秒';
				break;
			case 'ct12':
			case 'cdt12':
			case 'tdt12':
				t = ((Math.floor(hh / 12) == 0) ? '上午' : '下午') + ' ' + h2 + '時' + nn + '分' + ss + '秒';
				break;
			case 'ct12e':
				t = ((Math.floor(hh / 12) == 0) ? '上午' : '下午') + ' ' + h2 + ':' + nn + ':' + ss;
			default:
		}
		switch (interval) {
			case 'edt24':
			case 'cdt24':
			case 'tdt24':
			case 'edt12':
			case 'cdt12':
			case 'tdt12':
				s += ' ' + t;
				break;
			case 'ed':
			case 'cd':
			case 'td':
			case 'esd':
			case 'csd':
				break;
			default:
				s = t;
		}
		if (typeof(index) == 'undefined') index = 0;
		if (index < 0) index = s.length + index;
		if (typeof(iLength) == 'undefined') iLength = s.length - index;
		if (iLength > s.length - index) iLength = s.length;
		return s.substr(index, iLength);
	};
}

/****************************************************************************************\
Date.toFormat(interval)
說明 
	傳回使用者定義日期/時間格式字串。

語法
	object.toFormat(interval)
	參數			說明 
	interval		必要項。字串運算式，表示所要回傳的方式。其值請參考設定部份。

設定
	yy		將年份顯示成兩位數的數值格式，並且加上前置零 (如果需要的話)。  
	yyy		將年份顯示成四位數的數值格式。 
	yyyy	將年份顯示成四位數的數值格式。 
	d		將日期顯示成數字，且不需要前置零 (例如，1)。如果這是使用者定義數值格式中的唯一字元，請使用 %d。 
	dd		將日期顯示成數字，並且加上前置零 (例如，01)。 
	ddd		用縮寫來顯示星期幾 (例如，Sun)。 
	dddd	用完整名稱來顯示星期幾 (例如，Sunday)。 
	m		將月份顯示成數字，且不需要前置零 (例如，以 1 表示一月)。如果這是使用者定義數值格式中的唯一字元，請使用 %m。 
	mm		將月份顯示成數字，並且加上前置零 (例如，01/12/01)。  
	mmm		用縮寫來顯示月份 (例如，Jan)。 
	mmmm	用完整名稱來顯示月份 (例如，January)。 
	h		使用 12 小時制將小時顯示成數字，且不需要前置零 (例如，1:15:15 PM)。如果這是使用者定義數值格式中的唯一字元，請使用 %h。 
	hh		使用 12 小時制將小時顯示成數字，並且加上前置零 (例如，01:15:15 PM)。 
	H		使用 24 小時制將小時顯示成數字，且不需要前置零 (例如：1:15:15)。如果這是使用者定義數值格式中的唯一字元，請使用 %H。 
	HH		使用 24 小時制將小時顯示成數字，並且加上前置零 (例如：01:15:15)。 
	n		將分鐘顯示成數字，且不需要前置零 (例如，12:1:15)。如果這是使用者定義數值格式中的唯一字元，請使用 %n。 
	nn		將分鐘顯示成數字，並且加上前置零 (例如，12:01:15)。 
	s		將秒數顯示成數字，且不需要前置零 (例如，12:15:5)。如果這是使用者定義數值格式中的唯一字元，請使用 %s。 
	ss		將秒數顯示成數字，並且加上前置零 (例如，12:15:05)。 
	T		使用 12 小時制，並且在正午之前的任何小時加上顯示大寫 A；在正午與 11:59 PM 之前的任何小時加上顯示大寫 P。如果這是使用者定義數值格式中的唯一字元，請使用 %T。 
	TT		使用 12 小時制，並且在正午之前的任何小時加上顯示大寫 AM；在正午與 11:59 PM 之前的任何小時加上顯示大寫 PM。 
	t		使用 12 小時制，並且在正午之前的任何小時加上顯示小寫 a；在正午與 11:59 PM 之前的任何小時加上顯示小寫 p。如果這是使用者定義數值格式中的唯一字元，請使用 %t。 
	tt		使用 12 小時制，並且在正午之前的任何小時加上顯示小寫 am；在正午與 11:59 PM 之前的任何小時加上顯示小寫 pm。 
	z		顯示時區時差，且不需要前置零 (例如，-8)。如果這是使用者定義數值格式中的唯一字元，請使用 %z。 
	zz		顯示時區時差，並且加上前置零 (例如，-08) 
	zzz		顯示完整時區時差 (例如，-08:00) 
\****************************************************************************************/

if (isUndefined(Date.prototype.toFormat) == true) {
	Date.prototype.toFormat = function (interval) {
		var s = interval;
		var n = new Date(this);
		if (s.indexOf('yyyy', 0) != -1) {
			s = s.replace(/yyyy/g, n.getFullYear());
		} else if (s.indexOf('yyy', 0) != -1) {
			s = s.replace(/yyy/g, n.getFullYear() - 1911);
		} else if (s.indexOf('yy', 0) != -1) {
			s = s.replace(/yy/g, new String(n.getFullYear()).substr(2, 2));
		} 
		if (s.indexOf('mmmm', 0) != -1) {
			s = s.replace(/mmmm/g, n.getMonthString(false));
		} else if (s.indexOf('mmm', 0) != -1) {
			s = s.replace(/mmm/g, n.getMonthString(true));
		} else if (s.indexOf('mm', 0) != -1) {
			s = s.replace(/mm/g, new String(n.getMonth() + 101).substr(1, 2));
		} else if (s.indexOf('%m', 0) != -1) {
			return n.getMonth() + 1;
		} else if (s.indexOf('m', 0) != -1) {
			s = s.replace(/m/g, (n.getMonth() + 1));
		}
		if (s.indexOf('dddd', 0) != -1) {
			s = s.replace(/dddd/g, n.getWeekString(false));
		} else if (s.indexOf('ddd', 0) != -1) {
			s = s.replace(/ddd/g, n.getWeekString(true));
		} else if (s.indexOf('dd', 0) != -1) {
			s = s.replace(/dd/g, new String(n.getDate() + 100).substr(1, 2));
		} else if (s.indexOf('%d', 0) != -1) {
			return n.getDate();
		} else if (s.indexOf('d', 0) != -1) {
			s = s.replace(/d/g, n.getDate());
		}
		if (s.indexOf('hh', 0) != -1) {
			s = s.replace(/hh/g, ((n.getHours() % 12 == 0) ? '12' : new String(n.getHours() % 12 + 100).substr(1, 2)));
		} else if (s.indexOf('%h', 0) != -1) {
			return ((n.getHours() % 12 == 0) ? '12' : n.getHours() % 12);
		} else if (s.indexOf('h', 0) != -1) {
			s = s.replace(/h/g, ((n.getHours() % 12 == 0) ? '12' : n.getHours() % 12));
		} else if (s.indexOf('HH', 0) != -1) {
			s = s.replace(/HH/g, new String(n.getHours() + 100).substr(1, 2));
		} else if (s.indexOf('%H', 0) != -1) {
			return n.getHours();
		} else if (s.indexOf('H', 0) != -1) {
			s = s.replace(/H/g, n.getHours());
		}
		if (s.indexOf('nn', 0) != -1) {
			s = s.replace(/nn/g, new String(n.getMinutes() + 100).substr(1, 2));
		} else if (s.indexOf('%n', 0) != -1) {
			return n.getMinutes();
		} else if (s.indexOf('n', 0) != -1) {
			s = s.replace(/n/g, n.getMinutes());
		}
		if (s.indexOf('ss', 0) != -1) {
			s = s.replace(/ss/g, new String(n.getSeconds() + 100).substr(1, 2));
		} else if (s.indexOf('%s', 0) != -1) {
			return n.getSeconds();
		} else if (s.indexOf('s', 0) != -1) {
			s = s.replace(/s/g, n.getSeconds());
		}
		if (s.indexOf('TT', 0) != -1) {
			s = s.replace(/TT/g, ((n.getHours() < 12) ? 'AM' : 'PM'));
		} else if (s.indexOf('%T', 0) != -1) {
			return ((n.getHours() < 12) ? 'A' : 'P');
		} else if (s.indexOf('T', 0) != -1) {
			s = s.replace(/T/g, ((n.getHours() < 12) ? 'A' : 'P'));
		} else if (s.indexOf('tt', 0) != -1) {
			s = s.replace(/tt/g, ((n.getHours() < 12) ? 'am' : 'pm'));
		} else if (s.indexOf('%t', 0) != -1) {
			return ((n.getHours() < 12) ? 'a' : 'p');
		} else if (s.indexOf('t', 0) != -1) {
			s = s.replace(/t/g, ((n.getHours() < 12) ? 'a' : 'p'));
		}
		var u = '';
		if (n.getTime() > new Date(n.toUTCString()).getTime()) {
			u = '+';
			var utc = n.getTime() - new Date(n.toUTCString()).getTime();
		} else {
			u = '-';
			var utc = new Date(n.toUTCString()).getTime() - n.getTime();
		}
		if (s.indexOf('zzz', 0) != -1) {
			s = s.replace(/zzz/g, u + new String(utc.getHours() + 100).substr(1, 2) + ':' + new String(utc.getMinutes()).substr(1, 2));
		} else if (s.indexOf('zz', 0) != -1) {
			s = s.replace(/zz/g, u + new String(utc.getHours() + 100).substr(1, 2));
		} else if (s.indexOf('%z', 0) != -1) {
			return (u + utc.getHours());
		} else if (s.indexOf('z', 0) != -1) {
			s = s.replace(/z/g, u + utc.getHours());
		}
		return s;
	};
}


/****************************************************************************************\
Date.getMonthString(bShort)
說明 
	傳回月份字串。

語法
	object.getMonthString(bShort)
	參數			說明 
	bShort			必要項。布林運算式，表示回傳方式是否為簡稱格式。
\****************************************************************************************/
if (isUndefined(Date.prototype.getMonthString) == true) {
	Date.prototype.getMonthString = function (bShort) {
		var ms = new Array('January', 'February', 'March', 'April', 'May', 'June', 
						   'July', 'August', 'September', 'October', 'November', 'December');
		if (bShort) {
			return ms[this.getMonth()].substr(0, 3);
		} else {
			return ms[this.getMonth()];
		}
	};
}

/****************************************************************************************\
Date.getWeekString(bShort)
說明 
	傳回星期字串。

語法
	object.getWeekString(bShort)
	參數			說明 
	bShort			必要項。布林運算式，表示回傳方式是否為簡稱格式。
\****************************************************************************************/
if (isUndefined(Date.prototype.getWeekString) == true) {
	Date.prototype.getWeekString = function (bShort) {
		var ws = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
		if (bShort) {
			return ws[this.getDay()].substr(0, 3);
		} else {
			return ws[this.getDay()];
		}
	};
}

/****************************************************************************************\
Date.getWeekNo()
說明 
	傳回週別。第一週索引值為零。

語法
	object.getWeekNo()
\****************************************************************************************/
if (isUndefined(Date.prototype.getWeekNo) == true) {
	Date.prototype.getWeekNo = function () {
		var n = new Date(this);
		var firstDay = new Date(n.getFullYear() + '/1/1');
		var iWeek = Math.ceil((n.getDayNo() - ((7 - firstDay.getDay()) % 7)) / 7);	// Week No. (First Index Is 0)
		return iWeek;
	};
}

/****************************************************************************************\
Date.getChtWeek()
說明 
	傳回中文星期字串。

語法
	object.getChtWeek()
\****************************************************************************************/
if (isUndefined(Date.prototype.getChtWeek) == true) {
	Date.prototype.getChtWeek = function () {
		var cws = new Array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
		return cws[this.getDay()];
	};
}

/****************************************************************************************\
Date.getDayMilliseconds()
說明 
	傳回一天的豪秒數。

語法
	object.getDayMilliseconds()
\****************************************************************************************/
if (isUndefined(Date.prototype.getDayMilliseconds) == true) {
	Date.prototype.getDayMilliseconds = function () {
		return 24 * 60 * 60 * 1000;
	};
}

/****************************************************************************************\
Date.getDayNo()
說明 
	傳回該年到當日的天數。一月一日為第一天。

語法
	object.getDayNo()
\****************************************************************************************/
if (isUndefined(Date.prototype.getDayNo) == true) {
	Date.prototype.getDayNo = function () {
		var n = new Date(this);
		var firstDay = new Date(n.getFullYear() + '/1/1');
		var iDay = Math.ceil((n.getTime() - firstDay.getTime()) / n.getDayMilliseconds()); // Day No.(First Index Is 1)
		return iDay;
	};
}

/****************************************************************************************\
Date.DateDiff(interval, dateValue)
說明 
	傳回本體(this)與傳入日期間相差的時間間隔單位數目。

語法
	object.DateDiff(interval, dateValue)
	DateDiff 函數語法中有下列幾部份：

	組成部分	說明  
	interval	必要項。字串運算式，用來計算本體及 dateValue 之時間差的時間間隔單位。請參閱設定部份。 
	dateValue	必要項。日期運算式。您要用來計算的日期。 

設定
	引數 interval 的設定值如下:
	設定	說明			設定	說明
	yyyy	西元年			w		一週的日數
	q		季 				ww		週        
	m		月 				h		時        
	y		一年的日數 		n		分        
	d		日 				s		秒        

註解
	您可以使用 DateDiff 函數來決定兩個日期之間的時間間隔單位數目。
	例如，您可以使用 DateDiff 來計算某兩個日期之間相隔幾日，或計算從今天起到年底還有多少個星期。

	如果想知道本體與 dateValue 相差的 [日] 數，interval 可以是 [一年的日數] ("y") 或 [日] ("d")。
	如果 interval 是 [一週的日數] ("w")，DateDiff 會傳回兩日期間相差的週數。
	如果本體是星期一，DateDiff 會計算到 dateValue 為止之星期一的個數，包含 dateValue 但不包含本體。
	不過，如果 interval 是 [週] ("ww")，DateDiff 函數會藉由計算本體與 dateValue 之間星期天的個數，會傳回兩日期間的 [日歷週] 數。
	如果 dateValue 剛好是星期天，則 dateValue 也會被加進計數結果中；但不論本體是否為星期天，它都不會被算進去。

	如果本體比 dateValue 來得晚，DateDiff 函數傳回值為負數。

	但若計算十二月三十一日和來年的一月一日的年份差，DateDiff 會傳回 1 表示相差一個年份，雖然實際上只相差一天而已。 

	以下範例即使用 DateDiff 函數來表示指定的日期與今天相差的天數： 

	alert('Days from today: ' + new Date('2005/01/01').DiffDate('d', new Date()));
\****************************************************************************************/
if (isUndefined(Date.prototype.DateDiff) == true) {
	Date.prototype.DateDiff = function (interval, dateValue) {
		var n = new Date(this);
		var d = new Date(dateValue);
		switch (interval) {
			case 'yyyy':
				return d.getFullYear() - n.getFullYear();
				break;
			case 'q':
				return Math.ceil((d.getMonth() + 1) / 3) - Math.ceil((n.getMonth() + 1) / 3) ;
				break;
			case 'm':
				return d.getMonth() - n.getMonth();
				break;
			case 'y':
			case 'd':
			case 'w':
				return Math.floor((d.getTime() - n.getTime()) / n.getDayMilliseconds());
				break;
			case 'ww':
				var fWeek = new Date(n.DateAdd('d', (7 - n.getDay()) % 7));
				return Math.floor(fWeek.DateDiff('d', dateValue) / 7);
				break;
			case 'h':
				return Math.floor((d.getTime() - n.getTime()) / (n.getDayMilliseconds() / 24));
				break;
			case 'n':
				return Math.floor((d.getTime() - n.getTime()) / (n.getDayMilliseconds() / 24 / 60));
				break;
			case 's':
				return Math.floor((d.getTime() - n.getTime()) / 1000);
				break;
			default:
				break;
		}
	};
}


-->
