﻿//浮點數、整數驗證參數以下兩個函數。
//參數bnum=1 驗證整數
//參數bnum=2 驗證浮點數的合法性
//參數bnum=3 驗證浮點數2的合法性
//參數foc為輸入框的NAME
//如<input name=mm value="val" onblur="notnumfloat(1,mm)"> 如果輸入數不是合法整數焦點返回本編輯框
//可以重載myblur()執行自己的驗證代碼
function chknumfloat(val,bnum){
	if(bnum==1){
		if((!isFinite(val))||(isNaN(parseInt(val)))||val.lastIndexOf(".")>-1){
		return false
		}
	} 
	if(bnum==2){
		if((!isFinite(val))||(isNaN(parseFloat(val)))){
			return false
		}
	}
	if(bnum==3){
		val = val.replace(',','');
		if((!isFinite(val))||(isNaN(parseFloat(val)))){
			return false
		}
	}
	return true
}

//驗證字符串（只能是0-9,a-z,A-Z組成）
function chkAccount(strin){
	return (new RegExp(/[^0-9a-zA-Z]/g.test(strin)));
}

//驗證EMAIL
function chkEmail(strin){
	return (new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(strin));
}

//驗證密碼強度
function chkpwd(obj){
	var t=obj.value;
	var id=getResult(t);
	
	//定義對應的消息提示
	var msg=new Array(4);
	msg[0]="密碼過短。";
	msg[1]="密碼強度差。";
	msg[2]="密碼強度良好。";
	msg[3]="密碼強度高。";
	
	var sty=new Array(4);
	sty[0]=-45;
	sty[1]=-30;
	sty[2]=-15;
	sty[3]=0;
	
	var col=new Array(4);
	col[0]="gray";
	col[1]="red";
	col[2]="#ff6600";
	col[3]="Green";
	
	//設置顯示效果
	var bImg="http://www.mmhomehome.com/Images/pwdlevel.gif";//一張顯示用的圖片
	var sWidth=300;
	var sHeight=15;
	var Bobj=document.getElementById("chkResult");

	Bobj.style.fontSize="12px";
	Bobj.style.color=col[id];
	Bobj.style.width=sWidth + "px";
	Bobj.style.height=sHeight + "px";
	Bobj.style.lineHeight=sHeight + "px";
	Bobj.style.background="url(" + bImg + ") no-repeat left " + sty[id] + "px";
	Bobj.style.textIndent="20px";
	Bobj.innerHTML="檢測提示：" + msg[id];
}

//定義檢測函數,返回0/1/2/3分別代表無效/差/一般/強
function getResult(s){
	if(s.length < 4){
		return 0;
	}
	var ls = 0;
	if (s.match(/[a-z]/ig)){
		ls++;
	}
	if (s.match(/[0-9]/ig)){
		ls++;
	}
	if (s.match(/(.[^a-z0-9])/ig)){
		ls++;
	}
	if (s.length < 6 && ls > 0){
		ls--;
	}
	return ls
}

//+---------------------------------------------------   
//| 日期驗證  
//+---------------------------------------------------  


//日期合法性驗證   
//格式為：YYYY-MM-DD或YYYY/MM/DD 
function IsValidDate(DateStr)    
{    
    var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去兩邊空格;    
    if(sDate=='') return true;    
    //如果格式滿足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替換為''    
    //數據庫中，合法日期可以是:YYYY-MM/DD(2003-3/21),數據庫會自動轉換為YYYY-MM-DD格式    
    var s=sDate.replace(/[\d]{4,4}[\-/]{1}[\d]{1,2}[\-/]{1}[\d]{1,2}/g,'');    
    if (s=='') //說明格式滿足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D    
    {    
        var t=new Date(sDate.replace(/\-/g,'/'));    
        var ar=sDate.split(/[-/:]/);    
        if(ar[0]!=t.getYear() || ar[1]!=t.getMonth()+1 || ar[2]!=t.getDate())    
        {    
            //alert('錯誤的日期格式！格式為：YYYY-MM-DD或YYYY/MM/DD。注意閏年。');    
            return false;    
        }    
    }    
    else    
    {    
        //alert('錯誤的日期格式！格式為：YYYY-MM-DD或YYYY/MM/DD。注意閏年。');    
        return false;    
    }    
    return true;    
}

//函數名：chkDate
//功能介紹：檢查是否為短日期
//參數說明：要檢查的字符串,格式為：YYYY-MM-DD
//返回值：false：不是日期  true：是日期
function chkDate(str)
{
	var lthdatestr
	if (str != "")
		lthdatestr= str.length ;
	else
	    lthdatestr=0;
	  
	var tmpy="";
	var tmpm="";
	var tmpd="";
	//var datestr;
	var status;
	status=0;
	if ( lthdatestr== 0)
	return false

	for (i=0;i<lthdatestr;i++)
	{ 
		if (str.charAt(i)== '-') status++;
		if (status>2) return false;
		if ((status==0) && (str.charAt(i)!='-')) tmpy=tmpy+str.charAt(i)
		if ((status==1) && (str.charAt(i)!='-')) tmpm=tmpm+str.charAt(i)
		if ((status==2) && (str.charAt(i)!='-')) tmpd=tmpd+str.charAt(i)
	}
	year=new String (tmpy);
	month=new String (tmpm);
	day=new String (tmpd)
	if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2)) return false;
	if (!((1<=month) && (12>=month) && (31>=day) && (1<=day))) return false;
	if (!((year % 4)==0) && (month==2) && (day==29)) return false;
	if ((month<=7) && ((month % 2)==0) && (day>=31)) return false;
	if ((month>=8) && ((month % 2)==1) && (day>=31)) return false;
	if ((month==2) && (day==30)) return false;
	return true;
}
 
//函數名：chkDate
//功能介紹：檢查是否為長日期時間
//參數說明：要檢查的字符串,格式為：YYYY-MM-DD HH:MM:SS
//返回值：false：不是日期  true：是日期
function chkDateTime(str)   
{    
    var reg=/^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;    
    var r=str.match(reg);    
    if(r==null) return false;    
    r[2]=r[2]-1;    
    var d=new Date(r[1],r[2],r[3],r[4],r[5],r[6]);    
    if(d.getFullYear()!=r[1])return false;    
    if(d.getMonth()!=r[2])return false;    
    if(d.getDate()!=r[3])return false;    
    if(d.getHours()!=r[4])return false;    
    if(d.getMinutes()!=r[5])return false;    
    if(d.getSeconds()!=r[6])return false;    
    return true;    
}


function isTime(str){ 
    var a = str.match(/^(\d{0,2}):(\d{0,2}):(\d{0,2})$/); 
    if (a == null) return false; 
    if (a[1]>=24 || a[2]>=60 || a[3]>=60) return false; 
    return true; 
}

function isDateTime(str){ 
    var a = str.match(/^(\d{0,4})-(\d{0,2})-(\d{0,2}) (\d{0,2}):(\d{0,2}):(\d{0,2})$/); 
    if (a == null) return false; 
    if (a[2]>=13 || a[3]>=32 || a[4]>=24 || a[5]>=60 || a[6]>=60) return false; 
    return true; 
} 
function isDate(str){ 
    var a = str.match(/^(\d{0,4})-(\d{0,2})-(\d{0,2})$/); 
    if (a == null) return false; 
    if ( a[2]>=13 || a[3]>=32 || a[4]>=24) return false; 
    return true; 
} 
function chkInputDate(obj,type){ 
    var range=obj.createTextRange(); 
    var text = range.text; 
    var selrange = document.selection.createRange(); 
    var seltext = selrange.text; 
    var startpos = 0,endpos = 0; 
    while(selrange.compareEndPoints("StartToStart",range)>0){ 
        selrange.moveStart("character",-1); 
        startpos ++; 
    } 
    while(selrange.compareEndPoints("EndToStart",range)>0){ 
        selrange.moveEnd("character",-1); 
        endpos ++; 
    } 
    if(event.keyCode>=48){ 
        var keytext = String.fromCharCode(event.keyCode); 
        text = text.substring(0,startpos) + keytext + text.substring(endpos,text.length); 
    }else if(event.keyCode == 46){//delete 
        if(startpos == endpos)text = text.substring(0,startpos) + text.substring(startpos+1,text.length); 
    else text = text.substring(0,startpos) + text.substring(endpos,text.length); 
    }else if(event.keyCode == 8){ 
        if(startpos == endpos)text = text.substring(0,startpos-1) + text.substring(startpos,text.length); 
    else text = text.substring(0,startpos) + text.substring(endpos,text.length); 
    } 
    if(event.keyCode == 45){ 
        event.returnValue = false; 
        return; 
    } 
    var valid; 
    switch(type){ 
        case 1:valid = isDate(text);break; 
        case 2:valid = isTime(text);break; 
        case 3:valid = isDateTime(text);break; 
        default:valid = false; 
    } 
    if(!valid){ 
        event.returnValue = false; 
    } 
}

//判斷輸入的是否是DateTime
String.prototype.isDate = function()
{
    var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
    if(r==null)
        return false; 
    var d = new Date(r[1], r[3]-1, r[4]); 
        return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}