// Classe StrategieCodePostalSelonProvince
    function StrategieCodePostalSelonProvince(erreurs) {
        this.mErreurs=erreurs;
        this.CallbackValiditeCodePostal = null;
    }
    
    StrategieCodePostalSelonProvince.prototype.EstGroupe=function() {
            return this.Gestionnaire.ObtenirGroupe.length > 0;
    }

    StrategieCodePostalSelonProvince.prototype.ObtenirUrlNonValide=function() {
            if (!this.EstValideFormatCodePostal())
                return this.ObtenirUrlErreur("MsgErrCPInvalide");
            return this.ObtenirUrlErreur("MsgErrCPAbsent");
    }

    StrategieCodePostalSelonProvince.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;
    }

    StrategieCodePostalSelonProvince.prototype.ObtenirCodePostal=function() {
            return $("*[name='Soumission_CP']").val().toUpperCase().replace(/ /gi,"");
    }

    StrategieCodePostalSelonProvince.prototype.ObtenirProvinceCourante=function() {
            return $("*[name='Soumission_PRV']").val();
    }
    
    StrategieCodePostalSelonProvince.prototype.ObtenirProvinceInconnue=function() {
            return "ND";
    }

    StrategieCodePostalSelonProvince.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.ObtenirProvinceInconnue();
    }

    StrategieCodePostalSelonProvince.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"; 
        }
    }


    StrategieCodePostalSelonProvince.prototype.ObtenirVariationDeProvince = function() {
            var prv=this.ObtenirProvincePourCodePostal();
            var mca=this.Gestionnaire.ObtenirMarqueCommerceAffaire().toLowerCase();
            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";
            }
    }

    StrategieCodePostalSelonProvince.prototype.ObtenirProvincesPermises=function() {
            return $("*[name='Soumission_GRPPRV']").val();
    }

    StrategieCodePostalSelonProvince.prototype.ObtenirVariation=function() {
            return $("*[name='Soumission_VAR']").val();
    }

    StrategieCodePostalSelonProvince.prototype.EstValideVariation=function() {
            return (this.ObtenirVariation() == this.ObtenirVariationDeProvince())
    }

    StrategieCodePostalSelonProvince.prototype.EstValideFormatCodePostal=function() {
            var expression=/^(([ ]*[A-CEGHJ-NPR-TV-Z][ ]*[0-9]){3}[ ]*)$/
            return expression.test(this.ObtenirCodePostal());
    }

    StrategieCodePostalSelonProvince.prototype.EstValide=function() {
            var resultat = this.EstValideFormatCodePostal();
            if (!this.EstValideVariation()) resultat=false;
            if (this.CallbackValiditeCodePostal != null) {
                this.CallbackValiditeCodePostal(this.Gestionnaire,resultat);
            } 
            return resultat;
    }

