// JavaScript Document
var geocoder;
var map;
var marker_perso;
var icon_personnage;
var array_images;
var markers;
var infowindows;
var id_max=0;
var perso_titre;
var perso_texte;

function redim_div()
{
	agrandir = document.getElementById('agrandir_texte').value;
	reduire = document.getElementById('reduire_texte').value;
	
	if(document.getElementById("boutons_serv").offsetHeight < 250)
	{
		document.getElementById("boutons_serv").style.height = "auto";
		document.getElementById('bouton_agrandir').innerHTML = reduire;
	}
	else
	{
		document.getElementById("boutons_serv").style.height = "190px";
		document.getElementById('bouton_agrandir').innerHTML = agrandir;
	}
}

function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer")
	{
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		ro = new XMLHttpRequest();
	}
	return ro;
}

var http = createRequestObject();

function initialize()
{
	geocoder = new google.maps.Geocoder();
		
	var latlng = new google.maps.LatLng(48.62,2.35);
	var myOptions = {
	  zoom: 12,
	  center: latlng,
	  mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	
	map = new google.maps.Map(document.getElementById("carte_services"), myOptions);
	
	array_images = new Array();
	infowindows = new Array();
	markers = new Array();
	
	// Icone du personnage
	icon_personnage = new google.maps.MarkerImage('/front/base/images/icones_services/user1.png',
		  new google.maps.Size(32, 32),
		  new google.maps.Point(0,0),
		  new google.maps.Point(0, 16));
}

function add_image(id, $nom)
{
	array_images[id] = new google.maps.MarkerImage('/front/base/images/icones_services/'+$nom,
		  new google.maps.Size(32, 32),
		  new google.maps.Point(0,0),
		  new google.maps.Point(0, 16));
}

function add_marker(adresse, id_image, titre, texte, id, lat, lng)
{
	createMarker('',array_images[id_image], titre, texte, id, lat, lng);
}

function createMarker(point, image, titre, texte, id,lat,lng) {
	
  // Set up our GMarkerOptions object
  if(point != "")
  {
  var marker = new google.maps.Marker({
		position: point,
		map: map,
		icon: image,
		title: titre,
		zIndex: 1
	});
  }
  else
  {
	var location = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
	
	var marker = new google.maps.Marker({
		position: location, 
		map: map,
		icon: image,
		title: titre,
		zIndex: 1
	});
  }

	var contentString = texte;
	
	var infowindow = new google.maps.InfoWindow({
		content: contentString
	});

	google.maps.event.addListener(marker, 'click', function()
	{
		infowindow.open(map,marker);
	});
	
	markers[id] = marker;
	infowindows[id] = infowindow;
	return marker;
}

function change_position()
{
	if (geocoder)
	{
		geocoder.geocode( { 'address': document.getElementById('mon_adresse').value}, function(results, status)
	{
		if (status == google.maps.GeocoderStatus.OK)
		{
			map.setCenter(results[0].geometry.location);
			
			if (marker_perso == undefined)
			{
				perso_titre = document.getElementById('moi_texte').value;
				perso_texte = "<img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/user1.png\" height=\"16px\" width=\"16px\" /><strong>"+document.getElementById('position_actuelle_texte').value+"</strong><br />"+ document.getElementById('mon_adresse').value;
				
				marker_perso = 	createMarker(results[0].geometry.location, icon_personnage, perso_titre, perso_texte, 0,'','');
			} else {
				perso_titre = document.getElementById('moi_texte').value;
				marker_perso.setOptions({	position: results[0].geometry.location,
											map: map,
											icon: icon_personnage,
											title: perso_titre,
											zIndex: 1
										})
				markers[0] = marker_perso;
				
				//on met les nouvelles valeurs dans l'infowindow
				infowindows[0].setContent("<img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/user1.png\" height=\"16px\" width=\"16px\" /><strong>"+document.getElementById('position_actuelle_texte').value+"</strong><br />"+ document.getElementById('mon_adresse').value);
				
			}
		}
	  });
	}
}

function display_research(id_type)
{
	if(id_type>=id_max)
	{
		id_max=id_type;
	}
	
	//on vide la liste de sélection
	document.getElementById('selection_liste').innerHTML="";
	
	//on garde uniquement la position actuelle
	for (var i = 0; i < markers.length; i++)
	{
		if(markers[i] != undefined)
		{
			if(markers[i].getTitle() != perso_titre)
			{
				markers[i].setMap(null);
			}
		}
	}
	
	//on ferme les infowindows de tous les markers
	close_all_infowindows();
	
	//on supprime tous les markers
	remove_all_marker();
	
	//on verifie les checkboxs cochées
	is_checked();
}

//parcours des checkboxs cochées
function is_checked()
{
	var id="";
	for (var i=1 ; i<=id_max ; i++)
	{	
		if(document.getElementById('chk_'+i)!=null)
		{
			if(document.getElementById('chk_'+i).checked)
			{
				id+=i+",";
			}
		}
	}
	nouvel_id = id.substring(0, id.length-1);
	http.open('GET', "index.php?page=services&action=get_markers_multiple&id_type="+nouvel_id);
	create_search_marker();
}

function create_search_marker()
{
	//on detecte un changement de catégorie d'adresse
	var type_adresse="";
	http.onreadystatechange = function(){
		if (http.readyState == 4)
		{
			var response = http.responseText;

			var adresses = response.split("|");
			for (var i=0 ; i<=adresses.length ; i++)
			{
				if (adresses[i]	!= "" && adresses[i] != undefined)
				{
					ad = adresses[i].split("#");
					id = ad[0];
					nom = ad[1];
					quartier = ad[3];
					code = (75000+parseInt(quartier));
					adresse = ad[2]+" "+code+" PARIS";
					adresse2 = ad[2];
					extension_adresse = " PARIS ";
					if(parseInt(quartier)!=0)
					{
						if(parseInt(quartier)==1)
						{
							extension_adresse += quartier+" er";
						}else{
							extension_adresse += quartier+" e";
						}
						adresse2 += extension_adresse;
					}
					tel = ad[4];
					id_type = ad[7];
					description = ad[10];
					horaires = "<strong class=\"black\">"+document.getElementById('horaires_texte').value+":</strong><br />"+ad[11];
					texte = "<div class=\"marker_texte\"><strong>"+nom+"</strong><br />"+adresse2+"<br /><strong class=\"black\">Tel: </strong>"+tel+"<br /><br />"+horaires+"<br />"+description+"</div>";
					
					recherche = nom+" "+" "+quartier+" "+code+" "+adresse+" "+tel+" "+description+" "+horaires;
					recherche = recherche.toUpperCase();

					if(trim(document.getElementById('ma_recherche').value) != ""){
						if(recherche.match((htmlentities(document.getElementById('ma_recherche').value).toUpperCase()))){
							add_marker(adresse, id_type, nom, "<div class=\"marker_texte\"><img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/"+ad[13]+"\" height=\"16px\" width=\"16px\" /><strong>"+nom+"</strong><br />"+adresse2+"<br /><strong class=\"black\">Tel: </strong>"+tel+"<br /><br />"+horaires+"<br />"+description+"</div>",id,ad[15],ad[16]);
							if(type_adresse != ad[14])
							{
								type_adresse = ad[14];
								document.getElementById('selection_liste').innerHTML+="<br /><br /><label><img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/"+ad[13]+"\" height=\"16px\" width=\"16px\" />"+ad[14]+"</label><br /><a href=\"javascript:get_marker_clicked("+id+")\">"+nom+"</a>";
							}else
							{
								document.getElementById('selection_liste').innerHTML+="<br /><a href=\"javascript:get_marker_clicked("+id+")\">"+nom+"</a>";
							}
						}
					}else{
						add_marker(adresse, id_type, nom, "<div class=\"marker_texte\"><img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/"+ad[13]+"\" height=\"16px\" width=\"16px\" /><strong>"+nom+"</strong><br />"+adresse2+"<br /><strong class=\"black\">Tel: </strong>"+tel+"<br /><br />"+horaires+"<br />"+description+"</div>", id,ad[15],ad[16]);
						if(type_adresse != ad[14])
						{
							type_adresse = ad[14];
							document.getElementById('selection_liste').innerHTML+="<br /><br /><label><img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/"+ad[13]+"\" height=\"16px\" width=\"16px\" />"+ad[14]+"</label><br /><a href=\"javascript:get_marker_clicked("+id+")\">"+nom+"</a>";
						}else
						{
							document.getElementById('selection_liste').innerHTML+="<br /><a href=\"javascript:get_marker_clicked("+id+")\">"+nom+"</a>";
						}
					}
				}
			}
		}
	};
	http.send(null);
}

function trim(myString)
{
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
}

function get_marker_clicked(id)
{
	//on ferme toutes les infowindows
	close_all_infowindows();
	//on ferme l'infowindow de ma position
	infowindows[0].close();
	//on ouvre la bonne
	if(id==0)
	{
		infowindows[0].setContent("<img style=\"vertical-align: middle;\" src=\"front/base/images/icones_services/user1.png\" height=\"16px\" width=\"16px\" /><strong>"+document.getElementById('position_actuelle_texte').value+"</strong><br />"+ document.getElementById('mon_adresse').value);
	}
	infowindows[id].open(map,markers[id]);
}

function close_all_infowindows()
{
	//on ferme toutes les infowindows
	for(var i=0; i < infowindows.length; i++)
	{
		if(infowindows[i] != undefined)
		{
			infowindows[i].close();
		}
	}
}

function remove_all_marker()
{
	for (var i=1; i < markers.length; i++)
	{
		if(markers[i]!=undefined)
		{
			remove_marker(markers[i].getTitle());
		}
	}
}

function remove_marker(titre)
{
	if (geocoder) {
	  geocoder.geocode( { 'address': adresse}, function(results, status)
	 {
		if (status == google.maps.GeocoderStatus.OK)
		{
			var point = results[0].geometry.location;
			for (var i = 0; i < markers.length; i++)
			{
				if(markers[i]!=undefined)
				{
					if(markers[i].getTitle()==titre)
					{
						markers[i].setMap(null);
					}
				}
			}
		}
	  });
	}
}

//Encode une chaîne
function htmlentities (string, quote_style)
{
	var hash_map = {}, symbol = '', tmp_str = '', entity = '';
	tmp_str = string.toString();
	
	if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
		return false;
	}
	hash_map["'"] = '&#039;';
	for (symbol in hash_map) {
		entity = hash_map[symbol];
		tmp_str = tmp_str.split(symbol).join(entity);
	}
	
	return tmp_str;
}

function get_html_translation_table (table, quote_style)
{		
	var entities = {}, hash_map = {}, decimal = 0, symbol = '';
	var constMappingTable = {}, constMappingQuoteStyle = {};
	var useTable = {}, useQuoteStyle = {};
	
	// Translate arguments
	constMappingTable[0]      = 'HTML_SPECIALCHARS';
	constMappingTable[1]      = 'HTML_ENTITIES';
	constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
	constMappingQuoteStyle[2] = 'ENT_COMPAT';
	constMappingQuoteStyle[3] = 'ENT_QUOTES';

	useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
	useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';

	if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
		throw new Error("Table: "+useTable+' not supported');
		// return false;
	}

	entities['38'] = '&amp;';
	if (useTable === 'HTML_ENTITIES') {
		entities['160'] = '&nbsp;';
		entities['161'] = '&iexcl;';
		entities['162'] = '&cent;';
		entities['163'] = '&pound;';
		entities['164'] = '&curren;';
		entities['165'] = '&yen;';
		entities['166'] = '&brvbar;';
		entities['167'] = '&sect;';
		entities['168'] = '&uml;';
		entities['169'] = '&copy;';
		entities['170'] = '&ordf;';
		entities['171'] = '&laquo;';
		entities['172'] = '&not;';
		entities['173'] = '&shy;';
		entities['174'] = '&reg;';
		entities['175'] = '&macr;';
		entities['176'] = '&deg;';
		entities['177'] = '&plusmn;';
		entities['178'] = '&sup2;';
		entities['179'] = '&sup3;';
		entities['180'] = '&acute;';
		entities['181'] = '&micro;';
		entities['182'] = '&para;';
		entities['183'] = '&middot;';
		entities['184'] = '&cedil;';
		entities['185'] = '&sup1;';
		entities['186'] = '&ordm;';
		entities['187'] = '&raquo;';
		entities['188'] = '&frac14;';
		entities['189'] = '&frac12;';
		entities['190'] = '&frac34;';
		entities['191'] = '&iquest;';
		entities['192'] = '&Agrave;';
		entities['193'] = '&Aacute;';
		entities['194'] = '&Acirc;';
		entities['195'] = '&Atilde;';
		entities['196'] = '&Auml;';
		entities['197'] = '&Aring;';
		entities['198'] = '&AElig;';
		entities['199'] = '&Ccedil;';
		entities['200'] = '&Egrave;';
		entities['201'] = '&Eacute;';
		entities['202'] = '&Ecirc;';
		entities['203'] = '&Euml;';
		entities['204'] = '&Igrave;';
		entities['205'] = '&Iacute;';
		entities['206'] = '&Icirc;';
		entities['207'] = '&Iuml;';
		entities['208'] = '&ETH;';
		entities['209'] = '&Ntilde;';
		entities['210'] = '&Ograve;';
		entities['211'] = '&Oacute;';
		entities['212'] = '&Ocirc;';
		entities['213'] = '&Otilde;';
		entities['214'] = '&Ouml;';
		entities['215'] = '&times;';
		entities['216'] = '&Oslash;';
		entities['217'] = '&Ugrave;';
		entities['218'] = '&Uacute;';
		entities['219'] = '&Ucirc;';
		entities['220'] = '&Uuml;';
		entities['221'] = '&Yacute;';
		entities['222'] = '&THORN;';
		entities['223'] = '&szlig;';
		entities['224'] = '&agrave;';
		entities['225'] = '&aacute;';
		entities['226'] = '&acirc;';
		entities['227'] = '&atilde;';
		entities['228'] = '&auml;';
		entities['229'] = '&aring;';
		entities['230'] = '&aelig;';
		entities['231'] = '&ccedil;';
		entities['232'] = '&egrave;';
		entities['233'] = '&eacute;';
		entities['234'] = '&ecirc;';
		entities['235'] = '&euml;';
		entities['236'] = '&igrave;';
		entities['237'] = '&iacute;';
		entities['238'] = '&icirc;';
		entities['239'] = '&iuml;';
		entities['240'] = '&eth;';
		entities['241'] = '&ntilde;';
		entities['242'] = '&ograve;';
		entities['243'] = '&oacute;';
		entities['244'] = '&ocirc;';
		entities['245'] = '&otilde;';
		entities['246'] = '&ouml;';
		entities['247'] = '&divide;';
		entities['248'] = '&oslash;';
		entities['249'] = '&ugrave;';
		entities['250'] = '&uacute;';
		entities['251'] = '&ucirc;';
		entities['252'] = '&uuml;';
		entities['253'] = '&yacute;';
		entities['254'] = '&thorn;';
		entities['255'] = '&yuml;';
		entities['8364'] = '&euro;';
	}

	if (useQuoteStyle !== 'ENT_NOQUOTES') {
		entities['34'] = '&quot;';
	}
	if (useQuoteStyle === 'ENT_QUOTES') {
		entities['39'] = '&#39;';
	}
	entities['60'] = '&lt;';
	entities['62'] = '&gt;';


	// ascii decimals to real symbols
	for (decimal in entities) {
		symbol = String.fromCharCode(decimal);
		hash_map[symbol] = entities[decimal];
	}
	
	return hash_map;
}
