function DG_RSV_ValidatorRules (Validator) {
    var form_id = Validator.form.id;
    var rules = new Array();
    if (form_id == 'jobagent_passwordreminder_form') {
        rules.push("required,email,Den indtastede e-mail er ikke gyldig.");
        rules.push("if:email!=,valid_email,email,Den indtastede e-mail er ikke gyldig.");
    } else if (form_id == 'advertiser_passwordreminder_form') {
        rules.push("required,email,Den indtastede e-mail er ikke gyldig.");
        rules.push("if:email!=,valid_email,email,Den indtastede e-mail er ikke gyldig.");
    } else if (form_id == 'advertiser_passwordreminder_form') {
        rules.push("required,email,Den indtastede e-mail er ikke gyldig.");
        rules.push("if:email!=,valid_email,email,Den indtastede e-mail er ikke gyldig.");
    } else if (form_id == 'editad_form') {
        // Overskrift:
        rules.push("required,headline,Du har ikke udfyldt overskrift");
        rules.push("if:headline=Uden overskrift,reg_exp,headline,^\s*$,Du har ikke udfyldt overskrift");
        
        // Resumé:
        rules.push("required,resume,Du har ikke udfyldt resumé");
        rules.push("length<1024,resume,Du må højst have 1023 tegn i dit resumé");
        
        //Annoncetekst
        //rules.push("required,text,Annoncetekst ikke udfyldt");
        
        //Datoer
        rules.push("if:date_accession!=,digits_only,year_accession,Tiltrædelsesdato er ikke en valid dato");
        rules.push("if:date_accession!=,range=1900-2037,year_accession,Du har ikke udfyldt årstal for Tiltrædelsesdato korrekt");
        rules.push("if:date_accession!=,valid_date,month_accession,date_accession,year_accession,Tiltrædelsesdato er ikke en valid dato");
        
        rules.push("required,year_lastday,Ansøgningsfrist er ikke en valid dato");
        rules.push("if:year_lastday!=,digits_only,year_lastday,Ansøgningsfrist er ikke en valid dato");
        rules.push("if:year_lastday!=,range=1900-2037,year_lastday,Du har ikke udfyldt årstal for Ansøgningsfrist korrekt");
        rules.push("if:year_lastday!=,valid_date,month_lastday,date_lastday,year_lastday,Ansøgningsfrist er ikke en valid dato");
        
        
        //Ansættelsesforhold
        rules.push("function,DG_RSV_Custom.max1positiontype");
        
        //Rejseaktivitet
        rules.push("required,travelingactivity,Du skal vælge Rejseaktivitet");
        
        //Personlige egenskaber
        rules.push("function,DG_RSV_Custom.max5properties");
        
        
        //Status
        //Datoer
        rules.push("required,year_activedate,Publiceringsdato er ikke en valid dato1");
        rules.push("if:year_activedate!=,digits_only,year_activedate,Publiceringsdato er ikke en valid dato2");
        rules.push("if:year_activedate!=,range=1900-2037,year_activedate,Du har ikke udfyldt årstal for Publiceringsdato korrekt");
        rules.push("if:year_activedate!=,valid_date,month_activedate,date_activedate,year_activedate,Publiceringsdato er ikke en valid dato");
        rules.push("if:year_activedate!=,valid_date,month_activedate,date_activedate,year_activedate,later_date,Publiceringsdato skal være i dag eller senere");
        
        rules.push("required,year_expiredate,Udløbsdato er ikke en valid dato");
        rules.push("digits_only,year_expiredate,Udløbsdato er ikke en valid dato");
        rules.push("if:year_expiredate!=,range=1900-2037,year_expiredate,Du har ikke udfyldt årstal for Udløbsdato korrekt");
        rules.push("valid_date,month_expiredate,date_expiredate,year_expiredate,Udløbsdato er ikke en valid dato");
        rules.push("function,DG_RSV_Custom.expiredateAndActivedate");
        
        //Match vs. vis-skjul
        rules.push("if:hidden=1,range>0,matchtype,Din annonce skal vises ved søgning\\, hvis du ikke ønsker match");
        
    } else if (form_id == 'tipfriend_form') {
        rules.push("required,friendemail,Du skal indtaste din vens e-mail.");
        rules.push("valid_email,friendemail,Din vens indtastede e-mail er ikke en valid email-adresse.");
        rules.push("required,subject,Du skal indtaste et emne");
        rules.push("required,myemail,Du skal indtaste din e-mail.");
        rules.push("valid_email,myemail,Din indtastede e-mail er ikke en valid email-adresse.");
    }else if(form_id == 'addsubscriber_form'){
        rules.push("required,subscriber_email,Du skal indtaste din vens e-mail.");
        rules.push("valid_email,subscriber_email,Den indtastede e-mail er ikke en valid email-adresse.");
    } else if (form_id == 'form_select_multiple_cvs') {
        rules.push("function,DG_RSV_Custom.multiple_cvs_min2cvs");
    } else if (form_id == 'editcv_form') {
        // Overskrift:
        rules.push("required,headline,Du skal indtaste en overskrift");
        rules.push("length<1024,shorttext,Du må højst have 1023 tegn i dit resumé");
        rules.push("function,DG_RSV_Custom.max5properties");
    } else if (form_id == 'applicant_match_form') {
        rules.push("required,cvid,Vælg CV.");
    } else if (form_id == 'applicant_data_new_form' || form_id == 'applicant_data_form') {
        //Stamdata for CV-bruger
        rules.push("required,username,Brugernavn er krævet.");
        rules.push("if:username!=,length>4,username,Brugernavn skal være mindst 5 karakterer.");
        
        rules.push("required,email1,E-mail er krævet.");
        rules.push("if:email1!=,valid_email,email1,Den indtastede e-mail er ikke gyldig.");
        
        if (form_id == 'applicant_data_new_form') {
            rules.push("required,password1,Password er krævet.");
        }
        
        rules.push("if:password1!=,length>4,password1,Password skal være mindst 5 karakterer.");
        rules.push("same_as,passwordConfirm,password1,Felterne Gentag password og password er ikke ens udfyldt.");
        
        if (form_id == 'applicant_data_new_form') {
            rules.push("required,organisationnumber,Du har ikke udfyldt organisationsnummer.");
        }
        rules.push("required,firstname,Du har ikke udfyldt fornavn.");
        rules.push("required,lastname,Du har ikke udfyldt efternavn.");
        
        rules.push("required,street,Du har ikke udfyldt addresse.");
        rules.push("required,zip,Du har ikke udfyldt postnummer korrekt.");
        rules.push("digits_only,zip,Du har ikke udfyldt postnummer korrekt.");
        rules.push("length<=8,zip,Du har ikke udfyldt postnummer korrekt.");
        rules.push("required,city,Du har ikke udfyldt by.");
        rules.push("required,country_id,Du har ikke valgt land.");
        
        rules.push("digits_only,birthday3,Du har ikke udfyldt fødselsår korrekt.");
        rules.push("if:birthday3!=,range=1900-2037,birthday3,Du har ikke udfyldt fødselsår korrekt.");
        rules.push("valid_date,birthday2,birthday1,birthday3,Fødselsdato er ikke en valid dato.");
    } else if (form_id == 'advertiser_data_new_form' || form_id == 'advertiser_data_form') {
        // Stamdata for annoncør
        
        //rules.push("required,senumber,CVR-nummer er krævet.");
        rules.push("function,DG_RSV_Custom.isCvrNumber");
        //rules.push("required,pnumber,P-nummer er krævet.");
        rules.push("function,DG_RSV_Custom.isPNumber");
        
        
        rules.push("required,username,Brugernavn er krævet.");
        rules.push("if:username!=,length>4,username,Brugernavn skal være mindst 5 karakterer.");
       
        rules.push("if:password1!=,length>4,password1,Password skal være mindst 5 karakterer.");      
        rules.push("same_as,password1,passwordConfirm,Password og Gentag password skal være ens.");      
        
        if (form_id == 'advertiser_data_new_form') {
            rules.push("required,contact_firstname,Fornavn er krævet.");
            rules.push("required,contact_lastname,Efternavn er krævet.");
            //rules.push("required,contact_title,Titel er krævet.");
            rules.push("required,contact_email,E-mail er krævet.");
            //rules.push("required,contact_phone,Tlf. er krævet.");
            
            rules.push("required,miniusername,Annoncør brugernavn er krævet.");
            rules.push("if:miniusername!=,length>4,miniusername,Annoncør brugernavn skal være mindst 5 karakterer.");
            rules.push("required,minipassword1,Annoncør password er krævet.");
            rules.push("required,minipasswordConfirm,Gentag Annoncør password er krævet.");
            rules.push("required,password1,Password er krævet.");             
            rules.push("required,passwordConfirm,Gentag ny password er krævet.");             
            rules.push("if:minipassword1!=,length>4, minipassword1, Password skal være mindst 5 karakterer.");      
            rules.push("same_as,minipassword1,minipasswordConfirm,Annoncørpassword og Gentag annoncørpassword skal være ens.");
        }       
        rules.push("required,name,Firmanavn skal udfyldes.");
        rules.push("required,street,Adresse skal udfyldes.");
        rules.push("required,zip,Postnummer skal udfyldes.");
        rules.push("length<=8,zip,Du har ikke udfyldt postnummer korrekt.");
        rules.push("required,city,By skal udfyldes.");
    } else if (form_id == 'advertiser_contactprofile_form') {
        //Kontaktperson
        rules.push("required,firstname,Du har ikke udfyldt fornavn.");
        rules.push("required,lastname,Du har ikke udfyldt efternavn.");
        rules.push("required,email,E-mail er krævet.");
        rules.push("if:email!=,valid_email,email,Den indtastede e-mail er ikke gyldig.");
        
    } else if (form_id == 'advertiser_newmessage_form') {
        rules.push("required,headline,Du skal skrive en overskrift.");
        rules.push("required,adid,Du skal vælge en annonce.");
    } else if (form_id == 'jobagent_search_form' || form_id == 'applicant_jobagent_search_form') {
        rules.push("required,email,Du har ikke udfyldt e-mail addresse.");
        rules.push("if:email!=,valid_email,email,Den indtastede e-mail er ikke gyldig.");
        rules.push("required,name,Husk at give jobagenten et navn.");
    
    } else if (form_id == 'jobagent_loginform') {
        rules.push("required,username,Du har ikke udfyldt brugernavn.");
        rules.push("required,japassword,Du har ikke udfyldt password.");
        
    } else if (form_id == 'advertiser_loginform') {
        rules.push("required,username,Du har ikke udfyldt brugernavn.");
        rules.push("required,advertiserpassword,Du har ikke udfyldt password.");
        
    } else if (form_id == 'applicant_loginform') {
        rules.push("required,username,Du har ikke udfyldt brugernavn.");
        rules.push("required,applicantpassword,Du har ikke udfyldt password.");
        
    } else if (form_id == 'frontpage_quicklogin') {
        rules.push("required,quicklogin_username,Du har ikke udfyldt brugernavn.");
        rules.push("required,quicklogin_password,Du har ikke udfyldt password.");
        
    } else if (form_id == 'jobagent_newuserform') {
        //rules.push("if:serveraction=jobagent_newuser,required,newjapassword,Password skal være på mindst 5 karakterer.");
        rules.push("if:serveraction=jobagent_newuser,length>4,newjapassword,Password skal være på mindst 5 karakterer.");
        rules.push("if:serveraction=jobagent_newuser,same_as,newjapassword,newjapassword_repeat,Felterne Gentag password og password er ikke ens udfyldt.");
        rules.push("if:serveraction=jobagent_newuser,required,newjausername,Den indtastede e-mail er ikke gyldig.");
        rules.push("if:serveraction=jobagent_newuser,if:newjausername!=,valid_email,newjausername,Den indtastede e-mail er ikke gyldig.");
    }
    return rules;
}


var DG_RSV_Custom = {
    max3properties: 
        function () { 
            var fields = $('input[type=checkbox][name=property]:checked');
            if (fields.length > 3) {
                return [[fields, "Du må højst vælge 3 egenskaber"]];
            } else {
                return false;
            }
        },
    max5properties: 
        function () { 
            var fields = $('input[type=checkbox][name=property]:checked');
            if (fields.length > 5) {
                return [[fields, "Du må højst vælge 5 egenskaber"]];
            } else {
                return false;
            }
        },
    max1positiontype: 
        function () { 
            var fields = $('input[type=checkbox][name=positiontype]:checked');
            if (fields.length > 1) {
                return [[fields, "Du må kun udfylde et ansættelsesforhold"]];
            } else {
                return false;
            }
        },
    expiredateAndActivedate: function () {
            var activedate=new Date($('input[name=year_activedate]').val(),$('select[name=month_activedate]').val() - 1,$('select[name=date_activedate]').val(),0,0,0);
            var expiredate=new Date($('input[name=year_expiredate]').val(),$('select[name=month_expiredate]').val() - 1,$('select[name=date_expiredate]').val(),0,0,0);
            if (activedate >= expiredate) {
                return [[$('input[name=year_expiredate]'), "Udløbsdato er før publiceringsdatoen"]];
            } else {
                activedate.setDate(activedate.getDate() + 30);
                if (activedate < expiredate) {
                    return [[$('input[name=year_expiredate]'), "Udløbsdato må højst være 30 dage efter publiceringsdato"]];
                }
            }
            return false;
        },
    multiple_cvs_min2cvs: function () { 
            var fields = $('input[type=checkbox][name=cv_id]:checked');
            if (fields.length < 2) {
                return [[$('input[type=checkbox][name=cv_id]'), "Du skal vælge 2 eller flere CVer for at lave multipel redigering"]];
            } else {
                return false;
            }
        },
    isCvrNumber: function () {
            var str = $('input[name=senumber]').val();
            var valid = true;
            if (str) {
                valid = false;
            }
            str = str.replace(/\D/g, '');
            if (str) {
                valid = true;
                var digits = str.split('');
                if (digits.length != 8) {
                    valid = false;
                } else {
                    var sum = digits[0] * 2;
                    sum += digits[1] * 7;
                    sum += digits[2] * 6;
                    sum += digits[3] * 5;
                    sum += digits[4] * 4;
                    sum += digits[5] * 3;
                    sum += digits[6] * 2;
                    sum += digits[7] * 1;
                    if (sum % 11 != 0) {
                        valid = false;
                    }
                }
            }
            if (valid) {
                return false;
            } else {
                return [[$('input[name=senumber]'), "Det indtastede er ikke et validt CVR-nummer"]];
            }
        },
    isPNumber: function () {
            var str = $('input[name=pnumber]').val();
            var valid = true;
            if (str) {
                valid = false;
            }
            str = str.replace(/\D/g, '');
            if (str) {
                valid = true;
                var digits = str.split('');
                if (digits.length != 10) {
                    valid = false;
                } else {
                    if (str > 1006959421) {
                        var sum = digits[0] * 4;
                        sum += digits[1] * 3;
                        sum += digits[2] * 2;
                        sum += digits[3] * 7;
                        sum += digits[4] * 6;
                        sum += digits[5] * 5;
                        sum += digits[6] * 4;
                        sum += digits[7] * 3;
                        sum += digits[8] * 2;
                        sum += digits[9] * 1;
                        if (sum % 11 != 0) {
                            valid = false;
                        }
                    } else {
                        var sum = digits[0] * 1;
                        sum += digits[1] * 5;
                        sum += digits[2] * 6;
                        sum += digits[3] * 7;
                        sum += digits[4] * 3;
                        sum += digits[5] * 6;
                        sum += digits[6] * 4;
                        sum += digits[7] * 8;
                        sum += digits[8] * 9;
                        sum += digits[9] * 1;
                        if (sum % 11 != 0) {
                            valid = false;
                        }
                    }
                }
            }
            if (valid) {
                return false;
            } else {
                return [[$('input[name=pnumber]'), "Det indtastede er ikke et validt P-nummer"]];
            }
        }
}


var use_DG_Validator = 'RSV';


if (use_DG_Validator == 'RSV') {
    $(document).ready(
        function() {
            DG_initValidator ();
        }
    );
}

function DG_initValidator () {
    var DG_Validator;
    for (i in document.forms) {
        if (document.forms[i].id) {
            DG_Validator = DG_RSV_Validator (document.forms[i]);
            if (DG_Validator) {
                if (!DG_Validator.config) {
                    DG_Validator.config = {
                        displayType: 'alert-all',
                        errorJSItemBullet: '* ',
                        errorTextIntro: 'Der er følgende fejl i dine indtastninger:',
                        rules: DG_Validator.rules
                    }
                }
                document.forms[i].validator = DG_Validator;
                $("#" + DG_Validator.form.id).RSV(DG_Validator.config);
            }
        }
    }
}


function DG_RSV_Validator (f) {
    this.form = f;
    this.rules = new Array();
    this.config = (window.DG_RSV_ValidatorConfig_callback) ? new DG_RSV_ValidatorConfig_callback(this) : null;
    
    this.addRule = function() {
        var strRule = arguments[0];
        if (this.fieldExists(strRule)) this.rules.push(arguments[0]);
    }
    
    this.fieldExists = function() {
        var arrRule = (('' + arguments[0]).indexOf(",") > 0) ? arguments[0].split(",") : null;
        if (arrRule && arrRule.length >= 2) {
            var arrFieldNames = new Array(), requirement;
            for (var i = 0; i < arrRule.length; i++) {
                if (arrRule[i].indexOf('if:') == -1) {
                    requirement = arrRule[i]
                    arrFieldNames.push(arrRule[i + 1]);
                    if (requirement == 'same_as' || requirement == 'valid_date') arrFieldNames.push(arrRule[i + 2]);
                    if (requirement == 'valid_date') arrFieldNames.push(arrRule[i + 3]);
                    break;
                }
            }
            var valid = true;
            for (var i = 0; i < arrFieldNames.length; i++) {
                valid = (valid && !!this.form[arrFieldNames[i]]);
            }
            if (arrRule[0] == 'function') valid = true;
            return valid;
        } else {
            return false;
        }
    }
    
    ruledefinitions = new Array();
    if (window.DG_RSV_ValidatorRules_callback) ruledefinitions = DG_RSV_ValidatorRules_callback(this);
    if (!ruledefinitions.length) ruledefinitions = DG_RSV_ValidatorRules(this);
    for (var i = 0; i < ruledefinitions.length; i++) {
        this.addRule(ruledefinitions[i]);
    }
    
    return this;
}




// YAV //
//var oldwindowonload
//if (use_DG_Validator == 'YAV') {
//  oldwindowonload = window.onload;
//  window.onload = function () {
//      for (i in document.forms) {
//          if (document.forms[i].id) {
//              document.forms[i].onsubmit = function () {return DG_YAV_Validate(this);};
//          }
//      }
//      window.onload = (oldwindowonload || "");
//  }
//}
//
//function DG_YAV_Validate(f) {
//  validator = (f.validator || new DG_YAV_Validator(f));
//  return validator.check();
//}
//
//function DG_YAV_Validator (f) {
//  this.form = f;
//  this.config = new DG_YAV_ValidatorConfig(this);
//  this.check = function () {
//      return (this.config.rules.length) ? performCheck(this.form.id, this.config.rules, 'inline') : true;
//  }
//  return this;
//}
//
//function DG_YAV_ValidatorConfig (Validator) {
//  this.rules=new Array();
//  var form_id = Validator.form.id;
//  if (form_id == 'edit_cv_form') {
//      this.rules[0]='headline:Overskrift|required';
//  } else if (form_id == 'advertiser_data_form') {
//      this.rules[0]='zip|required';
//  }
//  return this;
//}




