/**
 * jQuery Validation Plugin 1.8.0
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2011 JÃ¶rn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function(c){
    c.extend(c.fn,{
        validate:function(a){
            if(this.length){
                var b=c.data(this[0],"validator");
                if(b)return b;
                b=new c.validator(a,this[0]);
                c.data(this[0],"validator",b);
                if(b.settings.onsubmit){
                    this.find("input, button").filter(".cancel").click(function(){
                        b.cancelSubmit=true
                    });
                    b.settings.submitHandler&&this.find("input, button").filter(":submit").click(function(){
                        b.submitButton=this
                    });
                    this.submit(function(d){
                        function e(){
                            if(b.settings.submitHandler){
                                if(b.submitButton)var f=c("<input type='hidden'/>").attr("name",
                                    b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm);
                                b.settings.submitHandler.call(b,b.currentForm);
                                b.submitButton&&f.remove();
                                return false
                            }
                            return true
                        }
                        b.settings.debug&&d.preventDefault();
                        if(b.cancelSubmit){
                            b.cancelSubmit=false;
                            return e()
                        }
                        if(b.form()){
                            if(b.pendingRequest){
                                b.formSubmitted=true;
                                return false
                            }
                            return e()
                        }else{
                            b.focusInvalid();
                            return false
                        }
                    })
                }
                return b
            }else a&&a.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing")
        },
        valid:function(){
            if(c(this[0]).is("form"))return this.validate().form();
            else{
                var a=true,b=c(this[0].form).validate();
                this.each(function(){
                    a&=b.element(this)
                });
                return a
            }
        },
        removeAttrs:function(a){
            var b={},d=this;
            c.each(a.split(/\s/),function(e,f){
                b[f]=d.attr(f);
                d.removeAttr(f)
            });
            return b
        },
        rules:function(a,b){
            var d=this[0];
            if(a){
                var e=c.data(d.form,"validator").settings,f=e.rules,g=c.validator.staticRules(d);
                switch(a){
                    case "add":
                        c.extend(g,c.validator.normalizeRule(b));
                        f[d.name]=g;
                        if(b.messages)e.messages[d.name]=c.extend(e.messages[d.name],b.messages);
                        break;
                    case "remove":
                        if(!b){
                            delete f[d.name];
                            return g
                        }
                        var h={};
                
                        c.each(b.split(/\s/),function(j,i){
                            h[i]=g[i];
                            delete g[i]
                        });
                        return h
                }
            }
            d=c.validator.normalizeRules(c.extend({},c.validator.metadataRules(d),c.validator.classRules(d),c.validator.attributeRules(d),c.validator.staticRules(d)),d);
            if(d.required){
                e=d.required;
                delete d.required;
                d=c.extend({
                    required:e
                },d)
            }
            return d
        }
    });
    c.extend(c.expr[":"],{
        blank:function(a){
            return!c.trim(""+a.value)
        },
        filled:function(a){
            return!!c.trim(""+a.value)
        },
        unchecked:function(a){
            return!a.checked
        }
    });
    c.validator=function(a,
        b){
        this.settings=c.extend(true,{},c.validator.defaults,a);
        this.currentForm=b;
        this.init()
    };
    
    c.validator.format=function(a,b){
        if(arguments.length==1)return function(){
            var d=c.makeArray(arguments);
            d.unshift(a);
            return c.validator.format.apply(this,d)
        };
        
        if(arguments.length>2&&b.constructor!=Array)b=c.makeArray(arguments).slice(1);
        if(b.constructor!=Array)b=[b];
        c.each(b,function(d,e){
            a=a.replace(RegExp("\\{"+d+"\\}","g"),e)
        });
        return a
    };
    
    c.extend(c.validator,{
        defaults:{
            messages:{},
            groups:{},
            rules:{},
            errorClass:"error",
            validClass:"valid",
            errorElement:"label",
            focusInvalid:true,
            errorContainer:c([]),
            errorLabelContainer:c([]),
            onsubmit:true,
            ignore:[],
            ignoreTitle:false,
            onfocusin:function(a){
                this.lastActive=a;
                if(this.settings.focusCleanup&&!this.blockFocusCleanup){
                    this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass);
                    this.addWrapper(this.errorsFor(a)).hide()
                }
            },
            onfocusout:function(a){
                if(!this.checkable(a)&&(a.name in this.submitted||!this.optional(a)))this.element(a)
            },
            onkeyup:function(a){
                if(a.name in this.submitted||a==this.lastElement)this.element(a)
            },
            onclick:function(a){
                if(a.name in this.submitted)this.element(a);else a.parentNode.name in this.submitted&&this.element(a.parentNode)
            },
            highlight:function(a,b,d){
                c(a).addClass(b).removeClass(d)
            },
            unhighlight:function(a,b,d){
                c(a).removeClass(b).addClass(d)
            }
        },
        setDefaults:function(a){
            c.extend(c.validator.defaults,a)
        },
        messages:{
            required:"EstÃ© campo Ã© obrigatÃ³rio.",
            remote:"Por favor corrigir esse campo.",
            email:"Por favor insira um email válido.",
            url:"Por favor insira uma URL válida.",
            date:"Por favor insira uma data válida.",
            dateISO:"Por favor insira uma data válida.",
            number:"Por favor insira um número válido.",
            digits:"Por favor insira apenas números.",
            creditcard:"Por favor insira um número de cartão de crédito válido.",
            equalTo:"Por favor insira o mesmo valor novamente.", 
            accept:"Por favor insira uma extensão válida.",
            maxlength:c.validator.format("Por favor inserir no maxímo {0} caracteres."),
            minlength:c.validator.format("Por favor insira pelo menos {0} caracteres."),
            rangelength:c.validator.format("Por favor insira um valor entre {0} e {1} caracteres."),
            range:c.validator.format("Por favor insira um valor entre {0} e {1}."),
            max:c.validator.format("Por favor insira um valor menor ou igual a {0}."),
            min:c.validator.format("Por favor insira um valor maior ou igual a {0}.")
        },
        autoCreateRanges:false,
        prototype:{
            init:function(){
                function a(e){
                    var f=c.data(this[0].form,"validator");
                    e="on"+e.type.replace(/^validate/,"");
                    f.settings[e]&&f.settings[e].call(f,this[0])
                }
                this.labelContainer=c(this.settings.errorLabelContainer);
                this.errorContext=this.labelContainer.length&&
                this.labelContainer||c(this.currentForm);
                this.containers=c(this.settings.errorContainer).add(this.settings.errorLabelContainer);
                this.submitted={};
        
                this.valueCache={};
        
                this.pendingRequest=0;
                this.pending={};
        
                this.invalid={};
        
                this.reset();
                var b=this.groups={};
        
                c.each(this.settings.groups,function(e,f){
                    c.each(f.split(/\s/),function(g,h){
                        b[h]=e
                    })
                });
                var d=this.settings.rules;
                c.each(d,function(e,f){
                    d[e]=c.validator.normalizeRule(f)
                });
                c(this.currentForm).validateDelegate(":text, :password, :file, select, textarea",
                    "focusin focusout keyup",a).validateDelegate(":radio, :checkbox, select, option","click",a);
                this.settings.invalidHandler&&c(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)
            },
            form:function(){
                this.checkForm();
                c.extend(this.submitted,this.errorMap);
                this.invalid=c.extend({},this.errorMap);
                this.valid()||c(this.currentForm).triggerHandler("invalid-form",[this]);
                this.showErrors();
                return this.valid()
            },
            checkForm:function(){
                this.prepareForm();
                for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);
                return this.valid()
            },
            element:function(a){
                this.lastElement=a=this.clean(a);
                this.prepareElement(a);
                this.currentElements=c(a);
                var b=this.check(a);
                if(b)delete this.invalid[a.name];else this.invalid[a.name]=true;
                if(!this.numberOfInvalids())this.toHide=this.toHide.add(this.containers);
                this.showErrors();
                return b
            },
            showErrors:function(a){
                if(a){
                    c.extend(this.errorMap,a);
                    this.errorList=[];
                    for(var b in a)this.errorList.push({
                        message:a[b],
                        element:this.findByName(b)[0]
                    });this.successList=c.grep(this.successList,
                        function(d){
                            return!(d.name in a)
                        })
                }
                this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()
            },
            resetForm:function(){
                c.fn.resetForm&&c(this.currentForm).resetForm();
                this.submitted={};
        
                this.prepareForm();
                this.hideErrors();
                this.elements().removeClass(this.settings.errorClass)
            },
            numberOfInvalids:function(){
                return this.objectLength(this.invalid)
            },
            objectLength:function(a){
                var b=0,d;
                for(d in a)b++;return b
            },
            hideErrors:function(){
                this.addWrapper(this.toHide).hide()
            },
            valid:function(){
                return this.size()==0
            },
            size:function(){
                return this.errorList.length
            },
            focusInvalid:function(){
                if(this.settings.focusInvalid)try{
                    c(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")
                }catch(a){}
            },
            findLastActive:function(){
                var a=this.lastActive;
                return a&&c.grep(this.errorList,function(b){
                    return b.element.name==a.name
                }).length==1&&a
            },
            elements:function(){
                var a=this,b={};
    
                return c([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){
                    !this.name&&
                    a.settings.debug&&window.console&&console.error("%o has no name assigned",this);
                    if(this.name in b||!a.objectLength(c(this).rules()))return false;
                    return b[this.name]=true
                })
            },
            clean:function(a){
                return c(a)[0]
            },
            errors:function(){
                return c(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)
            },
            reset:function(){
                this.successList=[];
                this.errorList=[];
                this.errorMap={};
    
                this.toShow=c([]);
                this.toHide=c([]);
                this.currentElements=c([])
            },
            prepareForm:function(){
                this.reset();
                this.toHide=this.errors().add(this.containers)
            },
            prepareElement:function(a){
                this.reset();
                this.toHide=this.errorsFor(a)
            },
            check:function(a){
                a=this.clean(a);
                if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];
                var b=c(a).rules(),d=false,e;
                for(e in b){
                    var f={
                        method:e,
                        parameters:b[e]
                    };
            
                    try{
                        var g=c.validator.methods[e].call(this,a.value.replace(/\r/g,""),a,f.parameters);
                        if(g=="dependency-mismatch")d=true;
                        else{
                            d=false;
                            if(g=="pending"){
                                this.toHide=this.toHide.not(this.errorsFor(a));
                                return
                            }
                            if(!g){
                                this.formatAndAdd(a,f);
                                return false
                            }
                        }
                    }catch(h){
                        this.settings.debug&&
                        window.console&&console.log("exception occured when checking element "+a.id+", check the '"+f.method+"' method",h);
                        throw h;
                    }
                }
                if(!d){
                    this.objectLength(b)&&this.successList.push(a);
                    return true
                }
            },
            customMetaMessage:function(a,b){
                if(c.metadata){
                    var d=this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata();
                    return d&&d.messages&&d.messages[b]
                }
            },
            customMessage:function(a,b){
                var d=this.settings.messages[a];
                return d&&(d.constructor==String?d:d[b])
            },
            findDefined:function(){
                for(var a=0;a<arguments.length;a++)if(arguments[a]!==
                    undefined)return arguments[a]
            },
            defaultMessage:function(a,b){
                return this.findDefined(this.customMessage(a.name,b),this.customMetaMessage(a,b),!this.settings.ignoreTitle&&a.title||undefined,c.validator.messages[b],"<strong>Warning: No message defined for "+a.name+"</strong>")
            },
            formatAndAdd:function(a,b){
                var d=this.defaultMessage(a,b.method),e=/\$?\{(\d+)\}/g;
                if(typeof d=="function")d=d.call(this,b.parameters,a);
                else if(e.test(d))d=jQuery.format(d.replace(e,"{$1}"),b.parameters);
                this.errorList.push({
                    message:d,
                    element:a
                });
                this.errorMap[a.name]=d;
                this.submitted[a.name]=d
            },
            addWrapper:function(a){
                if(this.settings.wrapper)a=a.add(a.parent(this.settings.wrapper));
                return a
            },
            defaultShowErrors:function(){
                for(var a=0;this.errorList[a];a++){
                    var b=this.errorList[a];
                    this.settings.highlight&&this.settings.highlight.call(this,b.element,this.settings.errorClass,this.settings.validClass);
                    this.showLabel(b.element,b.message)
                }
                if(this.errorList.length)this.toShow=this.toShow.add(this.containers);
                if(this.settings.success)for(a=
                    0;this.successList[a];a++)this.showLabel(this.successList[a]);
                if(this.settings.unhighlight){
                    a=0;
                    for(b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass)
                }
                this.toHide=this.toHide.not(this.toShow);
                this.hideErrors();
                this.addWrapper(this.toShow).show()
            },
            validElements:function(){
                return this.currentElements.not(this.invalidElements())
            },
            invalidElements:function(){
                return c(this.errorList).map(function(){
                    return this.element
                })
            },
            showLabel:function(a,
                b){
                var d=this.errorsFor(a);
                if(d.length){
                    d.removeClass().addClass(this.settings.errorClass);
                    d.attr("generated")&&d.html(b)
                }else{
                    d=c("<"+this.settings.errorElement+"/>").attr({
                        "for":this.idOrName(a),
                        generated:true
                    }).addClass(this.settings.errorClass).html(b||"");
                    if(this.settings.wrapper)d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();
                    this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,c(a)):d.insertAfter(a))
                }
                if(!b&&this.settings.success){
                    d.text("");
                    typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d)
                }
                this.toShow=this.toShow.add(d)
            },
            errorsFor:function(a){
                var b=this.idOrName(a);
                return this.errors().filter(function(){
                    return c(this).attr("for")==b
                })
            },
            idOrName:function(a){
                return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)
            },
            checkable:function(a){
                return/radio|checkbox/i.test(a.type)
            },
            findByName:function(a){
                var b=this.currentForm;
                return c(document.getElementsByName(a)).map(function(d,e){
                    return e.form==
                    b&&e.name==a&&e||null
                })
            },
            getLength:function(a,b){
                switch(b.nodeName.toLowerCase()){
                    case "select":
                        return c("option:selected",b).length;
                    case "input":
                        if(this.checkable(b))return this.findByName(b.name).filter(":checked").length
                }
                return a.length
            },
            depend:function(a,b){
                return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):true
            },
            dependTypes:{
                "boolean":function(a){
                    return a
                },
                string:function(a,b){
                    return!!c(a,b.form).length
                },
                "function":function(a,b){
                    return a(b)
                }
            },
            optional:function(a){
                return!c.validator.methods.required.call(this,
                    c.trim(a.value),a)&&"dependency-mismatch"
            },
            startRequest:function(a){
                if(!this.pending[a.name]){
                    this.pendingRequest++;
                    this.pending[a.name]=true
                }
            },
            stopRequest:function(a,b){
                this.pendingRequest--;
                if(this.pendingRequest<0)this.pendingRequest=0;
                delete this.pending[a.name];
                if(b&&this.pendingRequest==0&&this.formSubmitted&&this.form()){
                    c(this.currentForm).submit();
                    this.formSubmitted=false
                }else if(!b&&this.pendingRequest==0&&this.formSubmitted){
                    c(this.currentForm).triggerHandler("invalid-form",[this]);
                    this.formSubmitted=
                    false
                }
            },
            previousValue:function(a){
                return c.data(a,"previousValue")||c.data(a,"previousValue",{
                    old:null,
                    valid:true,
                    message:this.defaultMessage(a,"remote")
                })
            }
        },
        classRuleSettings:{
            required:{
                required:true
            },
            email:{
                email:true
            },
            url:{
                url:true
            },
            date:{
                date:true
            },
            dateISO:{
                dateISO:true
            },
            dateDE:{
                dateDE:true
            },
            number:{
                number:true
            },
            numberDE:{
                numberDE:true
            },
            digits:{
                digits:true
            },
            creditcard:{
                creditcard:true
            }
        },
        addClassRules:function(a,b){
            a.constructor==String?this.classRuleSettings[a]=b:c.extend(this.classRuleSettings,
                a)
        },
        classRules:function(a){
            var b={};
            (a=c(a).attr("class"))&&c.each(a.split(" "),function(){
                this in c.validator.classRuleSettings&&c.extend(b,c.validator.classRuleSettings[this])
            });
            return b
        },
        attributeRules:function(a){
            var b={};
    
            a=c(a);
            for(var d in c.validator.methods){
                var e=a.attr(d);
                if(e)b[d]=e
            }
            b.maxlength&&/-1|2147483647|524288/.test(b.maxlength)&&delete b.maxlength;
            return b
        },
        metadataRules:function(a){
            if(!c.metadata)return{};
        
            var b=c.data(a.form,"validator").settings.meta;
            return b?c(a).metadata()[b]:
            c(a).metadata()
        },
        staticRules:function(a){
            var b={},d=c.data(a.form,"validator");
            if(d.settings.rules)b=c.validator.normalizeRule(d.settings.rules[a.name])||{};
        
            return b
        },
        normalizeRules:function(a,b){
            c.each(a,function(d,e){
                if(e===false)delete a[d];
                else if(e.param||e.depends){
                    var f=true;
                    switch(typeof e.depends){
                        case "string":
                            f=!!c(e.depends,b.form).length;
                            break;
                        case "function":
                            f=e.depends.call(b,b)
                    }
                    if(f)a[d]=e.param!==undefined?e.param:true;else delete a[d]
                }
            });
            c.each(a,function(d,e){
                a[d]=c.isFunction(e)?
                e(b):e
            });
            c.each(["minlength","maxlength","min","max"],function(){
                if(a[this])a[this]=Number(a[this])
            });
            c.each(["rangelength","range"],function(){
                if(a[this])a[this]=[Number(a[this][0]),Number(a[this][1])]
            });
            if(c.validator.autoCreateRanges){
                if(a.min&&a.max){
                    a.range=[a.min,a.max];
                    delete a.min;
                    delete a.max
                }
                if(a.minlength&&a.maxlength){
                    a.rangelength=[a.minlength,a.maxlength];
                    delete a.minlength;
                    delete a.maxlength
                }
            }
            a.messages&&delete a.messages;
            return a
        },
        normalizeRule:function(a){
            if(typeof a=="string"){
                var b=

                {};
        
                c.each(a.split(/\s/),function(){
                    b[this]=true
                });
                a=b
            }
            return a
        },
        addMethod:function(a,b,d){
            c.validator.methods[a]=b;
            c.validator.messages[a]=d!=undefined?d:c.validator.messages[a];
            b.length<3&&c.validator.addClassRules(a,c.validator.normalizeRule(a))
        },
        methods:{
            required:function(a,b,d){
                if(!this.depend(d,b))return"dependency-mismatch";
                switch(b.nodeName.toLowerCase()){
                    case "select":
                        return(a=c(b).val())&&a.length>0;
                    case "input":
                        if(this.checkable(b))return this.getLength(a,b)>0;default:
                        return c.trim(a).length>
                        0
                }
            },
            remote:function(a,b,d){
                if(this.optional(b))return"dependency-mismatch";
                var e=this.previousValue(b);
                this.settings.messages[b.name]||(this.settings.messages[b.name]={});
                e.originalMessage=this.settings.messages[b.name].remote;
                this.settings.messages[b.name].remote=e.message;
                d=typeof d=="string"&&{
                    url:d
                }||d;
                if(this.pending[b.name])return"pending";
                if(e.old===a)return e.valid;
                e.old=a;
                var f=this;
                this.startRequest(b);
                var g={};
    
                g[b.name]=a;
                c.ajax(c.extend(true,{
                    url:d,
                    mode:"abort",
                    port:"validate"+b.name,
                    dataType:"json",
                    data:g,
                    success:function(h){
                        f.settings.messages[b.name].remote=e.originalMessage;
                        var j=h===true;
                        if(j){
                            var i=f.formSubmitted;
                            f.prepareElement(b);
                            f.formSubmitted=i;
                            f.successList.push(b);
                            f.showErrors()
                        }else{
                            i={};
                
                            h=h||f.defaultMessage(b,"remote");
                            i[b.name]=e.message=c.isFunction(h)?h(a):h;
                            f.showErrors(i)
                        }
                        e.valid=j;
                        f.stopRequest(b,j)
                    }
                },d));
                return"pending"
            },
            minlength:function(a,b,d){
                return this.optional(b)||this.getLength(c.trim(a),b)>=d
            },
            maxlength:function(a,b,d){
                return this.optional(b)||
                this.getLength(c.trim(a),b)<=d
            },
            rangelength:function(a,b,d){
                a=this.getLength(c.trim(a),b);
                return this.optional(b)||a>=d[0]&&a<=d[1]
            },
            min:function(a,b,d){
                return this.optional(b)||a>=d
            },
            max:function(a,b,d){
                return this.optional(b)||a<=d
            },
            range:function(a,b,d){
                return this.optional(b)||a>=d[0]&&a<=d[1]
            },
            email:function(a,b){
                return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)
            },
            url:function(a,b){
                return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},
            date:function(a,b){
                return this.optional(b)||!/Invalid|NaN/.test(new Date(a))
            },
            dateISO:function(a,b){
                return this.optional(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)
            },
            number:function(a,b){
                return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)
            },
            digits:function(a,b){
                return this.optional(b)||/^\d+$/.test(a)
            },
            creditcard:function(a,b){
                if(this.optional(b))return"dependency-mismatch";
                if(/[^0-9-]+/.test(a))return false;
                var d=0,e=0,f=false;
                a=a.replace(/\D/g,"");
                for(var g=a.length-1;g>=
                    0;g--){
                    e=a.charAt(g);
                    e=parseInt(e,10);
                    if(f)if((e*=2)>9)e-=9;
                    d+=e;
                    f=!f
                }
                return d%10==0
            },
            accept:function(a,b,d){
                d=typeof d=="string"?d.replace(/,/g,"|"):"png|jpe?g|gif";
                return this.optional(b)||a.match(RegExp(".("+d+")$","i"))
            },
            equalTo:function(a,b,d){
                d=c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){
                    c(b).valid()
                });
                return a==d.val()
            }
        }
    });
    c.format=c.validator.format
})(jQuery);
(function(c){
    var a={};
    
    if(c.ajaxPrefilter)c.ajaxPrefilter(function(d,e,f){
        e=d.port;
        if(d.mode=="abort"){
            a[e]&&a[e].abort();
            a[e]=f
        }
    });
    else{
        var b=c.ajax;
        c.ajax=function(d){
            var e=("port"in d?d:c.ajaxSettings).port;
            if(("mode"in d?d:c.ajaxSettings).mode=="abort"){
                a[e]&&a[e].abort();
                return a[e]=b.apply(this,arguments)
            }
            return b.apply(this,arguments)
        }
    }
})(jQuery);
(function(c){
    !jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&c.each({
        focus:"focusin",
        blur:"focusout"
    },function(a,b){
        function d(e){
            e=c.event.fix(e);
            e.type=b;
            return c.event.handle.call(this,e)
        }
        c.event.special[b]={
            setup:function(){
                this.addEventListener(a,d,true)
            },
            teardown:function(){
                this.removeEventListener(a,d,true)
            },
            handler:function(e){
                arguments[0]=c.event.fix(e);
                arguments[0].type=b;
                return c.event.handle.apply(this,arguments)
            }
        }
    });
    c.extend(c.fn,{
        validateDelegate:function(a,
            b,d){
            return this.bind(b,function(e){
                var f=c(e.target);
                if(f.is(a))return d.apply(f,arguments)
            })
        }
    })
})(jQuery);

