/**
 * jQuery Validation Plugin 1.9.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;
                this.attr("novalidate","novalidate");
                b=new c.validator(a,this[0]);
                c.data(this[0],"validator",b);
                if(b.settings.onsubmit){
                    a=this.find("input, button");
                    a.filter(".cancel").click(function(){
                        b.cancelSubmit=true
                        });
                    b.settings.submitHandler&&a.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:":hidden",
        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){
        a.type==="radio"?this.findByName(a.name).addClass(b).removeClass(d):c(a).addClass(b).removeClass(d)
        },
    unhighlight:function(a,b,d){
        a.type==="radio"?this.findByName(a.name).removeClass(b).addClass(d):c(a).removeClass(b).addClass(d)
        }
    },
setDefaults:function(a){
    c.extend(c.validator.defaults,
        a)
    },
messages:{
    required:"Verplicht veld.",
    remote:"Please fix this field.",
    email:"Vul een bestaand e-mail adres in.",
    url:"Please enter a valid URL.",
    date:"Please enter a valid date.",
    dateISO:"Please enter a valid date (ISO).",
    number:"Please enter a valid number.",
    digits:"Please enter only digits.",
    creditcard:"Please enter a valid credit card number.",
    equalTo:"Please enter the same value again.",
    accept:"Please enter a value with a valid extension.",
    maxlength:c.validator.format("Please enter no more than {0} characters."),
    minlength:c.validator.format("Please enter at least {0} characters."),
    rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."),
    range:c.validator.format("Please enter a value between {0} and {1}."),
    max:c.validator.format("Please enter a value less than or equal to {0}."),
    min:c.validator.format("Please enter a value greater than or equal to {0}.")
    },
autoCreateRanges:false,
prototype:{
    init:function(){
        function a(e){
            var f=c.data(this[0].form,"validator"),g="on"+e.type.replace(/^validate/,
                "");
            f.settings[g]&&f.settings[g].call(f,this[0],e)
            }
            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("[type='text'], [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",a).validateDelegate("[type='radio'], [type='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.validationTargetFor(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.lastElement=null;
        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(this.currentForm).find("input, select, textarea").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.validationTargetFor(this.clean(a));
    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(this.settings.validClass).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)
    },
validationTargetFor:function(a){
    if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];
    return a
    },
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;
        if(e=d==="required"&&typeof c.fn.prop==="function"?a.prop(d):a.attr(d))b[d]=e;
        else if(a[0].getAttribute("type")===d)b[d]=true
            }
            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);
