/**
*fonction qui à partir d'un code postal saisie déclenche l'action qui va remplir la 
*liste déroulante des villes. Seulement dans le cas où le pays sélectionné est la France
*@param en entrée :	- 	urlAction chaine de caractères correspondant à l'adresse transmise au framework
*						pour lancer l'action adéquate.
*@param en sortie : - renvoie 0 si le pays n'est pas la france
*/
function chargerListeVilleByCodePostal(nomFormulaire,urlAction){

	var objForm = eval('document.' + nomFormulaire);
	if(objForm.ddlpays.value=='FR' || objForm.ddlpays.value=='FR_France'){
		var valCodepostal = objForm.txtcodepostal.value;
		if(valCodepostal.length==5 && isNumerique(valCodepostal)){
			doUrl(objForm,urlAction);
		}
	}else{return false;}
}//fin chargerListeVilleByCodePostal

/**
*fonction qui submit le formulaire d'inscription à l'adresse pUrl
*@param en entrée :	- 	pUrl chaine de caractères correspondant à l'adresse transmise au framework
*/
function doUrl (objFormulaire,pUrl){
   objFormulaire.action = pUrl;
   objFormulaire.submit ();
}// fin doUrl


/**
*fonction qui valide si la variable transmise est un numérique.
*@param en entrée :	- email chaine de caractères correspondant à la variable à tester
*@param en sortie : - renvoie 1 si la variable est un numérique, sinon 0
*/
function isNumerique(chaine) {
    var exp=new RegExp("^[0-9]*$","g");
    return exp.test(chaine);
}//fin isNumerique

/**
*@author Franck PRADAL
*cette fonction permet de rendre disabled un champ dans un formulaire
*@param en entrée :	- String nomChamp correspond au nom du champ qu'il faut rendre inactif ou actif suivant le cas
*					- Int typeAction indique si le champ doit être rendu inactif (1) ou actif (0)
**/
function disabledChamp(nomChamp, typeAction, valDefaut){

	var objChamp = eval(nomChamp);
	//on vide le champ et on le rend inactif
	if(typeAction==1){
		objChamp.value=valDefaut;
		objChamp.disabled= true;
	}else{
		objChamp.disabled= false;
	}
}//fin disabledChamp

/**
*@author Franck Pradal
*cette fonction permet de contrôler que le nombre de caractères saisis dans un textarea en renvoyant un compteur
* et en bloquant la saisie si le nombre voulu maximum de caractères est atteint.
*@param en entrée :	- String nomFormulaire qui correspond au nom du formulaire
*					- String nomChampTextarea qui correspond au nom du texteara où est saisi le texte
*					- String nomChampCompteurCaracteres qui correspond au nom de l'input dans lequel est affché le nombre de caractères saisis
*					- Int valMaxCaracteres qui correspond à la taille maximale du texte saisi
*					- string callback fonction a appeler en fin d'exécution de celle-ci (optionnel)
*/
function controleNbCaracteresDansTextarea(nomFormulaire,nomChampTextarea, nomChampCompteurCaracteres,valMaxCaracteres){

	var inputTextarea = eval('document.'+ nomFormulaire + '.'+ nomChampTextarea);
	var inputCompteur = eval('document.'+ nomFormulaire + '.'+ nomChampCompteurCaracteres);
	
	var texte = inputTextarea.value;
	//on affiche la valeur du compteur de caractères
	inputCompteur.value=texte.length;

	//si la longueur dépasse le nombre maximum
	//on remet dans le textarea l'intégralité du texte ne dépassant pas cette limite
	if(texte.length>valMaxCaracteres){
		inputTextarea.value = texte.substring(0,valMaxCaracteres);
	}
	
}//fin controleNbCaracteresDansTextarea


/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de rafraichir le nombre de caratères saisis par l'utilisateur
 * @return void
 */
function controleNbCaracteresDansTextareaPresse()
{
	refreshTextePresseLength();
	truncateTextePresseArea();
} // FIN #962# - controleNbCaracteresDansTextareaPresse


/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de calculer la longueur des textes en lecteure seule pour la publication des annonces au journal
 * @return int
 */
function countReadonlyChars()
{
	var txtreferencepro = parent.document.getElementById('txtreferencepro');
	var footerLenDiff=4;
	if (txtreferencepro.value.length == 0) {
		footerLenDiff = 11;
	} 
		
	if(txtPresseROHeader == undefined || txtPresseROFooter == undefined) {
		var txtPresseROHeader = parent.document.getElementById('textePresse_ReadOnlyHeader_wrapper');
		var txtPresseROFooter = parent.document.getElementById('textePresse_ReadOnlyFooter_wrapper');
		headerLen = txtPresseROHeader.innerHTML.stripTags().replace(', ' ,'').replace('  ' ,'').length - 2;
		footerLen = txtPresseROFooter.innerHTML.stripTags().replace(', ' ,'').replace('  ' ,'').length - footerLenDiff;
		return (headerLen + footerLen);
	}
	headerLen = txtPresseROHeader.innerHTML.stripTags().replace(', ' ,'').replace('  ' ,'').length -2;
	footerLen = txtPresseROFooter.innerHTML.stripTags().replace(', ' ,'').replace('  ' ,'').length - footerLenDiff;
	return (headerLen + footerLen);
} // FIN #962# - countReadonlyChars

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de calculer la longueur du texte pour la presse saisi par l'utilisateur
 * @return int
 */
function countWrittenChars()
{
	if(txtPresseTextarea == undefined) {
		var txtPresseTextarea = parent.document.getElementById('texteAnnoncePresse');
		return txtPresseTextarea.value.length;
	}
	return txtPresseTextarea.value.length;
} // FIN #962# - countWrittenChars

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de calculer la longueur totale du texte presse (ReadOnly + Textarea)
 * @return int
 */
function countTextePresseChars()
{
	return countReadonlyChars() + countWrittenChars();
} // FIN #962# - countTextePresseChars

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de rafraichir le nombre de caratères saisis par l'utilisateur
 * @return void
 */
function refreshTextePresseLength()
{
	if(txtPresseCharCounter == undefined) {
		var txtPresseCharCounter = parent.document.getElementById('charRestantPresse');
		txtPresseCharCounter.value = countTextePresseChars();
	} else {
		txtPresseCharCounter.value = countTextePresseChars();
	}

if(txtPresseCharCounter.value > 216){
txtPresseCharCounter.value = 216;
}
	
} // FIN #962# - refreshTextePresseLength

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant de tronquer le texte presse saisi par l'utilisateur si celui-ci est trop long
 * @return void
 */
function truncateTextePresseArea()
{


	if(txtPresseTextarea == undefined) {
		var txtPresseTextarea = parent.document.getElementById('texteAnnoncePresse');
		var tmpTxtPresseValue = txtPresseTextarea.value;
		if(countTextePresseChars() >= textePresseMaxLength) {
			txtPresseTextarea.value = tmpTxtPresseValue.substring(0, textePresseMaxLength - countReadonlyChars());
		}
	} else {
		var tmpTxtPresseValue = txtPresseTextarea.value;
		if(countTextePresseChars() >= textePresseMaxLength) {
			txtPresseTextarea.value = tmpTxtPresseValue.substring(0, textePresseMaxLength - countReadonlyChars());
		}
	}
} // FIN #962# - truncateTextePresseArea

function gestionSaisieTextePresse()
{
    var textePresse = $('#textePresse');
    if(textePresse.val().search(/^A votre disposition pour plus d\'informations sur ce produit\. Appelez-moi\.$/) > -1 ){
		textePresse.val(textePresse.val().replace(/^A votre disposition pour plus d\'informations sur ce produit\. Appelez-moi\.$/,""));
	}
	
	var nbrCaracteresSaisis = textePresse.val().length;
	if (nbrCaracteresSaisis > nbrCaracteresMaxTextePresse)
	{
		textePresse.val(textePresse.val().substr(0,nbrCaracteresMaxTextePresse));
		nbrCaracteresSaisis = unescape_html(textePresse.val()).length;
	}
	
	// this.textePressePrecedent = textePresse.val();
	
	var nbrCaracteresRestant = Math.max(nbrCaracteresMaxTextePresse - nbrCaracteresSaisis, 0);
	var lengthTotal = (init_nbrCaracteresMaxTextePresse - nbrCaracteresMaxTextePresse) + nbrCaracteresSaisis;
	
	$('#nbrCaracteresRestantTextePresse').val(nbrCaracteresRestant);
	$('#charSaisiePresse').val(lengthTotal);
}

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant le remplacement de la valeur d'un élément de l'entête ou du pied d'annonce pour la publication au journal
 * @return void
 */
function readonlyValuesChanged(formElt)
{
	if(formElt) {
		var id = formElt.id;
		var value = '';
		if(formElt.type == "text" || formElt.type == "textarea") {
			value = formElt.value;
		}
		else {
			if(formElt.selectedIndex !== 0) {
				value = formElt.options[formElt.selectedIndex].text;
			}
		}
		if(id == 'cel' || id == 'ges') {
			value = loadEnergyClass(formElt);
		}
		if(id == 'txttelephone') {
			if(value !== '') {
				// #2536#
				var separator = '.';
				value = value.replace('+33(0)', '0');
				var regExplodeTelephone = /[^0-9]/gi;
				var tmp = value.replace(regExplodeTelephone,'');
				if(tmp.length == 10){
					tmp = tmp.substr(0,2) + separator 
						+ tmp.substr(2,2) + separator 
						+ tmp.substr(4,2) + separator 
						+ tmp.substr(6,2) + separator 
						+ tmp.substr(8,2);
					value = tmp;
				}
				//sinon la valeur est affiché tel quel
			}
		}
		
		if(value == '' && allPatterns[id] && allPatterns[id].defaultValue) {
			value = allPatterns[id].defaultValue;
		}
		
		//#2540#
		if(id == 'txtRemplacerPar'){
			id = 'ddlvilles';			
		}
		
		if(editablePatterns[id] !== undefined) {
			//Editable field pattern
			var strToWrite = '';
			var prevPattern = null;
			for(patternName in editablePatterns) {
				var pattern = editablePatterns[patternName];
				var field = $(patternName);
				var fieldValue = $(patternName);
				if(field.type == "text" || field.type == "textarea") {
					fieldValue = $F(field);
				}
				else {
					if(field.selectedIndex !== 0) {
						fieldValue = field.options[field.selectedIndex].text;
					} else {
						fieldValue = null;
					}
				}
				if(id == 'mois' && value.length == 1) {
					value = '0' + value;
				}
				if(fieldValue !== null && fieldValue.length !== 0) {
					if(patternName !== 'mois' || $('annee').selectedIndex !== 0) {
						var strToAppend = (prevPattern !== null && prevPattern.separator !== null ? prevPattern.separator : '') + 
							(pattern.prefix !== null ? pattern.prefix : '') + 
							fieldValue + 
							(pattern.sufix !== null ? pattern.sufix : '')
						;
						strToWrite += strToAppend;
					}
					prevPattern = pattern;
				}
			}
			$('texteAnnoncePresse').value = strToWrite;
		}
		else {
			//Readonly field pattern
			var target = $('pattern_'+ id);
			if(!target) {
				//Correction d'un bug lié au chargement des villes dans une iFrame
				target = parent.document.getElementById('pattern_'+ id);
			}
			if(target) {
			
				//correction bug lié à l'affichage de la ville dans l'entête du texte presse
				var commune = parent.document.getElementById('txtRemplacerPar').value;
				if(target == $('pattern_ddlvilles') && commune != '' && parent.document.getElementById('idNon').checked){
				value = commune;
				}
			
				target.update(value);
				var targetWrapper = target.ancestors()[0];
				
				if(value != '') { targetWrapper.show(); }
				else { targetWrapper.hide(); }
				
				var closestPrevVisible = null;
				var closestNextVisible = null;
				
				if(targetWrapper.previous()) {
					closestPrevVisible = getClosestPreviousVisibleForElt(targetWrapper);
				}
				if(targetWrapper.next()) {
					closestNextVisible = getClosestNextVisibleForElt(targetWrapper);
				}
				if(closestPrevVisible !== null) {
					if(value != '') { closestPrevVisible.select('.pattern_separator')[0].show(); }
					else if(closestNextVisible === null) { closestPrevVisible.select('.pattern_separator')[0].hide(); }
				}
				var separator = targetWrapper.select('.pattern_separator')[0];
				if(separator) {
					if(closestNextVisible !== null && value != '') {
						separator.show();
					} else {
						separator.hide();
					}
				}
				
				refreshReadonlyHiddenValue();
				refreshTextePresseLength();
				truncateTextePresseArea();
			}
		}
	}
} // FIN #962# - readonlyValuesChanged


/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant la récupération en asynchrone de la classe énergétique d'un logement
 * @return void
 */
function flagSuperficieChanged(formElement) {
	var sufix, sufixOld, ancestor = $('pattern_txtsuperficie').ancestors()[0];
	if(formElement.id == 'idRadioEnviron') {
		sufix = 'm2 env.';
		sufixOld = 'm2';
	} else {
		sufix = 'm2';
		sufixOld = 'm2 env.';
	}
	ancestor.innerHTML = ancestor.innerHTML.replace(sufixOld, sufix);
}

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant la récupération en asynchrone de la classe énergétique d'un logement
 * @return void
 */
function loadEnergyClass(formElement) {
	var energyClass = '';
	if(formElement && formElement.value !== '') {
		new Ajax.Request(energyClassLoadingUrl,
		{
			method:'get',
			asynchronous: false, 
			parameters: {"energie":formElement.name, "valeur":formElement.value },
			onSuccess: function(transport){
				var response = transport.responseText.evalJSON();
				energyClass = response.etiquette;
			},
			onFailure: function(){ alert("error") }
		});
	} else if(formElement && formElement.value == '') {
		energyClass = 'NC';
	}
	return energyClass;
}

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Retourne l'élement visible le plus proche à la suite de celui passé en paramètre
 * @param element    Un élément du DOM
 * @return void
 */
function getClosestNextVisibleForElt(element)
{
	var suivants = element.nextSiblings();
	var closestNextVisible = null;
	suivants.each(function(next) {
		if(closestNextVisible === null) {
			if(next.visible()) {
				closestNextVisible = next;
			}
		}
	});
	return closestNextVisible;
} // FIN #962# - getClosestNextVisibleForElt

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Retourne l'élement visible le plus proche avant celui passé en paramètre
 * @param element    Un élément du DOM
 * @return void
 */
function getClosestPreviousVisibleForElt(element)
{
	var precedents = element.previousSiblings();
	var closestPrevVisible = null;
	precedents.each(function(prev) {
		if(closestPrevVisible === null) {
			if(prev.visible()) {
				closestPrevVisible = prev;
			}
		}
	});
	return closestPrevVisible;
} // FIN #962# - getClosestPreviousVisibleForElt

/**
 * Evolution #962#
 * @author Yann Eugoné
 * Fonction permettant le remplacement de ré-affecter la valeur à inscrire en en-tête et pied de page
 * @return void
 */
function refreshReadonlyHiddenValue()
{
	if(!txtPresseROHeader_value && !txtPresseROFooter_value && !txtPresseROHeader && !txtPresseROFooter) {
		//Correction d'un bug lié au chargement des villes dans une iFrame
		var txtPresseROHeader_value = parent.document.getElementById('textePresse_ReadOnlyHeader_value');
		var txtPresseROFooter_value = parent.document.getElementById('textePresse_ReadOnlyFooter_value');
		var txtPresseROHeader = parent.document.getElementById('textePresse_ReadOnlyHeader_wrapper');
		var txtPresseROFooter = parent.document.getElementById('textePresse_ReadOnlyFooter_wrapper');
	}
	txtPresseROHeader_value.value = txtPresseROHeader.innerHTML;
	txtPresseROFooter_value.value = txtPresseROFooter.innerHTML;
} // FIN #962# - refreshReadonlyHiddenValue



//----------------------------------------------------------------------
// Traite la demande suivante 'compteCaracteres'
// Compte le nombre de caracteres que contient l'element 'element'
//
// Parametres :
//    - element : element ou identifiant de l'element
// Valeur retournee : entier
//----------------------------------------------------------------------
function compteCaracteres (element) {
   if (document.getElementById(element)) {
      element = document.getElementById(element);
   }
   if (element.nodeName.toLowerCase() == 'input'
         || element.nodeName.toLowerCase() == 'textarea') {
      // si l'element est un champs de formulaire
      return element.value.length;
   } else if (element.innerHTML) {
      // si l'element a un contenu (toutes les balises HTML)
      return element.innerHTML.length;
   } else {
      return 0;
   }
}//fin compteCaracteres



//----------------------------------------------------------------------
// Traite la demande suivante 'ajouteOption'
// Ajoute une option a l'element 'element' ou identifie par 'element'
//
// Parametres :
//    - element : element ou identifiant de l'element
//    - texte : texte de l'option
//    - valeur : value de l'option
// Valeur retournee : booleen
//----------------------------------------------------------------------
function ajouteOption (element, texte, valeur) {

   if (document.getElementById(element))
      element = document.getElementById(element);
   if (element.options) {
      element.options[element.options.length] = new Option(texte, valeur);
   }
}

function afficheMessBadCodPost(element, texte) {
	if (parent.document.getElementById(element)){
		parent.document.getElementById(element).style.display="block";
		parent.document.getElementById(element).innerHTML=texte;
	}
}



//----------------------------------------------------------------------
// Traite la demande suivante 'supprimeOption'
// Supprime les options de l'element 'element' ou identifie par 'element'
//
// Parametres :
//    - element : element ou identifiant de l'element
// Valeur retournee : booleen
//----------------------------------------------------------------------
function supprimeOption (element) {
   if (document.getElementById(element))
      element = document.getElementById(element);
   if (element.options) {
      for (var i = 0 ; i < element.options.length ; i++) {
         if (element.options[i].value != '') {
            element.options[i] = null;
            i--;
         }
      }
   }
}



//----------------------------------------------------------------------
// Traite la demande suivante 'chargerVilles'
// Actualise l'iframe 'idIFrame' avec en parametres les valeur des champs
// 'idElementCodePostal' et 'idElementPays'
//
// Parametres :
//    - idIFrame : identifiant de l'iframe
//    - idElementCodePostal : identifiant du code postal
//    - idElementPays : identifiant du pays
//    - idElementListeVilles : identifiant de la liste des villes
// Valeur retournee : booleen
//----------------------------------------------------------------------
function chargerVillesDansIFrame (idIFrame, idElementCodePostal, idElementPays, idElementListeVilles) {
   if (compteCaracteres(idElementCodePostal) >= 5
   		&& /^[0-9]{5}$/.test(document.getElementById(idElementCodePostal).value)
   	) {
      
      
      // Recuperation des valeurs des champs passes en parametres
      var codePostal = document.getElementById(idElementCodePostal).value;
//      var codePays = document.getElementById(idElementPays).value;
      var codePays = 'FR';
      var element = document.getElementById(idIFrame);
      var urlChargerVille = element.src;
      // Mise a jour de la source avec les parametres
      urlChargerVille = urlChargerVille.replace(/codePostal=[^&]*/, 'codePostal=' + codePostal);
      urlChargerVille = urlChargerVille.replace(/pays=[^&]*/, 'pays=' + codePays);
      urlChargerVille = urlChargerVille.replace(/element=[^&]*/, 'element=' + idElementListeVilles);
      element.src = urlChargerVille;
   } else {
      supprimeOption(idElementListeVilles);
      return false;
   }
   return true;
} //fin chargerVillesDansIFrame

// Affiche un message d'erreur lors de la dépose
function afficheMsgErreur(){
	var isOk = true;
	var msgErreur = 'Vous devez renseigner les informations ci-dessous pour obtenir les prix du marché.<br />';
	if($F('txtloyer')== ''){
		isOk = false;
		msgErreur += '- Montant<br />';
	}if($F('ddlbiens')== ''){
		isOk = false;
		msgErreur += '- Type de bien<br />';
	}
	if($F('txtsuperficie')== ''){
		isOk = false;
		msgErreur += '- Superficie<br />';
	}
	if($F('txtcodepostal')== ''){
		isOk = false;
		msgErreur += '- Code postal<br />';
	}
	if($F('ddlvilles')== ''){
		isOk = false;
		msgErreur += '- Ville<br />';
	}

	if(isOk != true){
		$('msgErrorDetail').innerHTML = msgErreur;
		$('msgErrorDetail').style.display = 'block';
		return false;
	}else{
		$('msgErrorDetail').style.display = 'none';
		return true;
	}
}

function modifVille(bouton){
var ddlvilles = $('pattern_ddlvilles');
var ville = parent.document.getElementById('ddlvilles').value;
var reg = new RegExp('[_]', 'g');
var ville = ville.split(reg);
var commune = parent.document.getElementById('txtRemplacerPar').value;
var value;

	if(bouton == 'idOui'){
	value = ville[1];
	} else if(bouton == 'idNon'){
	value = commune;
	}

ddlvilles.update(value);
}

