
var map;
var Markers = new Array();
var TableCorrespondance = new Array();
var elemactifs = new Array();
var ida;

var sourcexml;
var sourcexslt;

var nbmarkers;

//Affichage Carto
function  LoadCartoGeoRSS (urlxml,latitude, longitude)
{
  	if (GBrowserIsCompatible())
	{	
       map = new GMap2(document.getElementById("map"));

       map.setCenter(new GLatLng(latitude,longitude), 6);  // TODO : Recuperer le 1er point et le zoom en fonction du "bounds"(?)
       
	   map.addControl(new GLargeMapControl());
       map.addControl(new GMapTypeControl());
	   map.enableContinuousZoom()
	   map.enableScrollWheelZoom()
 
	   //Appel flux GeoRSS via Ajax et lancement des traitements si succes
	  new Ajax.Request(urlxml, {method: 'get', onSuccess: traitement});		  
	} 
}



//Traitement
function traitement (obj) 
{
	//mise a jour de la variable globale
	sourcexml = obj.responseXML;

	//Appel serveur pour recup xslt
	GDownloadUrl("rss.xslt", function(data, responseCode) 
	{ 
	  	sourcexslt = GXml.parse(data); 
	
		//traitement liste
		trasnformeRSS (sourcexml, "listeAgences");

		//traitement carto
		PositionneGeoPoints (sourcexml);
	});



}


//retourne XLST qui transforme le flux GeoRSS - obsolete
function RecupXSLT()
{
	var xmlStrXSLT = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"/rss\"><div class=\"channel\"><xsl:for-each select=\"channel/item\"><div class=\"item\" id=\"marker_{guid}\" onmouseover=\"itemover(this.id)\" onmouseout=\"itemout(this.id)\"><div class=\"title\"><xsl:element name=\"a\"><xsl:attribute name=\"href\"><xsl:value-of select=\"link\"/>ssss</xsl:attribute><xsl:value-of select=\"title\"/></xsl:element></div><div class=\"description\"><xsl:value-of select=\"description\" disable-output-escaping=\"yes\" /></div><div class=\"pubDate\"><xsl:value-of select=\"pubDate\" /></div></div></xsl:for-each></div></xsl:template></xsl:stylesheet>";		
	var d = new DOMParser();
	var xS = d.parseFromString(xmlStrXSLT, "text/xml");
	if(Sarissa.getParseErrorText(xS) != Sarissa.PARSED_OK) return alert(Sarissa.getParseErrorText(xS));
	return xS;
} 


//Transformation XSLT et mise a jour de la liste
function trasnformeRSS(docxml, idliste)
{	
	var xsltProc  = new XSLTProcessor();
	
	//xsltDoc = RecupXSLT();		
   	//xsltProc.importStylesheet(xsltDoc);	   
	
	xsltProc.importStylesheet(sourcexslt);	   
		

	
	var fragment = xsltProc.transformToFragment(docxml, document);
	$(idliste).innerHTML = "";
	$(idliste).appendChild(fragment);	
}	


function getValeur(node)
{
	var texte = node.textContent;	  			  
	//Bug IE - il ne connait pas textContent
	 if (!texte)
  	{			  
		 texte = node.text;
	}
	return texte;
}



//Fonction de Postionnement des points a partir d'un flux GEORSS
function PositionneGeoPoints (xml)
{	
	var items = xml.documentElement.getElementsByTagName("item"); 
	var bounds = new GLatLngBounds;
	nbmarker = items.length;
	
	for (var i = 0; i < items.length; i++) 
	{	
		//Recuperation des donnees du flux XML  // TODO passer par fonction xPath
		
		var guid = getValeur(items[i].getElementsByTagName("guid")[0]);
		var titre = getValeur(items[i].getElementsByTagName("title")[0]);
		var texte = getValeur(items[i].getElementsByTagName("description")[0]);
		var lien = getValeur(items[i].getElementsByTagName("link")[0]);	

		if (items[i].getElementsByTagName("featurename").length>0)		
			var lieu = getValeur(items[i].getElementsByTagName("featurename")[0]);	
		else
			var lieu = getValeur(items[i].getElementsByTagName("georss:featurename")[0]);			
		
		if (items[i].getElementsByTagName("lat").length>0)		
			latitude = getValeur(items[i].getElementsByTagName("lat")[0]);	
		else
			latitude = getValeur(items[i].getElementsByTagName("geo:lat")[0]);	
				
			
		if (items[i].getElementsByTagName("long").length>0)
			longitude = getValeur(items[i].getElementsByTagName("long")[0]);	
		else
			longitude = getValeur(items[i].getElementsByTagName("geo:long")[0]);	

		//picto = items[i].getElementsByTagName("category")[0].textContent; 
		
		var point = new GLatLng(parseFloat(latitude),  parseFloat(longitude));		

		var id = "marker_" + guid ;
		
		//Agrandissement de la zone en fonction des points
		bounds.extend(point);		  
		
		//incrementation du tableau de marqueur pour l'interactivite
		
		Markers[i]=createMarker(point, texte, '', id);				
		TableCorrespondance[i] = id;
		elemactifs[i] = id;
	
		//Affichage du point sur la carte
		map.addOverlay(Markers[i]);			
	 }		 		  

	//determination du centre du rectangle
	//map.setCenter(bounds.getCenter());		
			
	//determination du zoom en fonction de la taille du rectangle
	//var newzoom = map.getBoundsZoomLevel(bounds);		  
	//map.setZoom(newzoom);			
		
	//affichage des points dans la carte
	//map.addOverlay(Markers);	
}

function getMarker(id)
{	
	return Markers[TableCorrespondance.indexOf(id)]; 
}

function GoFiche(id)
{
	index = TableCorrespondance.indexOf(id);
	
	var mtemp = getMarker(id);	
	map.panTo(mtemp.getLatLng());		

	var noeud = sourcexml.documentElement.getElementsByTagName("item")[index];

	var xsltProc  = new XSLTProcessor();	
	xsltProc.importStylesheet(sourcexslt);	   

	//on passe par un serializer sinon bug IE	
	var str = new XMLSerializer().serializeToString(noeud) ;
	var domd = new DOMParser().parseFromString(str, "text/xml");
	var fragment = xsltProc.transformToFragment(domd, document);

	$("detailPoissonnier").innerHTML = "";

	$("detailPoissonnier").appendChild(fragment);	
	
}

function goListe ()
{
	$("listeAgences").show();
	$("detailPoissonnier").hide();
}


function  itemover(id)
{	
	var mtemp = getMarker(id);
	if (mtemp)
	{	
		map.panTo(mtemp.getLatLng());
		cat = ""
		mtemp.setImage(GetPicto(cat, "over"));
		
		$(id).style.background = "#f0f0f0";//"#ededed";
		$(id).style.cursor = "pointer";		
	}
}


function  itemout(id)
{	
	var mtemp = getMarker(id);
	//cat = sourcexml.documentElement.getElementsByTagName("item")[id].getElementsByTagName("category")[0].textContent;
	cat = ""
	if (mtemp)
	{
		mtemp.setImage(GetPicto(cat, "out"));
		
		$(id).style.background = "white";
	}
}


//Evenement click
function  itemclick(id)
{	
	ide = elemactifs.indexOf(id)
	
	var mtemp = getMarker(id);
	
	mtemp.closeInfoWindow();
	
	cat = "";//getValeur(sourcexml.documentElement.getElementsByTagName("item")[ide].getElementsByTagName("category")[0]);		
	mtemp.setImage(GetPicto(cat, "out"));
	$(id).style.background = "#DFE1FB";
	GoFiche(id);
	
	$("listeAgences").hide();
	$("detailPoissonnier").show();
}


function GetPicto(categorie, tp)
{
	if(tp=="over")
		return "design/logo_poff.gif";
	else
		return "design/logo_pon.gif";
}



//Afficher tous les points
function showALL ()
{
	elemactifs.clear();
	
	//Parcours de tous les points
	for (var i = 0; i < Markers.length; i++) 
	{		
		
		Markers[i].show();
		$(TableCorrespondance[i]).show();
		TableLieusActifs[i] = true;
		//TableCategoriesActives[i] = true;
		elemactifs.push(TableCorrespondance[i]);
	}		
}


// placement un point sur la carto + layer sur mouseover
function createMarker(point, texte, picto, id) 
{        
    var icon = new GIcon();	
	icon.image = GetPicto(picto); 
	icon.iconSize = new GSize(14, 20);
	//icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(15, 20);
	icon.infoWindowAnchor = new GPoint(10, 5);
    var marker = new GMarker(point, icon);
	
	texte = $(id).innerHTML;

	texte = "<div class='popgoogle' style='width:200px'>" + texte + "</div>"
	
	GEvent.addListener(marker, "mouseover", function () {itemover(id);});  
    
    GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(texte);});
			
    GEvent.addListener(marker, "mouseout", function() { itemout(id); });
	
    return marker;
}  

