/******************************************************/
/* 文件名：univerify.js                               */
/* 功  能：基于自定义属性的统一检测用Javascript函数库 */
/* 作  者：*/
/******************************************************/
//去掉空格
function Trim(str){
	 return str.replace(/(^\s*)|(\s*$)/g, "");
}
//检查时间日期是否正确
function f_check_time(obj)   
{   
    var time = Trim(obj.value);   
    var dtype = obj.eos_datatype;   
    var format = dtype.substring(dtype.indexOf("(")+1,dtype.indexOf(")"));  //日期格式   
    var datePat,matchArray,year,month,day,hour,minute,second;   
  
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2}) (HH:mm:ss)$/.test(format))   
        datePat = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;   
    else if(/^(y{4})(年)(M{1,2})(月)(d{1,2})(日)(HH时mm分ss秒)$/.test(format))   
        datePat = /^(\d{4})年(\d{1,2})月(\d{1,2})日(\d{1,2})时(\d{1,2})分(\d{1,2})秒$/;   
    else if(format == "yyyyMMddHHmmss")   
        datePat = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/;   
    else  
    {   
        alert(obj.chname+"日期格式不对");   
        return false;   
    }   
    matchArray = time.match(datePat);   
    if(matchArray == null)    
    {   
        alert(obj.chname+"日期长度不对,或日期中有非数字符号");   
        return false;   
    }   
    if(/^(y{4})(-|\/)(M{1,2})\2(d{1,2}) (HH:mm:ss)$/.test(format))   
    {   
        year = matchArray[1];   
        month = matchArray[3];   
        day = matchArray[4];   
        hour = matchArray[5];   
        minute = matchArray[6];   
        second = matchArray[7];   
    } else  
    {   
        year = matchArray[1];   
        month = matchArray[2];   
        day = matchArray[3];   
        hour = matchArray[4];   
        minute = matchArray[5];   
        second = matchArray[6];   
    }   
    if (month < 1 || month > 12)   
    {                
        alert(obj.chname+"月份应该为1到12的整数");   
        return false;   
    }   
    if (day < 1 || day > 31)   
    {              
        alert(obj.chname+"每个月的天数应该为1到31的整数");   
        return false;   
    }        
    if ((month==4 || month==6 || month==9 || month==11) && day==31)   
    {            
        alert(obj.chname+"该月不存在31号");   
        return false;   
    }        
    if (month==2)   
    {   
        var isleap=(year % 4==0 && (year % 100 !=0 || year % 400==0));   
        if (day>29)   
        {                  
            alert(obj.chname+"2月最多有29天");   
            return false;   
        }   
        if ((day==29) && (!isleap))   
        {                  
            alert(obj.chname+"闰年2月才有29天");   
            return false;   
        }   
    }   
    if(hour<0 || hour>23)   
    {   
        alert(obj.chname+"小时应该是0到23的整数");   
        return false;   
    }   
    if(minute<0 || minute>59)   
    {   
        alert(obj.chname+"分应该是0到59的整数");   
        return false;   
    }   
    if(second<0 || second>59)   
    {   
        alert(obj.chname+"秒应该是0到59的整数");   
        return false;   
    }   
    return true;   
}   

/* 取得字符串的字节长度 */
function strlen(str)
{var i;
var len;
len = 0;
for (i=0;i<str.length;i++)
{
if (str.charCodeAt(i)>255) len+=2; else len++;
}
return len;
}
/* 检测字符串是否为空 */
function isnull(str)
{
var i;
 for (i=0;i<str.length;i++)
{
  if (str.charAt(i)!=' ') return false;
}
 return true;
}
/* 检测字符串是否全为数字 */
function isnumber(str)
{
var number_chars = "-1234567890.";
var i;
for (i=0;i<str.length;i++)
{
if (number_chars.indexOf(str.charAt(i))==-1) return false;
}
return true;
}
/* 检测指定文本框输入是否合法 */
function verifyInput(input)
{
var image;
var i;
var error = false;
/* 长度校验 */
if (strlen(input.value)>parseInt(input.maxsize))
{
alert(input.chname+"超出最大长度"+input.maxsize);
error = true;
}
else
/* 非空校验 */
if (input.nullable=="no"&&isnull(input.value))
{
alert(input.chname+"不能为空");
error = true;
}
else
{
/* 数据类型校验 */
switch(input.datatype)
{
case "number": if (isnumber(input.value)==false)
{
alert(input.chname+"值应该全为数字");
error = true;
}
break;
case "time": if (f_check_time(input)==false)
{
//alert(input.chname+"日期时间格式不正确");
error = true;
}
break;
case "email": if (check_email(input)==false)
{
alert(input.chname+"请输入合法的电子邮件地址");
error = true;
}
/* 在这里可以添加多个自定义数据类型的校验判断 */
/*  case datatype1: ... ; break;        */
/*  case datatype2: ... ; break;        */
/*  ....................................*/
default		: break;
}
}
/* 根据有无错误设置或取消警示标志 */
if (error)
{
//image = document.getElementById("img_"+input.name);
//image.src="img/warning.gif";
return false;
}
else
{
//image = document.getElementById("img_"+input.name);
//image.src="img/space.gif";
return true;
}
}
/* 检测指定FORM表单所有应被检测的元素
（那些具有自定义属性的元素）是否合法，此函数用于表单的onsubmit事件 */
function verifyAll(mydiv)
{
var i;
var myform=document.getElementById(mydiv);
for (i=0;i<myform.all.length;i++)
{
	//alert(myform.elements[i].tagName);
 /* 非自定义属性的元素不予理睬 */
if (myform.all[i].chname+""=="undefined") continue;
/* 校验当前元素 */
if (verifyInput(myform.all[i])==false)
{
//alert(myform.all[i].style.visibility);
//if(myform.all[i].style.display!="none"){
if(isVisible(myform.all[i]) && checkPrVis(myform.all[i])){
myform.all[i].focus();
}
return false;
}
}
return true;
}
/*判断当前对象是否可见*/ 
function isVisible(obj){   
    var visAtt,disAtt;   
    try{   
        disAtt=obj.style.display;   
        visAtt=obj.style.visibility;   
    }catch(e){}   
    if(disAtt=="none" || visAtt=="hidden")   
        return false;   
    return true;   
}
/*判断当前对象及其父对象是否可见*/ 
function checkPrVis(obj){   
    var pr=obj.parentNode;   
    do{   
        if(pr == undefined || pr == "undefined") return true;   
        else{   
            if(!isVisible(pr)) return false;   
        }   
    }while(pr=pr.parentNode);   
    return true;   
}
function check_email(obj){     
    var myReg = /^([-_A-Za-z0-9\.]+)@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;    
    if(myReg.test( obj.value )) return true;    
    //f_alert(obj,"请输入合法的电子邮件地址");   
    return false;    
}  