/**
 * Objet Continent
 */

var continentObjet = {
	continents:null,
	/**
	 * r�cup�re la liste des continents
	 * @return void
	 */
	getContinents: function()
	{
 		jQuery.getJSON( 
			'/wp-content/plugins/soropedia/map/soropedia-map-ajax.php', 
			{
				action:'liste_continents',
				lang:lang_wp_ajax
			}, 
			function(json){
				continentObjet.continents = json;
				continentObjet.initDropDown($('select[name="continent"]'));
			}
		);
	},
	/** 
	 * Initialise une liste d�roulante
	 * @param dropDown Object HTML (liste d�roulante)
	 * @param selected Id de la langue s�lectionn�e
	 * @return void
	 **/
	initDropDown: function(dropDown, selected)
	{
		var liste = continentObjet.continents;
		
		$('option', dropDown).remove();
		$('<option/>').appendTo(dropDown);
		$(liste).each(function(i){
			var option = $('<option/>')
				.val(liste[i].continent_id)
				.html(liste[i].continent_name)
				.appendTo(dropDown);
					
			if(selected == liste[i].continent_id)
			{
				$(option).attr({'selected':'selected'});						
			}
		});	
	},
	/**
	 * R�cup�re un continent par son identifiant
	 * @param continent_id
	 * @return Object
	 */
	getContinentById: function(continent_id)
	{
		var liste = continentObjet.continents;
		if(liste)
		{
			for(i = 0 ; i < liste.length ; i++)
			{
				if(liste[i].continent_id == continent_id)
				{
					return liste[i];
				}				
			}
		}
	}
};

/** 
 * Objet langue 
 */
var langueObject = {
	langues: null,
	languesFamille: null,
	/**
	 * Initialise les langues
	 * @return void
	 */
	init: function()
	{
		this.getLangues();
	},
	/**
	 * R�cup�re la liste des langues de la base de donn�es et renseigne les listes d�roulantes
	 * @param family_id Identifiant de la famille
	 * @return void
	 */
	getLangues: function(family_id, country_id, continent_id)
	{
		family_id = (!family_id) ? '' : family_id;
		country_id = (!country_id) ? '' : country_id;
		continent_id = (!continent_id) ? '' : continent_id;
 		jQuery.getJSON( 
			'/wp-content/plugins/soropedia/map/soropedia-map-ajax.php', 
			{
				action:'liste_langue',
				family_id:family_id,
				country_id:country_id,
				continent_id:continent_id,
				lang:lang_wp_ajax
			}, 
			function(json){
				langueObject.langues = json;
				
				langueObject.languesFamille = json;
				langueObject.initDropDown($('select[name="langue"]'));
				
				$('input[name="langue"]').unbind('change');
				$('input[name="langue"]').unbind('keyup');
				$('input[name="langue"]').unbind('keypress');
				$('input[name="langue"]').unbind('focus');
				$('input[name="langue"]').autocompleteArray(
					langueObject.ArrayAutoCompleteFront(),
					{
						delay:10,
						minChars:0,
						matchSubset:0,
						maxItemsToShow:10
					}
				);
			}
		);
	},
	/** 
	 * Initialise une liste d�roulante
	 * @param dropDown Object HTML (liste d�roulante)
	 * @param selected Id de la langue s�lectionn�e
	 * @return void
	 **/
	 initDropDown: function(dropDown, selected)
		{
			var listeLangues = langueObject.languesFamille;
			
			$('option', dropDown).remove();
			$('<option/>').appendTo(dropDown);
			$(listeLangues).each(function(i){
				var option = $('<option/>')
					.val(listeLangues[i].language_id)
					.html(listeLangues[i].language_name)
					.appendTo(dropDown)
					.attr({'onclick':'$("input[name="langue"]").val(listeLangues[i].language_id)'});
						
				if(selected == listeLangues[i].language_id)
				{
					$(option).attr({'selected':'selected'});						
				}
			});	
	},
	/**
	 * Tableau utile pour l autoCompletion
	 * @return array
	 */
	ArrayAutoComplete: function()
	{
		var monTableau = [];
		$(langueObject.langues).each(function(i){
			monTableau.push(langueObject.langues[i].language_name);
		});
		return monTableau;
	},
	ArrayAutoCompleteFront: function()
	{
		var monTableau = [];
		$(langueObject.langues).each(function(i){
			monTableau.push(langueObject.langues[i].language_name);
		});
		return monTableau;
	},
	getLangue: function(language_id)
	{
		var liste = this.languesFamille;
		if(liste)
		{
			for(i = 0 ; i < liste.length ; i++)
			{
				if(liste[i].language_id == language_id)
				{
					return liste[i];
				}				
			}
		}	
	}
};

/**
 * Objet Pays
 */
var paysObject = {
	pays: null,
	/** 
	 * Initialise la liste des pays 
	 * @return void
	 */
	init: function()
	{
		this.getPays();
	},
	/** 
	 * R�cup�re la liste des pays de la base de donn�es 
	 * Initialise les listes d�roulantes 
	 * @return void
	 */
	getPays: function(continent_id)
	{
		continent_id = (continent_id) ? continent_id : '';
		jQuery.getJSON( 
			'/wp-content/plugins/soropedia/map/soropedia-map-ajax.php', 
			{
				action:'liste_pays',
				continent_id:continent_id,
				lang:lang_wp_ajax
			}, 
			function(json){
				paysObject.pays = json;
				paysObject.initDropDown($('select[name="pays"]'));
			}
		);
	},
	/**
	 * Initialise une liste d�roulante
	 * @param dropDown Object HTML (liste d�roulante)
	 * @return void
	 */
	initDropDown: function(dropDown)
	{
		$('option', dropDown).remove();
		$('<option/>').appendTo(dropDown);
		var listePays = paysObject.pays;		
		
		if(listePays)
		{
			$(listePays).each(function(i){
				$('<option/>')
					.val(listePays[i].country_id)
					.html(listePays[i].country_name)
					.appendTo(dropDown);
			});			
		}
			
	},
	/**
	 * Cherche un pays par son libell�
	 * @param libellePays Libell� du pays
	 * @return bool
	 */
	findCountry: function(country_name)
	{
		var listePays = this.pays;
		var trouve = false;
		if(listePays)
		{
			$(listePays).each(function(i){
				if(listePays[i].country_name == country_name)
				{
					trouve = true;
					return trouve;
				}
			});
		}
		return trouve;
	},
	/**
	 * R�cup�re les informations d un pays par son identifiant
	 * @param country_id Identifiant du pays
	 * @return object
	 */
	getPaysById: function(country_id)
	{
		var listePays = this.pays;
		if(listePays)
		{
			for(i = 0 ; i < listePays.length ; i++)
			{
				if(listePays[i].country_id == country_id)
				{
					return listePays[i];
				}				
			}
		}
	}
};

/*
 * Objet Point
 */
var pointsObjet = {
	points: null,
	/**
	 * Initialise la liste des points
	 * @return void
	 */
	init: function()
	{
		pointsObjet.getPoints();
	},
	/**
	 * R�cup�re la liste des points de la base de donn�es
	 * @param country_id Identifiant du pays
	 * @param language_id Identifiant de la langue
	 * @param language_name Libelle de la langue
	 * @param family_id Identifiant de la famille
	 * @param continent_id Identifiant du continent
	 * @return void
	 */
	getPoints: function(country_id, language_id, language_name, family_id, continent_id)
	{
		map.clearOverlays();							// Efface tous les points de la carte
		country_id = (!country_id) ? '' : country_id;
		language_id = (!language_id) ? '' : language_id;
		language_name = (!language_name) ? '' : language_name;
		family_id = (!family_id) ? '' : family_id;
		continent_id = (!continent_id) ? '' : continent_id;

 		jQuery.getJSON( 
			'/wp-content/plugins/soropedia/map/soropedia-map-ajax.php', 
			{
				action:'liste_points',
				country_id: country_id,
				language_id: language_id, 
				language_name: language_name,
				family_id: family_id,
				continent_id: continent_id,
				lang:lang_wp_ajax
			}, 
			function(json){
				pointsObjet.points = json;
				if ( ( continent_id != 0 && continent_id != "" && continent_id != "undefined" ) || ( country_id != 0 && country_id != "" && country_id != "undefined" ) || ( family_id != 0 && family_id != "" && family_id != "undefined" ) || ( language_name != 0 && language_name != "" && language_name != "undefined" ) ) {
					pointsObjet.placerPoints(country_id, continent_id);	
				}
			}
		);
	},
	/**
	 * Place les points sur la carte
	 * @param country_id Int Identifiant du pays
	 * @param continent_id Int Identifiant du continent
	 * @return void
	 */
	placerPoints: function(country_id, continent_id)
	{
		var listePoints = this.points;
		var libelleLangueTmp = '';
		var paysTmp = '';
		var ulTmp = '';
		$('#list_languages').html(locale_list_languages);
		$('#listeLangues ul').html('');
	
		if(listePoints)
		{
			$(listePoints).each(function(i)
			{
				var point = listePoints[i];
				/**
				 * http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GLatLng
				 */
				var pt = new GLatLng(point.lat, point.lng) ;

				// Options du marker
				/**
				 * http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GIcon
				 */
				var icone = new GIcon(G_DEFAULT_ICON);
				icone.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
				/**
				 * http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GSize
				 */
				icone.iconSize = new GSize(12, 20);
				icone.shadow = "";
				icone.iconAnchor = new GPoint(6, 20);					
				
				/**
				 * http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GMarker
				 * http://code.google.com/intl/fr/apis/maps/documentation/reference.html#GMarkerOptions
				 */
				var markerOptions = { icon : icone};
				var marker = new GMarker(pt, markerOptions);

				// Langues
				var language_id = point.language_id;
				var language_name = point.language_name;
				
				if(libelleLangueTmp != language_name)
				{
					paysTmp = '';
					libelleLangueTmp = language_name;
					if ( listePoints.length > 1 ) {
						var linkLa = $('<a/>')
						.attr({'href':'#map'})
						.html(language_name)
						.click(function(){
							pointsObjet.getPoints(point.country_id, '', language_name, '', point.continent_id);
							setTimeout(function(){pointsObjet.informationsWindow(marker, point)}, 3000);
						});
					}
					else {
						var linkLa = $('<a/>')
						.attr({'href':'#map'})
						.html(language_name)
						.click(function(){
							pointsObjet.informationsWindow(marker, point);
						});
					}
					var li = $('<li/>').html(linkLa).appendTo($('#listeLangues ul')[0]);
					ulTmp = $('<ul/>').appendTo(li);
					var link = $('<a/>')
						.attr({'href':'#map'})
						.html(point.country_name)
						.click(function(){
							pointsObjet.informationsWindow(marker, point);
						});
							
					$('<li/>').html(link).appendTo(ulTmp);
				}
				else
				{
					
					var link = $('<a/>')
						.attr({'href':'#map'})
						.html(point.country_name)
						.click(function(){
							pointsObjet.informationsWindow(marker, point);
						});
					
					$('<li/>').html(link).appendTo(ulTmp);					
				}

				// Click sur le point
				GEvent.addListener(marker, "click", function() {
					pointsObjet.informationsWindow(marker, point);
				});

				map.addOverlay(marker);
			});
		}
		
		
		// Recentre la carte 
		if(country_id)
		{
			var pays = paysObject.getPaysById(country_id);
			var country_name = pays.country_name;
			
			geocoder.getLatLng
	       	(
	       		country_name,
			   	function(point) {
	       			map.setCenter(point, 4);	       			
	       		}
	       	);
			
			
		}
		else
		{
			map.setCenter(new google.maps.LatLng(0, -0), 1);		
		}
		//getPaysById
	},
	/**
	 * Fen�tre d informations d un point
	 */
	informationsWindow: function(marker, point)
	{
		
		// Tableau INFORMATIONS
		var htmlInfos = '<table style="font-size:10px; width: 450px;">' 
		
			/**
		+ '<tr>'
		+ '<td width="150" valign="top">' + locale_position + ' : </td>'
		+ '<td width="300" valign="top">Lat : ' + point.lat + ' ; Lng : ' + point.lng + '</td>'
		+ '</tr>'
		
		*/
		
		+ '<tr>'
		+ '<td valign="top">' + locale_continent + ' : </td>'
		+ '<td valign="top">' + point.continent_name + '</td>'
		+ '</tr>'

		+ '<tr>'
		+ '<td valign="top">' + locale_country + ' : </td>'
		+ '<td valign="top">' + point.country_name + '</td>'
		+ '</tr>';
		
		if ( point.location != '' ) {
			
			htmlInfos += '<tr>'
			+ '<td valign="top">' + locale_location + ' : </td>'
			+ '<td valign="top">' + point.location + '</td>'
			+ '</tr>';
		
		}
				
		htmlInfos += '<tr>'
		+ '<td valign="top">' + locale_family + ' :</td>'
		+ '<td valign="top">' + point.family_name + '</td>'
		+ '</tr>'
		
		+ '<tr>'
		+ '<td valign="top">' + locale_language + ' : </td>'
		+ '<td valign="top">' + point.language_name + '</td>'
		+ '</tr>';
		
		if ( point.other_names != '' ) {
		
			htmlInfos += '<tr>'
			+ '<td valign="top">' + locale_other_names + ' : </td>'
			+ '<td valign="top">' + point.other_names + '</td>'
			+ '</tr>';
		
		}
		
		if ( point.family_sheet != 0 && point.family_sheet != '' ) {
				
			if ( lang_wp_ajax == 'fr' ) {
				lang_wp_sheet = '';
			}
			else {
				lang_wp_sheet = lang_wp_ajax + '/';
			}
			
			htmlInfos += '<tr>'
			+ '<td colspan="2"><a href="' + url_wp + lang_wp_sheet + point.family_sheet + '">' + locale_family_sheet + '</a></td>'
			+ '</tr>';	
		
		}
		
		if ( point.language_sheet != 0 && point.language_sheet != '' ) {
					
			htmlInfos += '<tr>'
			+ '<td colspan="2"><a href="' + url_wp + lang_wp_sheet + point.language_sheet + '">' + locale_language_sheet + '</a></td>'
			+ '</tr>';	
		
		}
		
		htmlInfos += '</table><br />';	
		
		var tabs = [];
		tabs.push(new GInfoWindowTab('Informations', htmlInfos));
		
		if ( point.video_title != 0 && point.video_title != '' && point.video_link != 0 && point.video_link != '' ) {
			
			var htmlVideoInfos = '<table class="thumb_table"><tr><td>';
			
			if ( point.video_image != 0 && point.video_image != '' ) {
				htmlVideoInfos += '<p><a href="' + point.video_link + '"><img src="' + point.video_image + '" alt="" class="thumb_logo" /></a></p>';
			}
			
			htmlVideoInfos += '</td><td>';
			
			htmlVideoInfos += '<p class="color_black"><strong><a href="' + point.video_link + '">' + point.video_title + '</a></strong></p>';
			htmlVideoInfos += '<p><a href="' + point.video_link + '">' + locale_video_more + '</a></p>';
			
			htmlVideoInfos += '</td></tr></table>';
			
			htmlVideoInfos += '<p><a href="http://www.youtube.com/sorosorotv" target="_blank">' + locale_all_videos + '</a></p>';
			
			tabs.push(new GInfoWindowTab(locale_videos, htmlVideoInfos));
		
		}

		marker.openInfoWindowTabsHtml(tabs);
		
	}
};

/**
 * Objet Famille
 */
var familleObjet = {
	familles: null,
	/**
	 * R�cup�re la liste des familles
	 * @return void
	 */
	getFamilles: function(country_id, continent_id)
	{
		country_id = (!country_id) ? '' : country_id;
		continent_id = (!continent_id) ? '' : continent_id;

		jQuery.getJSON( 
			'/wp-content/plugins/soropedia/map/soropedia-map-ajax.php', 
			{
				action:'liste_familles',
				country_id:country_id,
				continent_id:continent_id,
				lang:lang_wp_ajax
			}, 
			function(json){
				familleObjet.familles = json;
				familleObjet.initDropDown($('select[name="famille"]'));
			}
		);
	},
	/**
	 * Initialise une liste d�roulante
	 * @param dropDown 
	 * @return void
	 */
	initDropDown: function(dropDown, selected)
	{
		$('option', dropDown).remove();
		$('<option/>').appendTo(dropDown);
		var listeFamilles = this.familles;
		$(listeFamilles).each(function(i){
			var option = $('<option/>')
				.val(listeFamilles[i].family_id)
				.html(listeFamilles[i].family_name)
				.appendTo(dropDown);
					
			if(selected == listeFamilles[i].family_id)
			{
				$(option).attr({'selected':'selected'});						
			}
		});	
	},
	/**
	 * Tableau utile pour l autoCompletion
	 * @return Array
	 */
	ArrayAutoComplete: function()
	{
		var monTableau = [];
		$(familleObjet.familles).each(function(i){
			monTableau.push(familleObjet.familles[i].family_name);
		});
		return monTableau;
	}
}

//Remplace toutes les occurences d une chaine
function replaceAll(str, search, repl) {
	while (str.indexOf(search) != -1)
	str = str.replace(search, repl);
	return str;
}

// Remplace les caractères accentués
function AccentToNoAccent(str) {
	var norm = new Array('\'',' ','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
	var spec = new Array('','-','A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I', 'D','N','O','O','O','O','O','O','U','U','U','U','Y','b','s', 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n', 'o','o','o','o','o','o','u','u','u','u','y','y','b','y');
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
} 


