﻿	/*=================================================================== 
	'** 檔案名:	JSInterfaceCheck.js			
	‘** 撰寫人:	yongjun	
	‘** 建立日期:	2004/12/10
	‘** 功能描述:	對日期處理
	‘** 相關檔案:		
	‘** Copyright c2003-2004 Maxense Co., Ltd.			
	‘** ===================================================================
		//http://www.smartwebby.com/DHTML/date_validation.asp
	‘** ===========================  修改記錄  ============================
	‘** 修改日期:				
	‘** 撰寫人:			
	‘** 修改原因			
	‘** 修改內容:	 
	=================================================================== 
	*/
	//------------------------------------------------------------------------------------//////////////
	//適用於對對象進行檢證
	//參數說明:obj= 對象的id ,Msg=提示信息,Tyep=驗證類型
	//(0＝是否為空，1＝英文字母，2＝漢字，3＝整數，4＝數值，
	//5＝EMail格式，6＝西元日期，7＝民國日期，8＝圖片文件,9=Url
	//10＝RadioButtonList選擇其中一項,若沒有,顯示提示信息Msg
	//11＝CheckBoxList是否有勾選，若沒有勾選 顯示提示信息Msg)
	function IsCheckAll(obj ,Msg , Tyep)
	{
		if(Tyep == "0")
		{
			return IsEmpty(obj ,Msg);
		}
		if(Tyep == "1")
		{
			return IsABC(obj ,Msg);
		}	
		if(Tyep == "2")
		{
			return IsChina(obj ,Msg);
		} 
		if(Tyep == "3")
		{
			return isInt(obj ,Msg);
		}
		if(Tyep == "4")
		{
			return IsDecimal(obj ,Msg);
		}
		if(Tyep == "5")
		{
			return IsEMail(obj ,Msg);
		}
		if(Tyep == "6")
		{
			return IsDateChina(obj ,Msg);
		}	
		if(Tyep == "7")
		{
			return IsDateTw(obj ,Msg);
		}						
		if(Tyep == "8")
		{
			return CheckImage(obj ,Msg);
		}	
		if(Tyep == "9")
		{
		    return IsUrl(obj ,Msg);
		}
		if(Tyep == "10")
		{   
		    return isRadioChecked(obj , Msg);
		}
		if(Tyep == '11')
		{
		    return isCheckBoxChecked(obj,Msg);
		}
		return true;
	}
		//字符串實際長度，數字[0-9],字母[a-z]每個算一個長度，一個漢字算二個
		function StringLen(str)
		{	
			var Rc = 0 ;
			if(str == "")
			{
				return 0 ;
			}
			var reg = /^[\u4E00-\u9FA5]*$/;
			var i = 0 ;
			; 
			for(i = 0 ; i < str.length ; i++)
			{
				if(reg.test(str.substring(i,i+1)))
				{
					Rc += 1 ;
				}
				Rc += 1 ;
			}
			return 	Rc	
		}	

		
	
	//------------------------------------------------------------------------------------//////////////
		//功能說明：消除字串前後的空格
		//參數說明：字符串
		//返 回 值：無返回值
		function Trim(str)
		{
			var str0 = "" ;
			str0 = String(str);
			var reg=/^\s*/;		//消除前面的空格
			var str1 = "" ;
			str1 = str0.replace(reg,"");
			reg=/\s*$/;			//消除後面的空格
			var str2 = ""
			str2 = str1.replace(reg,"");
			return str2;
		}

		


		//功能說明:檢證函數
		//參數說明:驗證對象的ID，Msg＝提示信息，reg=正則表達式
		function IsCheck(obj,Msg,reg)
		{
			var str = document.all(obj).value ;
			str = Trim(str);
			//alert(reg.test(str));
			if(!reg.test(str))
			{
				alert(Msg);
				document.all(obj).focus();
				return false ;
			}			
			return true;		
		}
		//功能說明：字符串是否由字母組成
		//參數說明：字符串
		//返回值：bool,由字母組成返回：true,否則返回：false
		function IsABC(obj,Msg)
		{
			var reg = /^[a-zA-Z]+$/;
			return IsCheck(obj,Msg,reg)
		}
		//功能說明：字符串是否漢字組成
		//參數說明：字符串
		//返回值：bool,由字母組成返回：true,否則返回：false		
		function IsChina(obj,Msg)
		{
			var reg = /^[\u4E00-\u9FA5]*$/;
			return IsCheck(obj,Msg,reg)
		}
		
		//功能說明：是否是數字(0,1,2,3,4,5,6,7,8,9)組成的字符
		//參數說明：字符串
		//返 回 值：bool,返回：是數字(0,1,2,3,4,5,6,7,8,9)組成的字符true,否則返回：false
		function isInt(obj,Msg)
		{
			var reg = /^\d+$/;
			return IsCheck(obj,Msg,reg)
		}  
	
		//功能說明：是否是數值float類型的變量
		//參數說明：字符串
		//返 回 值：bool,返回：是數值(即float類型的變量)true,否則返回：false
		function IsDecimal(obj,Msg)
		{
			var reg = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/ ;
			return IsCheck(obj,Msg,reg)		
			
		}
	
		//功能說明：是否符合EMail格式
		//參數說明：字符串
		//返 回 值：bool,返回：符合EMail格式true,否則返回：false
		function IsEMail(obj,Msg)
		{
			var reg = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
			return IsCheck(obj,Msg,reg)	
		}
		///功能說明：檢證字符中是不符合日期格式
		///參數說明：參數是西元日期字符串
		///返 回 值： bool類型，是日期格式 true ,否則返回false    
		function IsDateChina(obj,Msg)
		{
			var reg = /^(19|20)\d\d\/([1-9]|0[1-9]|1[012])\/([1-9]|0[1-9]|[12][0-9]|3[01])$/;
			return IsCheck(obj,Msg,reg)	
		}
		
		///功能說明：檢證字符中是不符合日期格式(092/10/30)
		///參數說明：參數是民國日期字符串
		///返 回 值： bool類型，是日期格式 true ,否則返回false    
		function IsDateTw(obj,Msg)
		{
			var reg = /^(\d\d\d)\/([1-9]|0[1-9]|1[012])\/([1-9]|0[1-9]|[12][0-9]|3[01])$/;
			return IsCheck(obj,Msg,reg)	
		}
	
	//jpg、GIF’、JPEG、PNG
	function CheckImage(obj,Msg)
	{
		var str = document.all(obj).value ;
		var Length = str.length;
		
		var Temp = str.lastIndexOf(".");
		if(Temp == -1)
		{
			alert(Msg);
			return false;
		}		
		var TempFile = str.substring(Temp+1,Length);
		TempFile = TempFile.toLowerCase();
		if(TempFile!="gif" && TempFile!="jpg" && TempFile!="jpeg" && TempFile!="png" && TempFile!="bmp")
		{
			alert(Msg);
			return false ;
		}
		return true ;
	}
	//檢測是否為值空 
	//適用於:textBox,DropDownList ,ListBox 
	function IsEmpty(obj,Msg)
	{
		var str = document.all(obj).value ;
		str = Trim(str);
		if(str == "")
		{
			alert(Msg);
			document.all(obj).focus();
			return false ;
		}
		return true;
		
	}
		//暫時不能用 yongjun
		//判斷RadioButtonList是否有勾選，若沒有勾選 顯示提示信息Msg
		//參數說明:obj= 對象的id ,Msg=提示信息,
		function IsCheckRDOBL(obj,Msg,ItemCount)
		{
			var blRC = false ;
			/*
			if(document.all(obj).length == null)
			{
				if(document.all(obj).checked == false)
				{
					alert(Msg);
					return false ;
				}
			}
			var ItemCount = document.all(obj).length  - 1 ;
			*/
			for (i = 0 ; i < ItemCount ;i++)
			{
				if(eval("document.all('"+ obj + "_" + i + "')").checked == true)
				{
					blRC = true ;
					break ;
				}
				else
				{
					blRC = false ;
				}
			}
			if(blRC == false)
			{
				alert(Msg);
				return false ;
			}
			return true;
		}
		//判斷CheckBoxList是否有勾選，若沒有勾選 顯示提示信息Msg
		//參數說明:obj= 對象的id ,Msg=提示信息,ItemCount = 項目數
		function IsCheckCKBL(obj,Msg,ItemCount)
		{
			var blRC = false ;
			//var ItemCount = document.all(obj).rows.length ;
			for (i = 0 ; i < ItemCount ;i++)
			{
				if(document.all(obj)[i].checked==true)
				{
					blRC = true ;
					break;
				}
			}
			if(blRC == false)
			{
				alert(Msg);
				return false ;
			}
			return true;
		}	
		
		
	///驗證台灣身分證函數
	function IsTWID(obj,Msg)
	{
		var str = document.all(obj).value ;
		str = Trim(str);
		str = str.toUpperCase();
		//為空返回
		if(str == "")
		{
			alert(Msg);
    		return false ;	
		}
		//長度是否為10
		if (str.length != 10)
		{
			alert(Msg);
			return false ;	
		}
		//第一位是否為字母
		var part1 = str.substring(0,1);
        var reg = /^[a-zA-Z]+$/;
        if(!reg.test(part1))
        {	   
			alert(Msg);
			return false ;	
		}
		
		//第二位是否為1或2
		var pos2 = str.charAt(1);
		if( pos2 !="1" &&  pos2 !="2") 
		{
			alert(Msg);
			return false ;	
		}
		//後8位是否是數字
		var pos3 = str.substring(2,10) ;
		reg = /^\d+$/;
		if(!reg.test(pos3))
		{ 
			alert(Msg);
			return false ;	
		}
		//其他規則驗證
		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;
		var i;
		for(i=0;i<alph.length;i++)
		{
			if(str.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<str.length-1;i++)
				tot2 = tot2 + parseFloat(str.charAt(i))*(9-i);
		var tot3 = parseFloat(str.charAt(9));
		var tot4 = tot1 + tot2 + tot3;
		if((tot4 % 10)!=0) 
		{
			alert(Msg);
			return false ;	
		}
		return true;
	}
	
	//日期比較函數,格式為xx/xx/xx(民國年)
		function CompareDate(startDate,endDate)
		{
			var PintB_year,PintB_month,PintB_day;
			var PintE_year,PintE_month,PintE_day;
			
			var arrStart,arrEnd;
			arrStart = startDate.split("/");
			arrEnd   = endDate.split("/");
			
			PintB_year = parseInt(arrStart[0]);
			PintB_month = parseInt(arrStart[1]); 
			PintB_day = parseInt(arrStart[2]);

			PintE_year = parseInt(arrEnd[0]);
			PintE_month = parseInt(arrEnd[1]); 
			PintE_day = parseInt(arrEnd[2]);

			if(Math.abs(PintB_year)>Math.abs(PintE_year))
			{
				alert("請輸入正確的日期區間﹗");
				return false;
			}
			if(Math.abs(PintB_month)>Math.abs(PintE_month) && Math.abs(PintB_year)==Math.abs(PintE_year))
			{
				alert("請輸入正確的日期區間﹗");
				return false;
			}
			if(Math.abs(PintB_day)>Math.abs(PintE_day) && Math.abs(PintB_year)==Math.abs(PintE_year) && Math.abs(PintB_month)==Math.abs(PintE_month))
			{
				alert("請輸入正確的日期區間﹗");
				return false;
			}
			return true;
		}

		//日期比較函數(與當前日期的比較),格式為xx/xx/xx(民國年)
		function CompareCurrentDate(startDate,msg)
		{
			var PintB_year,PintB_month,PintB_day;
			var PintE_year,PintE_month,PintE_day;
			
			var arrStart
			arrStart = startDate.split("/");
			
			PintB_year = parseInt(arrStart[0]);
			PintB_month = parseInt(arrStart[1]); 
			PintB_day = parseInt(arrStart[2]);

			var currentDate;
			currentDate = new Date();
			
			PintE_year = currentDate.getFullYear() - 1911 ;
			PintE_month = currentDate.getMonth() + 1;
			PintE_day = currentDate.getDate();

			if(Math.abs(PintB_year)<Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_month)<Math.abs(PintE_month) && Math.abs(PintB_year)==Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_day)<Math.abs(PintE_day) && Math.abs(PintB_year)==Math.abs(PintE_year) && Math.abs(PintB_month)==Math.abs(PintE_month))
			{
				alert(msg);
				return false;
			}
			return true;
		}
		function CompareCurrentDate2(startDate,msg)
		{
			var PintB_year,PintB_month,PintB_day;
			var PintE_year,PintE_month,PintE_day;
			
			var arrStart
			arrStart = startDate.split("/");
			
			PintB_year = parseInt(arrStart[0]);
			PintB_month = parseInt(arrStart[1]); 
			PintB_day = parseInt(arrStart[2]);

			var currentDate;
			currentDate = new Date();
			
			PintE_year = currentDate.getFullYear() - 1911 ;
			PintE_month = currentDate.getMonth() + 1;
			PintE_day = currentDate.getDate();

			if(Math.abs(PintB_year)>Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_month)>Math.abs(PintE_month) && Math.abs(PintB_year)==Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_day)>Math.abs(PintE_day) && Math.abs(PintB_year)==Math.abs(PintE_year) && Math.abs(PintB_month)==Math.abs(PintE_month))
			{
				alert(msg);
				return false;
			}
			return true;
		}
		
		
		
		
		//日期比較函數(當輸入日期大於當前日期時),格式為xx/xx/xx(民國年)
		function CompareNowDate(startDate,msg)
		{
			var PintB_year,PintB_month,PintB_day;
			var PintE_year,PintE_month,PintE_day;
			
			var arrStart
			arrStart = startDate.split("/");
			
			PintB_year = parseInt(arrStart[0]);
			PintB_month = parseInt(arrStart[1]); 
			PintB_day = parseInt(arrStart[2]);

			var currentDate;
			currentDate = new Date();
			
			PintE_year = currentDate.getFullYear() - 1911 ;
			PintE_month = currentDate.getMonth() + 1;
			PintE_day = currentDate.getDate();

			if(Math.abs(PintB_year)>Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_month)>Math.abs(PintE_month) && Math.abs(PintB_year)==Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_day)>Math.abs(PintE_day) && Math.abs(PintB_year)==Math.abs(PintE_year) && Math.abs(PintB_month)==Math.abs(PintE_month))
			{
				alert(msg);
				return false;
			}
			return true;
		}
		
		//日期比較函數(當startDate大於endDate時，提示msg),格式為xx/xx/xx(民國年)
		function CompareTwoDate(startDate,endDate,msg)
		{
			var PintB_year,PintB_month,PintB_day;
			var PintE_year,PintE_month,PintE_day;
			
			var arrStart;
			arrStart = startDate.split("/");
			
			PintB_year = parseInt(arrStart[0]);
			PintB_month = parseInt(arrStart[1]); 
			PintB_day = parseInt(arrStart[2]);

			var arrEnd;
			arrEnd = endDate.split("/");
			
			PintE_year = parseInt(arrStart[0]);
			PintE_month = parseInt(arrStart[1]);
			PintE_day = parseInt(arrStart[3]);

			if(Math.abs(PintB_year)>Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_month)>Math.abs(PintE_month) && Math.abs(PintB_year)==Math.abs(PintE_year))
			{
				alert(msg);
				return false;
			}
			if(Math.abs(PintB_day)>Math.abs(PintE_day) && Math.abs(PintB_year)==Math.abs(PintE_year) && Math.abs(PintB_month)==Math.abs(PintE_month))
			{
				alert(msg);
				return false;
			}
			return true;
		}
	function IsLetterOrNumric()
    {
        return ((event["keyCode"]>=0x30)&&(event["keyCode"]<=0x39)) || ((event["keyCode"]>=97)&&(event["keyCode"]<=122)) || ((event["keyCode"]>=65)&&(event["keyCode"]<=90)) || (event["keyCode"]==49) || (event["keyCode"]==45);
    }	
    
    //用來清除頁面（表單）里所有的文本框、多行文本框的值，同時將下拉列表、ListBox選擇項置為首項
    //其中列出的其它項可供參考，以在必要時對其在自己頁面上進行控制。
    //以下基本列出了常用的几种發送到客戶端供交互用的控件情況。
    function ClearForm()
    {
        //可按如下方式使用,表示在頁面加載完后才執行此清單代碼
        //Page.RegisterStartupScript("ddssxxwwrr", "<script language=\"javascript\" type=\"text/javascript\">ClearForm();</script>");
        
        var obj = document.getElementsByTagName("input");
        
        for(var i=0;i<obj.length;i++)
        {
            if(obj[i].type=="text")
            {
                obj[i].value="";
                
                continue;
            }
            else if(obj[i].type=="password")
            {
//                obj[i].value="";
                continue;
            }
            else if(obj[i].type=="checkbox")
            {
//                obj[i].checked=false;
                continue;
            }
            else if(obj[i].type=="radio")
            {
//                obj[i].checked=false;
                continue;
            }
            else if(obj[i].type=="hidden")
            {//注意用來保存ViewState往返值的<input type="hidden"
                continue;
            }
        }
        
        obj = document.getElementsByTagName("select");
        for(var i=0;i<obj.length;i++)
        {
            obj[i].selectedIndex=0;
        }
        
        obj = document.getElementsByTagName("textarea");
        for(var i=0;i<obj.length;i++)
        {
            obj[i].innerText="";
        }
        
    }
    
    //匹配如今所有流行的URL
    function IsUrl(obj,Msg)
    {
//    var reg = /^[a-zA-Z]+$/;
//			return IsCheck(obj,Msg,reg)
    
        var UrlRegExp = /(http(s)?|ftp|telnet|news):\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\"\"])*$/;
        return IsCheck(obj,Msg,UrlRegExp);
    }
  /// 光標停留再輸入框最後位置
 function fnStopLastPosition()   
 {
 var e = event.srcElement;
 var r =e.createTextRange();
 r.moveStart("character",e.value.length);
 r.collapse(true);
 r.select();
}
    //判斷頁面上同一GroupName的RadioButtonList是否被選中,並將焦點移至第一個欄位
    function isRadioChecked(obj,Msg)
    {
        var j = -1;
        var rblList = document.getElementsByName(obj);
        for(var i = 0; i < rblList.length ; i++)
        {
            if(rblList.item(i).type == "radio"&& j== -1)
                j = i;
            if(rblList.item(i).type == "radio" && rblList.item(i).checked == true)
            {
                return true
            }
        }
        alert(Msg);
        rblList.item(j).focus();
        return false;
    }
    
    function isCheckBoxChecked(obj,Msg)
    {
        var j = -1;
        var ckbList = document.getElementsByName(obj);
        
        for(var i = 0; i <ckbList.length; i++)
        {
            if(ckbList.item(i).type == "checkbox" && j == -1)
                j = i;
            if(ckbList.item(i).type == "checkbox" && ckbList.item(i).checked == true)
                return true;
        }
        alert(Msg);
        ckbList.item(j).focus();
        return false;
    }