/*********

DEFINITION DES VAIABLES DE BASE

*****************/


dom = document.getElementById;
var marqueurs=[];
var compteur=0;
var browser=navigator.userAgent.toLowerCase();


var chemin_xml_lei = "/stylesheet/xml-carto-lei_";
var chemin_xml_annuaire = "/stylesheet/xml-requete-annuaire_";

// Fichier permettant a safari de parser le XML
var xsl_safari = "<a href=\"/cgi-local/lei_fichedescriptive.pl?ID={PRODUIT_LEI}&GENRE={GENRE}&CATEGORIE={CATEGORIE}\" target=\"Detail{PRODUIT_LEI}\" >{NAME}</a></p>";
        


function GetE( elementId )
{
	return document.getElementById( elementId )  ;
}

function Affiche_element_carte( onglet, isVisible )
{
	if ( typeof( onglet ) == 'string' )
	{
		element = GetE( "div_"+onglet ) ;
		img_elt = GetE( "img_"+onglet ) ;
	}
	
	element.style.display = isVisible ? '' : 'none' ;
	if(isVisible)
	{
		img_elt.src = '/images/pictos_lei_carte/flecheon.gif';
	}
	else
	{
		img_elt.src = '/images/pictos_lei_carte/flecheoff.gif';
	}
}


// Fonction permettant de parser le XML par le XSL pass�en parametre
function xslt(xmlDoc,xslDoc) {
            var transform;

            if (typeof ActiveXObject != 'undefined') {
                transform = xmlDoc.transformNode(xslDoc);
            }
            else if(browser.indexOf("safari") != -1)
            {

                transform = xsl_safari;


                var zone_texte = transform;

                var car = 0;
                while((deb = zone_texte.indexOf("{", car) ) > 0)
                {

                    fin = zone_texte.indexOf("}", deb);

                    var regular = zone_texte.substring(deb+1, fin);

                    var nameElm = xmlDoc.getElementsByTagName(regular).item(0);
                    var namevalue = nameElm.firstChild.nodeValue;

                    var reg=new RegExp("({"+regular+"})", "g");

                    transform = transform.replace(reg,namevalue);
                    car = fin;

                }



            }
            else {
                var xsl = new XSLTProcessor();

                xsl.importStylesheet(xslDoc);
                var fragment=xsl.transformToFragment(xmlDoc, document);
                if( fragment.childNodes.length>0 )
                  transform = fragment.childNodes[0].innerHTML;
                else
                    alert("error");
            }
            return transform;
        }

// Fonction permettant la transformation d'un fichier en objet DOM
function getDomFromFile(file) {
            // Load XML
            if (typeof ActiveXObject != 'undefined') {// IE
                var xml = new ActiveXObject("Microsoft.XMLDOM");
                xml.async = false;
                xml.load(file);
            }
            else {  // others
                var myXMLHTTPRequest = new XMLHttpRequest();
                myXMLHTTPRequest.open("GET", file, false);
                myXMLHTTPRequest.send(null);
                var xml = myXMLHTTPRequest.responseXML;
            }
            return xml;
}


// Creation du pointeur
function createMarker(map,point, html,icone,icone_width,icone_height,ov, i) {

            var imageUrl;
            imageUrl = "/cgi-local/unitmarker.pl?unit=1";
            var icon = new GIcon();
            icon.image = icone ;
            icon.iconSize = new GSize(icone_width,icone_height);
            anchor_width = icone_width*1 / 2;
		
        	anchor_height = icone_height*1;

            icon.iconAnchor = new GPoint(anchor_width,anchor_height);
            icon.infoWindowAnchor = new GPoint( anchor_width,anchor_height);


            var marker = new GMarker(point,icon);

            GEvent.addListener(marker, "click", function()
            {
                    //marker.openInfoWindowHtml(html);
		   marker.openExtInfoWindow(
				map,
				"info_window",
				html,
				{beakOffset: 3}
			);
            });

            marqueurs[pos] = marker;
            return marker;

      }





// Placement de tous les marqueurs

function traite_lei (map,langue, active,id, genre, categorie, type, critere, modalite, icone,icone_width, icone_height, page_ref)
{


    if(active)
    {

	document.getElementById('barre_progression').innerHTML = "<img src='/images/progression.gif' alt='Chargement en cours' title='Chargement en cours'>";
	document.getElementById('barre_progression').style.display =''  ;
	GDownloadUrl(chemin_xml_lei+langue+"_"+secteur+"_"+genre+"_"+categorie+"_"+type+"_"+critere+"_"+modalite+"_"+isIE+".xml", function(data, responseCode) {

		var xml = GXml.parse(data);
		var markers = xml.getElementsByTagName("point");
		var info = xml.getElementsByTagName("info");
		var nb_point = 0;
	
		xsl = getDomFromFile("/stylesheet/fiche_carto_lei.xsl");
	
		for (var i = 0; i < markers.length   ; i++)
		{
		var latitude = parseFloat(markers[i].getAttribute("lat"));
		var longitude = parseFloat(markers[i].getAttribute("lng"));
		var produit_lei = parseFloat(markers[i].getAttribute("PRODUIT"));
	
		var html = xslt(info[i], xsl);
		
		html+="<div id='carto_info'><a href='javascript:void(0)' target='popup' onclick=\"winOpen('/cgi-local/lei_fichedescriptive.pl?ID="+produit_lei+"&GENRE="+genre+"&langue="+langue+"&CATEGORIE="+categorie+"&popup=1&HTMLPage="+page_ref+"' , 500, 500)\">> plus d'infos</a></div>";
		//latitude = latitude.replace(",",".");
		//longitude = longitude.replace(",",".");
		html = "<div id='info_carto'>"+html+"</div>";
		var point = new GLatLng(latitude, longitude);
		pos = id+"_"+nb_point;
		
		mymarqueurs = createMarker(map,point,html,icone,icone_width, icone_height,'A', pos);
		
		marqueurs[pos] = mymarqueurs;
		
		map.addOverlay(mymarqueurs);
		
		nb_point++;
            }
            pos = id+"_size";
            marqueurs[pos] = nb_point;

            document.getElementById('barre_progression').style.display = 'none';

         }
	
        );
	

    }
    else
    {
        RemoveOverlay(map, id);

    }
}

function traite_annuaire (map,langue, active,id, famille_annuaire, icone,icone_width,icone_height, page_ref)
{
    if(active)
    {
            document.getElementById('barre_progression').innerHTML = "<img src='/images/progression.gif' alt='Chargement en cours' title='Chargement en cours'>";
            document.getElementById('barre_progression').style.display =''  ;

            GDownloadUrl(chemin_xml_annuaire+langue+"_"+famille_annuaire+"_"+isIE+".xml", function(data, responseCode) {

        var xml = GXml.parse(data);
        var markers = xml.getElementsByTagName("point");
        var info = xml.getElementsByTagName("info");
        var nb_point = 0;

        xsl = getDomFromFile("/stylesheet/fiche_carto_annuaire.xsl");

        for (var i = 0; i < markers.length   ; i++)
        {
            var latitude = parseFloat(markers[i].getAttribute("lat"));
            var longitude = parseFloat(markers[i].getAttribute("lng"));
            var id_fiche = parseFloat(markers[i].getAttribute("ID"));

            var html = xslt(info[i], xsl);
            //html+="<br/><a href='/cgi-local/lei_fichedescriptive.pl?ID="+produit_lei+"&GENRE="+genre+"&langue=$langue&CATEGORIE="+categorie+"&HTMLPage="+page_ref+"' target='Detail"+produit_lei+"' >> plus d'infos</a>   ";
            //latitude = latitude.replace(",",".");
            //longitude = longitude.replace(",",".");
	    
            var point = new GLatLng(latitude, longitude);
            pos = id+"_"+nb_point;
            mymarqueurs = createMarker(map, point,html,icone,icone_width,icone_height,'A', pos);
            marqueurs[pos] = mymarqueurs;
            map.addOverlay(mymarqueurs);
            nb_point++;
                }
            pos = id+"_size";
            marqueurs[pos] = nb_point;

            document.getElementById('barre_progression').style.display = 'none';

          }

        );


    }
    else
    {
		
        RemoveOverlay(map, id);

    }
}

function RemoveOverlay (map, id)
{
    // on doit supprimer tous les marqueurs de la s�ection
        pos= id+"_size";
        var rsize = marqueurs[pos];
        for(var cpt=0;cpt < rsize;cpt++){
            pos = id + '_' + cpt;
            map.removeOverlay(marqueurs[pos]);
        }
}

// Gestion des fichiers KML
function traite_kml(map, active,id, fichier_kml) {
    if (active) {
		document.getElementById('barre_progression').innerHTML = "<img src='/images/progression.gif' alt='Chargement en cours' title='Chargement en cours'>";
        document.getElementById('barre_progression').style.display =''  ;
    	var geoXml = new GGeoXml(adresse_site+fichier_kml);
        map.addOverlay(geoXml);
		document.getElementById('barre_progression').style.display = 'none';
    	pos = id+"_kml";
        marqueurs[pos] = geoXml;

    } else {
    	pos = id+"_kml";
    	map.removeOverlay(marqueurs[pos]);

    }
}


function zoomToGeoXML(map, geoXml) {
	
	var center = geoXml.getDefaultCenter();
	var span = geoXml.getDefaultSpan();
	var sw = new GLatLng(center.lat() - span.lat() / 2,
			center.lng() - span.lng() / 2);
	var ne = new GLatLng(center.lat() + span.lat() / 2,
			center.lng() + span.lng() / 2);
	var bounds = new GLatLngBounds(sw, ne);
	
	centerMap = center;
	boundsMap = bounds;
	map.setCenter(center);
	map.setZoom(map.getBoundsZoomLevel(bounds));
	
	
}



/********

AFFICHAGE DE LA CARTE INTERACTIVE GENERALE

********/

// Menu du haut

function ShowMap ()
{
	if(dom)
	{
		document.getElementById("adt_carte").style.zIndex = 5003;
		document.getElementById("adt_carte").style.visibility = "visible";
		document.getElementById("adt_carte").style.left = 100;
		document.getElementById("adt_carte").style.width = 620;
		document.getElementById("map_adt").style.width= 450;
	}
}



/********
INVISIBILITE DES SOUS MENUS
********/

function HiddenMap()
{
	if(dom)
	{
		document.getElementById("adt_carte").style.zIndex = 0;
		document.getElementById("adt_carte").style.visibility = "hidden";
		document.getElementById("adt_carte").style.left = 0;
		document.getElementById("adt_carte").style.width= 0;
		document.getElementById("map_adt").style.width= 0;

	}
}




function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}

var Utf8 = {
 
	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}

