/* MVC 框架中验证的JS脚步
 * 开发:xiongxing
 * 版本:1.0.6.2
 */
/*需验证的对象*/
var _requireIds;  // 需验证的id列表(用逗号隔开)
var _emailIds;    // email地址验证ID列表
var _ranges = new Array();
var _requireListNames;  // 验证checkbox或radio list
var _intIds;            // 只能输入数字
var _floatIds;          // 能输入数字，小数
var v_errShowType = 0;  //  错误信息显示方式。0：生成错误标签。1：弹出错误信息
validate.msg_Int = "只能输入整数";
validate.msg_Float = "只能输入数字";
validate.msg_MustSelect = "必须选择";
validate.requireMsg = "必填属性";
validate.requireListMsg = "必填至少选择一项";
validate.emailMsg = "不符合Email规则";
validate.rangeMsg = "输入值必须在 {0} - {1} 之间";

var _errsapn = new Array();
function g(id){
    return document.getElementById(id);
}
function validate_init(){
    if(_requireIds){
      try{  
        ids = _requireIds.split(",");
        for(var i=0;i<ids.length;i++){
            obj = g(ids[i]);
            if(obj)
              createRequireTag(obj);
        }
      }catch(e){
          throw e;
      }
    }
}
function validate(){
    try{
       clearMsg();
       validRequire(); 
       validEmail();
       validRange();
       validRequireList();
       valid_Int();
       valid_Float();
    }catch(e){
        alert(e);
        return false;
    }
    // 判断错误信息
    if(_errsapn.length > 0)
        return false;
    else
      return true;
}
/*验证输入框是否为*/
function validRequire(){
    if(_requireIds == null) 
        return;
    ids = _requireIds.split(",");
    for(var i=0;i<ids.length;i++){
        obj = g(ids[i]);
        // 判断类型
        if(obj.tagName == "SELECT"){
            validSelect(obj);
        }else if(obj.tagName == "INPUT"){
            type = obj.getAttribute("type");
            if(type=="text" || type=="file" || type=="password")
                validText(obj,/[\S]+/,validate.requireMsg);
            else if(type=="checkbox" || type=="radio")
                validCheck(obj);
        }else if(obj.tagName == "TEXTAREA"){
            validText(obj,/[\S]+/,validate.requireMsg);
        }
    }  
}
function valid_Int(){
    if(_intIds == null) 
        return;
    ids = _intIds.split(",");
    var strRegInt = /^-{0,1}\d+$/;
    for(var i=0;i<ids.length;i++){
        obj = g(ids[i]);
        if(obj.value.length==0)
            continue;
        validText(obj,strRegInt,validate.msg_Int);
    }
}
function valid_Float(){
    if(_floatIds == null) 
        return;
    ids = _floatIds.split(",");
    var strRegFloat = /^-{0,1}\d+.{0,1}\d*$/;
    for(var i=0;i<ids.length;i++){
        obj = g(ids[i]);
        if(obj.value.length==0)
            continue;
        validText(obj,strRegFloat,validate.msg_Float);
    }
}
function validRequireList(){
    if(_requireListNames == null) 
        return;
    names = _requireListNames.split(",");
    for(var i=0;i<names.length;i++){
        var objs = document.getElementsByName(names[i]);
        var tmpRet = false;
        if(objs.length == 0)
            tmpRet=true;
        for(var k=0;k<objs.length;k++){
            if(objs[k].checked){ 
              tmpRet = true;
              //ret = true;
              break;
            }
        }
        if(!tmpRet){
          createMsg(validate.requireListMsg,objs[0]);
        }
    }  
}
/*验证email地址是否正确*/
function validEmail(){
    if(_emailIds == null) 
        return;
    
    var strRegEmail = "^[\\w.-]+@([0-9a-zA-Z\\w-]+\\.)+[0-9a-zA-Z]{2,8}$";
    ids = _emailIds.split(",");
    for(var i=0;i<ids.length;i++){
        obj = g(ids[i]);
        if (!obj.value.match(strRegEmail)){    
            createMsg(validate.emailMsg,obj);
        }
    }
}
/*验证范围对象*/
function validRange(){
    if(_ranges.length == 0)
        return;
    for(var i=0;i<_ranges.length;i++){
        obj = g(_ranges[i].id);
        if (obj.value.replace(' ','') == '')    //  为空则不验证
            return;
        v = parseInt(obj.value);

        if((v>_ranges[i].maxValue) || (v<_ranges[i].minValue)){
            var msg = validate.rangeMsg.replace("{0}",_ranges[i].minValue).replace("{1}",_ranges[i].maxValue);
            createMsg(msg,obj);
        }
    }
}
/*显示错误信息*/
function createMsg(msg,control,focus){
    if(v_errShowType==0){
        spn = document.createElement("label");
        spn.setAttribute("name", "validerr");
        spn.className = "msg_err";
        spn.innerHTML = msg;
        if(typeof(focus)=="undefined")
            control.focus();
        control.parentNode.appendChild(spn);
        _errsapn.push(spn);
    }else{
        _errsapn.push(spn);
    }
}
function clearMsg(){
    if(_errsapn.length > 0){
        count = _errsapn.length-1;
        for(var i=count;i>=0;i--){
            o = _errsapn.pop();
            o.parentNode.removeChild(o);
        }
    }
}
/*生成*号*/
function createRequireTag(control){
    spn = document.createElement("span");
    spn.className = "mvcRequire";
    spn.innerHTML = "*";
    control.parentNode.appendChild(spn);
}
/*范围验证*/
function range(id,minValue,maxValue){
  this.id = id;
  this.minValue = minValue;
  this.maxValue = maxValue;
}
/*单个元素的验证*/
function validSelect(obj){
    ret = true;
    // 是否多选
    if(obj.getAttribute("MULTIPLE")){
        if(obj.selectedIndex == -1){
            createMsg(validate.msg_MustSelect,obj);
            ret = false;
        }
    }else{
        if(obj.selectedIndex == 0){
            createMsg(validate.msg_MustSelect,obj);
            ret = false;
        }
    }
    return ret;
}
/*通过正则验证输入框*/
function validText(obj,reg,msg){
    if(!obj.value.match(reg)){
        createMsg(msg,obj);
        return false;
    }
    return true;
}
function validCheck(obj){
    if(!obj.checked){
        createMsg(validate.requireMsg,obj);
        return false;
    }
    return true;
}
/*只允许输入数字*/
function mvc_Int(evt){
    code = evt.keyCode;
    return IsNumericAllow(code);
}
/* 只允许输入整数或小数 */
function mvc_Float(evt)	{
    code = evt.keyCode;
    if (code==110 || code==190 || IsNumericAllow(code))
         return true;
        
    return false;
}
function IsNumericAllow(code){
    if ((code>95 && code<106) || (code>32 && code<41) || (code>47 && code<58) || code==8 || code==46 || code==9 || code == 13)
        return true;
    else 
        return false;
}