﻿//
var arrObj = null;
//

function AutoDataValidator(arrFrm)
{
    arrObj = arrFrm;    
    //获取远程验证规则

    var dataRuleXml;
    var url = "/XML/DataValidator/DataRule.xml";                                               
    
    var myAjax = new Ajax(url,{method:'get',onComplete:getDataRuleXml,onFailure:function(){alert("未能加载数据验证文件，请确认网络是否连接！\n");}}).request();
    

}

function getDataRuleXml(txt,xml)
{
    var dataRuleXml = xml;
    var xmlDom = new XMLDom(dataRuleXml);   
    
    //设置没个表单
    arrObj.each(function(item, index){
    
        //循环遍历所有输入框
        var form = $(item);
            if(!form) return;
        var el = form.getElementsByTagName("input");
        var arrEl = new Array();
        for (var i=0;i<el.length;i++)
        {
            if(el[i].type == 'text' || el[i].type == 'password' || el[i].type == "textarea")
            {   
                if(isNeedValidator(el[i]))
                {                            
                    //用隐藏域保存固定提示信息     
                    //alert(el[i].id+"_msg");
                    //alert($(el[i].id+"_msg").getText());
                    var hiden = new Element('input', {'type': 'hidden','id':el[i].id+'_msg_user','value':$(el[i].id+"_msg").getText()});                            
                        hiden.inject(form)
                        hiden = new Element('input', {'type': 'hidden','id':el[i].id+'_reg','value':xmlDom.getNodeValue(xmlDom.getNode(xmlDom.getNodes("RuleConfig"),"FidldName",getFidldName(el[i])),"RegExpForJS")});                            
                        hiden.inject(form)
                        hiden = new Element('input', {'type': 'hidden','id':el[i].id+'_cnMessage','value':xmlDom.getNodeValue(xmlDom.getNode(xmlDom.getNodes("RuleConfig"),"FidldName",getFidldName(el[i])),"CNMessage")});                            
                        hiden.inject(form)                    
                    el[i].onfocus	= getFocus;
                    el[i].onblur	= lostFocus;
                    arrEl.push(el[i]);
                }
                
            }
        }        
        $(form.id+"_submit").addEvent("click",function(event){
            event = new Event(event);
            var _isSubmit = true;
            
            arrEl.each(function(item, index){  
                          
                if(showMsg(item,true))
                {
                    _isSubmit = _isSubmit && true;
                }
                else
                {
                    _isSubmit = _isSubmit && false;
                }
                
            });    
            
            if(!_isSubmit) event.stop();
            return _isSubmit;
        
        }); 
     
    });  
    
}


function getFidldName(obj)
{
    var arr = obj.id.split("_");
    return arr[0];
}

function isNeedValidator(obj)
{
    var arr = obj.id.split("_");
    var b = false;
    arr.each(function(item, index){   
            
            if(item=="n")
            {
                b = true;                            
            }
            
            if(item=="v")
            {
                b = true;
            }
            
            if(item=="d")
            {
                b = true;
            }
            
         }); 
         
    return b;
}

function isShowOkMsg(obj)
{
    var arr = obj.id.split("_");
    var b = true;
    arr.each(function(item, index){   
            
            if(item=="k")
            {
                b = false;                            
            }           
                        
         }); 
         
    return b;
}

function validateValue(regExp,value)
{ 
    var patn = new RegExp(regExp);    
    return patn.test(value);
}

function getFocus(evnt)
{                
    var obj;
    if(window.ie)
    {
        obj = event.srcElement;
    }
    else
    {
        obj = evnt.target;
    }
    if($(obj.id + "_msg")!=null && $(obj.id + "_msg_user").value.trim()!="")
    {
        $(obj.id + "_msg").removeClass("tiper_ok");
        $(obj.id + "_msg").removeClass("tiper_error");              
        $(obj.id + "_msg").addClass("tiper_hint");
        $(obj.id + "_msg").setHTML($(obj.id + "_msg_user").value.trim());
    }
    
}

function lostFocus(evnt)
{
    var obj;
    if(window.ie)
    {
        obj = event.srcElement;
    }
    else
    {
        obj = evnt.target;
    }
    
   return showMsg(obj,false);
   
}

function showMsg(obj,isSubmit)
{
    var arr = obj.id.split("_");
    var b = true;

    arr.each(function(item, index){   
            
            if(item=="n")
            {
                //不能为空
                if(obj.value.trim()=="")
                {
                    b =false;
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").addClass("tiper_error");
                    $(obj.id + "_msg").setHTML("此项为必添项");
                }
            }
            
            if(item=="d")
            {
                //只能是数字
                if(obj.value!="" && isNaN(obj.value))
                {
                    b =false;
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").addClass("tiper_error");
                    $(obj.id + "_msg").setHTML("此项必须为数字");
                }
                if(obj.value=="" && $(obj.id + "_msg").hasClass("tiper_ok"))
                {                    
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").removeClass("tiper_error");
                }
            }
            
            if(item=="v")
            {
                if(obj.value!="" && !validateValue($(obj.id + "_reg").value,obj.value))
                {                    
                    b =false;
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").addClass("tiper_error");
                    $(obj.id + "_msg").setHTML($(obj.id + "_cnMessage").value);
                }
            }
            
            if(item=="confirm")
            {               
                if(obj.value.trim()!="" &&  $(obj.id.replace("_confirm","")).value!=obj.value.trim())
                {
                    b =false;
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").addClass("tiper_error");
                    $(obj.id + "_msg").setHTML("两次输入值不一致");
                }
            }
            
            if(item=="chkCode" && b)
            {
                if(obj.value!="")
                {
                    var checkCode = Cookie.get("CheckCode");
			        if(obj.value.toLowerCase() != checkCode.toLowerCase())
			        {
			            b =false;
                        $(obj.id + "_msg").removeClass("tiper_hint");
                        $(obj.id + "_msg").removeClass("tiper_ok");
                        $(obj.id + "_msg").addClass("tiper_error");
                        $(obj.id + "_msg").setHTML("验证码不正确");			            
			        }
			    }
            }
            
            if(item=="ajax" && b && !isSubmit)
            {
                if(obj.value.trim()!="")
                {
                    b =false;
                    $(obj.id + "_msg").removeClass("tiper_error");
                    $(obj.id + "_msg").removeClass("tiper_ok");
                    $(obj.id + "_msg").removeClass("tiper_hint");
                    $(obj.id + "_msg").setHTML("正在验证用户名是否重复");
                    
                    var xmlData = new AjaxXml("User.ValidatorUserName","UserInfo");
                    xmlData.setTextNode("UserName",obj.value.trim());
                    var d = xmlData.getXML();
                    var myAjax = new Ajax('',{method:'post',data:d,onComplete:function(txt,xml){
                    
                        try
                        {
                            var xmlDom = new XMLDom(xml);       
                            var sucessed = xmlDom.getValue("Succeed");   
                            
                            
                            if(sucessed == "1")
                            {                                                             
                                if(xmlDom.getValue("Bool")=="True")
                                {      
                                    $(obj.id + "_msg").removeClass("tiper_hint");
                                    $(obj.id + "_msg").removeClass("tiper_error");                              
                                    $(obj.id + "_msg").addClass("tiper_ok"); 
                                    $(obj.id + "_msg").setHTML($(obj.id + "_msg_user").value.trim());
                                }
                                else
                                {
                                    $(obj.id + "_msg").removeClass("tiper_hint");
                                    $(obj.id + "_msg").removeClass("tiper_ok");
                                    $(obj.id + "_msg").addClass("tiper_error");
                                    $(obj.id + "_msg").setHTML("用户名已经存在，请换个名字试试");
                                }
                                
                            }
                            else
                            {
                                //显示失败提示信息
                                alert(xmlDom.getValue("Message"));
                            }                        
                            
                        }
                        catch(e)
                        {
                            alert(e);
                        }
                        
                    },onFailure:function(){alert("未能加载数据验证文件，请确认网络是否连接！\n");}}).request();
                    
                }
            }
            
         }); 
    
   //判断标记
   if(b)
   {
        if(obj.value.trim()!="")
        {
            $(obj.id + "_msg").removeClass("tiper_hint");
            $(obj.id + "_msg").removeClass("tiper_error");
            if(isShowOkMsg(obj))
            {
                $(obj.id + "_msg").addClass("tiper_ok");            
                $(obj.id + "_msg").setHTML($(obj.id + "_msg_user").value.trim());
            }
            else
            {
                $(obj.id + "_msg").removeClass("tiper_ok");            
                $(obj.id + "_msg").setHTML("");
            }
        }
   }
   
   return b;
   
}
