
//<![CDATA[

var TousLesRadars = [];
var map;
var xml;
var marker; 
var baseIconImg;
var MonIcone;
var baseIcon;
var address;
var gdir = null; // the GDirections 
var GDir1 = null; // the GDirections 
var geocoder = null; // the GClientGeoCoder 
var lastpoint = null; // the GLatLng point we try to reverse geocode 
var i,j;
var SortableLists;
var MesEtapes = [];
var batchPoi = [];//ce tableau stockera les markers
var batchPoiRM = [];//ce tableau stockera les markers
var pLine;
var MonPoint;
var swfu; 
var ColorLine = "#ffcc00";
var LargeurLine = "4";
var AlphaLine = "0.7";
var OptionsStyleRectangle = {opacity: .6,border: "1px solid #FFFFFF"};
var OptionsBouton = {buttonHTML: "<img src='./image/zoom-button.gif' />",buttonZoomingHTML: "<img src='./image/zoom-button-activated.gif' />",buttonStartingStyle: {width: '24px', height: '24px'}};	
function mapload() {

	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById('Map'),{mapTypes:[G_PHYSICAL_MAP,G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP],draggableCursor: 'url(./image/curseur.png)25 25,crosshair'});
		map.setCenter(new GLatLng(47, 3), 6);
		map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(17,17)));//ajouter les controles
		map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(50,1))); //ajouter les controles de type de carte
		map.addControl(new GScaleControl()); //ajouter l'echelle
		map.addControl(new DragZoomControl(OptionsStyleRectangle, OptionsBouton),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(7,238)));//ajoute le zoomcontrol
		map.enableScrollWheelZoom();
		
		
		

		
		//mgr = new GMarkerManager(map);//on créer un marker manager//création d'un manager de marker
		mgr = new MarkerManager(map);
		mgrRM = new MarkerManager(map);
		
		gdir = new GDirections(); 
		geocoder = new GClientGeocoder(); 
		var options = {};		
		map.addControl(new google.maps.LocalSearch(options), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(20,20))); //ajouter la recherche
		
		

		
		baseIcon = new GIcon();
		baseIcon.iconSize=new GSize(20,20);
		baseIcon.shadowSize=new GSize(22,22);
		baseIcon.iconAnchor=new GPoint(6,20);
		baseIcon.infoWindowAnchor=new GPoint(5,1);
		
		

		
		

		
		
		GDownloadUrl('./liste.php5?nocache=' + Math.random(), function(data) { //unique chargement du fichier XML
			xml = GXml.parse(data);
			
			var poi = xml.documentElement.getElementsByTagName('poi');
			
			document.title = "TTH - liste des "+poi.length+" radars fixes, mobiles et POI utiles en France.";
			
			for (var i = 0; i < poi.length; i++) {
				if (poi[i].getAttribute('label').split(".")[0] == "RM"){
					var point = new GLatLng(parseFloat(poi[i].getAttribute('lat')), parseFloat(poi[i].getAttribute('lon')));
					baseIconImg = "./POI_img/ico.php?ico="+poi[i].getAttribute('label').split(".")[0]+".bmp";
					MonIcone = new GIcon(baseIcon, baseIconImg, null, null);
					marker = new CreationDuMarqueur(point,MonIcone,"POI_son/"+poi[i].getAttribute('label').split(".")[0]+".ogg",poi[i].getAttribute('label').split(".")[0]);
					batchPoiRM.push(marker);
				}else{
					var point = new GLatLng(parseFloat(poi[i].getAttribute('lat')), parseFloat(poi[i].getAttribute('lon')));
					baseIconImg = "./POI_img/ico.php?ico="+poi[i].getAttribute('label').split(".")[0]+".bmp";
					MonIcone = new GIcon(baseIcon, baseIconImg, null, null);
					marker = new CreationDuMarqueur(point,MonIcone,"POI_son/"+poi[i].getAttribute('label').split(".")[0]+".ogg",poi[i].getAttribute('label').split(".")[0]);
					batchPoi.push(marker);
					
					//map.addOverlay(marker, baseIconImg); 
				}
			}
			mgr.addMarkers(batchPoi, 9,16);//on ajoute le lot de marker au marker manager
			mgrRM.addMarkers(batchPoiRM, 9,16);//on ajoute le lot de marker au marker manager
			
		});
		
		
		
		
		
		
		
		
		GEvent.addListener(map, "click", function(marker, point) {MonPoint=point;handleClicks(point); }); 
		

		
		GDir1 = new GDirections();
		GEvent.addListener(GDir1, "error", function (){});

		GEvent.addListener(GDir1, "load", function()
		{
			
			var polyline = GDir1.getPolyline();
			pLinePoints = Array();
			for (var n = 0 ; n < polyline.getVertexCount() ; n++ ) {
				pLinePoints.push(polyline.getVertex(n));
			}
			if(pLine){map.removeOverlay(pLine);}
			pLine = new GPolyline(pLinePoints, ColorLine, LargeurLine, AlphaLine);
			map.addOverlay(pLine);
			$('distance').innerHTML  = parseInt(parseInt(GDir1.getDistance().meters)/1000) + "km <small>(" + parseInt(parseInt(GDir1.getDuration().seconds)/3600) + "h" + parseInt((parseInt(GDir1.getDuration().seconds)/3600-parseInt(parseInt(GDir1.getDuration().seconds)/3600))*60) + "min)</small>"
			
			if(GDir1){GDir1.clear();}
			
			
		}); 
		
		
		
		
		
		
	}
	
	
	var zoom_slider = $('slider'),rgb_slider = $('rgb_slider'),width_slider = $('width_slider'),alpha_slider = $('alpha_slider'), box = $('zoom_element');;
	new Control.Slider(zoom_slider.down('.handle'), zoom_slider, {
		axis:'vertical',
		range: $R(1, 15),
		sliderValue: 7,
		values: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
		onSlide: function(value) {
					$('slider_handle').style.backgroundImage = 'url("zoom.php?num='+(16-value)+'")';
				},
		onChange: function(value) { 
			$('slider_handle').style.backgroundImage = 'url("./image/slider.png")';
			mgr.clearMarkers();
			mgr.addMarkers(batchPoi, 16-value,16);//on ajoute le lot de marker au marker manager
			mgr.refresh();
			mgrRM.clearMarkers();
			mgrRM.addMarkers(batchPoiRM, 16-value,16);//on ajoute le lot de marker au marker manager
			mgrRM.refresh();
		}
	});
	new Control.Slider(width_slider.down('.handle3'), width_slider, {
		range: $R(0, 25),
		sliderValue: 4,
		onSlide: function(value) {
					box.setStyle({ height: Math.round(value) +"px" });
					
				},
		onChange: function(value) { 
			box.setStyle({ height: Math.round(value) +"px" });
			LargeurLine = Math.round(value);
			if(pLine){
				pLine.setStrokeStyle({weight:LargeurLine});
				//pLine.redraw(true);
			}
		}
	});
	new Control.Slider(alpha_slider.down('.handle4'), alpha_slider, {
		range: $R(0, 1),
		sliderValue: 0.7,
		onSlide: function(value) {
					box.setStyle({ opacity: value });
				},
		onChange: function(value) { 
					AlphaLine = value;
			if(pLine){
				pLine.setStrokeStyle({opacity:AlphaLine});
				//pLine.redraw(true);
			}
		}
	});
	new Control.Slider(rgb_slider.select('.handle2'), rgb_slider, {
		range: $R(0, 255),
		sliderValue: [255, 204, 0],
		onSlide: function(values) {
					box.setStyle({ backgroundColor: "rgb("+ values.map(Math.round).join(',') +")" });
				},
		onChange: function(values) { 
					box.setStyle({ backgroundColor: "rgb("+ values.map(Math.round).join(',') +")" });
			ColorLine = rgb(values.map(Math.round)[0],values.map(Math.round)[1],values.map(Math.round)[2]);
			if(pLine){
				pLine.setStrokeStyle({color:ColorLine});
				//pLine.redraw(true);
			}
		}
	});

	
	
	setTimeout("hidetomtom();",10000);
	if(navigator.appName == "Microsoft Internet Explorer"){
		swfu = new SWFUpload({ upload_url : "./upload.php5",
			flash_url : "./javascript/swfupload_f9.swf",
			file_size_limit : "20480",
			post_params: {"PHPSESSID" : ""},
			file_types : "*.ov2;*.itn;*.kml;*.asc;*.gpx",
			file_types_description : "TomTom",
			file_upload_limit : 100,
			file_queue_limit : 0,
			custom_settings : {
				progressTarget : "fsUploadProgress",
				cancelButtonId : "btnCancel"
			},
		debug: false,

			// The event handler functions are defined in handlers.js
			file_queued_handler : fileQueued,
			file_queue_error_handler : fileQueueError,
			file_dialog_complete_handler : fileDialogComplete,
			upload_start_handler : uploadStart,
			upload_progress_handler : uploadProgress,
			upload_error_handler : uploadError,
			upload_success_handler : uploadSuccess,
			upload_complete_handler : uploadComplete,
			queue_complete_handler : queueComplete	// Queue plugin event


		}); 	
	}else{
		swfu = new SWFUpload({ upload_url : "../upload.php5",
			flash_url : "./javascript/swfupload_f9.swf",
			file_size_limit : "20480",
			post_params: {"PHPSESSID" : ""},
			file_types : "*.ov2;*.itn;*.kml;*.asc;*.gpx",
			file_types_description : "TomTom",
			file_upload_limit : 100,
			file_queue_limit : 0,
			custom_settings : {
				progressTarget : "fsUploadProgress",
				cancelButtonId : "btnCancel"
			},
		debug: false,

			// The event handler functions are defined in handlers.js
			file_queued_handler : fileQueued,
			file_queue_error_handler : fileQueueError,
			file_dialog_complete_handler : fileDialogComplete,
			upload_start_handler : uploadStart,
			upload_progress_handler : uploadProgress,
			upload_error_handler : uploadError,
			upload_success_handler : uploadSuccess,
			upload_complete_handler : uploadComplete,
			queue_complete_handler : queueComplete	// Queue plugin event


		}); 	
	}
	
	var uploadSuccessEventHandler = function (file, server_data) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; 
	
	Rico.loadModule('Accordion');
	Rico.onLoad( function() {
		new Rico.Accordion( $$('div.panelheader'), $$('div.panelContent'),
		{panelHeight:230, hoverClass: 'mdHover', selectedClass: 'mdSelected'});
		
	});
	
	
}

j = 0;
function handleClicks( point,marker){
	
	lastpoint = point; 
	
	if(marker){ 
		map.removeOverlay(marker); 
	} else { 
		geocoder.getLocations(point, function(addresses) {
			if(addresses.Status.code != 200) {
					alert("reverse geocoder failed to find an address for " + point.toUrlValue());
			} else { 
				var result = addresses.Placemark[0];
				if (result != null) { 
					var point = MonPoint;
					ListePoint = CreationDuPoint(point,result.address,j);
					newadress = result.address;
					map.addOverlay(ListePoint);
					
				} else { //alert("Sorry, we were unable to geocode that address");
					var point = MonPoint;
					ListePoint = CreationDuPoint(point,"point "+j,j);
					newadress= "point "+j;
					map.addOverlay(ListePoint);
				} 
				if(navigator.appName == "Microsoft Internet Explorer"){
					//$('listpoint').style.height = parseInt(document.defaultView.getComputedStyle($('listpoint'), null).height.split("px")[0]) + 15;
					
				}else{
					
					$('listpoint').style.height = parseInt(document.defaultView.getComputedStyle($('listpoint'), null).height.split("px")[0]) + 15 + "px";
				}
				var li = document.createElement("li");
				li.setAttribute("id", 'new_'+j);
				li.setAttribute("title", newadress);
				li.appendChild(document.createTextNode(newadress));
				$('listpoint').appendChild(li);
				
				Sortable.destroy('listpoint');

				Sortable.create('listpoint', { onUpdate:function(){initWaypoints();redrawflag();} });
				
				initWaypoints();
				
				j = j + 1;
			}
		});
		
	}  
} 


function CreationDuPoint(point, adress, num) { //itinéraire
	var baseImage = new GIcon();
	baseImage.iconSize=new GSize(24,24);
	baseImage.shadowSize=new GSize(20,22);
	baseImage.iconAnchor=new GPoint(3,24);
	baseImage.infoWindowAnchor=new GPoint(5,1);
	if($('showdir').checked == true){
		if(num==0){
			var img = './image/flag_depart.png';
		}else{
			var img = './image/flag_arrive.png';
		}
	}else{
		var img = './flag.php?num=';
	}	
	var MonIcone = new GIcon(baseImage, img, null, null);
	var marker = new GMarker(point,{draggable:true,icon:MonIcone});
	marker.point = point;
	marker.lat = point.x;
	marker.lon = point.y;
	marker.adresse = adress;
	marker.num = num;
	MesEtapes[num] = marker;
	GEvent.addListener(marker, 'dragend', function(point) {
		MesEtapes[marker.num].point = point;
		MesEtapes[marker.num].lat = point.x;
		MesEtapes[marker.num].lon = point.y;
		initWaypoints();
	});
	
	GEvent.addListener(marker, "click", function() {
		html = "<span id='nom_"+num+"'>"+MesEtapes[num].adresse+"</span><br/><input type='button' value='supprimer' onclick='delpoi(\""+num+"\");' />";
		marker.openInfoWindowHtml(html);
		new Ajax.InPlaceEditor('nom_'+num,null,{savingText:"Changement en cours...",clickToEditText:"Click pour modifier",callback: function(form, value) { MesEtapes[num].adresse=value;$('new_'+num).innerHTML=value;$('new_'+num).setAttribute("title", value); ;map.closeInfoWindow(); }});
	});
	if(MesEtapes[num-1] && num >= 2){
		MesEtapes[num-1].setImage('./flag.php?num='+(num-1));
	}
	return marker;
	
}

function delpoi(num){
	map.removeOverlay(MesEtapes[num]);
	MesEtapes[num]= null;
	$('new_'+num).remove();
	map.closeInfoWindow();
	initWaypoints();
	redrawflag();
}
function hidetomtom(){
	if(map.isLoaded() == true){
		new Effect.Opacity('tomtomheaven', { from: 1.0, to: 0.0, duration: 5.0 });
		setTimeout("$('tomtomheaven').style.display='none';",6000);
	}else{
		setTimeout("hidetomtom();",1000);
	}
}
function CreationDuMarqueur(point,ico,son,label) { //radar
	var marker = new GMarker(point,ico);
	marker.type = label;
	GEvent.addListener(marker, 'click', function() {
		map.setCenter(marker.getPoint(),12);
		Sound.play(son,{replace:false});
	});
	
	return marker;
}

function hauteur_fenetre(){ //determine la hauteur de la fenettre du navigateur

	var windowHeight = 0;
	if (typeof(window.innerHeight) == 'number') {
		windowHeight = window.innerHeight-2;
	} else {
		if (document.body && document.body.clientHeight) {
			//windowHeight = document.body.clientHeight;
			windowHeight = document.documentElement.clientHeight-2;
		} else {
			if (document.documentElement && document.documentElement.clientHeight) {
				windowHeight = document.documentElement.clientHeight-2;
			}
		}
	}
	return windowHeight;
}

var show;
function open_close(div){
	var conteneur = window.$(div);
	if (conteneur.style.display == "none"){
		conteneur.style.display = "block";
	} else if (conteneur.style.display == "block"){
		conteneur.style.display = "none";
	}else{
		conteneur.style.display = "none";
	}
}

function initWaypoints(){
	 
	
	if($('showdir').checked == true && j > 0){
		var liste = Sortable.serialize('listpoint');
		t_liste = liste.split("&");
		liste = [];
		for(var i=0; i<t_liste.length; i++)
		{
			liste.push(t_liste[i].split("=")[1]);
			//alert(MesEtapes[t_liste[i].split("=")[1]].adresse);
		}
		
		var waypoints = [];
		for(var i = 0; i < j+1; i++){
			if(MesEtapes[liste[i]]){
				waypoints.push(MesEtapes[liste[i]].point);}
		}
		GDir1.loadFromWaypoints(waypoints, {getPolyline:true,getSteps:false});
	}

}
function redrawflag(){
	var liste = Sortable.serialize('listpoint');
	t_liste = liste.split("&");
	liste = [];
	for(var i=0; i<t_liste.length; i++){
		liste.push(t_liste[i].split("=")[1]);
	}
	if($('showdir').checked == true){ //si on affiche le chemin, on affiche les icone adequate
		MesEtapes[liste[0]].setImage('./image/flag_depart.png');
		for(var i = 1; i < liste.length-1; i++){
			MesEtapes[liste[i]].setImage('./flag.php?num='+i);
		}
		MesEtapes[liste[liste.length-1]].setImage('./image/flag_arrive.png');
	}else{
		for(var i = 0; i < liste.length; i++){
			MesEtapes[liste[i]].setImage('./flag.php?num=');
		}
	}

}
function resset(){
	MesEtapes.clear;
	$('listpoint').innerHTML = "";
	$('distance').innerHTML = "";
	map.clearOverlays();
	mgr.refresh();
	mgrRM.refresh();
	j=0;
	if(pLine){map.removeOverlay(pLine);}
	if(GDir1){GDir1.clear();}
	// $('menu').style.height = "140px";
	$('listpoint').style.height = "25px";
}
function expor(){
	var liste = Sortable.serialize('listpoint');
	
	var retour = "";
	t_liste = liste.split("&");
	liste = [];
	for(var i=0; i<t_liste.length; i++)	{
		liste.push(t_liste[i].split("=")[1]);
	}
	for(var i=0; i<j+1; i++)	{
		if(MesEtapes[liste[i]]){
			retour = retour + MesEtapes[liste[i]].adresse + "|" + MesEtapes[liste[i]].lat + "|" + MesEtapes[liste[i]].lon;
			if(i<t_liste.length-1){retour = retour + "&";}
		}
	}
	$("input_liste").value = retour;
	//alert($("input_liste").value);
	pop_it("exp");
}
var win;
function pop_it(the_form) {
	my_form = eval(document.forms[the_form]);

	win = window.open("./wait.php", "popup", "height=10,width=10,menubar='no',toolbar='no',location='no',status='no',scrollbars='no'");
	my_form.action = "./export.php5";
	my_form.target = "popup";
	my_form.submit();

	//setTimeout("win.close()",1000);
}
function impor(){
	swfu.selectFiles();
}
function importation(data){
	resset();
	//alert(data);
	xml = GXml.parse(data);
	
	var poi = xml.documentElement.getElementsByTagName('poi');
	
	
	for (var i = 0; i < poi.length; i++) {
		var point = new GLatLng(parseFloat(poi[i].getAttribute('lat')), parseFloat(poi[i].getAttribute('lon')));
		marker = CreationDuPoint(point, poi[i].getAttribute('label'), i);
		map.addOverlay(marker); 
		
		if(navigator.appName == "Microsoft Internet Explorer"){
			//$('listpoint').style.height = parseInt(document.defaultView.getComputedStyle($('listpoint'), null).height.split("px")[0]) + 15;
			
		}else{
			
			$('listpoint').style.height = parseInt(document.defaultView.getComputedStyle($('listpoint'), null).height.split("px")[0]) + 15 + "px";
		}
		
		var li = document.createElement("li");
		li.setAttribute("id", 'new_'+i);
		li.setAttribute("title", poi[i].getAttribute('label'));
		li.appendChild(document.createTextNode(poi[i].getAttribute('label')));
		$('listpoint').appendChild(li);
		
		Sortable.destroy('listpoint');

		Sortable.create('listpoint', { onUpdate:function(){initWaypoints();redrawflag()} });
		
		
		j=i+2;
	}
	j=j-1;
	if(i>0){initWaypoints();}
}

function showmenu(element, type){
	if(type == 0){
		$(element).style.right = "0px";
	}else if(type == 1){
		$(element).style.right = "-100px";
	}
}
function rgb (r, g, b) {
	var n = (r<<16) + (g<<8) + b;    //entier base 10
	var iValColor=dec2hex(n); //entier en base 16
	var sChaineColor='';
	for(iCharChaineColor=iValColor.length;iCharChaineColor<6;iCharChaineColor++){
		sChaineColor='0'+sChaineColor;
	}
	return '#' + sChaineColor + iValColor;
}

function dec2hex(dec){
	var hexa='0123456789ABCDEF',hex=''
	while (dec>15){
		tmp=dec-(Math.floor(dec/16))*16;
		hex=hexa.charAt(tmp)+hex;
		dec=Math.floor(dec/16);
	}
	hex=hexa.charAt(dec)+hex;
	return(hex);
}
function MsgBox(type,data,autohide){
	if(type == 'txt'){
		$('MsgBoxContent').innerHTML = data;
	}else if (type == 'file'){
		new Ajax.Request(data, {
asynchronous:true,  
method: 'post',
onSuccess: function(transport) {
				$('MsgBoxContent').innerHTML = transport.responseText; //affichage des points
			}
		});
	}
	var MsgBox = $('MsgBox');
	var width = 300;//largeur de l'élément à positionner
	myParent = MsgBox.parentNode;
	var pWidth = myParent.offsetWidth;//Largeur de l'élément parent
	var posX = (pWidth/2)-(width/2);//Calcul de la position en X
	MsgBox.style.left = posX+"px";
	
	//Effect.Grow(MsgBox);
	MsgBox.style.display = 'block';
	
	if(autohide == 1){
		setTimeout("HideMsgBox();",2000);
	}
}
function HideMsgBox(){
	$('MsgBox').fade();
}
function afficheRadar(type, show){
	listeTypeRadar = batchPoi.findAll(function(s) {return s.type == type;});
	if(type == "RM"){listeTypeRadar = batchPoiRM;}
	if(show == true){
		listeTypeRadar.each(function(s) {s.show();});
		mgr.refresh();
		mgrRM.refresh();
	}else{
		listeTypeRadar.each(function(s) {s.hide();});
	}
	
}
function connection(){
	MsgBox('file','connexion.php5',0); 
	setTimeout ("$('utilisateur').focus()",500);
}


//]]>