/**
 * POPUP CENTREE SUR L'ECRAN
 *
 * @UrlPage				L'adresse de la page
 * @LargeurPopup		La largeur du popup
 * @HauteurPopup		La hauteur du popup
 **************************************************************/
function Popup(UrlPage, LargeurPopup, HauteurPopup) {
	LargeurEcran = window.screen.availWidth;
	HauteurEcran = window.screen.availHeight;
	
	PositionX = parseInt(LargeurEcran / 2) - parseInt(LargeurPopup / 2);
	PositionY = parseInt(HauteurEcran / 2) - parseInt(HauteurPopup / 2);
	
	window.open(UrlPage, "lePopup", "scrollbars=yes,resizable=yes,width="+LargeurPopup+",height="+HauteurPopup+",top="+PositionY+",left="+PositionX);
}

/**
 * Affiche un element avec un effet de Fade et le masque sans effet
 **/
function afficherMasqueOptions() {
	new Effect.toggle('listeOptions', 'blind');
	
	if ( $('listeOptions').getStyle('display') == "block" ) {
		$('btonCriteres').value = 'Plus de critères';
	}
	else {
		$('btonCriteres').value = 'Moins de critères';
	}
} // END function afficherFade 

function afficherMoteurRecherche()
{
	new Effect.toggle('blocFormRecherche', 'blind');
	$("lienAfficherMoteur").remove();
}


/**
 * Affiche un element avec un effet de Fade et le masque sans effet
 **/
function afficherFade(idElement) {
	if ( $(idElement).getStyle('display') == "block" ) {
		$(idElement).hide();
	}
	else {
		new Effect.Appear($(idElement));
	}
} // END function afficherFade 

/**
 * Affiche / masque un element
 *
 * @param string idElement	L'id de l'élément
 **/
function afficherCacher(idElement) {
	if ( $(idElement).getStyle('display') == "block" ) {
		$(idElement).hide();
	}
	else {
		$(idElement).show();
	}
} // END function afficherFade

/**
 * Valider un formulaire et affiche un message d'attente
 *
 * @param string leFormulaire	L'id du formulaire
 * @param string boutonValider	L'id du bouton de soumission, il sera désactivé pour éviter les clics successifs
 * @param string divInfos		L'id du calques servant à afficher un message d'attente
 * @param string messageInfos	Le message
 **/
function validerFormulaire(leFormulaire, boutonValider, messageInfos) {
	if (boutonValider != "" && $(boutonValider) != undefined) {
		$(boutonValider).disabled = "disabled";
	}
	
	var modalBox = new Dialog({
		content:"<p>" + messageInfos + "</p>",
		width:250,
		className:'messageInfos',
		close:{
			link:false,
			overlay:true,
			esc:true
		}
	});
	modalBox.open();
	$(leFormulaire).submit();
	
} // END function validerFormulaire

/**
 * Execute une page via Ajax avec une alerte à la création et durant l'appel
 * Renseigner Formulaire s'il faut traiter un formulaire
 **/
function urlAjax (Url, champRetour, methodeEnvoie, Formulaire) {
	var contenuForm = (Formulaire != undefined && Formulaire != "") ? Form.serialize(Formulaire) : "";
	var requeteAjax	= new Ajax.Updater(	champRetour, Url, {	method: methodeEnvoie,
		 													parameters: contenuForm,
															evalScripts:true,
															onComplete:function () {
																new Effect.Highlight(champRetour, {startcolor:COULEUR_FLASH_AJAX, duration:2});
															}});
} // END function urlAjax

/**
 * Execute une page via Ajax sans alerte à la création un a la fin de l'appel
 * Renseigner Formulaire s'il faut traiter un formulaire
 **/
function urlAjaxInvisible (Url, champRetour, methodeEnvoie, Formulaire) {
	var contenuForm = (Formulaire != undefined && Formulaire != "") ? Form.serialize(Formulaire) : "";
	var requeteAjax	= new Ajax.Updater(	champRetour, Url, {	method: methodeEnvoie, parameters: contenuForm, evalScripts:true});
} // END function urlAjaxInvisible

/**
 * Execute une page via Ajax en affichant un indicateur dans le champ Cible
 * Renseigner Formulaire s'il faut traiter un formulaire
 **/
function AjaxSmallIndicCible (Url, champRetour, methodeEnvoie, Formulaire) {
	
	var contenuForm = (Formulaire != undefined && Formulaire != "") ? Form.serialize(Formulaire) : "";
	
	var requeteAjax	= new Ajax.Updater(	champRetour, Url, {	method: methodeEnvoie,
															parameters: contenuForm, 
															evalScripts:true,
															onCreate: function () {
																$(champRetour).update('<img src="' + SMALL_INDIC + '" alt="" />')
															},
															
															onComplete:function () {
																// new Effect.Highlight(champRetour, {startcolor:COULEUR_FLASH_AJAX, duration:2});
															}});
} // END function urlAjaxSmallIndicCible

/**
 * Execute une page via Ajax en affichant un indicateur après le lien ou le bouton cliqué
 * remplaceLien = true si le lien doit être remplacé par l'indicateur (Ne fonctionne pas sur les boutons)
 * Renseigner Formulaire s'il faut traiter un formulaire
 **/
function urlAjaxSmallIndicLien (Url, champRetour, methodeEnvoie, Lien, Formulaire, remplaceLien) {
	intituleLien = Lien.innerHTML;
	var contenuForm = (Formulaire != undefined && Formulaire != "") ? Form.serialize(Formulaire) : "";
	
	var requeteAjax	= new Ajax.Updater(	champRetour, Url, {	method: methodeEnvoie,
															parameters: contenuForm,  
															evalScripts:true,
															onCreate: function () {
																if (remplaceLien == true) {
																	$(Lien).update('<img src="' + SMALL_INDIC + '" alt="" id="' + champRetour + '_smallIndic"/>');
																}
																else {
																	$(Lien).insert({after: '<img src="' + SMALL_INDIC + '" alt="" id="' + champRetour + '_smallIndic"/>'});
																}
															},
															
															onComplete:function () {
																new Effect.Highlight(champRetour, {startcolor:COULEUR_FLASH_AJAX, duration:2});
																if (remplaceLien == true) {
																	$(Lien).update(intituleLien);
																}
																else {
																	$(champRetour + "_smallIndic").remove();
																}
															},
															on404:function () {
																if (remplaceLien == true) {
																	$(Lien).update(intituleLien);
																}
																else {
																	$(champRetour + "_smallIndic").remove();
																}
															},
															onFailure:function () {
																if (remplaceLien == true) {
																	$(Lien).update(intituleLien);
																}
																else {
																	$(champRetour + "_smallIndic").remove();
																}
															}});
} // END function urlAjaxSmallIndicCible


function ajaxListeForm(Url, listeCible, messageAttente)
{
	var imageSmallIndic = '<img src="' + IMAGES_APP_SRC + '/small_indic.gif" alt="" id="imgAjax_' + listeCible + '" />';
	$(listeCible).insert({after: imageSmallIndic});
	$(listeCible).options.length = 0;
	$(listeCible).options[0] = new Option("Recherche en cours", "");
	new Ajax.Request(Url, {	method: 'get',
							onSuccess: function(transport) {
									chargerListe(listeCible, eval(transport.responseText))
								} 
							});
}

function predireNbResultats(Url, Formulaire)
{
	var contenuForm = Form.serialize(Formulaire);
	new Ajax.Request(Url, {	method: 'post',
							parameters: contenuForm,
							onSuccess: function(transport) {
									if (transport.responseText > 0) {
										$('btonValider').value = transport.responseText + " véhicules";
									} else {
										$('btonValider').value = "Alerte email";
									}
								} 
							});
}

function chargerListe(listeCible, optionsListe) 
{
	nbOptions 	= optionsListe.length;
	avecOptions	= false;
	for ( i=0; i<nbOptions; i++ ) {
		avecOptions = true;
		$(listeCible).options[i] = new Option(optionsListe[i].intitule, optionsListe[i].valeur);
	}
	
	if ( avecOptions == false ) {
		$(listeCible).options[0] = new Option("Indifférent", "");
	}
		
	if ( $('imgAjax_' + listeCible) != null ) {
		$('imgAjax_' + listeCible).remove();
	}
}

function razListe(listeCible, messageListe)
{
	$(listeCible).options.length = 0;
	$(listeCible).options[0] = new Option(messageListe, "");
	$('btonValider').value = "Recherche";
}

function replaceAll(str, search, repl) 
{  
  while (str.indexOf(search) != -1)  
    str = str.replace(search, repl);  
  return str;  
} 

function urlRewriting(Chaine) 
{
	Chaine = Chaine.replace(/[\s"']+/ig, "-");
	var Accents	= new Array("À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","È","É","Ê","Ë","è","é","ê","ë","Ç","ç","Ì","Í","Î","Ï","ì","í","î","ï","Ù","Ú","Û","Ü","ù","ú","û","ü","ÿ","Ñ","ñ"," ","!","?",",");  
	var Lettres	= new Array("A","A","A","A","A","A","a","a","a","a","a","a","O","O","O","O","O","O","o","o","o","o","o","o","E","E","E","E","e","e","e","e","C","c","I","I","I","I","i","i","i","i","U","U","U","U","u","u","u","u","y","N","n","-","-","-","-");  
	for (var i = 0; i < Lettres.length; i++) {
		Chaine = replaceAll(Chaine, Accents[i], Lettres[i]); 
	}
	Chaine = Chaine.replace(/[^-a-z0-9_.]/ig, "");
	Chaine = Chaine.replace(/(-{2,})/ig, "-");
	return Chaine.toLowerCase();
}

function ajouterFavoris(uid) 
{
	AjaxSmallIndicCible (PUBLIC_SRC + "/vehicule/index/favoris/action-fav/ajouter/uid/" + uid, "blocFavoris", "get");
	if ( $("lienFavoris" + uid) != undefined) {
		$("lienFavoris" + uid).onclick = function () { supprimerFavoris(uid); return false;};
		$("lienFavoris" + uid).update('Supprimer de mes favoris');
	} else {
		$("lienFavoris").onclick = function () { supprimerFavoris(uid); return false;};
		$("lienFavoris").update('<img src="' + IMAGES_APP_DESIGN_SRC + '/heart_empty.png" alt="" align="absmiddle" /> Supprimer de mes favoris');
	}
}

function supprimerFavoris(uid) 
{
	AjaxSmallIndicCible (PUBLIC_SRC + "/vehicule/index/favoris/action-fav/supprimer/uid/" + uid, "blocFavoris", "get");
	
	
	if ( $("lienFavoris" + uid) != undefined) {
		$("lienFavoris" + uid).onclick = function () { ajouterFavoris(uid); return false;};
		$("lienFavoris" + uid).update('Ajouter à mes favoris');
	} else {
		$("lienFavoris").onclick = function () { ajouterFavoris(uid); return false;};
		$("lienFavoris").update('<img src="' + IMAGES_APP_DESIGN_SRC + '/heart.png" alt="" align="absmiddle" /> Ajouter à mes favoris');
	}
}

function actionsFavoris() 
{
	var elementsCoches = false;
	$("formFavoris").getInputs('checkbox', 'favBox').each( function (Element) {
		if ( Element.checked == true ) {
			elementsCoches = true;
		}
	});
}

function supprimerFavorisCheckBox() 
{
	var elementsCoches 	= false;
	var paramUrl		= "";
	$("formFavoris").getInputs('checkbox', 'favBox').each( function (Element) {
		if ( Element.checked == true ) {
			elementsCoches = true;
			paramUrl += $(Element).value + ",";
		}
	});
	
	if ( paramUrl != "" ) {
		AjaxSmallIndicCible (PUBLIC_SRC + "/vehicule/index/favoris/action-fav/supprimer/uid/" + paramUrl, "blocFavoris", "get");
	} else {
		alert("Veuillez cocher les véhicules à supprimer de vos favoris");
	}
}

function comparerFavoris() {
	var elementsCoches 	= false;
	var paramUrl		= "";
	var cptVehicules	= 0;
	$("formFavoris").getInputs('checkbox', 'favBox').each( function (Element) {
		if ( Element.checked == true ) {
			elementsCoches = true;
			paramUrl += $(Element).value + ",";
			cptVehicules ++;
		}
	});
	
	if ( cptVehicules < 2 || cptVehicules > 5 ) {
		alert("Veuillez sélectionner entre 2 et 5 véhicules à comparer");
	}
	else {
		window.location = PUBLIC_SRC + "/comparer-des-vehicules/" + paramUrl;
	}
}

function essayerFavoris () {
	var elementsCoches 	= false;
	var paramUrl		= "";
	var cptVehicules	= 0;
	$("formFavoris").getInputs('checkbox', 'favBox').each( function (Element) {
		if ( Element.checked == true ) {
			elementsCoches = true;
			paramUrl += $(Element).value + ",";
			cptVehicules ++;
		}
	});
	
	if ( cptVehicules < 1 ) {
		alert("Veuillez sélectionner au moins un véhicule à essayer");
	}
	else {
		window.location = PUBLIC_SRC + "/contacter-vendeur/essayer-favoris/" + paramUrl;
	}
}

function print_r( array, return_val ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Michael White (http://getsprink.com)
    // +   improved by: Ben Bryan
    // +      input by: Brett Zamir
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: print_r(1, true);
    // *     returns 1: 1
    
    var output = "", pad_char = " ", pad_val = 4;
 
    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        if (cur_depth > 0) {
            cur_depth++;
        }
 
        var base_pad = repeat_char(pad_val*cur_depth, pad_char);
        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";
 
        if (obj instanceof Array || obj instanceof Object) {
            str += "Array\n" + base_pad + "(\n";
            for (var key in obj) {
                if (obj[key] instanceof Array) {
                    str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
                } else {
                    str += thick_pad + "["+key+"] => " + obj[key] + "\n";
                }
            }
            str += base_pad + ")\n";
        } else if(obj == null || obj == undefined) {
            str = '';
        } else {
            str = obj.toString();
        }
 
        return str;
    };
 
    var repeat_char = function (len, pad_char) {
        var str = "";
        for(var i=0; i < len; i++) { 
            str += pad_char; 
        }
        return str;
    };
    output = formatArray(array, 0, pad_val, pad_char);
 
    if (return_val !== true) {
        document.write("<pre>" + output + "</pre>");
        return true;
    } else {
        return output;
    }
}

function log(variableLog)
{
	if ( Prototype.Browser.Gecko ) {
		if ( console && console.firebug ) {
			console.log(variableLog);
		}
	} else if ( Prototype.Browser.WebKit ) {
		if ( window.console ) {
			window.console.log(variableLog);
		}
	}
}

function afficherPopupMarque() 
{
	if ( $("popupMarque").getStyle('display') == "block" ) {
		$("popupMarque").hide();
	}
	else {
		new Effect.Appear($("popupMarque"), {duration: 0.5});
	}
	
	//afficherCacher("popupMarque");
}

function choisirMarquePopup() 
{
	$("popupMarque").hide();
}
function messageErreurFlottant(messageErreur) {
	$("attendreLoading").update(messageErreur + '<br /><a href="#" onclick="fermerMessageFlottant(); return false;">OK</a>');
	$("attendreLoading").show();
}

function fermerMessageFlottant () {
	$("attendreLoading").hide();
}
