// JavaScript Document
// JavaScript Document
var mcSearchCity = Class.create();

mcSearchCity.prototype = {
	//-> initialisation de la page
	initialize:function(idCpField,idCpHidden,idVilleField,idVilleHidden){
		this.showResult = 10;
		this.idRegion = 0;
		this.mode = "form";
		this.currentTime =  new Date();
		this.idFieldCp = null;
		this.idFieldCpHidden = null;
		this.idFieldVille = null;
		this.idFieldVilleId = null;
		this.idContener = "mcSearchCity_"+this.currentTime.getHours()+""+this.currentTime.getMinutes()+""+this.currentTime.getSeconds()+" "+this.currentTime.getMilliseconds();
		this.idUlResult = "mcSearchCity_res_"+this.currentTime.getHours()+""+this.currentTime.getMinutes()+""+this.currentTime.getSeconds()+" "+this.currentTime.getMilliseconds();
		this.originalTextFieldVille = "";
		this.offSetFieldVille;
		this.defaultText = " - Sélectionnez votre ville - ";
		
		//> recherche le champs "code postal"
		if(idCpField != ""){
			cp = searchInput(idCpField,"text");
			if(cp != null)
				this.idFieldCp = cp.id;
		}
		//> recherche le champs cache "code postal"
		if(idCpHidden != ""){
			cpHidden = searchInput(idCpHidden,"hidden");
			if(cpHidden != null)
				this.idFieldCpHidden = cpHidden.id;
		}
		//> recherche le champs "ville"
		if(idVilleField != ""){
			ville = searchInput(idVilleField,"text");
			if(ville != null){
				this.idFieldVille = ville.id;
				this.originalTextFieldVille = ville.value;
			}
		}
		//> recherche le champs "hidden de la ville"
		if(idVilleHidden != ""){
			villeHidden = searchInput(idVilleHidden,"hidden");
			if(villeHidden != null)
				this.idFieldVilleId = villeHidden.id;
		}
	},
	//-> construit l'autoComplete
	build:function(){
		if(this.checkParams()){
			$(this.idFieldVille).observe('click',this.resetFieldVille.bind(this));
			$(this.idFieldVille).observe('keyup',this.lauchAjaxRequest.bind(this));
		}
	},
	//-> action sur le champ de saisie de la ville
	resetFieldVille:function(){
		$(this.idFieldVille).value = "";
		$(this.idFieldVille).stopObserving('click');
	},
	//-> action sur le champ de saisie
	lauchAjaxRequest:function(){
		var text = $(this.idFieldVille).value;
		if(text.length > 2){
			//> affiche le loader
			this.showLoader();
			new Ajax.Request("/webservices/searchCity.aspx",
							 {
								 method:'get',
								 parameters:'nomVille='+text+'&idRegion='+this.idRegion,
								 onComplete:function(result){
									 this.buildResult(result.responseText);
								 }.bind(this),
								 onFailure:function(){
									 this.buildResult("{'total':'1','data':[{'id':'empty','nom':'Aucune ville trouv&eacute;e'}]}");
								 }.bind(this)
							 }
			);
		}
		else if(text.length == 0){
			$(this.idFieldVille).value = this.originalTextFieldVille;
		}		
	},
	//-> construit le résultat de l'appel ajax
	buildResult:function(data){
		//> cache le loader
		this.hideLoader();
		if(data != null){
			//> on créer le contener
			this.createContener();
			
			//> affiche le contener
			this.showContener();
			try{
				var json = eval('('+data+')');
				var dataVille = json.data;
				var maxShow = json.total;
				if(maxShow > this.showResult)
					maxShow = this.showResult;
				
				for(cpt=0; cpt<maxShow; cpt++){
					var ville = dataVille[cpt];
					var textLi = ville.nom;
					if(ville.codepostal != "")
						textLi = ville.codepostal+" - "+textLi;
					var li = new Element('li',{'id':ville.id,'title':ville.url}).update(textLi);
					//> insertion du li
					$(this.idUlResult).insert(li);
					
					//> ajout de l'action sur le div
					$(ville.id).observe('click',function(event){
						var element = Event.element(event);
						var dataVille = element.innerHTML.split(' - ');
						//> mode formulaire
						if(this.mode == "form"){
							if(dataVille.length > 1){
								//> on remplit les champs du formulaire
								$(this.idFieldCp).value = dataVille[0];
								if(this.idFieldCpHidden && $(this.idFieldCpHidden))
									$(this.idFieldCpHidden).value = dataVille[0];

								$(this.idFieldVille).value = dataVille[1];
								
								if(this.idFieldVilleId && $(this.idFieldVilleId))
									$(this.idFieldVilleId).value = element.id;
							}
							//> ajout de l'effect
							this.hideContener();
							//new Effect.Fade(this.idContener);
						}
						//> mode redirection
						else{
							window.location.replace(element.title);
						}
					}.bind(this));
					//> ajout de l'auto hide
					var _self = this;
					window.setTimeout(function(){_self.hideContener();},30000);
				}
			}
			catch(e){
				alert(e);
			}			
		}
	},
	//-> affiche l'indicateur de chargement
	showLoader:function(id){
		if($(this.idFieldVille)){
			$(this.idFieldVille).setStyle({'background':'url(/library/img/ajax-loader-blue.gif) right no-repeat #fff'});
		}
	},
	//-> désactive l'indicateur de chargement
	hideLoader:function(){
		$(this.idFieldVille).setStyle({'background':'#fff'});
	},
	//-> désaffiche le conteneur de resultat
	hideContener:function(){
		if($(this.idContener).visible())
			new Effect.Fade(this.idContener);
	},
	//-> affiche le contener
	showContener:function(){
		if(!$(this.idContener).visible())
			$(this.idContener).show();
	},
	//-> vérifie les paramètres
	checkParams:function(){
		var error = 0;
		if(this.mode == "form" && (this.idFieldCp == null || $(this.idFieldCp) == null))
			error++;
		if(this.idFieldVille == null || $(this.idFieldVille) == null)
			error++;
			
		if(error == 0){
			return true;
		}
		else{
			this.showParameters();
			return false;
		}
	},
	//-> création du contener de résultat
	createContener:function(){
		if(!$(this.idContener)){
			//> création du div contener			
			new Insertion.Top(document.body, '<div id="'+this.idContener+'" class="autoCompleter"></div>');
			
			//> ajout du text par défault
			$(this.idContener).insert(new Element('div',{'class':'text'}).insert({top:this.defaultText}));
			
			//>  création du ul
			var ul = new Element('ul',{'id':this.idUlResult});
			$(this.idContener).insert(ul);
			
			//> positionnement du conteneur
			var posFieldVille = $(this.idFieldVille).cumulativeOffset();
			contenerPosTop = posFieldVille.top + $(this.idFieldVille).getHeight();
			contenerPosLeft = posFieldVille.left;
			contenerWidth = $(this.idFieldVille).getWidth();
			$(this.idContener).setStyle({'width':parseInt(contenerWidth)+'px','top':parseInt(contenerPosTop)+'px','left':parseInt(contenerPosLeft)+'px'});
		}
		else{
			this.eraseContener();
		}
	},
	//-> vide le contenu du contener
	eraseContener:function(){
		$(this.idUlResult).update("");
	},
	//-> affiche les paramètres
	showParameters:function(){
		if(confirm("Error parameters : would you like view this ?")){
			alert(" -> idFieldCp : '"+this.idFieldCp+"'\n\r -> idFieldVille : '"+this.idFieldVille+"' \n\r -> idFieldVilleId : '"+this.idFieldVilleId+"'\n\r");
		}		
	},
	//-> passe en mode formulaire (remplit les champs cp, ville et champs cachés)
	modeForm:function(){
		this.mode = "form";
	},
	//-> passe en mode recherche
	modeSearch:function(){
		this.mode = "search";
	},
	//-> définit l'id de la region de recherche
	setRegion:function(id){
		if(parseInt(id) > 0){
			this.idRegion = parseInt(id);
		}
	}
}