var getElementsByClassName = function (classname, node) {
	if (node.className == classname)
		return node;
	var list = node.childNodes;
	if (list == null || list.length == 0)
		return false;
	for (var i = 0; i < list.length; i++){
		var elt = getElementsByClassName(classname, list[i]);
		if (elt)
			return elt;
	}
	return false;
};

var locationRetour = function () {
	return "colonne2";
};

var sansClic = function (str) {
	if (str.indexOf("<CLICK/>") < 0)
		return;
	
	var motClef = "onclick=\"";
	
	str = str.substring(str.indexOf(motClef) + motClef.length);
	str = str.substring(0, str.indexOf("\"/>"));
	eval(str);
};

var biensDemander = function (nameForm) {
	$.getJSON('/php/forwardPage.php?forward=chercheBienLesPlusDemandee',
			function(data) {
				$.each(data, function(clef,valeur){
		    		majAttrHTML(clef,valeur);
				});
			});
};

var rechercheTousLesBiensAgce = function () {
	$.getJSON('/php/forwardPage.php?forward=chercheTousLesBiensAgce',
			function(data) {
				$.each(data, function(clef,valeur){
		    		majAttrHTML(clef,valeur);
				});
			});
};

/** PARTIE POUR GOGOLE */
var majCodePostalLoc = function (loc, cp, nomVille, latitude, longitude) {
	document.getElementById("code_postal_loc").value = loc;
	document.getElementById("codePostal").value = cp;
	document.getElementById("nomVille").value = nomVille;
	document.getElementById("latitude").value = latitude;
	document.getElementById("longitude").value = longitude;
	rechercheBien();
};

var majLoc = function (loc) {
	document.getElementById("code_postal_loc").value = loc;
};

// Récupération du code postal
var retourZipCode = function (results, status) {
	var nomVille = null;
	var cp = null;
	if (status == google.maps.GeocoderStatus.OK) {
        var nb = results.length;
		if (nb > 0) {
			var latitude = results[0].geometry.location.lat();
			var longitude = results[0].geometry.location.lng();
			var component = results[0].address_components;
			for (var i = 0; i < component.length; i++) {
				var compType = component[i].types + "";
				// On récupère chaque zone de l'adresse
				// Le nom de la ville
				if (compType.indexOf('locality')!=-1) {
					try {
						nomVille=component[i].long_name;
					}
					catch(ee) {
						nomVille='';
					}
				}	
				// Le code postal
				if (compType.indexOf('postal_code')!=-1) {
					try {
						cp=component[i].long_name;
					}
					catch(ee) {
						cp='';
					}
				}
			}
			// Repositionnement des bonnes valeurs
			majCodePostalLoc(results[2].formatted_address, cp, nomVille, latitude, longitude);
			// alert("cp : " +cp + " | ville : " + nomVille + " lat = " +latitude + " long = " + longitude);
		} else {
            alert("Pas mieux..");
        }
    } else {
        alert("Problème géo-localisation en raison de : " + status);
    }	
};


var rechercheBien = function () {
	var params = "";
	$.each(document.getElementById("recherche") , function (clef, objet) {
		if (objet.id == "" || objet.id.indexOf("Display") != -1)
			return;
		
		if (objet.type == "checkbox"){
			if (objet.checked)
				params += "&" + objet.id + "=" + objet.checked;
		}
		else if (objet.type == "radio") {
			if (objet.checked)
				params += "&" + objet.id + "=" + objet.id;
		}
		else
			params += "&" + objet.id + "=" + escape(objet.value);
	});

	$.getJSON(
	    "/php/forwardPage.php?forward=chercheBien" + params,
	    function(data) {
	    	$.each(data, function(clef,valeur){
	    		majAttrHTML(clef,valeur);
			});
	    }
	);
};

//var geocoder;

var retourGeocode = function (results, status) {
	if (status == google.maps.GeocoderStatus.OK) {
		var str = null;
		var localiteFormater = null;
		var cp = null;
		var nomVille = null;
		var latitude = null;
		var longitude = null;
		
		// Filtrage uniquement sur les villes de france
		var resultsFr = new Array();
		var textFieldLoc = document.getElementById("code_postal_loc").value;
		for (var i = 0; i < results.length; i++) {
			var adresse = results[i].formatted_address;
			// Si l'address match directement celle qui est le textfield, on ne considère que ça.
			if (adresse == textFieldLoc){
				resultsFr = new Array();
				resultsFr.push(results[i]);
				break;
			}
			if (adresse.indexOf("France") != -1)
				resultsFr.push(results[i]);
		}
		
		// Aucuns résultat
		if (resultsFr.length == 0) {
			localiteFormater = document.getElementById("code_postal_loc").value;
			var re = new RegExp("[0-9]+");
			var m = re.exec(localiteFormater);
			if (m != null){
				cp = m[0];
				nomVille = localiteFormater.replace(re, "");
				nomVille = nomVille.replace(new RegExp("\\s"), "");
			}
		}
		// Une et une seule possibilité
		else if (resultsFr.length == 1) {
			localiteFormater = resultsFr[0].formatted_address;
			tabLoc = localiteFormater.replace(", France", "").split(" ");
			cp = tabLoc[0];
			nomVille = tabLoc[1];
			latitude = resultsFr[0].geometry.location.lat();
			longitude = resultsFr[0].geometry.location.lng();
			// Mais on a pas le code postal.... On refait un tour avec latlng et non plus adresse
			//geocoder = new google.maps.Geocoder();
			var latlng = new google.maps.LatLng(latitude,longitude);
			geocoder.geocode({'latLng': latlng}, retourZipCode);

			
		}
		// Positionement de plusieurs choix
		else {
			str = "Vouliez vous dire ? </br>";
			str += "<ul>";
			for (var i = 0; i < resultsFr.length; i++) {
				localiteFormater = resultsFr[i].formatted_address;
				tabLoc = localiteFormater.replace(", France", "").split(" ");
				cp = tabLoc[0];
				nomVille = tabLoc[1];
				latitude = resultsFr[i].geometry.location.lat();
				longitude = resultsFr[i].geometry.location.lng();
				str += "<li onclick='majCodePostalLoc(\"" + localiteFormater + "\", \"" + cp + "\", \"" + nomVille + "\", " + latitude + ", " + longitude + ")'>" + localiteFormater + "</li>";
			}
			str += "</ul>";
			
		}
		if (str != null) {
			document.getElementById("recherche_bien").innerHTML = str;
			return;
		}

		// Reprise de la localisation initiale
		// majLoc(localiteFormater); 
	} else {
		document.getElementById(locationRetour()).innerHTML = "<label class='rouge'>Localité inconnue.</label>";
	}
};

function rechercheAdresse() {
	var adresse = document.getElementById("code_postal_loc").value;
	
	var isAgent = document.getElementById("agce_id_agce") != null && document.getElementById("agce_id_agce").value != "";
	
	// Ici, on triche un peu...
	adresse = jQuery.trim(adresse);
	if (adresse == ""){
		if (isAgent)
			adresse = document.getElementById("rech_defaut") == null ? "France" : document.getElementById("rech_defaut").value;
		else
			adresse = "France";
	}
	
	if (adresse.toUpperCase().indexOf("FRANCE") < 0)
		adresse += ", France";
	
	// Le cas du bogue d'orange
	if (adresse.toUpperCase().indexOf("ORANGE") != -1 || adresse.toUpperCase().indexOf("84100") != -1)
		adresse = "84100 orange, france";
	// Juste un numŽro de département, il faut ajouter 000 ˆ la fin (ex: 06000)
	else if (!isNaN(new Number(adresse)) && adresse.length == 2)
		adresse += "000";
	// Si le code postal est sŽparŽ par un espace
	else {
		var tab = adresse.split(" ");
		adresse = "";
		for (var i = 0; i < tab.length; i++){
			var strCur = tab[i];
			// Chaine Vide, on ne fait rien
			if (strCur == null || strCur == "")
				continue;
			// Ce n'est pas un nombre, recopiage avec un espace
			if (isNaN(new Number(strCur)))
				adresse += " " + strCur;
			// C'est un nombre, recopiage sans espace 
			else
				adresse += strCur;
		}
	}
	
	// Si c'est juste un code postal, on complète avec ", France" pour maximiser les chances de gogole
	if (!isNaN(new Number(adresse)))
		adresse += ", France";

    geocoder.geocode( { 'address': adresse}, retourGeocode);
}
	
/** FIN PARTIE GOGOLE */

var lanceRecherche = function(event, formulaire) {
	if (event != null && event.keyCode != 13){
		return;
	}
	
	// Si on fait une recherche par référence, on ne vérifie rien auprès de gogole.
	var ref = document.getElementById("reference");
	
	// On vérifie que l'adresse existe auprès de gogole.
	if (ref == null || ref.value == ""){
		rechercheAdresse();
		return;
	}
	rechercheBien();
};

var lanceRechercheAgences = function (nameForm, event) {
	var isRechByDept = nameForm == "rechercheAgence";
	var isRechByName = nameForm == "rechercheAgenceByName";

	// Recherche par nom
	if (isRechByName) {
		// Repositionnement de la combo sur rien
		document.getElementById('departement').value = "";
	}
	
	// Recherche avec la combo
	if (isRechByDept) {
		// Repositionnement de la recherche par nom à vide 
		document.getElementById('nomAgence').value = "";
	}
	
	// Recherche avec la combo ou alors, recherche par nom et l'événement déclencheur et la touche entrée, dans ce cas on lance l'appel AJAX
	if ((isRechByName && event != null && event.keyCode == 13) || isRechByDept) {
		// Ici est repositionné le div dans lequel le résultat de la recherche sera affiché.
		var memLocationRetour = locationRetour;
		locationRetour = function (){
			locationRetour = memLocationRetour;
			return "zoneRecherche";
		};
		// La recherche agent
		$.get("/php/List.php?formName=" + nameForm + "&departement=" + document.getElementById('departement').value + "&nomAgence=" + document.getElementById('nomAgence').value,
				{},
				function (data) {
					document.getElementById(locationRetour()).innerHTML = data;
				}
			);
	}
	
	var isComboVide = document.getElementById('departement').value == "";
	// Si la combo est vide et que la recherche est avec la combo, réaffichage de la carte 
	if (isRechByDept && isComboVide) {
		openCarteAgent();
	}
};

var openCarteAgent = function () {
	openCarteFrance(document.forms['rechercheAgence'].name, "departement", "zoneRecherche");
	var memExecAfterClicOnCarte = execAfterClicOnCarte;
	execAfterClicOnCarte = function () {
		execAfterClicOnCarte = memExecAfterClicOnCarte;
		lanceRechercheAgences(document.forms['rechercheAgence'].name);
	};
};

var copieVal = function (idObjSrc, idObDest){
	var src = document.getElementById(idObjSrc);
	var dest = document.getElementById(idObDest);
	if (src == null || dest == null)
		return false;
	dest.value = src.value;
	return true;
};

var RAZselect = function(tabIdObj){
	if (tabIdObj == null || tabIdObj.length == 0)
		return false;
	for (var i = 0; i < tabIdObj.length; i++){
		document.getElementById(tabIdObj[i]).value = "";
	}
	return true;
};

var clickAllSubLevel = function (item) {
	var checked = item.checked;
	item = item.parentNode.getElementsByTagName('span')[0];
	var listSubItems = item.childNodes;
	for (var subItem in listSubItems)
		listSubItems[subItem].checked= checked ? "checked" : "";
};

var checkTopLevel = function (item) {
	var listItem = item.parentNode.getElementsByTagName('input');
	var allUnchecked = true;
	
	for (var i = 0; i < listItem.length; i++)
		allUnchecked &= !listItem[i].checked;
	
	var itemTop = item.parentNode.parentNode.getElementsByTagName('input')[0];
	if (itemTop.checked && allUnchecked)
		itemTop.checked = "";
	else if (!itemTop.checked && !allUnchecked){
		itemTop.checked = "checked";
	}
};

/**
 * Pour ouvrir la carte de france
 * */
var openCarteFrance = function (formName, idInput, divRetour) {
	if (idInput == null || (input = document.getElementById(idInput)) == null){
		alert("erreur technique : l'input de retour (" + idInput + ") n'est pas défini.");
		return;
	}
	input.value = "";
	
	if (divRetour != null){
		var memLocationRetour = locationRetour;
		locationRetour = function (){
			locationRetour = memLocationRetour;
			return divRetour;
		};
	}
	
	$.get('France-departements.php', {}, 
			function(data) {
				document.getElementById(locationRetour()).innerHTML = data;
			});
};

/**
 * L'input où il faudra afficher la recherche.
 * */
var input;

/**
 * Lors d'unclick sur la carte
 * */
var addDept = function (title, idInput) {
	
	videReference();
	
	var tab = title.split(" ");
	if (tab.length <= 0)
		return;
	var info = tab[tab.length - 1];
	input.value += (input.value == "" ? "" : " ") + info;
	execAfterClicOnCarte();
};
/**
 * Cette fonction pour éventuellement lancer une action après un clic sur la carte
 * */
var execAfterClicOnCarte = function () {
	
};

/**
 * FLECHE de Defilement dans le DETAIL des BIENS
 * */
var defileGauche = function () {
	defile(true);
};

var defileDroite = function () {
	defile(false);
};

var defile = function (versLaGauche) {
	var num = parseInt(document.getElementById('compteur').value);
	if (versLaGauche)
		num -= 1;
	else
		num += 1;
	var petite = document.getElementById('Photo' + num);
	if (petite != null)
		selectionnePhoto(num);
};

var selectionnePhoto = function (numPhoto) {
	var numPrec = document.getElementById('compteur').value;
	var petitePrec = document.getElementById('Photo' + numPrec);
	if (petitePrec != null){
		petitePrec.className = "photo_inactif";
	}
	var petite = document.getElementById('Photo' + numPhoto);
	document.getElementById('photo_du_bien').src = petite.src;
	petite.className = "photo_actif";
	document.getElementById('compteur').value = numPhoto;
	
};

/**
 * Le TITRE de la page
 */
var majTitre = function (titre) {
	document.getElementById('titre_titre').innerHTML = titre;
};

/**
 * AJOUTER aux FAVORIS 
 */
function addFavoris(nomSite) {
	var urlPage = window.location;
	if ( navigator.appName != 'Microsoft Internet Explorer' ) { 
		window.sidebar.addPanel(nomSite,urlPage,""); 
	}
	else { 
		window.external.AddFavorite(urlPage,nomSite);
	} 
};

/**
 * MODIFE la valeur du SLIDER budget si Vente/Loc 
 */
var modifValMax = function (obj) {
	var prixMax = (5000 + 100);
	var pas = 100;
	if (obj.id == "VENTE"){
		prixMax = (1000000 + 20000);
		pas = 20000;
	}
	changeVal('budgetMax', prixMax, pas);
};

/**
 * GESTION EVTS sur case à cocher des TYPES de BIEN
 */
var showHideTerrSurf = function (showSurf) {
	var surf = document.getElementById('rech_surface');
	var terr = document.getElementById('rech_terrain');
	var isSurf = document.getElementById('isSurf');

	surf.style.display = showSurf ? "" : "none";
	terr.style.display = showSurf ? "none" : "";
	isSurf.value = showSurf ? "true" : "false";
};

var uncheckTerr = function () {
	document.getElementById('terrain').checked = false;
	showHideTerrSurf(true);
};

var uncheckAllType = function (terrain) {
	if (!terrain.checked){
		showHideTerrSurf(true);
		return;
	}

	var tabTypes = ["pavillon", "maison", "appartement", "commerce", "loft", "divers"];
	for (var i = 0; i < tabTypes.length; i++)
		document.getElementById(tabTypes[i]).checked = false;
	showHideTerrSurf(false);
};

var initialiseTypes = function () {
	var showSurf = true;
	var terrain = document.getElementById('terrain');
	if (terrain.checked){
		showSurf = false;
	}
	showHideTerrSurf(showSurf);
};

var videReference = function () {
	var ref = document.getElementById("reference");
	if (ref == null)
		return;
	
	ref.value = "";
};

var openValideURL = function (file) {
	window.location = file;
};

/**
 * ENVOIE de MAILS
 */
var showFormEnvoie = function () {
	document.getElementById('page_location').value = window.location;
	document.forms['envoieMail'].submit();
};

var showFormInfos = function () {
	document.getElementById('page_location_dmde').value = window.location;
	document.forms['demandeInfos'].submit();
};

var imprime = function () {
	var photo = document.getElementById('Photo1');
	var ref = document.getElementById("reference");
	var idAgce = document.getElementById('agce_id_agce');
	
	var param = "";
	
	if (photo != null)
		param += "IMG_URL=" + photo.src;
	
	if (ref != null) {
		if (param.length != 0)
			param += "&";
		param += "ANNONCE=" + ref.value;
	}
	
	if (ref != null) {
		if (param.length != 0)
			param += "&";
		param += "AGCE=" + idAgce.value;
	}
	
	window.open("http://ns202825.ovh.net:8080/Emd/jsp/prtAnnonce.jsp?" + param);
};

var openRSS = function () {
	window.open("http://www.capital.fr/rss2/feed/fil-immobilier.xml");
};

var infoBulleDpe = function(valDpe) {
	return overlib(
			"<table class=\'centerTT\'>" +
			"	<tr>" +
			"		<td>Consommations énergétiques</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>(en énergie primaire)</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>pour le chauffage, la production d'eau chaude</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>sanitaire et le refroidissement</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>" + valDpe + "</td>" +
			"	</tr></table> - <img src='/images/maquette/picto/dpe_enr.png'/>", HAUTO, VAUTO, BGCOLOR, "grey", FGCOLOR, "white");
};

var infoBulleGes = function (valGes) {
	return overlib(
			"<table class='centerTT'>" +
			"	<tr>" +
			"		<td>Emissions de gaz à effet de serre</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>pour le chauffage, la production d'eau chaude</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>sanitaire et le refroidissement</td>" +
			"	</tr>" +
			"	<tr>" +
			"		<td>" + valGes + "</td>" +
			"	</tr>" +
			"</table> - <img src='/images/maquette/picto/dpe_ges.png'/>", HAUTO, VAUTO, BGCOLOR, "grey", FGCOLOR, "white");
};

var majAttrHTML = function (nom, valeur) {
	if (nom == null || nom == "")
		return;

	var listElt = document.getElementsByName(nom);
	if(listElt == null || listElt.length == 0)
		listElt = [document.getElementById(nom)];

	for (var j = 0; j < listElt.length; j++){
		var obj = listElt[j];
		if (obj == null)
			continue;
		
		if (obj.type == 'checkbox')
			obj.checked = true;
		else if (obj.type == 'radio')
			obj.checked = (obj.value == valeur.toString());
		else if (obj.tagName == 'IMG')
			obj.src = valeur;
		else if (obj.tagName == 'SPAN' || obj.tagName == 'DIV') {
			obj.innerHTML = valeur;
		}
		else if (obj.tagName == 'A'){
			obj.href="mailto:" + valeur;
			obj.innerHTML = valeur;
		}
		else if (obj.tagName == 'TABLE'){
			obj.title = valeur;
		}
		else
			obj.value = valeur;
	}
};

var miniRecherche = function(title, idBienSelected, isRechRecent, isRechAllAgent, isRechPlusDmde, triPrix) {
	var flecheHaut = document.getElementById('prix_flech_haut');
	var flecheBas  = document.getElementById('prix_flech_bas');
	
	if (flecheHaut != null && flecheBas != null) {
		if (triPrix == 'DESC'){
			flecheHaut.className = "fleche_rouge_petite_h";
			flecheBas.className  = "fleche_grise_petite_b";
		} else {
			flecheHaut.className = "fleche_grise_petite_h";
			flecheBas.className  = "fleche_rouge_petite_b";
		}
	}
	
	var params = '&bien_id_bien_selected=' + idBienSelected
		+ '&is_rech_bien_recent=' + isRechRecent 
		+ '&is_rech_plus_demandee=' + isRechAllAgent
		+ '&is_rech_all_agent=' + isRechPlusDmde
		+ '&tri_prix=' + triPrix;
	$.getJSON(
	    "/php/forwardPage.php?forward=chargeBien" + params,
	    function(data) {
	    	$.each(data, function(clef,valeur){
	    		majAttrHTML(clef,valeur);
			});
	    	majTitre(title);	    	
	    	inclusAgentCSS();
			document.getElementById("haut_de_page").style.top = "1300px";
	    }
	);
}
