// Classe StrategieCodePostalVide
    function StrategieCodePostalVide(erreurs, rediriger) {
        this.mErreurs=erreurs;
        this.mRediriger=rediriger;
        this.CallbackValiditeCodePostal = null;
    }
    
    StrategieCodePostalVide.prototype.ObtenirUrlNonValide=function() {
            if (this.ObtenirCodePostal().length==0) return this.ObtenirUrlErreur("MsgErrCPAbsent");      
            if (!this.EstValideFormatCodePostalComplet())
                return this.ObtenirUrlErreur("MsgErrCPInvalide");
            return "#";
    }

    StrategieCodePostalVide.prototype.ObtenirUrlErreur = function(noMessage) {
            var lng = this.Gestionnaire.ObtenirLangue();
            var resultat="#";
            $.each(this.mErreurs, function (index,modele) {
                if (modele[0] == noMessage) {
                    if (lng=='FR')
                        resultat = modele[1];
                    else if (lng=='EN')
                        resultat = modele[2];
                }
            })
            return resultat;
    }

    StrategieCodePostalVide.prototype.ObtenirCodePostal=function() {
            return $("*[name='Soumission_CP']").val().toUpperCase().replace(/ /gi,"");
    }

    StrategieCodePostalVide.prototype.ObtenirProvinceCourante=function() {
            return $("*[name='Soumission_PRV']").val();
    }

    StrategieCodePostalVide.prototype.ObtenirProvincesPermises=function() {
            return $("*[name='Soumission_GRPPRV']").val();
    }


    StrategieCodePostalVide.prototype.ObtenirProvinceInconnue=function() {
            return this.ObtenirProvinceCourante();
    }

     
    
    StrategieCodePostalVide.prototype.ObtenirProvincePourCodePostal=function() {
            var cp=this.ObtenirCodePostal();
            if (cp.length == 0) return this.ObtenirProvinceInconnue();
            switch (cp.substring(0,1)) {
                case "A" :  return "NF";
                case "B" :  return "NS";
                case "C" :  return "PE";
                case "E" :  return "NB";

                case "G" :
                case "H" :
                case "J" :  return "QC";

                case "K" :
                case "L" :
                case "M" :
                case "N" :
                case "P" :  return "ON";

                case "R" :  return "MB";
                case "S" :  return "SK";
                case "T" :  return "AB";
                case "V" :  return "BC";
                case "Y" :  return "YT";
                case "X" :
                    if (cp.length > 2) {
                        switch(cp.substring(1,3)) {
                            case "0A" :
                            case "0C" :
                            case "0B" : return "NU";
                        }
                    }
                    return "NT";
            }
            return this.ObtenirProvinceCourante();
    }

     StrategieCodePostalVide.prototype.ObtenirVariationGroupe=function() {
        var mca=this.Gestionnaire.ObtenirMarqueCommerceAffaire().toLowerCase();
        var grp=this.Gestionnaire.ObtenirGroupe().toLowerCase();
        switch(grp) {
          case "csq" :
          case "fiq" :
             return mca + "-" + grp;
          default:
             return mca + "-QC"; 
        } 
    }

    StrategieCodePostalVide.prototype.ObtenirVariationDeProvince = function() {
            var prv=this.ObtenirProvincePourCodePostal();
            var mca=this.Gestionnaire.ObtenirMarqueCommerceAffaire().toLowerCase();
            var grpPrv=this.ObtenirProvincesPermises();
            if ((grpPrv=="") || (grpPrv.indexOf(prv) > -1)) {
              switch (prv) {
                case "NF" :
                case "NS" :
                case "PE" :
                case "NB" : return mca + "-MR";
                case "QC" : return this.ObtenirVariationGroupe();
                case "ON" : return mca + "-ON";
                case "BC" :
                case "MB" :
                case "SK" : return mca + "-WS";
                case "AB" :
                case "YT" :
                case "NT" :
                case "NU" : return mca + "-AB";
              }
            }
            return this.ObtenirVariationCourante()
    }

    StrategieCodePostalVide.prototype.ObtenirVariationCourante=function() {
            return $("*[name='Soumission_VAR']").val();
    }

    StrategieCodePostalVide.prototype.ObtenirVariation=function() {
        if (this.mRediriger) return this.ObtenirVariationDeProvince();
        return this.ObtenirVariationCourante();
    }

    StrategieCodePostalVide.prototype.EstValideFormatCodePostal=function() {
            var cp = this.ObtenirCodePostal()
            var estValide=true;
            for (index=0;index<cp.length;index++) {
                var car = cp.substr(index,1);
                if (index % 2 == 0) {
                    if (!car.toUpperCase().match("[ABCEGHJKLMNPRSTVYZ]")) estValide=false;
                } else {
                    if (!car.match("[0-9]")) estValide=false;
                }
            }
            return estValide && (cp.length <= 6);
    }

    StrategieCodePostalVide.prototype.EstValideFormatCodePostalComplet=function() {
            var expression=/^(([ ]*[A-CEGHJ-NPR-TV-Z][ ]*[0-9]){3}[ ]*)$/
            return expression.test(this.ObtenirCodePostal());
    }


    StrategieCodePostalVide.prototype.EstValide=function() {
            if (this.CallbackValiditeCodePostal != null) {
                this.CallbackValiditeCodePostal(this.Gestionnaire,this.EstValideFormatCodePostal());
            } 
            return true;
    }

