﻿//checktype:notnull,num,email
var regobj=null;
var beforefocus=null;//before error element
var curindex=0;
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 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){
            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"){
                check=parseInt(target.val())>=parseInt(target.attr("minivalue"));
            }
            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){
                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");
            if(target,target.val().match(regobj).length==1)
                target.val(target.val().match(regobj));
            checked(target,target.val().match(regobj).length==1);
        }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){
    setvalues(target);
}

function checkbox(target){
    setvalues(target);
}

function dismsginbox(target){
    if(target.attr("msgid").replace("#","").replace(".","")==target.attr("id")){
        if($.trim(target.val())==$.trim(target.attr("errormsg")))
            return false;
        else
            return true;
    }else{
        return true;
    }
}

/*******为了防止验证只读的控件*********/
function canCheck(target){  
   if(target.attr("readonly")){
        var e=event || window.event; 
        checked(target,true);
        return false;
   }else{
        return true;
   }
}

function checked(target,bool){
    if(bool){
        if(typeof target.attr("msgid")=="undefined")return;
        if(target.attr("msgid").replace("#","").replace(".","")!=target.attr("id")&&$.trim(target.attr("msgid"))!=""&&target.attr("readonly")!=true)
            $(target.attr("msgid")).text(target.attr("sucmsg"));
        restoreele(target);
        beforefocus=null;
    }else{
        if(typeof target.attr("notallow")!="undefined")
            target.val(target.attr("notallow"));
        else
            target.val("");
        if(target.attr("msgid").replace("#","").replace(".","")!=target.attr("id")){
            if($.trim(target.attr("msgid"))=="")
                alert(target.attr("errormsg"));
            else
                $(target.attr("msgid")).text(target.attr("errormsg"));
        }else{
            $(target.attr("msgid")).val(target.attr("errormsg"));
        }
        if(beforefocus==null){
            beforefocus=target;
            if(target.css("display")!="none"){
                target[0].focus();
            }
            elefocus(target); 
        }
    }
    setvalues(target);
    target.attr("submit",bool.toString());
}


function elefocus(target){
    if(target.attr("readonly")!=true){
        if(typeof(target.attr("altbr"))!="undefined"){
            target.css({border:target.attr("altbr")});
        }
        
        if(typeof(target.attr("altbk"))!="undefined"){
            target.css({background:target.attr("altbk")});
        }
        if(target.attr("checktype")!="select")
            target[0].select();
    }else{
        return false;
    }
}

function restoreele(target)
{
    if(target.attr("readonly")!=true){
        if(typeof(target.attr("initbr"))!="undefined"){
            target.css({border:target.attr("initbr")});
        }
        
        if(typeof(target.attr("initbk"))!="undefined"){
            target.css({background:target.attr("initbk")});
        }
    }else{
        return false;
    }
}


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){
        var values=document.createElement("input");
        values.setAttribute("type","hidden");
        values.setAttribute("id","values");
        document.body.appendChild(values);
        $("#values").val("({");
    }
    
    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;
    }
}

function getwillchecktargets(){
    var errormsg;
    var restr="";
    var targets=new Array();
    if(arguments.length==0){
        $("[check=true]").each(function(){
                 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){
        for(var i=0;i<arguments[0].length;i++){
                if(typeof arguments[0][i].attr("h_name")!="undefined"&$(arguments[0][i].attr("h_name")).size()>0){
                    var name=arguments[0][i].attr("h_name");
                    var type=arguments[0][i].attr("h_type");
                    var property=arguments[0][i].attr("h_pro");
                    var value=arguments[0][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[0][i]);
                        
                  }else{
                        if(arguments[0][i].attr("type")!="radio")
                            targets.push(arguments[0][i]);
                  }
        }
    }
    return targets;
}

function dissubmitdefaultvalue(target){
    $("[check=true]").each(function(){
        if($.trim($(this).val())==$.trim($(this).attr("errormsg"))){
            $(this).val("");
        }
    })
}

function canisubmit(){
    var submit=false;
    var checktargets=new Array();
    if(arguments.length==1){
        checktargets=arguments[0].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++){
                checkArray.push($(sysbol+checktargets[i]));
            }
            checktargets=getwillchecktargets(checkArray);
        }
    }else{
        checktargets=getwillchecktargets();
    }
    submit=checktargets.length>0?false:true;
    for(var i=0;i<checktargets.length;i++){
        if(checktargets[i].attr("submit")=="false"){
            var type=checktargets[i].attr("checktype");
            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();
                }
                submit=false;
                break;
            }else{
                submit=true;
            }
        }else{
                submit=true;
        }
    }
    if(submit){dissubmitdefaultvalue();}
    if(submit&&arguments.length==0){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)
{
    $.ajax({
        url:url+"?rodom="+Math.random(),
        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;
    $(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]);}
             $(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($(this).attr("id")==$(this).attr("msgid").replace("#","").replace(".","")&&$.trim($(this).val())==""){
            $(this).val($(this).attr("errormsg"));
        }
    })
}

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]);   
            }
        })
    }
}

//binder check to elements
function binder(targets){
    var type;
    var func;
    var bindTs="";
    if(arguments.length==0){
        bindTs=pageTargets;
    }else{
        bindTs=targets;
    }
    $(bindTs).each(function(){
        if($(this).attr("readonly")!=true){
            type=$(this).attr("checktype");
            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)");  
                  }
               }).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")); 
                  }
               }).focus(function(){
                  elefocus($(this));
               }) 
            }else if(type=="radio"||type=="checkbox"){
               if($("input[name="+$(this).attr("name")+"]:eq(0)").attr("checked")!=true){
                   $("input[name="+$(this).attr("name")+"]:eq(0)").attr({checked:"true"});
                   eval(type+"($(\"input[name="+$(this).attr("name")+"]:eq(0)\"))");
               }
               $(this).click(function(){
                  eval($(this).attr("checktype")+"($(this))");  
               })
            }else if(type=="select"){
               $(this).change(function(){
                  eval($(this).attr("checktype")+"($(this))");  
               })
            }else{
               $(this).blur(function(){
                  eval($(this).attr("checktype")+"($(this),"+$(this).attr("_length")+")");  
               }).focus(function(){
                  elefocus($(this));
               })
            }
        }
    })
}

//load fair and disabled all element
function loadfair(){
    $(typeof($("input").attr("checktype"))!="undefined").each(function(){
        $(this).css({readOnly:"readyonly"});
    })
}


//next input element
$(document).keypress(function(event){
    if(event.keyCode==13){
        curindex+=1;
        if($("input[index="+curindex+"]").size()>0)
            $("input[index="+curindex+"]")[0].focus();
        else
            curindex=0;
    }
})

