(function($){
    $.fn.validationEngine=function(settings){
        if($.validationEngineLanguage){
            allRules=$.validationEngineLanguage.allRules
            }else{
            $.validationEngine.debug("Validation engine rules are not loaded check your external file")
            }
            settings=jQuery.extend({
            allrules:allRules,
            validationEventTriggers:$.browser.msie ? "blur" : "focusout",
            inlineValidation:true,
            returnIsValid:false,
            liveEvent:false,
            unbindEngine:true,
            ajaxSubmit:false,
            scroll:true,
            promptPosition:"topLeft",
            success:false,
            beforeSuccess:function(){},
            failure:function(){}
        },settings);
    $.validationEngine.settings=settings;
    $.validationEngine.ajaxValidArray=new Array();
    if($.validationEngine.confirmation==undefined){
        $.validationEngine.confirmation=false
        }
        $.validationEngine.self=$(this);
    $.validationEngine.email="";
    $.validationEngine.submitfunction;
    if(settings.inlineValidation==true){
        if(!settings.returnIsValid){
            allowReturnIsvalid=false;
            if(settings.liveEvent){
                $(this).find("[class*=validate][type!=checkbox]").live(settings.validationEventTriggers,function(caller){
                    _inlinEvent(this)
                    });
                $(this).find("[class*=validate][type=checkbox]").live("click",function(caller){
                    _inlinEvent(this)
                    })
                }else{
                try{
                    $(this).find("[class*=DateInputs]").bind("change",function(caller){
                        _inlinEvent(this)
                        });
                    $(this).find("[class*=validate]").not("[type=checkbox]").not("[class*=DateInputs]").not("[class*=selecttime]").bind(settings.validationEventTriggers,function(caller){
                        _inlinEvent(this)
                        });
                    $(this).find("[class*=validate][type=checkbox]").bind("click",function(caller){
                        _inlinEvent(this)
                        });
                    $(this).find("[class*=validate][class*=selecttime]").children("select").each(function(i,e){
                        $(e).bind(settings.validationEventTriggers,function(caller){
                            _inlinEvent(this)
                            })
                        });
                    $(this).find("[class*=validate][class*=zipcode]").each(function(i,e){
                        if(jQuery.trim($(e).val())!=""){
                            $.validationEngine.loadValidation($(e))
                            }
                        })
                }catch(e){}
        }
        firstvalid=false
    }
    function _inlinEvent(caller){
    $.validationEngine.settings=settings;
    if($.validationEngine.intercept==false||!$.validationEngine.intercept){
        $.validationEngine.onSubmitValid=false;
        $.validationEngine.submit=false;
        try{
            if($(caller).hasClass("SinceInputsYears")||$(caller).hasClass("SinceInputsMonths")){
                caller=$(caller).parent()
                }
            }catch(e){}
    $.validationEngine.loadValidation(caller)
    }else{
    $.validationEngine.intercept=false
    }
}
}
if(settings.returnIsValid){
    if($.validationEngine.submitValidation(this,settings)){
        return false
        }else{
        return true
        }
    }
$.validationEngine.evensubmit($($.validationEngine.self),settings)
};

$.validationEngine={
    evensubmit:function(caller,settings){
        $(caller).bind("submit",function(caller){
            $.validationEngine.onSubmitValid=true;
            $.validationEngine.settings=settings;
            if($.validationEngine.submitValidation(this,settings)==false){
                if($.validationEngine.confirmation){
                    $.validationEngine.showconfirmation();
                    return false
                    }
                    if($.validationEngine.submitForm(this,settings)==true){
                    return false
                    }
                }else{
            settings.failure&&settings.failure();
            return false
            }
        })
},
showconfirmation:function(){
    if(!$("#pop").length){
        $("body").prepend('<div id="fade"></div><div id="pop"><a href="#" id="close"><img src="/images/close.png" alt=""/></a><h2>'+$.validationEngine.email+'</h2><p>Is your email address correct?</p><a href="#" id="Yes" class="button">Yes</a><a href="#" id="Nop" class="button">No</a></div>');
        var height=$("#pop").height();
        if(height > 230){
            $("#pop").css("margin",height/2*-1+"px 0px 0px -300px");
        }
    }
    $("#Yes").live("click",function(){
        window.onbeforeunload = null;
        $($.validationEngine.self).unbind("submit").submit();
        $('#close').trigger("click");
        $.validationEngine.evensubmit($($.validationEngine.self),$.validationEngine.settings);
        return false;
    });
    $("#Nop").live("click",function(){
        $('#close').trigger("click");
        $('#email').val("").focus();
        return false;
    });
    $("#close").live("click",function(){
        $("#fade,#pop").fadeOut("fast",function(){
            $("#fade,#pop").remove();
        });
        return false;
    });
},
group:new Array(),
addInput:function(caller){
    $(this).find("[class*=DateInputs]").bind("change",function(caller){
        _inlinEvent(this)
        });
    $(this).find("[class*=validate]").not("[type=checkbox]").not("[class*=DateInputs]").not("[class*=selecttime]").bind($.validationEngine.settings.validationEventTriggers,function(caller){
        _inlinEvent(this)
        });
    $(this).find("[class*=validate][type=checkbox]").bind("click",function(caller){
        _inlinEvent(this)
        });
    $(this).find("[class*=validate][class*=selecttime]").children("select").each(function(i,e){
        $(e).bind($.validationEngine.settings.validationEventTriggers,function(caller){
            _inlinEvent(this)
            })
        });
    $(this).find("[class*=validate][class*=zipcode]").each(function(i,e){
        if(jQuery.trim($(e).val())!=""){
            $.validationEngine.loadValidation($(e))
            }
        })
},
defaultSetting:function(caller){
    if($.validationEngineLanguage){
        allRules=$.validationEngineLanguage.allRules
        }else{
        $.validationEngine.debug("Validation engine rules are not loaded check your external file")
        }
        settings={
        allrules:allRules,
        validationEventTriggers:"blur",
        inlineValidation:true,
        returnIsValid:false,
        scroll:true,
        unbindEngine:true,
        ajaxSubmit:false,
        promptPosition:"topLeft",
        success:false,
        failure:function(){}
    };

$.validationEngine.settings=settings
},
loadValidation:function(caller){
    try {
        if($(caller).css("visibility")=="hidden"){
            return
        }
        if((!$.validationEngine.submit && jQuery.trim($(caller).val())==""&&!$(caller).hasClass("selecttime"))){
            if( hercules ) hercules.normal( caller.id );
            return true;
        }
    } catch(e){ }
    if(!$.validationEngine.settings){
        $.validationEngine.defaultSetting( );
    }
    rulesParsing=$(caller).attr("class");
rulesRegExp=/\[(.*)\]/;
getRules=rulesRegExp.exec(rulesParsing);
str=getRules[1];
pattern=/\[|,|\]/;
result=str.split(pattern);
var validateCalll=$.validationEngine.validateCall(caller,result);
if(validateCalll){
    hercules.fail( caller.id );
    //$(caller).css("background","#FF9999")
}else{
    hercules.success( caller.id );
    //$(caller).css("background","#CCFFCC")
}
    return validateCalll
},
validateCall:function(caller,rules){
    var promptText="";
    var promptTextPopUp="";
    if(!$(caller).attr("id")){
        $.validationEngine.debug("This field have no ID attribut( name & class displayed): "+$(caller).attr("name")+" "+$(caller).attr("class"))
        }
        caller=caller;
    ajaxValidate=false;
    var callerName=$(caller).attr("name");
    $.validationEngine.isError=false;
    $.validationEngine.isErrorPopUp=false;
    $.validationEngine.showTriangle=true;
    $.validationEngine.Break=false;
    callerType=$(caller).attr("type");
    for(i=0;i<rules.length;i++){
        switch(rules[i]){
            case"optional":
                if(!$(caller).val()){
                $.validationEngine.closePrompt(caller);
                return $.validationEngine.isError
                }
                break;
            case"required":
                _required(caller,rules);
                break;
            case"zero":
                _zero(caller,rules);
                break;
            case"custom":
                _customRegex(caller,rules,i);
                break;
            case"exemptString":
                _exemptString(caller,rules,i);
                break;
            case"ajax":
                if(!$.validationEngine.onSubmitValid){
                _ajax(caller,rules,i)
                }
                break;
            case"length":
                _length(caller,rules,i);
                break;
            case"timeSince":
                _timeSince(caller,rules,i);
                break;
            case"maxCheckbox":
                _maxCheckbox(caller,rules,i);
                groupname=$(caller).attr("name");
                caller=$("input[name='"+groupname+"']");
                break;
            case"minCheckbox":
                _minCheckbox(caller,rules,i);
                groupname=$(caller).attr("name");
                caller=$("input[name='"+groupname+"']");
                break;
            case"confirm":
                _confirm(caller,rules,i);
                break;
            case"phonecode":
                _phonecode(caller,rules,i);
                break;
            case"zipcode":
                _zipcode(caller,rules,i);
                break;
            case"cityExt":
                _cityExt(caller,rules,i);
                break;
            case"stateExt":
                _stateExt(caller,rules,i);
                break;
            case"function":
                _function(caller,rules,i);
                break;
            case"ajaxEmail":
                _ajaxEmail(caller,rules,i);
                break;
            case"ajaxEmailDomain":
                _ajaxEmailDomain(caller,rules,i);
                break;
            case"retype":
                _retype(caller,rules,i);
                break;
            case"date":
                _date(caller,rules,i);
                break;
            case"aba":
                _aba(caller,rules,i);
                break;
            case"SSN":
                _SSN(caller,rules,i);
                break;
			case "funcCall": 
		     	_funcCall(caller,rules,i);
    			break;             
			default :;
        }
        if($.validationEngine.Break){
            break
        }
    }
    radioHack();
if($.validationEngine.isError==true){
    linkTofield=$.validationEngine.linkTofield(caller);
    ($("div."+linkTofield).size()==0)?$.validationEngine.buildPrompt(caller,promptText,"error"):$.validationEngine.updatePromptText(caller,promptText)
    }else{
    $.validationEngine.closePrompt(caller)
    }
    function radioHack(){
    if($("input[name='"+callerName+"']").size()>1&&(callerType=="radio"||callerType=="checkbox")){
        caller=$("input[name='"+callerName+"'][type!=hidden]:first");
        $.validationEngine.showTriangle=false
        }
    }
function _required(caller,rules){
    callerType=$(caller).attr("type");
    if(callerType=="text"||callerType=="password"||callerType=="textarea"){
        if(!$(caller).val()){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules[rules[i]].alertText+"<br />":""
            }
        }
    if((callerType=="radio"||callerType=="checkbox")&&$.validationEngine.submit){
    callerName=$(caller).attr("name");
    if($("input[name='"+callerName+"']:checked").size()==0){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        if($("input[name='"+callerName+"']").size()==1){
            promptText+=promptText==""?$.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe+"<br />":""
            }else{
            promptText+=promptText==""?$.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />":""
            }
        }
}
if(callerType=="select-one"){
    if(!$(caller).val()){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules[rules[i]].alertText+"<br />":""
        }
    }
if(callerType=="select-multiple"){
    if(!$(caller).find("option:selected").val()){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules[rules[i]].alertText+"<br />":""
        }
    }
}

function _zero(caller,rules){
    var id=$(caller).attr("id");
    var val=parseInt($("#"+id).val().replace(",",""));
    if(val < 100){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?"* Invalid monthly net income<br/>":""
    }
}
function _customRegex(caller,rules,position){
    customRule=rules[position+1];
    pattern=eval($.validationEngine.settings.allrules[customRule].regex);
    if(!pattern.test($(caller).attr("value"))){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules[customRule].alertText+"<br />":""
        }
    }
function _exemptString(caller,rules,position){
    customString=rules[position+1];
    if(customString==$(caller).attr("value")){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules.required.alertText+"<br />":""
        }
    }
function _ajaxEmail(caller,rules,position){
    $.ajaxSetup({
        async:false
    });
    mail=$(caller).val();
    domain=mail.split("@");
    if(domain.length==2){
        $.getJSON("/functions.php?cmd=StatusMail&mail="+domain[1],function(data){
            if(data["return"]=="invalid"){
                $.validationEngine.isErrorPopUp=true;
                $.validationEngine.isError=true;
                $.validationEngine.Break=true;
                promptText+=promptText==""?$.validationEngine.settings.allrules.ajaxEmail.alertText+"<br />":"";
                promptTextPopUp+=$.validationEngine.settings.allrules.ajaxEmail.alertText+"<br />"
                }
            })
    }
}
function _ajaxEmailDomain(caller,rules,position){
    $.ajaxSetup({
        async:false
    });
    domain=$(caller).val().split("@");
    if(domain.length==2){
        $.getJSON("/functions.php?cmd=StatusMail&mail="+domain[1],function(data){
            if(data["return"]=="invalid"){
                $.validationEngine.isErrorPopUp=true;
                $.validationEngine.isError=true;
                $.validationEngine.Break=true;
                promptText+=promptText==""?$.validationEngine.settings.allrules.ajaxEmail.alertText+"<br />":"";
                promptTextPopUp+=$.validationEngine.settings.allrules.ajaxEmail.alertText+"<br />"
                }
            })
    }
}
function _retype(caller,rules,position){
    try{
        re=rules[position+1];
        if($.trim($("#"+re).val())!=$.trim($(caller).val())){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules.email.alertText2+"<br />":""
            }
        }catch(e){}
}
		function _funcCall(caller,rules,position){  		// VALIDATE CUSTOM FUNCTIONS OUTSIDE OF THE ENGINE SCOPE
			customRule = rules[position+1];
			funce = customRule;//$.validationEngine.settings.allrules[customRule].name;
			var params = $.validationEngine.settings.allrules[customRule].params;
			
			var fn = window[funce];
			if (typeof(fn) === 'function'){
				var fn_result = fn( caller, params );
				if(!fn_result){
					$.validationEngine.isError = true;
				}
				
				promptText += $.validationEngine.settings.allrules[customRule].alertText+"<br />";
			}
		}

function _function(caller,rules,position) {
    $.ajaxSetup({
        async:false
    });

    customRule = rules[position+1];
	var customFunction = customRule; //$.validationEngine.settings.allrules[customRule].success;
	var param = $.validationEngine.settings.allrules[customRule].param;
	var cmd = $.validationEngine.settings.allrules[customRule].command;

    var value = $(caller).val( );
    
    $.getJSON("/functions.php?cmd="+ cmd +"&"+param+"="+value,function(data){
        if(data["return"]=="invalid"){
            $.validationEngine.isErrorPopUp=true;
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText += promptText == "" ? $.validationEngine.settings.allrules[customRule].alertText + "<br />" : "";
            promptTextPopUp += $.validationEngine.settings.allrules[customRule].alertText + "<br />";
       }
       else
       {
			var fn = window[customFunction];
			if (typeof(fn) === 'function'){
				var fn_result = fn( caller, data );
			}
       }
   });
}

function _ajax(caller,rules,position){
    customAjaxRule=rules[position+1];
    postfile=$.validationEngine.settings.allrules[customAjaxRule].file;
    fieldValue=$(caller).val();
    ajaxCaller=caller;
    fieldId=$(caller).attr("id");
    ajaxValidate=true;
    ajaxisError=$.validationEngine.isError;
    if(!$.validationEngine.settings.allrules[customAjaxRule].extraData){
        extraData=$.validationEngine.settings.allrules[customAjaxRule].extraData
        }else{
        extraData=""
        }
        if(!ajaxisError){
        $.ajax({
            type:"POST",
            url:postfile,
            async:true,
            data:"validateValue="+fieldValue+"&validateId="+fieldId+"&validateError="+customAjaxRule+extraData,
            beforeSend:function(){},
            error:function(data,transport){
                $.validationEngine.debug("error in the ajax: "+data.status+" "+transport)
                },
            success:function(data){
                data=eval("("+data+")");
                ajaxisError=data.jsonValidateReturn[2];
                customAjaxRule=data.jsonValidateReturn[1];
                ajaxCaller=$("#"+data.jsonValidateReturn[0])[0];
                fieldId=ajaxCaller;
                ajaxErrorLength=$.validationEngine.ajaxValidArray.length;
                existInarray=false;
                if(ajaxisError=="false"){
                    _checkInArray(false);
                    if(!existInarray){
                        $.validationEngine.ajaxValidArray[ajaxErrorLength]=new Array(2);
                        $.validationEngine.ajaxValidArray[ajaxErrorLength][0]=fieldId;
                        $.validationEngine.ajaxValidArray[ajaxErrorLength][1]=false;
                        existInarray=false
                        }
                        $.validationEngine.ajaxValid=false;
                    promptText+=promptText==""?$.validationEngine.settings.allrules[customAjaxRule].alertText+"<br />":"";
                    $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertText,"error")
                    }else{
                    _checkInArray(true);
                    $.validationEngine.ajaxValid=true
                    }
                    function _checkInArray(validate){
                    for(x=0;x<ajaxErrorLength;x++){
                        if($.validationEngine.ajaxValidArray[x][0]==fieldId){
                            $.validationEngine.ajaxValidArray[x][1]=validate;
                            existInarray=true
                            }
                        }
                    }
            }
    })
}
}
function _phonecode(caller,rules,position){
    try{
        if($(caller).val()!=""&&$(caller).val().length==14){
            $.ajaxSetup({
                async:false
            });
            code=$(caller).val().substr(1,3);
            $.validationEngine.isErrorPopUp=false;
            $.validationEngine.isError=false;
            if(callerName=="bankPhone"&&code==800){
                exit
                }
                $.getJSON("/functions.php?cmd=StatusPhoneCode&code="+code,function(data){
                if(data["return"]=="invalid"){
                    $.validationEngine.isErrorPopUp=true;
                    $.validationEngine.isError=true;
                    $.validationEngine.Break=true;
                    promptText+=promptText==""?$.validationEngine.settings.allrules.phonecode.alertText+"<br />":"";
                    promptTextPopUp+=$.validationEngine.settings.allrules.phonecode.alertText+"<br />"
                    }
                })
        }
    }catch(e){}
}
function _stateExt(caller,rules,position){
    try{
        if($(caller).val()!=""){
            cadena=$(caller).val();
            var r=$.validationEngine.callbackExt("state",cadena);
            if(!r["return"]){
                $.validationEngine.isErrorPopUp=true;
                $.validationEngine.isError=true;
                $.validationEngine.Break=true;
                promptText+=promptText==""?r.message+"<br />":"";
                promptTextPopUp+=r.message+"<br />"
                }
            }
    }catch(e){}
}
function _cityExt(caller,rules,position){
    try{
        cadena=jQuery.trim($(caller).val());
        if(cadena!=""){
            var r=$.validationEngine.callbackExt("city",cadena);
            if(!r["return"]){
                $.validationEngine.isErrorPopUp=true;
                $.validationEngine.isError=true;
                $.validationEngine.Break=true;
                promptText+=promptText==""?r.message+"<br />":"";
                promptTextPopUp+=r.message+"<br />"
                }
            }
    }catch(e){}
}
function _zipcode(caller,rules,position){
    if($(caller).val()!=""){
        $.ajaxSetup({
            async:false
        });
        code=$(caller).val();
        $.getJSON("/functions.php?cmd=StatusZip&zip="+code,function(data){
            try{
                if(data["return"]=="invalid"){
                    $.validationEngine.isErrorPopUp=true;
                    $.validationEngine.isError=true;
                    $.validationEngine.Break=true;
                    promptText+=promptText==""?$.validationEngine.settings.allrules.zipcode.alertText+"<br />":"";
                    promptTextPopUp+=$.validationEngine.settings.allrules.zipcode.alertText+"<br />"
                    }
                    if(!$.validationEngine.submit){
                    $.validationEngine.callbackZip(data)
                    }
                }catch(e){}
        })
}
}
function _confirm(caller,rules,position){
    confirmField=rules[position+1];
    if($(caller).attr("value")!=$("#"+confirmField).attr("value")){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules.confirm.alertText+"<br />":""
        }
    }
function _timeSince(caller,rules,position){
        try{
        meses = eval(rules[position+1]);
        year = 0;
        month= 0;
        SinceInputsYears = $(caller).children(".SinceInputsYears");
        $(SinceInputsYears).each(function(i,Element){year=$(Element).val();});

        SinceInputsMonths = $(caller).children(".SinceInputsMonths");
        $(SinceInputsMonths).each(function(i,Element){month=$(Element).val();});
        if(year == 0 && month==0 && !$.validationEngine.submit){return;}

                total = ((year*12)+month*1);
                if(meses >  total){
                        $.validationEngine.isError = true;
                        $.validationEngine.Break = true;
                        promptText += promptText==""?$.validationEngine.settings.allrules["timeSince"].alertText+"<br />":"";
                }
        }catch(e){}
}

function _SSN(caller,rules,position){
    try{
        value=jQuery.trim($(caller).val()).replace(/ /,"");
        var re=/^([0-6]\d{2}|7[0-6]\d|77[0-2])([ \-]?)(\d{2})\2(\d{4})$/;
        if(!re.test(value)){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules.SSN.alertText+"<br />":""
            }
            var temp=value;
        if(value.indexOf("-")!=-1){
            temp=(value.split("-")).join("")
            }
            if(value.indexOf(" ")!=-1){
            temp=(value.split(" ")).join("")
            }
            if(temp.substring(0,3)=="000"){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules.SSN.alertText+"<br />":""
            }
            if(temp.substring(3,5)=="00"){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules.SSN.alertText+"<br />":""
            }
            if(temp.substring(5,9)=="0000"){
            $.validationEngine.isError=true;
            $.validationEngine.Break=true;
            promptText+=promptText==""?$.validationEngine.settings.allrules.SSN.alertText+"<br />":""
            }
            return
    }catch(e){}
}
function _aba(caller,rules,position){
    try{
        aba=jQuery.trim($(caller).val()).replace(/ /,"");
        var i,n,t;
        t="";
        for(i=0;i<aba.length;i++){
            c=parseInt(aba.charAt(i),10);
            if(c>=0&&c<=9){
                t=t+c
                }
            }
        if(t.length==9){
        n=0;
        for(i=0;i<t.length;i+=3){
            n+=parseInt(t.charAt(i),10)*3+parseInt(t.charAt(i+1),10)*7+parseInt(t.charAt(i+2),10)
            }
            if(n!=0&&n%10==0){
            return true
            }
        }
}catch(e){
    alert(e)
    }
    $.validationEngine.isError=true;
$.validationEngine.Break=true;
promptText+=promptText==""?$.validationEngine.settings.allrules.aba.alertText+"<br />":""
}
function _date(caller,rules,position){
    try{
        if($(caller).attr("second")==undefined&&$(caller).attr("first")==undefined||$(caller).attr("frequency")==undefined){
            return
        }
        pos="first";
        if($(caller).attr("second")!=undefined&&$(caller).attr("second").length>0){
            pd1=$(caller);
            pd2=$("#"+$(caller).attr("second"));
            pos="first"
            }else{
            pd2=$(caller);
            pd1=$("#"+$(caller).attr("first"));
            pos="second"
            }
            if(pd1&&pd2){
            pdi1=new Date(pd1.val());
            pdi2=new Date(pd2.val());
            if(!isNaN(pdi1)&&!isNaN(pdi2)){
                now=new Date();
                now.setHours(0,0,0);
                pdi1.setHours(23);
                pdi2.setHours(23);
                if(pdi2<now||pdi1<now){
                    $.validationEngine.isError=true;
                    $.validationEngine.Break=true;
                    promptText+=promptText==""?$.validationEngine.settings.allrules.dates.alertText4+"<br />":"";
                    return
                }
                var menor=new Date(pd1.val());
                var mayor=new Date(pd1.val());
                var rango=3;
                var payFrequency = $("#"+$(caller).attr("frequency")).val();
                switch(payFrequency){
                    case"Weekly":
                        menor.setDate(menor.getDate()+7-rango);
                        mayor.setDate(mayor.getDate()+7+rango);
                        break;
                    case"Bi_Weekly":
                        menor.setDate(menor.getDate()+14-rango);
                        mayor.setDate(mayor.getDate()+14+rango);
                        break;
                    case"Twice_Monthly":
                        menor.setDate(menor.getDate()+15-rango);
                        mayor.setDate(mayor.getDate()+15+rango);
                        break;
                    case"Monthly":
                        menor.setDate(menor.getDate()+30-rango);
                        mayor.setDate(mayor.getDate()+31+rango);
                        break;
                    default:
                        $.validationEngine.isError=true;
                        $.validationEngine.Break=true;
                        promptText+=promptText==""?$.validationEngine.settings.allrules.dates.alertText3+"<br />":"";
                        return;
                        break
                        }
                        if((payFrequency == "Twice_Monthly") ||( pdi2>=menor&&pdi2<=mayor)){
                    if(pos=="first"){
                        $.validationEngine.closePrompt(pd2)
                        }else{
                        $.validationEngine.closePrompt(pd1)
                        }
                        return
                }
                $.validationEngine.isError=true;
                $.validationEngine.Break=true;
                promptText+=promptText==""?(pos=="first"?$.validationEngine.settings.allrules.dates.alertText:$.validationEngine.settings.allrules.dates.alertText2)+"<br />":""
                }
            }
    }catch(e){}
}
function _length(caller,rules,position){
    startLength=eval(rules[position+1]);
    endLength=eval(rules[position+2]);
    feildLength=$(caller).attr("value").length;
    if(feildLength<startLength||feildLength>endLength){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules.length.alertText+startLength+$.validationEngine.settings.allrules.length.alertText2+endLength+$.validationEngine.settings.allrules.length.alertText3+"<br />":""
        }
    }
function _maxCheckbox(caller,rules,position){
    nbCheck=eval(rules[position+1]);
    groupname=$(caller).attr("name");
    groupSize=$("input[name='"+groupname+"']:checked").size();
    if(groupSize>nbCheck){
        $.validationEngine.showTriangle=false;
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        promptText+=promptText==""?$.validationEngine.settings.allrules.maxCheckbox.alertText+"<br />":""
        }
    }
function _minCheckbox(caller,rules,position){
    nbCheck=eval(rules[position+1]);
    groupname=$(caller).attr("name");
    groupSize=$("input[name='"+groupname+"']:checked").size();
    if(groupSize<nbCheck){
        $.validationEngine.isError=true;
        $.validationEngine.Break=true;
        $.validationEngine.showTriangle=false;
        promptText+=promptText==""?$.validationEngine.settings.allrules.minCheckbox.alertText+" "+nbCheck+" "+$.validationEngine.settings.allrules.minCheckbox.alertText2+"<br />":""
        }
    }
return($.validationEngine.isError)?$.validationEngine.isError:false
},
submitForm:function(caller){
    try{
        if($.validationEngine.settings.ajaxSubmit){
            if($.validationEngine.settings.ajaxSubmitExtraData){
                extraData=$.validationEngine.settings.ajaxSubmitExtraData
                }else{
                extraData=""
                }
                $.ajax({
                type:"POST",
                url:$.validationEngine.settings.ajaxSubmitFile,
                async:true,
                data:$(caller).serialize()+"&"+extraData,
                error:function(data,transport){
                    $.validationEngine.debug("error in the ajax: "+data.status+" "+transport)
                    },
                success:function(data){
                    if(data=="true"){
                        $(caller).css("opacity",1);
                        $(caller).animate({
                            opacity:0,
                            height:0
                        },function(){
                            $(caller).css("display","none");
                            $(caller).before("<div class='ajaxSubmit'>"+$.validationEngine.settings.ajaxSubmitMessage+"</div>");
                            $.validationEngine.closePrompt(".formError",true);
                            $(".ajaxSubmit").show("slow");
                            if($.validationEngine.settings.success){
                                $.validationEngine.settings.success&&$.validationEngine.settings.success();
                                return false
                                }
                            })
                    }else{
                    data=eval("("+data+")");
                    if(!data.jsonValidateReturn){
                        $.validationEngine.debug("you are not going into the success fonction and jsonValidateReturn return nothing")
                        }
                        errorNumber=data.jsonValidateReturn.length;
                    for(index=0;index<errorNumber;index++){
                        fieldId=data.jsonValidateReturn[index][0];
                        promptError=data.jsonValidateReturn[index][1];
                        type=data.jsonValidateReturn[index][2];
                        $.validationEngine.buildPrompt(fieldId,promptError,type)
                        }
                    }
                }
        });
return true
}
if(!$.validationEngine.settings.beforeSuccess()){
    if($.validationEngine.settings.success){
        if($.validationEngine.settings.unbindEngine){
            $(caller).unbind("submit")
            }
            $.validationEngine.settings.success&&$.validationEngine.settings.success();
        return true
        }
    }else{
    return true
    }
}catch(e){}
return false
},
buildPrompt:function(caller,promptText,type,ajaxed){
    if(!$.validationEngine.settings){
        $.validationEngine.defaultSetting()
        }
        deleteItself="."+$(caller).attr("id")+"formError";
    if($(deleteItself)[0]){
        $(deleteItself).stop();
        $(deleteItself).remove()
        }
        var divFormError=document.createElement("div");
    var formErrorContent=document.createElement("div");
    $(formErrorContent).click(function(e){
        $.validationEngine.closePrompt($(e.target).parent(),true)
        });
    linkTofield=$.validationEngine.linkTofield(caller);
    $(divFormError).addClass("formError");
    if(type=="pass"){
        $(divFormError).addClass("greenPopup")
        }
        if(type=="load"){
        $(divFormError).addClass("blackPopup")
        }
        if(ajaxed){
        $(divFormError).addClass("ajaxed")
        }
        $(divFormError).addClass(linkTofield);
    $(formErrorContent).addClass("formErrorContent");
    $("body").append(divFormError);
    $(divFormError).append(formErrorContent);
    if($.validationEngine.showTriangle!=false){
        var arrow=document.createElement("div");
        $(arrow).addClass("formErrorArrow");
        $(divFormError).append(arrow);
        if($.validationEngine.settings.promptPosition=="bottomLeft"||$.validationEngine.settings.promptPosition=="bottomRight"){
            $(arrow).addClass("formErrorArrowBottom");
            $(arrow).html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>')
            }
            if($.validationEngine.settings.promptPosition=="topLeft"||$.validationEngine.settings.promptPosition=="topRight"){
            $(divFormError).append(arrow);
            $(arrow).html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>')
            }
        }
    $(formErrorContent).html(promptText);
callerTopPosition=$(caller).offset().top;
callerleftPosition=$(caller).offset().left+($(caller).width()/2)-($(caller).attr("type")=="radio"?45:86);
callerWidth=$(caller).width();
inputHeight=$(divFormError).height();
if($.validationEngine.settings.promptPosition=="topRight"){
    callerleftPosition+=callerWidth-30;
    callerTopPosition+=-inputHeight-10
    }
    if($.validationEngine.settings.promptPosition=="topLeft"){
    callerTopPosition+=-inputHeight-10
    }
    if($.validationEngine.settings.promptPosition=="centerRight"){
    callerleftPosition+=callerWidth+13
    }
    if($.validationEngine.settings.promptPosition=="bottomLeft"){
    callerHeight=$(caller).height();
    callerleftPosition=callerleftPosition;
    callerTopPosition=callerTopPosition+callerHeight+15
    }
    if($.validationEngine.settings.promptPosition=="bottomRight"){
    callerHeight=$(caller).height();
    callerleftPosition+=callerWidth-30;
    callerTopPosition+=callerHeight+15
    }
    $(divFormError).css({
    top:callerTopPosition,
    left:callerleftPosition,
    opacity:0
});
var e="."+$(caller).attr("id")+"formError";
if($(caller).hasClass("RadioInputs")){
    $(caller).parent().children("input").click(function(){
        var error=e;
        $.validationEngine.closePrompt(e,"true")
        })
    }
    if($(caller).hasClass("selecttime")){
    $(caller).children("select").focus(function(){
        var error=e;
        $.validationEngine.closePrompt(e,"true")
        })
    }
    $(caller).focus(function(){
    var error=e;
    $.validationEngine.closePrompt(e,"true")
    });
return $(divFormError).animate({
    opacity:1
},function(){
    return true
    })
},
buildPromptPopUp:function(caller,promptText){
    try{
        if($("#window").length==0){
            var popup=$(document.createElement("div")).attr("id","popup");
            var window=$(document.createElement("div")).attr("id","window");
            $(window).html('<div id="windowLeft" style="" ><a onclick="" href="#" style="float: left; display: block;"><div style="text-align: right; color: white;" id="popup_quit"/></a></div><div id="windowCenter" style="" ><div id="popup_content" >'+promptText+'</div><div id="popup_button" ></div></div><div id="windowRigth" style="" ></div>');
            $("body").append(popup);
            $("body").append(window);
            $("#popup_quit").click(function(e){
                $("#popup").fadeOut("fast",function(){
                    $("#popup").remove()
                    });
                $("#window").fadeOut("fast",function(){
                    $("#window").remove()
                    })
                });
            popup.click(function(e){
                $("#popup").fadeOut("fast",function(){
                    $("#popup").remove()
                    });
                $("#window").fadeOut("fast",function(){
                    $("#window").remove()
                    })
                });
            $("#popup").fadeIn("fast");
            $("#window").fadeIn("fast")
            }else{
            $("#popup_content").html($("#popup_content").html()+promptText)
            }
        }catch(e){}
},
updatePromptText:function(caller,promptText,type,ajaxed){
    linkTofield=$.validationEngine.linkTofield(caller);
    var updateThisPrompt="."+linkTofield;
    if(type=="pass"){
        $(updateThisPrompt).addClass("greenPopup")
        }else{
        $(updateThisPrompt).removeClass("greenPopup")
        }
        if(type=="load"){
        $(updateThisPrompt).addClass("blackPopup")
        }else{
        $(updateThisPrompt).removeClass("blackPopup")
        }
        if(ajaxed){
        $(updateThisPrompt).addClass("ajaxed")
        }else{
        $(updateThisPrompt).removeClass("ajaxed")
        }
        $(updateThisPrompt).find(".formErrorContent").html(promptText);
    callerTopPosition=$(caller).offset().top;
    inputHeight=$(updateThisPrompt).height();
    if($.validationEngine.settings.promptPosition=="bottomLeft"||$.validationEngine.settings.promptPosition=="bottomRight"){
        callerHeight=$(caller).height();
        callerTopPosition=callerTopPosition+callerHeight+15
        }
        if($.validationEngine.settings.promptPosition=="centerRight"){
        callerleftPosition+=callerWidth+13
        }
        if($.validationEngine.settings.promptPosition=="topLeft"||$.validationEngine.settings.promptPosition=="topRight"){
        callerTopPosition=callerTopPosition-inputHeight-10
        }
        $(updateThisPrompt).animate({
        top:callerTopPosition
    })
    },
linkTofield:function(caller){
    linkTofield=$(caller).attr("id")+"formError";
    linkTofield=linkTofield.replace(/\[/g,"");
    linkTofield=linkTofield.replace(/\]/g,"");
    return linkTofield
    },
closePrompt:function(caller,outside){
    if(!$.validationEngine.settings){
        $.validationEngine.defaultSetting()
        }
        if(outside){
        $(caller).fadeTo("fast",0,function(){
            $(caller).remove()
            });
        return false
        }
        if(typeof(ajaxValidate)=="undefined"){
        ajaxValidate=false
        }
        if(!ajaxValidate){
        linkTofield=$.validationEngine.linkTofield(caller);
        closingPrompt="."+linkTofield;
        $(closingPrompt).fadeTo("fast",0,function(){
            $(closingPrompt).remove()
            })
        }
    },
debug:function(error){
    if(!$("#debugMode")[0]){
        $("body").append("<div id='debugMode'><div class='debugError'><strong>This is a debug mode, you got a problem with your form, it will try to help you, refresh when you think you nailed down the problem</strong></div></div>")
        }
        $(".debugError").append("<div class='debugerror'>"+error+"</div>")
    },
submitValidation:function(caller){
    try{
        var stopForm=false;
        $.validationEngine.ajaxValid=true;
        if($.validationEngine.submitfunction!=undefined){
            $.validationEngine.submitfunction()
            }
            $(caller).find(".formError").remove();
        var toValidateSize=$(caller).find("[class*=validate]").size();
        $(caller).find("[class*=validate]").each(function(){
            linkTofield=$.validationEngine.linkTofield(this);
            if(!$("."+linkTofield).hasClass("ajaxed")){
                $.validationEngine.submit=true;
                var validationPass=$.validationEngine.loadValidation(this);
                return(validationPass)?stopForm=true:""
                }
            });
    ajaxErrorLength=$.validationEngine.ajaxValidArray.length;
    for(x=0;x<ajaxErrorLength;x++){
        if($.validationEngine.ajaxValidArray[x][1]==false){
            $.validationEngine.ajaxValid=false
            }
        }
    if(stopForm||!$.validationEngine.ajaxValid){
    if($.validationEngine.settings.scroll){
        destination=$(".formError:not('.greenPopup'):first").offset().top;
        $(".formError:not('.greenPopup')").each(function(){
            testDestination=$(this).offset().top;
            if(destination>testDestination){
                destination=$(this).offset().top
                }
            });
    $("html:not(:animated),body:not(:animated)").animate({
        scrollTop:destination
    },1100)
    }
    return true
}else{
    return false
    }
}catch(e){}
},
update:function(){
    $(formError).each(function(i,Element){})
    }
}
})(jQuery);

