﻿//checktype:notnull,num,email
var regobj=null;
var beforefocus=null;//before error element
var firstCheck=true;
var pageTargets="";
function notnull(target,length){
        if(typeof length=="undefined")
            length=6;  
        if(dismsginbox(target)){         
            var check=$.trim(target.val()).length>0?true:false;
            if(check){
                check=target.val().length>=length?true:false;
            }
            checked(target,check);
        }else{
            checked(target,false);
        }
}
//身份证号验证
function Number(target,length){
    if(typeof length=="undefined")
            length=6;  
        if(dismsginbox(target)){         
            var check=$.trim(target.val()).length>0?true:false;
            if(check){
                check=target.val().length>=length?true:false;
            }
            checked(target,check);
        }else{
            checked(target,false);
        }
}

function num(target,event){
        var e=event || window.event;   
        var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; 
        if(keyCode>=48&&keyCode<=57||keyCode==46||keyCode==8){
            checked(target,true);
        }else{
            event.preventDefault();
            checked(target,false);
        }
}

function numblur(target,length){
        var check=$.trim(target.val()).length>0&&$.trim(target.val()).length>=length?true:false;
        if(check){
            if(arguments.length==3){
                var _length=typeof(target.attr("maxlength"))!="undefined"?target.attr("maxlength"):5;
                regobj=new RegExp("^"+arguments[2]+"\\d{0,"+_length+"}$","g");
            }else{
                regobj=new RegExp("^\\d{"+length+","+length+"}$","g");
            }
            check=target.val().match(regobj)!=null;
            if(check&&typeof target.attr("minivalue")!="undefined"){
                var val=parseInt(target.val());
                var mini=parseInt(target.attr("minivalue"));
                check=val>=mini;
                if(check&&typeof target.attr("maxvalue")!="undefined")
                    check=val<=parseInt(target.attr("maxvalue")); 
            }
            if(check&&typeof target.attr("notallow")!="undefined"){
                if($.trim(target.val())==$.trim(target.attr("notallow"))){check=false};
            }
            checked(target,check);
        }else{
            checked(target,false);
        }
}

function dou(target,event){
        if(target.attr("readonly")!=true){
            var e=event || window.event;   
            var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
            
            if(keyCode>=48&&keyCode<=57||keyCode==46||keyCode==8){
                checked(target,true);
            }else{
               event.preventDefault();
               checked(target,false);
            }
         }else{
            return false;
         }
} 

function doublur(target,length){
        var check=$.trim(target.val()).length>0?true:false;
        if(check){
            regobj=new RegExp("^\\d+[.]?\\d{0,"+length+"}$","g");
            check=target.val().match(regobj)!=null;
            if(check&&typeof target.attr("minivalue")!="undefined"){
                var val=parseFloat(target.val());
                var mini=parseFloat(target.attr("minivalue"));
                check=val>=mini;
                if(check&&typeof target.attr("maxvalue")!="undefined")
                    check=val<=parseFloat(target.attr("maxvalue")); 
            }
            checked(target,check);
        }else{
            checked(target,false);
        }
}  

function email(target,length){
        if(dismsginbox(target)){
            var check=$.trim(target.val()).length>0&&$.trim(target.val()).length>=length?true:false;
            if(check){
                check=target.val().match(/^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/g)!=null;
            }
            checked(target,check);
        }else{
            checked(target,false);
        }
}

function select(target){
        if(dismsginbox(target)){
            checked(target,$.trim(target.val())==""?false:$.trim(target.val())==$.trim(target.attr("notallow"))?false:true);
        }else{
            checked(target,false);
        }
}

function radio(target){
    checked(target,target.attr("checked"));
}

function checkbox(target){
    checked(target,target.attr("checked"));
}

function confirms(target)
{
   
    var ck=true;
    if(target.attr("confirms"))
    {
       var cons=target.attr("confirms").match(/[#.]\w+/g);
       var $con;
       for(var i=0;i<cons.length;i++)
       {
      
           $con=$(cons[i]);
           if($con.size()>0)
           {
              if(target.val()!=$con.val())
              {
                   ck=false;
                   divErrorMsgBox(target,false,target.attr("confirmerror"));
                   $con.focus();
                   break;
              } 
           } 
       }
    }
    return ck;
}

function dismsginbox(target){
    if($.trim(target.val())==$.trim(target.attr("errormsg"))){
       return false;
    }else{
       return true;
    }
}

/*******为了防止验证只读的控件*********/
function canCheck(target){  
   if(target.attr("readonly")){
        var e=event || window.event; 
        checked(target,true);
        return false;
   }else{
        return true;
   }
}

/*******产生公共区域，存放信息div以及json数据input********/
function createCommonRegion()
{
    if($("#checkRegion").size()==0){
        var region=$("<div id='checkRegion'></div>");
        document.body.appendChild(region[0]);
    }
}

/*********提示新方法(精确定位提示)***********/
function divErrorMsgBox(target,bool,otherinfo)
{
  // alert(target);
   //alert(bool);
   //  alert(otherinfo);
    if(target.css("display")=="none")return;
    var targetMsgBoxID="#err_"+target.attr("id");
    if(typeof target.attr("h_name")!="undefined"){
        targetMsgBoxID="#err_"+$(target.attr("h_name").split(",")[0]).attr("id");
    }
    if(bool){$(targetMsgBoxID).css({display:"none"});return;}
    var offSet=target.offset();
    if($(targetMsgBoxID).size()==0){
        $("#checkRegion").append($("<div id='"+targetMsgBoxID.replace("#","")+"' class='tishi'>"+
        "<div class=\"tishi_l\"><img src=\"/images/tishi_bg1.gif\"></div>"+
        "<div class=\"tishi_c\"></div>"+
        "<div class=\"tishi_r\"><img src=\"/images/tishi_bg3.gif\"></div></div>"));
        $(targetMsgBoxID).css({position:"absolute"})
        .mouseover(function(){
            $(this).css({display:"none"});
        })
    }
    if(otherinfo)
    {
        $(targetMsgBoxID).children("div:eq(1)").html(otherinfo);
    }
    else if(target.attr("errormsg")!="")
    {
        $(targetMsgBoxID).children("div:eq(1)").html(target.attr("errormsg"));
    }else{
        alert("检测元素:"+target.attr("id")+"没有错误信息!");
    }
    $(targetMsgBoxID).css({display:"block",left:offSet.left+10+target.width()+"px",
    top:offSet.top+"px"})
    setTimeout(function(){
        $(targetMsgBoxID).css({display:"none"});
    },3000)
}

function checked(target,bool){
    if(bool==false){
        if(typeof target.attr("notallow")!="undefined")
            target.val(target.attr("notallow"));
        else
            target.val("");
    }
    setvalues(target);
    target.attr("submit",bool.toString());
    divErrorMsgBox(target,bool);
}


function targetoverout(target){
    if(canCheck(target))return;
    if(typeof(target.attr("overborder"))=="undefined")return;
    if(typeof(target.attr("overbackground"))=="undefined")return;
    if(typeof(target.attr("initborder"))=="undefined")return;
    if(typeof(target.attr("initbackground"))=="undefined")return;
    target.hover(
        function(){
            if(typeof(target.attr("overborder"))!="undefined"){
                target.css({border:target.attr("overborder")});
            }
            if(typeof(target.attr("overbackground"))!="undefined"){
                target.css({background:target.attr("overbackground")});
            }
        },
        function(){
            if(typeof(target.attr("initborder"))!="undefined"){
                target.css({border:target.attr("initborder")});
            }  
            if(typeof(target.attr("initbackground"))!="undefined"){
                target.css({background:target.attr("initbackground")});
            }
        }
    );
}

function jsontoString(json){
    var str="{";
    $.each(json,function(key,data){
        if(typeof data=="object"){
            var _str=key+":"+jsontoString(data);
            str+=_str.substring(0,_str.length-1)+"},";
        }
        else
            str+=key+":'"+data+"',";
    })
    return str;
}

//({gameval:-1,serverval:-2,productval:112})
function setvalues(target)
{   
//    if($("#values").size()==0){
//        $("#checkRegion").append($("<input type='hidden' id='values' value='({'></input>"));
//    }
//    
//    if(setcheckvalues(target)){
//        var json=eval($("#values").val()+"})");
//        var settype=target.attr("type")=="radio"?target.attr("name"):target.attr("id");
//        eval("json."+settype+"val="+gettargetval(target));
//        var jsonString="("+jsontoString(json);
//        $("#values").val(jsonString.substring(0,jsonString.length-1));
//    }
}

function gettargetval(target){
    var value;
    if(target.attr("type")=="checkbox"){
       value=target.attr("checked")?target.val():"-1";
    }else if(target.attr("type")=="text"||target.attr("type")=="password"){
       value=$.trim(target.val()); 
    }else if(target.attr("type")=="radio"||target.attr("checktype")=="select"){
       value=$.trim(target.val())==""?"-1":$.trim(target.val());
    }
    return "'"+value+"'";
}

function setcheckvalues(target){    
    if(target.attr("type")=="checkbox"){
        var json=eval($("#values").val()+"})");
        var values="";
        var nametype=target.attr("type")=="radio"?target.attr("name"):target.attr("id");
        var checkgroup=typeof target.attr("groupname")=="undefined"?"":target.attr("groupname");
        if(checkgroup!=""){
            var val;
            values+=","+target.attr("groupname")+":{";
            if(typeof eval("json."+checkgroup)=="undefined"){
                $("input[groupname="+target.attr("groupname")+"]").each(function(){
                    val=$(this).attr("checked")?$(this).val():"-1";
                    values+=$(this).attr("id")+"val:"+val+",";
                })
                $("#values").val($("#values").val()+values.substring(0,values.length-1)+"}");
            }else{
                eval("json."+checkgroup+"."+nametype+"val="+gettargetval(target));
                var jsonString="("+jsontoString(json);
                $("#values").val(jsonString.substring(0,jsonString.length-1));  
            }
        }else{
                eval("json."+nametype+"val="+gettargetval(target));
                var jsonString="("+jsontoString(json);
                $("#values").val(jsonString.substring(0,jsonString.length-1));
        }
        return false;
    }else{
        return true;
    }
}
//pars rules 1:namespace 2:checklist
function getwillchecktargets(){
    var errormsg;
    var restr="";
    var targets=new Array();
    var namespaces=arguments.length>0?arguments[0]:"";
    if(arguments.length==0){
        $("[check=true]").each(function(){
                 if($(this).css("display")!="none"&&$(this).css("visibility")!="hidden"){
                 if(typeof $(this).attr("h_name")!="undefined"&&$($(this).attr("h_name")).size()>0){
                    var name=$(this).attr("h_name");
                    var type=$(this).attr("h_type");
                    var property=$(this).attr("h_pro");
                    var value=$(this).attr("h_val");
                    if(typeof eval("$(\""+name+"\")."+type+"(\""+property+"\")")!="boolean")
                         value="'"+value+"'";
                            
                        errormsg=eval("$(\""+name+"\").attr(\"errormsg\")");
                        
                        if(typeof errormsg=="undefined")
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value;
                        else
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value+"||$.trim($(\""+name+"\").val())=='"+errormsg+"'"
                        
                        if(eval(restr))
                            targets.push($(this));
                        
                    }else{
                        if($(this).attr("type")!="radio")
                            targets.push($(this));
                    }
                  }
        })
    }else if(arguments.length==1)
    {
        //get arguments namespace targets
        $("[check=true]").each(function(){
                 if(ismynamespace(namespaces,$(this)))return true;
                 if($(this).css("display")!="none"&&$(this).css("visibility")!="hidden"){
                 if(typeof $(this).attr("h_name")!="undefined"&&$($(this).attr("h_name")).size()>0){
                    var name=$(this).attr("h_name");
                    var type=$(this).attr("h_type");
                    var property=$(this).attr("h_pro");
                    var value=$(this).attr("h_val");
                    if(typeof eval("$(\""+name+"\")."+type+"(\""+property+"\")")!="boolean")
                         value="'"+value+"'";
                            
                        errormsg=eval("$(\""+name+"\").attr(\"errormsg\")");
                        
                        if(typeof errormsg=="undefined")
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value;
                        else
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value+"||$.trim($(\""+name+"\").val())=='"+errormsg+"'"
                        
                        if(eval(restr))
                            targets.push($(this));
                        
                  }else{
                        if($(this).attr("type")!="radio")
                            targets.push($(this));
                  }
                  }
        })  
    }else if(arguments.length==2){
        //get arguments to array return sorted
        for(var i=0;i<arguments[1].length;i++){
                if(ismynamespace(namespaces,arguments[1][i]))return true;
                if(arguments[1][i].css("display")!="none"&&arguments[1][i].css("visibility")!="hidden"){
                if(typeof arguments[1][i].attr("h_name")!="undefined"&$(arguments[1][i].attr("h_name")).size()>0){
                    var name=arguments[1][i].attr("h_name");
                    var type=arguments[1][i].attr("h_type");
                    var property=arguments[1][i].attr("h_pro");
                    var value=arguments[1][i].attr("h_val");
                    if(typeof eval("$(\""+name+"\")."+type+"(\""+property+"\")")!="boolean")
                        value="'"+value+"'";
                            
                        errormsg=eval("$(\""+name+"\").attr(\"errormsg\")");
                        
                        if(typeof errormsg=="undefined")
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value;
                        else
                            restr="$(\""+name+"\")."+type+"(\""+property+"\")=="+value+"||$.trim($(\""+name+"\").val())=='"+errormsg+"'"
                        
                        if(eval(restr))
                            targets.push(arguments[1][i]);
                        
                  }else{
                        if(arguments[1][i].attr("type")!="radio")
                            targets.push(arguments[1][i]);
                  }
                  }
        }
    }
    return targets;
}

function dissubmitdefaultvalue(target){
    $("[check=true]").each(function(){
        if($.trim($(this).val())==$.trim($(this).attr("errormsg"))){
            $(this).val("");
        }
    })
}

/**check is my namespce? if true continue,else break or return**/
function ismynamespace(namespaces,target)
{
     var spaces=namespaces.split(",");
     var i=0;
     for(i;i<spaces.length;i++)
     {
        if(target.attr("namespace")==spaces[i])break;
     }
     return i==spaces.length;
}

//pars rules 1:namespace 2:checklist
function canisubmit(){

    var submit=false;
    var checktargets=new Array();
    if(arguments.length>0){
        if(arguments.length==1)
        {
            checktargets=getwillchecktargets(arguments[0]);
        }else if(arguments.length==2){
            if(typeof arguments[1]=="object")
            {
                arguments[1].each(function(){
                    checktargets.push($(this));
                })
            }else{
                checktargets=arguments[1].split(",");
                if(checktargets.length==0)
                {
                    submit=true;
                }else{
                    var sysbol;
                    var checkArray=new Array();
                    if(checktargets[0]=="id")
                        sysbol="#";
                    else
                        sysbol=".";
                    for(var i=0;i<checktargets.length;i++){
                        if(i==0)continue;
                        var ckobj=$(sysbol+checktargets[i]);
                        if(ckobj.size()>0)
                            checkArray.push($(sysbol+checktargets[i]));
                    }
                    checktargets=getwillchecktargets(arguments[0],checkArray);
                }
            }
        }
    }else{
        checktargets=getwillchecktargets();
    }
    submit=checktargets.length>0?false:true;
    
    ///spring add/
    if($("#phonenumber").get(0))
    {
       $("#phone_input").attr("submit","false");
    }
    

    for(var i=0;i<checktargets.length;i++){  
        if(!confirms(checktargets[i]))
        {
            submit=false;
            break;
        } 
//          if(checktargets[i].attr("id")=="phone_input")
//            {
//               alert(checktargets[i].attr("id")+"_submit_"+checktargets[i].attr("submit")+"_display_"+checktargets[i].css("display"));
//            }
            
        if(checktargets[i].attr("submit")=="false"||typeof checktargets[i].attr("submit")=="undefined")
        {
            var type=checktargets[i].attr("checktype");
            func=type+"(checktargets[i],"+checktargets[i].attr("_length")+")";
            if(type=="num"||type=="dou"||type=="posnum"){
               if(type=="posnum"){
                  var evalStr=func.replace(type,"numblur")+"),"+"\"[1-9]\")";
                  evalStr=evalStr.replace(")),",",");
                  eval(evalStr);
               }else{
                  eval(func.replace(type,type+"blur")); 
               }
            }else if(type=="select"){
               eval(type+"(checktargets[i])");
            }else{
               eval(func);
            }
            

            if(checktargets[i].attr("submit")=="false"){
                if(checktargets[i].css("display")!="none"){
                    checktargets[i][0].focus();
                }
               // alert(checktargets[i]);
               // alert("false this");
                submit=false;
                break;
            }
            else
            {
             //alert("true1");
             submit=true;
            }
        }
        else
        {
               // alert("true2");
                submit=true;
        }
    }
 //  alert("ok"+submit);

//    if($("#phonenumber").get(0))
//    {
//        if($("#phone_input").val()=="");
//        {
//          divErrorMsgBox($("#phone_input"),true,null);
//          //$("#phone_area").focus();
//            submit=false;
//        }
//    }
  //   alert("1"+$("#phone_input").val()+"2");
    if(submit){dissubmitdefaultvalue();}
    if(submit){submitLayer();}
   
    return submit;
}

function submited(){
    $("#sdiv").css({display:"none"});
}

function submitLayer(){
    if($("#sdiv").size()>0){
        $("#sdiv").css({display:"block"});
    }else{
        var sdiv=document.createElement("div");
        sdiv.setAttribute("id","sdiv");
        sdiv.style.zIndex="8";
        var waitmain=document.createElement("div");
        waitmain.style.zIndex="9";
        var waitimg=document.createElement("img");
        waitimg.style.zIndex="10";
        waitimg.src="/images/process.gif";
        waitmain.appendChild(waitimg);
        document.body.appendChild(sdiv);
        sdiv.appendChild(waitmain);
        $("#sdiv").css({height:$(document.body).height(),background:"#fff",left:"0",top:"0",position:"absolute"
        ,width:"100%",margin:"0",padding:"0",opacity:"0.5",filter:"progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=20,finishOpacity=100)"});
        $("#sdiv div:eq(0)").css({top:"50%",left:"50%",width:"32px",height:"32px",position:"absolute",textAlign:"center"});
    }
}

function getPageScroll() {   
    var xScroll, yScroll;   
    if (self.pageYOffset) {   
        yScroll = self.pageYOffset;   
        xScroll = self.pageXOffset;   
    } else if (document.documentElement && document.documentElement.scrollTop) {     // Explorer 6 Strict   
        yScroll = document.documentElement.scrollTop;   
        xScroll = document.documentElement.scrollLeft;   
    } else if (document.body) {// all other Explorers   
        yScroll = document.body.scrollTop;   
        xScroll = document.body.scrollLeft;    
    }   
    arrayPageScroll = new Array(xScroll,yScroll);   
    return arrayPageScroll;   
}; 

$(window).scroll(function(){
    if($("#sdiv").size()>0){
        var location=$("#sdiv div:eq(0)").offset();
        var nowlocation=getPageScroll();
        //var _left=(document.body.clientWidth-location.left)/2+nowlocation[0]+"px";
        var _top=(document.body.clientHeight-location.top)/2+nowlocation[1];
        $("#sdiv div:eq(0)").css({opacity:"0.2"});
        $("#sdiv div:eq(0)").animate({top:_top,opacity:"1" },10) 
    }
})

//load xml to page
function loadconfig(url)
{
     $(window).load(function(){
        var urls=url.split(",");
        for(var i=0;i<urls.length;i++)
        {
            $.ajax({
                url:urls[i],
                type:"Get",
                dataType:"xml",
                error:function(error){
        //            alert("xml error");
                },
                success:function(xml){
                    loadsuccess(xml);
                }
            })
        }
    })
}

//load success and add attribute for element
function loadsuccess(xml){
    var parlist;//pars string list
    var parjson;
    createCommonRegion();
    $(xml).find("config").children("check").each(function(){
         parjson=eval("("+$(this).attr("pars")+")");
         for(var key in parjson){
             if(key=="targets"){continue;}
             if(key=="common"){setuiconfig(xml,parjson.targets,parjson[key]);}
             setuidefault(xml,parjson.targets);
             $(parjson.targets).attr(key,parjson[key]);   
         }
         setvalues($(parjson.targets));
         if(!$(parjson.targets).attr("readonly")){
            $(parjson.targets).attr("submit","false");
            binder(parjson.targets);
            pageTargets+=parjson.targets+",";
//            loadmsginbox($(parjson.targets));
         }else{
            $(parjson.targets).attr("submit","true");
         }
    })
    if(pageTargets!=""){
        pageTargets=pageTargets.substring(0,pageTargets.length-1);
    }
}

function loadmsginbox(targets){
    targets.each(function(){
        if($.trim($(this).val())==""){
            divErrorMsgBox($(this),false);
        }
    })
}

function setuiconfig(xml,targets,uitarget){
    var uijson;
    uitarget=uitarget.split(",");
    for(var i=0;i<uitarget.length;i++){
        $(xml).find("commonconfig").children("[name="+uitarget[i]+"]").each(function(){
            uijson=eval("("+$(this).attr("pars")+")");
            for(var key in uijson){
               $(targets).attr(key,uijson[key]);   
            }
        })
    }
}

function setuidefault(xml,targets){
    var uijson;
    $(xml).find("defaultconfig").children("default").each(function(){
            uijson=eval("("+$(this).attr("pars")+")");
            for(var key in uijson){
               $(targets).attr(key,uijson[key]);   
            }
    })
}

//binder check to elements
function binder(targets){
    var type;
    var func;
    var bindTs;
    if(arguments.length==0){
        bindTs=pageTargets;
    }else{
        bindTs=targets;
    }
    if($(bindTs).size()>0)createCommonRegion();
    $(bindTs).each(function(){
        if($(this).attr("readonly")!=true){
            //setvalues($(this));
            type=$(this).attr("checktype");
            if(!$(this).attr("_length"))$(this).attr("_length","6");
            func=type+"($(this),"+$(this).attr("_length")+")";
            if(type=="num"||type=="dou"||type=="posnum"){
               $(this).keypress(function(event){
                  var c_type=$(this).attr("checktype");  
                  if(c_type=="posnum"){
                    eval("num($(this),event)");  
                  }else{
                    eval(c_type+"($(this),event)");  
                  }
                  divErrorMsgBox($(this),true);
               }).blur(function(){
                  var c_type=$(this).attr("checktype");
                  var evalStr=c_type+"($(this),"+$(this).attr("_length")+")";
                  if(c_type=="posnum"){
                    evalStr=evalStr.replace(c_type,"numblur")+"),"+"\"[1-9]\")";
                    evalStr=evalStr.replace(")),",",");
                    eval(evalStr);
                  }else{
                    eval(evalStr.replace(c_type,c_type+"blur")); 
                  }
               })
               targetoverout($(this));
            }else if(type=="radio"||type=="checkbox"){  
               $(this).click(function(){
                   checkbox($(this));
                   $("input[name="+$(this).attr("name")+"]").attr("submit",$(this).attr("submit"));               
               })
            }else if(type=="select"){
               $(this).change(function(){
                  eval($(this).attr("checktype")+"($(this))");  
               }).keypress(function(){
                  divErrorMsgBox($(this),true);
               })
            }else{
               $(this).blur(function(){
                  eval($(this).attr("checktype")+"($(this),"+$(this).attr("_length")+")");  
               }).keypress(function(){
                  divErrorMsgBox($(this),true);
               })
               targetoverout($(this));
            }
        }
    })
}

//load fair and disabled all element
function loadfair(){
    $(typeof($("input").attr("checktype"))!="undefined").each(function(){
        $(this).css({readOnly:"readyonly"});
    })
}

