﻿
var sbValidatorConfig={
    color_tag              :'<font color="%c%">%msg%</font>',
    error_msg_color        :'red',
    ok_msg_color           :'green',
    null_msg               :'必填项',//請填入
    ok_msg                 :'验证通过',//驗證通過
    format_error           :'格式有误.',//格式錯誤
    null_msg_after         :'必填项',   //未填寫
    choose_msg             :'\u8bf7\u9009\u62e9',   //請選擇
    allowNull              :'此项可以不填写'//此项可以不填写
    
};
var $=function(id){return document.getElementById(id);};
var _isIE=function(){return navigator.userAgent.indexOf("MSIE")>0;};
var isDomain=function(a){return a.indexOf('http')>-1||a.indexOf('www')>-1;};
var isEnglish=function(str){var pat=/^([a-z]|[A-Z]|\.|[0-9]|-|_|\s|,){0,300}$/;return pat.exec(str)!=null;};
var isEmail=function(str){var pat=/^([a-z]|[A-Z]){1}([a-z]|[A-Z]|\.|[0-9]|-|_){0,50}@([a-z]|[A-Z]|[0-9]|-|_){1,50}\.([a-z]|[A-Z]){2,3}(\.([a-z]|[A-Z]){2}){0,1}$/;return pat.exec(str)!=null;};
var isTel=function(s){var pat=/^[+]?[0-9]+[-]?[0-9]+([-]?[0-9]+)+$/;return pat.exec(s)!=null;};
var isQq=function(s){var p=/^[1-9][0-9]{3,10}$/;return p.exec(s)!=null;};
var isFloat=function(s){var pat=/^\d{0,10}.?\d{0,5}$/; return pat.exec(s)!=null;};
var isInt=function(s){var pat=/^\d{0,10}$/;return pat.exec(s)!=null;};
var isNull=function(str){return str==null||str.length<1};
var isDate=function(str){var p=/^[12]{1}\d{3}[-\/\\]{1,}\d{1,2}[-\\\/]{1,}[123]?\d{1}$/; return p.exec(str)!=null;};
var isLeapYear=function(y){return (y%4==0&&0!=y%100)||0==y%400;};
var addEvent=function(id,e,f){var obj=id;if(typeof id =='string'){obj=$(id);}if(_isIE()){e="on"+e; obj[e]=f;}else{obj.addEventListener(e,f,true);}};
var hidden=function(id){$(id).style.visibility="hidden";}
var setColor=function(str,color){if(color==undefined)return sbValidatorConfig.color_tag.replace('%c%','green').replace('%msg%',str); else return sbValidatorConfig.color_tag.replace('%c%',color).replace('%msg%',str);};
var showDiv=function(div,msg){var d=$(div);d.style.visibility="";d.innerHTML=msg;}
var _getEventSrc=function(e){ if(_isIE()){ return window.event.srcElement; }else{ return e.target; }};
var isMob=function(v){
   var a = /^[0]{0,1}[1]{1}[0-9]{10}$/;
   return a.exec(v)!=null;
};

var Validator = function(id,msg,required,type,fun){
    msg=msg||'';
    this.isCheck=required||false;
    this.msg=msg;
    this.o=$(id);
    this.id=id;
    var t = type||'';
    t=t.toLowerCase();
    this.fun=fun;
    var re = this.isCheck;
    this.type=t;
    switch (t){
        case 'int':{
           addEvent(this.o,'blur',function(e){
          _blur_number_header(e,id,msg,isInt,re);
           });
          break;
        }
        case 'float':{
           addEvent(this.o,'blur',function(e){
          _blur_number_header(e,id,msg,isFloat,re);
        });
        break;
        }
        default:{
           
                  if(fun){
                  try{
                      addEvent(this.o,'blur',function(e){
                             _blur_number_header(e,id,msg,fun,re);
                        });
                        }catch(e){}
                   }else{
                     if(re){ try{
                          addEvent(this.o,'blur',function(e){
                            _blur_header(e,id,msg,true);
                           }); }catch(e){}
                      }
                  }
          }

      }
    
    addEvent(this.o,'focus',_focus_header);
};
Validator.prototype.check=function(){
  if(this.isCheck){
   var flag=false;
    switch(this.type){
      case 'int':{
         flag=_blur_number_header(null,this.id,this.msg,isInt,this.isCheck);
       break; 
      }
      case 'float':{
       flag= _blur_number_header(null,this.id,this.msg,isFloat,this.isCheck);
        break;
      }
      default:{
      if(this.fun){
         flag= _blur_number_header(null,this.id,this.msg,this.fun,this.isCheck);
      }else{
           flag=_blur_header(null,this.id,this.msg,this.isCheck);
           }
      }
    }
    return  flag;
  }else{
    hidden('div_'+this.id);
    return true;
  }
 
};
var _blur_header=function(e,id,m){
    var v = $(id).value;
    var flag=true;
    if(isNull(v)){
       showDiv('div_'+id,setColor(m+sbValidatorConfig.null_msg_after,sbValidatorConfig.error_msg_color));
      flag=false;
    }else{
        showDiv('div_'+id,setColor(sbValidatorConfig.ok_msg,sbValidatorConfig.ok_msg_color));
    }
    if($('flag')){
      $('flag').value=-1;
    }
  return flag;
};
var _focus_header=function(e){
  var src=_getEventSrc(e);

   hidden('div_'+src.id);
};
var _blur_number_header=function(e,id,m,validator,required){
    var v = $(id).value;
    var flag=true;
    if(required&&isNull(v)){
       showDiv('div_'+id,setColor(m+sbValidatorConfig.null_msg_after,sbValidatorConfig.error_msg_color));
    flag=false;
    
    }
    if(!isNull(v)){
        if(flag&&!validator(v)){
          flag=false;
          if(required){
              showDiv('div_'+id,setColor(m+sbValidatorConfig.format_error,sbValidatorConfig.error_msg_color));
           }else{

              showDiv('div_'+id,setColor(m+sbValidatorConfig.format_error+sbValidatorConfig.allowNull,sbValidatorConfig.error_msg_color));
           }
        }
         if(flag){
            showDiv('div_'+id,setColor(sbValidatorConfig.ok_msg,sbValidatorConfig.ok_msg_color));
         }
    }
  return flag;
};
var checkArray=function(arr){
    var flag = true;
    for(var i=0;i<arr.length;i++){
       if(!arr[i].check()){
        flag=false;
        break;
       }    
    }
    return flag;
};
//  addEvent('','focus',_focus);   addEvent('','blur',_blur); 