var QAS = function ()
{
	var public;
    var cache = {};
	var adresseIdField;
	
	var Utils = function() {
            return {
                viderListe: function (idListe)
                    {
                        $(idListe).immediateDescendants().each(function (elt)
                          {
                             if (idListe == 'version')
                             {
                                if (elt.value != 'posur' && !elt.value.empty()) {$(elt).remove();}
                             }
                             else
                             {
                                if (!elt.value.empty()) {$(elt).remove();}
                             }
                          });
                    }, // viderListe
                rebuildListeDepuisData: function (idListe, elements)
                    {
                       this.viderListe(idListe);
                       $(idListe).options.length = 1;
                       $(idListe).options[0].value = '';
                       $(idListe).options[0].text = 'Choisir une adresse';
                       elements.each(function (elt)
                          {
                             var longueur = $(idListe).options.length;
                             $(idListe).options.length++;
                             $(idListe).options[longueur].value = elt.code;
                             $(idListe).options[longueur].text = elt.libelle;
                          });
                    }, // rebuildListeDepuisData
                applyStylesToList: function (idListe, propriete, data, idCaller)
                    {
                       var indexSelectionAutomatique = null;
                       var compteurPossibles = 0;
                       if (data[propriete] !== undefined && $(idListe))
                       {
                          $A($(idListe).options).reject(function (elt) {return elt.value.empty();}).each(function (elt)
                             {
                                if (data[propriete].indexOf(elt.value) == -1)
                                {
                                   $(elt).addClassName('nonDisponible');
                                   if ($(elt).hasClassName('disponible'))
                                   {
                                      $(elt).removeClassName('disponible');
                                   }
                                }
                                else
                                {
                                   $(elt).addClassName('disponible');
                                   if ($(elt).hasClassName('nonDisponible'))
                                   {
                                      $(elt).removeClassName('nonDisponible');
                                   }
                                   compteurPossibles++;
                                   indexSelectionAutomatique = elt.index;
                                }
                             });
                          if (compteurPossibles == 1 && indexSelectionAutomatique !== null && (idCaller===undefined || idListe!==idCaller))
                          {
                             $(idListe).selectedIndex = indexSelectionAutomatique;
                          }
                       }
                    }, // applyStylesToList
                strip_accents: function (chaine) 
                	{
            			chaine=chaine.replace(/[éèêë]/g,"e");
            			chaine=chaine.replace(/[àâä]/g,"a");
            			chaine=chaine.replace(/[ïî]/g,"i");
            			chaine=chaine.replace(/[ùûü]/g,"u");
            			chaine=chaine.replace(/[öô]/g,"o");
            			chaine=chaine.replace(/[ç]/g,"c");
            			//chaine=chaine.replace(/[-']/g," ");

            			return chaine;
            		}
           };
       }();
	
	return public = {

        config: {
            },

        lastCaller: undefined,

		forceCriteres: function (json) {
        	criteres = json;
		},

		action: function (caller) {
        	this.lastCaller = caller;
			var id = caller ? $(caller).id : 'void';
		},

	  checkAdresse4QAS: function (adresseIdField, adresseComplementaireIdField, codepostalIdField, villeIdField, paysIdField) {
	  	 if ($('verifQAS_BLANK')) $('verifQAS_BLANK').hide();
	  	 if ($('verifQAS_OK')) $('verifQAS_OK').hide();
	  	 if ($('verifQAS_RESULT')) $('verifQAS_RESULT').hide();
	  	 if ($('verifQAS_ERREUR')) $('verifQAS_ERREUR').hide();
	   	 if ($('erreurMoniker')) $('erreurMoniker').hide();
	   	 if ($('erreurModifierAdresse')) $('erreurModifierAdresse').hide();
		 $('rMoniker').checked = false;
		 $('rModifierAdresse').checked = false;
		 $('rConserverAdresse').checked = false;
		 Utils.viderListe($('adresseMoniker'));
		 
		 $('indicateur_chargement_qas').show();

	  	 var adresse = Utils.strip_accents(trim($(adresseIdField).value));
	  	 var adresseComplementaire = Utils.strip_accents(trim($(adresseComplementaireIdField).value));
		 var codePostal = trim($(codepostalIdField).value);
		 var codeINSEE = $(villeIdField).value;
		 var ville = '';
		 if (codeINSEE!='' && codeINSEE!='0') {
		 	ville = $(villeIdField).options[$(villeIdField).selectedIndex].text;
		 }
		 var pays = $(paysIdField).value;
		 var forceAdresse = '1';

	  	 // Les champs Adresse, ville et code postal saisis ?
	  	 if (adresse=='' || codePostal=='' || ville=='' || ville=='0') {
	  	 	 $('verifQAS_BLANK').show();
	  	 	 $('indicateur_chargement_qas').hide();
	  	 }
	  	 else {
	         ajaxCheckAdresse4QAS = new Ajax.Request(
	               this.urlCheckAdresse4QAS,
	               {
	                  method: 'post',
	                  asynchronous: 1,
	                  parameters: {'adresse': adresse,
	                  			   'adresseComplementaire': adresseComplementaire,
	                  			   'codePostal': codePostal,
	                  			   'codeINSEE': codeINSEE,
	                  			   'ville': ville,
	                  			   'pays': pays,
	                  			   'forceAdresse': forceAdresse
	                  			  },
	                  onSuccess: function (xhr) {
				   		var data = xhr.responseText.evalJSON();
						if (data) {
							$(adresseIdField+'_old').value = adresse;
							$(adresseComplementaireIdField+'_old').value = adresseComplementaire;
							$(codepostalIdField+'_old').value = codePostal;
							$(villeIdField+'_old').value = codeINSEE;
							$(paysIdField+'_old').value = pays;
							if (data.pbVerification) {
							}
							if (data.adresseNonReconnue) {
								$('resultQASMessageTitre').innerHTML = '<p style="float:none;">Attention ! Votre adresse n\'a pas été reconnue</p>';
								$('resultQASMessage').show();
								$('resultQASMessageSuggestions').hide();
								$('qasSuggestions').hide();
								$('verifQAS_RESULT').show();
							}
							if (data.adressesSuggestions) {
								$('resultQASMessageTitre').innerHTML = '<p style="float:none;">Attention ! Votre adresse n\'est pas complète</p>';
								$('resultQASMessageSuggestions').show();
								$('qasSuggestions').show();
								$('resultQASMessage').hide();
								Utils.rebuildListeDepuisData($('adresseMoniker'), data.adressesSuggestions);
								$('verifQAS_RESULT').show();
							}
							if (data.adresseValideQAS) {
								// On fait les remplacements
								/*$('qas2TridentField1').value = data.codeINSEE; 
								$('qas2TridentField2').value = data.libelleVille; 
								$('qas2TridentField3').value = data.codeINSEE;*/ 
								$('flagValidationQAS').value = '1';
								// On fait les remplacements
 								$(adresseIdField).value = data.lignes[3]['3']; 
								$(adresseComplementaireIdField).value = data.lignes[1]['1']+' '+data.lignes[2]['2']+' '+data.lignes[4]['4']; 
 								$(codepostalIdField).value = data.codePostal;
 								// On positionne la bonne ville avec le codeINSEE
 								for(var i=0; i<$(villeIdField).options.length; i++) {
 									if ($(villeIdField).options[i].value==data.codeINSEE) {
 										$(villeIdField).selectedIndex = i;
 										break;
 									}
 								}
								$('verifQAS_OK').show();
							}
							if (data.pbVerification) {
								$('verifQAS_ERREUR').show();
							}
							$('forceAdresse').value = 1;
						}
						$('indicateur_chargement_qas').hide();
	                  }  
	               }
	         );
         }
      },
      
	  checkValidationQAS: function (adresseIdField, adresseComplementaireIdField, codepostalIdField, villeIdField, paysIdField) {
	  	 if ($('verifQAS_BLANK')) $('verifQAS_BLANK').hide();
	  	 if ($('verifQAS_OK')) $('verifQAS_OK').hide();
	  	 if ($('verifQAS_RESULT')) $('verifQAS_RESULT').hide();
	  	 if ($('verifQAS_ERREUR')) $('verifQAS_ERREUR').hide();
		 
	  	 var adresse = Utils.strip_accents(trim($(adresseIdField).value));
	  	 var adresseComplementaire = Utils.strip_accents(trim($(adresseComplementaireIdField).value));
		 var codePostal = trim($(codepostalIdField).value);
		 var codeINSEE = $(villeIdField).value;
		 var ville = '';
		 if (codeINSEE!='' && codeINSEE!='0') {
		 	ville = $(villeIdField).options[$(villeIdField).selectedIndex].text;
		 }
		 var pays = $(paysIdField).value;

         ajaxCheckValidation4QAS = new Ajax.Request(
               this.urlCheckValidation4QAS,
               {
                  method: 'post',
                  asynchronous: 1,
                  parameters: {'adresse': adresse,
                  			   'adresseComplementaire': adresseComplementaire,
                  			   'codePostal': codePostal,
                  			   'codeINSEE': codeINSEE,
                  			   'ville': ville,
                  			   'pays': pays
                  			  },
                  onSuccess: function (xhr) {
			   		var data = xhr.responseText.evalJSON();
					if (data) {
						if (data.adresseValideQAS) {
							$('flagValidation'+livraison+'QAS').value = '1';
						}
						if (data.pbVerification) {
							$('verifQAS_ERREUR').show();
						}
					}
                  }
               }
         );

      },
      
      validationQAS: function (adresseIdField, adresseComplementaireIdField, codepostalIdField, villeIdField, paysIdField) {
	   	if ($('erreurMoniker')) $('erreurMoniker').hide();
	   	if ($('erreurModifierAdresse')) $('erreurModifierAdresse').hide();

      	if ($('forceAdresse').value!='1' || 
            ($(paysIdField).value!='fr' && $(paysIdField).value!='FR')) {
      		//this.checkValidationQAS(adresseIdField, adresseComplementaireIdField, codepostalIdField, villeIdField, paysIdField);
      		return true;
      	}
      	else {
      		if (!$('rMoniker').checked && 
          		!$('rModifierAdresse').checked && 
          		!$('rConserverAdresse').checked &&
          		$('flagValidationQAS').value!='1') {
      				return false;
      		}
	      	// Si 'Choisir parmi ces adresses' sélectionné
	      	if ($('rMoniker').checked) {
	      		if ($('adresseMoniker').options[$('adresseMoniker').selectedIndex].value=='') {
	      			// Il faut choisir une adresse dans la liste
		      		$('erreurMoniker').show();
	      			$('adresseMoniker').focus();
	      			return false;
	      		}
	      	}
	      	// Si 'Modifier mon adresse' sélectionné
	      	else if ($('rModifierAdresse').checked) {
	      		var different = false;
	      		// s'il y a au moins une différence entre l'adresse précédemment saisie et la nouvelle c'est ok
	      		if ($(adresseIdField).value!=$(adresseIdField+'_old').value ||
	      			$(codepostalIdField).value!=$(codepostalIdField+'_old').value ||
	      			$(adresseIdField).value!=$(adresseIdField+'_old').value) {
	      			different = true;
	      		}
	      		if (!different) {
		      		$('erreurModifierAdresse').show();
		      		return false;
	      		}
	      	}
      	}
      	
      	return true;
      },
      
      getInfosQASByMoniker: function (elt, idFrame, adresseIdField, adresseComplementaireIdField, codepostalIdField, villeIdField, paysIdField) {
     	 $('rMoniker').checked=true;
     	 if (elt.value!='') {
 	         ajaxGetInfosQASByMoniker = new Ajax.Request(
 	               this.urlGetInfosQASByMoniker,
 	               {
 	                  method: 'post',
 	                  asynchronous: 1,
 	                  parameters: {'moniker': elt.value},
 	                  onSuccess: function (xhr) {
 				   		var data = xhr.responseText.evalJSON();
 						if (data) {
 							if (data.adresseValideQAS) {
 								// On fait les remplacements
 								$(adresseIdField).value = data.adresse; 
 								//$(adresseComplementaireIdField).value = ''; 
 								$(codepostalIdField).value = data.codePostal;
 								// On positionne la bonne ville avec le codeINSEE
 								for(var i=0; i<$(villeIdField).options.length; i++) {
 									if ($(villeIdField).options[i].value==data.codeINSEE) {
 										$(villeIdField).selectedIndex = i;
 										$('flagValidationQAS').value = '1';
 										break;
 									}
 								}
 							}
 							if (data.pbVerification) {
								$('verifQAS_ERREUR').show();
							}
 						}
 	                  }  
 	               }
 	         );
     	 }
       }


   }; // Fin return public

}();

function trim(chaine) {
	a = chaine.replace(/^\s+/, '');
	return a.replace(/\s+$/, '');
};

