// JavaScript Document

//Created by Fernando F. Gallego (ferdy182@gmail.com ~ www.forgottenprojects.com)
//You are free to use, modify and distribute this code.
//Mentioning the author would be appreciated :)

//usage: add the KMLparser.js file to the document. Call KMLparser(url,map); at the bottom of the script code of your map.

function createMarker2(point,place,desc)
//function createMarker2(point,place)
		{
 		var icon = new GIcon();
		icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
		icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		icon.iconSize = new GSize(24, 30);
		icon.shadowSize = new GSize(22, 20);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);

		//var marker = new GMarker(point);
		var marker = new GMarker(point);
 		//var html = '<p>'+place+'</p>'; //put here the contents of the HtmlInfoWindow
		var html = '<p class="CSSContenuboite" style="margin-top:6px">'+desc+'</p>'; //put here the contents of the HtmlInfoWindow		
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html,{maxWidth:200});
		});		
		return marker;
	}
function createBoue(point,themap)
//function createMarker2(point,place)
		{
 		var icon = new GIcon();
		icon.image = "http://www.prime-time.fr/images/icones/bouee.png";
		//icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		icon.iconSize = new GSize(14, 17);
		//icon.shadowSize = new GSize(22, 20);
		icon.iconAnchor = new GPoint(7, 9);
		//icon.infoWindowAnchor = new GPoint(7, 9);
		themap.addOverlay(new GMarker(point, icon));
 			
	}
	
	
function MyKMLparser(thedata,map,theSegments){ //path: url to the kml file. map: div where the map is
	map.clearOverlays();
	var theFolders = thedata.documentElement.getElementsByTagName("Folder");
	var i=0;
	while((i<theFolders.length) && (theFolders[i].getElementsByTagName("name")[0].childNodes[0].nodeValue!="Tracklogs")){i++;};
	var placemarks = theFolders[i].getElementsByTagName("Placemark");
	
	// on place les commentaires
	for(var i=0; i<placemarks.length; i++){
		if (theSegments[i][1]==1){	
			var j=0;
			while((j<theFolders.length) && (theFolders[j].getElementsByTagName("name")[0].childNodes[0].nodeValue!=theSegments[i][0])){j++};
			if (j<theFolders.length){
				// on a trouve le dossier commentaire
				var LesPoints=theFolders[j].getElementsByTagName("Placemark");
				for(var k=0; k<LesPoints.length;k++){
					coordinates = LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue
					for(var chunk=1;  chunk<LesPoints[k].getElementsByTagName("coordinates")[0].childNodes.length;chunk++){
						 coordinates+=LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[chunk].nodeValue;
					}
					coordinates = coordinates.split(" ");
					for(var j=0; j<coordinates.length;j++){
						coordinates[j] = coordinates[j].split(",");
					}
					if(coordinates.length == 1){
						var point = new GLatLng(parseFloat(coordinates[0][1]),parseFloat(coordinates[0][0]));
						var desc =LesPoints[k].getElementsByTagName("description")[0].childNodes[0].nodeValue;
						
						//var marker = createMarker2(point,name);
						var marker = createMarker2(point,name,desc);
						
						map.addOverlay(marker);
					}
				}
			}
		}
	}
	// on place les tracés
	for(i=0; i<placemarks.length; i++){
		if (theSegments[i][1]==1){	
		
				var coordinates;
				coordinates = placemarks[i].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue
				for(var chunk=1;  chunk<placemarks[i].getElementsByTagName("coordinates")[0].childNodes.length;chunk++){
					 coordinates+=placemarks[i].getElementsByTagName("coordinates")[0].childNodes[chunk].nodeValue;
				}
				coordinates = coordinates.split(" ");
				for(var j=0; j<coordinates.length;j++){
					coordinates[j] = coordinates[j].split(",");
				}
				if(coordinates.length == 1){
					var point = new GLatLng(parseFloat(coordinates[0][1]),parseFloat(coordinates[0][0]));
					var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
					var desc = placemarks[i].getElementsByTagName("description")[0].childNodes[0].nodeValue;
					
					//var marker = createMarker2(point,name);
					var marker = createMarker2(point,name,desc);
					
					map.addOverlay(marker);
				}
				else{
					var points = new Array();	
					var theTemp;
					for(var j=0; j<coordinates.length; j++){
						theTemp=parseFloat(coordinates[j][1]);
						if (!isNaN(theTemp))
							points.push(new  GLatLng(parseFloat(coordinates[j][1]),parseFloat(coordinates[j][0])));	
					}

					map.addOverlay(new GPolyline(points,"#FF0000", 2 ,1));
					//var polygon = new GPolygon(points, null, 5, 0.7, "#00CC00", 0.5 );
					//map.addOverlay(polygon);
					//map.addOverlay(new GPolygon(points,'#FF0000', 4 ,0.8,'#0000FF',0.2));
				}
		}
	}
	
	// on met les bouees
		
	theFolders = thedata.documentElement.getElementsByTagName("Folder");
	i=0;
	while((i<theFolders.length) && (theFolders[i].getElementsByTagName("name")[0].childNodes[0].nodeValue!="Bouees")){i++;};
	LesPoints=theFolders[i].getElementsByTagName("Placemark");
	
	for(var k=0; k<LesPoints.length;k++){
		coordinates = LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue
		for(var chunk=1;  chunk<LesPoints[k].getElementsByTagName("coordinates")[0].childNodes.length;chunk++){
			 coordinates+=LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[chunk].nodeValue;
		}
		coordinates = coordinates.split(" ");
		for(var j=0; j<coordinates.length;j++){
			coordinates[j] = coordinates[j].split(",");
		}
		if(coordinates.length == 1){
			var point = new GLatLng(parseFloat(coordinates[0][1]),parseFloat(coordinates[0][0]));
			createBoue(point,map);
		}
	}

	// on centre la carte
	theFolders = thedata.documentElement.getElementsByTagName("Folder");
	i=0;
	while((i<theFolders.length) && (theFolders[i].getElementsByTagName("name")[0].childNodes[0].nodeValue!="Centre")){i++;};
	if (i<theFolders.length)
	{	LesPoints=theFolders[i].getElementsByTagName("Placemark");
		
		for(var k=0; k<LesPoints.length;k++){
			coordinates = LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue
			for(var chunk=1;  chunk<LesPoints[k].getElementsByTagName("coordinates")[0].childNodes.length;chunk++){
				 coordinates+=LesPoints[k].getElementsByTagName("coordinates")[0].childNodes[chunk].nodeValue;
			}
			coordinates = coordinates.split(" ");
			for(var j=0; j<coordinates.length;j++){
				coordinates[j] = coordinates[j].split(",");
			}
			if(coordinates.length == 1){
				theCentreCarte = new GLatLng(parseFloat(coordinates[0][1]),parseFloat(coordinates[0][0]));
				map.panTo(theCentreCarte);
			}
		
		}
	
	}
	
	
};
			
	




