//////////////////////////////////////////////////////////////
//		Carte_PBP_2_js_v.js.
//
// v=1.
//////////////////////////////////////////////////////////////

function InitGoogle()
{
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("region"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GScaleControl());
	}
  
	if (bSat)
		map.setMapType(G_SATELLITE_MAP);

	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	map.enableScrollWheelZoom();

	InitGoogle2();
}

/////////////////////////////////////////////

var ListeVehi = [];

function TypeV(idVehi, marker, html, selected, bAff)
{
	this.idVehi;// = idVehi;
	this.marker;// = marker;
	this.html;
	this.selected;
	this.bAff;
}

function InitRaffr()
{
	RaffraichirAuto();
	setInterval( "RaffraichirAuto()", 300*1000);
}

function RaffraichirAuto()
{
	ChargeVehi();
}

function VehiEffaceTous()
{
	N = 0;
	if (ListeVehi != null)
		N = ListeVehi.length;
	if (N > 0) {
		for (i = 0; i < N; i++) {
			if (ListeVehi[i].bAff) {
				map.removeOverlay(ListeVehi[i].marker);
				ListeVehi[i].bAff = false;
			}
		}
	}
}

function MajChkVehi()
{
	var bChanged = false;
	for (var i = 0; i < ListeVehi.length; i++) {
		var idVehi = ListeVehi[i].idVehi;
		var c = document.getElementById('CB' + idVehi);
		if (c == null)
			continue;
		b = c.checked;
		var aa = ListeVehi[i].selected; var bb = b; var cc;
		if ((aa && bb) || (!aa && !bb)) cc = false; else cc = true;
		bChanged = bChanged || cc;
		ListeVehi[i].selected = b;
	}
	return bChanged;
}

function CheckVehi(i)
{
	var b = MajChkVehi();
	if (b) {
		AfficheVehi();
	}
}

function CheckVehiAll()
{
	c = document.getElementById('CBALL').checked;
	for (var i = 0; i < ListeVehi.length; i++) {
		var cb = document.getElementById('CB' + ListeVehi[i].idVehi);
		if (cb != null)
			cb.checked = c;
	}
	CheckVehi(0);
}

var TabIconesC = new Array("c32_1.gif", "c32_2.gif", "c32_3.gif", "c32_4.gif", "c32_5.gif", "c32_6.gif", "c32_7.gif", "c32_8.gif");
var TabIconesV = new Array("v32_1.gif", "v32_2.gif", "v32_3.gif", "v32_4.gif", "v32_5.gif", "v32_6.gif", "v32_7.gif", "v32_8.gif");

function ChargeVehi()
{
	var request = GXmlHttp.create();
	url = '/course/cmdfile.php?CMD=FLEET&PARAM1=0&CONTENTTYPE=text%2Fxml&UTCOFFSET=-120&COURSE=8&DESCR=1&VITESSE=1';
	url = url + '&RND=' + Math.random();
	request.open('GET', url, true);
	request.onreadystatechange = function() {

		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var baseIcon;
			// Types.
			var typesElements =  xmlDoc.documentElement.getElementsByTagName("TYPES"); typesElements = typesElements[0];
			if (typesElements == null)
				return;//
			// Véhicules.
			if (ListeVehi.length > 0) {
				VehiEffaceTous();
			}
			ListeVehi = [];

			var posElements = xmlDoc.documentElement.getElementsByTagName("POSITIONS"); posElements = posElements[0];
			var markers = posElements.getElementsByTagName("POS");

			baseIcon = new GIcon();
			baseIcon.shadow = "http://" + Serveur + "/images/vide.gif";
			baseIcon.iconSize = new GSize(32, 32);
			baseIcon.shadowSize = new GSize(2, 2);
			baseIcon.iconAnchor = new GPoint(16, 16);
			baseIcon.infoWindowAnchor = new GPoint(32, 16);
			baseIcon.infoShadowAnchor = new GPoint(32, 16);

			for (var i = 0; i < markers.length; i++) {
					var lati = markers[i].getElementsByTagName('LATI'); lati = lati[0]; lati = parseFloat(GXml.value(lati));
					var longi = markers[i].getElementsByTagName('LONGI'); longi = longi[0]; longi = parseFloat(GXml.value(longi));
						var nom = markers[i].getElementsByTagName('NAME'); nom = nom[0]; nom = GXml.value(nom);
						var nomtype = markers[i].getElementsByTagName('TYPE'); nomtype = nomtype[0]; nomtype = GXml.value(nomtype);
						var idVehi = markers[i].getElementsByTagName('ID_VEHICLE'); idVehi = idVehi[0]; idVehi = GXml.value(idVehi);
						var dh = markers[i].getElementsByTagName('DATE'); dh = dh[0]; dh = GXml.value(dh);
						var etat = markers[i].getElementsByTagName('STATUS'); etat = etat[0]; etat = GXml.value(etat);
						var descr = markers[i].getElementsByTagName('DESCR'); descr = descr[0]; descr = GXml.value(descr);
						var vitesse = markers[i].getElementsByTagName('VITESSE'); vitesse = vitesse[0]; vitesse = GXml.value(vitesse);
						var point = new GLatLng(lati, longi);
						var icon = new GIcon(baseIcon);
						var P = descr.indexOf('#');
						nomtype = 'V';
						if (P >0) {
							nomtype = descr.substr(0, P);
							descr = descr.substr(P + 1);
							if (nomtype == 'C')
								nomtype = 'COUCHE';
						}
						if (nomtype == 'COUCHE')
							icon.image = "http://" + Serveur + "/images/maprace/pbp/" + TabIconesC[i % TabIconesC.length];
						else
							icon.image = "http://" + Serveur + "/images/maprace/pbp/" + TabIconesV[i % TabIconesV.length];

						var html = '';
						if (dh != '') {
							if (Langue == 'EN') {
								html = 'Competitor: <b>' + nom + '</b><br>Last position: <b>' + dh + '</b>';
								if (vitesse != '')
									html = html + '<br>Speed: <b>' + vitesse + ' km/h</b>';
							} else {
								html = 'Participant : <b>' + nom + '</b><br>Dernière position : <b>' + dh + '</b>';
								if (vitesse != '')
									html = html + '<br>Vitesse : <b>' + vitesse + ' km/h</b>';
							}
						} else {
							if (Langue == 'EN')
								html = 'Competitor: <b>' + nom + '</b><br>No position';
							else
								html = 'Participant: <b>' + nom + '</b><br>Pas de position reçue';
						}

						var marker = createMarker2(point, icon, html);

						var V = new TypeV; //(idVehi, marker);
						V.idVehi = idVehi;
						V.nomtype = nomtype;
						V.marker = marker;
						V.selected = false;
						V.bAff = false;
						V.html = html;
						ListeVehi.push(V);

			} // for marker

			MajChkVehi();
			AfficheVehi();

		} // if readyState
	} // fin de fonction.
	request.send(null);
}

function createMarker2(point, icon, html) 
{
	var marker = new GMarker(point, icon);
	if (html != '') {
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
  			});
	}
	return marker;
}

function AfficheVehi()
{
	for (var i = 0; i < ListeVehi.length; i++) {
		if (ListeVehi[i].selected && !ListeVehi[i].bAff) {
			map.addOverlay(ListeVehi[i].marker);
			ListeVehi[i].bAff = true;
			idVehi = ListeVehi[i].idVehi;
			if (ListeVehi[i].nomtype == 'COUCHE')
				document.getElementById('Legende' + idVehi).src = '/images/maprace/pbp/' + TabIconesC[i % TabIconesV.length];
			else
				document.getElementById('Legende' + idVehi).src = '/images/maprace/pbp/' + TabIconesV[i % TabIconesV.length];
		} else if (!ListeVehi[i].selected && ListeVehi[i].bAff) {
			map.removeOverlay(ListeVehi[i].marker);
			ListeVehi[i].bAff = false;
			idVehi = ListeVehi[i].idVehi;
			document.getElementById('Legende' + idVehi).src = '/images/vide.gif';
		}
	}
}

function ShowInfoVehi(i)
{
	if (!ListeVehi[i].bAff)
		return;
	marker = ListeVehi[i].marker;
	html = ListeVehi[i].html;
	marker.openInfoWindowHtml(html);
}

function ShowInfo(idVehi)
{
	for (var i = 0; i < ListeVehi.length; i++) {
		if (ListeVehi[i].idVehi == idVehi) {
			ShowInfoVehi(i);
			break;
		}
	}
}


/////////////////////////////////////////////

function MajChk()
{
	return false;
}

/////////////////////////////////////////////
var ListeType = [];

function TypeM(nom, icone) {
   this.nom;
   this.icone;
   this.selected;
}

var baseIcon;

function InitTypes()
{
	baseIcon = new GIcon();
	baseIcon.shadow = "http://" + Serveur + "/images/vide.gif";
	baseIcon.iconSize = new GSize(16, 16);
	baseIcon.shadowSize = new GSize(2, 2);
	baseIcon.iconAnchor = new GPoint(8, 8);
	baseIcon.infoWindowAnchor = new GPoint(8, 8);
	baseIcon.infoShadowAnchor = new GPoint(0, 0);
}

var TabMarques = [];

function AfficheMarques()
{
	var bAff;
	for (var i = 0; i < TabMarques.length; i++) {
		bAff = true;
		if (bAff) {
			if (!TabMarques[i].bAff)
				map.addOverlay(TabMarques[i]);
		} else {
			if (TabMarques[i].bAff)
				map.removeOverlay(TabMarques[i]);
		}
		TabMarques[i].bAff = bAff;
	}
}

var iitt = 0;

function CreeMarque(Nom, Type, Lati, Longi, Descr)
{
	var iTypeMarque = -1;
	var point = new GLatLng(Lati, Longi);
	var icon = new GIcon(baseIcon);
	icon.image = "http://" + Serveur + "/images/types/d0.gif";
	for (var itype = 0; itype < ListeType.length; itype++) {
		if (ListeType[itype].nom == Type) {
			icon.image = "http://" + Serveur + "/course/images/types/" + ListeType[itype].icone + ".gif";
			iTypeMarque = itype;
			break;
		}
	}
	var html = '';
	if (Descr != '') {
		if (Langue == 'EN')
			html = 'Control: <b>' + Nom + '</b><br>Description: <b>' + Descr + '</b>';
		else
			html = 'Contrôle : <b>' + Nom + '</b><br>Description : <b>' + Descr + '</b>';
	} else {
		if (Langue == 'EN')
			html = 'Control: <b>' + Nom;
		else
			html = 'Contrôle : <b>' + Nom;
	}
	var marker = new GMarker(point, icon);
	if (html != '') {
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
  			});
	}
	//marker.nom_type = Type;
	marker.itype = iTypeMarque;
	marker.bAff = false;
	TabMarques.push(marker);
}

var xhr_objectTrj = null; 

/////////////////////////////////////////////

function CmdCL(lati,longi)
{
	map.setCenter(new GLatLng(lati, longi));
}

function CmdCLZ(lati,longi,z)
{
	map.setCenter(new GLatLng(lati, longi), z);
}

function CmdCLZ2(lati,longi,w)
{
	zoomLevel = getZoomLevel(lati,w);
	map.setCenter(new GLatLng(lati, longi), zoomLevel);
}

function CmdCF()
{
	VehiAfficheTous(true);
}

function getZoomLevel(lati,w)
{
	longi = 0;
	if (lati == 0) {
		centre = map.getCenter();
		lati = centre.lat();
		longi = centre.lng();
	}
	// Calcul d'un rectangle très aplati (tant pis pour le format réel de l'écran).
	// //Calcul d'un carré (tant pis pour le format réel de l'écran).
	R = 6400000;
	dLongi = w / (R * Math.cos(lati * Math.PI / 180));
	dLongi = dLongi * 180 / Math.PI;
	//dLongi = dLongi * 0.8; // pour les arrondis.
	dLati = w / R;
	dLati = dLati * 180 / Math.PI;
	dLati = dLati / 10; // Rectangle très aplati.
	sw = new GLatLng(lati - dLati, longi - dLongi);
	ne = new GLatLng(lati + dLati, longi + dLongi);
	bounds = new GLatLngBounds(sw, ne);
	l = map.getBoundsZoomLevel(bounds);
	l = l + 1; // Ca parait mieux...
	return l;
}

function CmdZ2(w)
{
	level = getZoomLevel(0, w * 1000);
	CmdZ(level);
}

function CmdZ(zoomLevel)
{
	map.setZoom(zoomLevel);
}

function CmdZP()
{
	zoomLevel = map.getZoom();
	zoomLevel = zoomLevel + 1;
	map.setZoom(zoomLevel);
}

function CmdZM()
{
	zoomLevel = map.getZoom();
	zoomLevel = zoomLevel - 1;
	map.setZoom(zoomLevel);
}


var isClick = false;
var mouseStartX = -1;
var mouseStartY = -1;
var mouseEndX = -1;
var mouseEndY = -1;

var minX = 0;
var maxX = 0;
var minY = 0;
var maxY = 0;

var SelectionDiv;
var theDiv;

var deltaXimg = 0; //277;
var deltaYimg = 0; //112;

/**************************************************
 *  Appel de la nouvelle carte.
 **************************************************/

function CallZoomFen(x1, y1, x2, y2) 
{
}

function CarteDeplace(deplace)
{
	CarteDeplace2(deplace);
}

function CarteDeplace2(deplace)
{
	if (deplace == 'E') {
		map.panDirection(-1, 0);
	} if (deplace == 'SE') {
		map.panDirection(-1, -1);
	} if (deplace == 'S') {
		map.panDirection(0, -1);
	} if (deplace == 'SW') {
		map.panDirection(1, -1);
	} if (deplace == 'W') {
		map.panDirection(1, 0);
	} if (deplace == 'NW') {
		map.panDirection(1, 1);
	} if (deplace == 'N') {
		map.panDirection(0, 1);
	} if (deplace == 'NE') {
		map.panDirection(-1, 1);
	} 
}

///////////////////////
// Appli.

  var Formulaire;
  
function Init()
{
}
  
/////////////////////////////////
// Marques.

function BackButton()
{
	if (window.history.forward(1) != null)
		window.history.forward(1);
}

///////////////

function MenuVues(selObj)
{
	value = selObj.options[selObj.selectedIndex].value;
	Init();
	Formulaire.VUE.value = value;
	Formulaire.CMD.value = "VUE";
	selObj.selectedIndex=0;
	bRet = DemandeCarte();
	if (bRet)
		Formulaire.submit();
}

//////////////////
function largeur_fenetre()
{
	if (window.innerWidth) {
		return window.innerWidth  ;
	} else if (document.documentElement && document.documentElement.clientWidth) {
    	//IE 6+ in 'standards compliant mode'
 		return document.documentElement.clientWidth;
	} else {
		return screen.width - 50;
	}
}

function hauteur_fenetre()
{
	if (window.innerHeight) {
		return window.innerHeight  ;
	} else if (document.documentElement && document.documentElement.clientHeight) {
    	//IE 6+ in 'standards compliant mode'
 		return document.documentElement.clientHeight;
	} else {
		return screen.height - 100;
	}
}

var old_w = 0;
var old_h = 0;

function Resize()
{
	m = document.getElementById('region');
	w = largeur_fenetre();
	h = hauteur_fenetre();
	if (old_w == w && old_h == h)
		return;
	old_w = w;
	old_h = h;
	w = w - 200;
	w = w - 60; // 140 -> 200 : 60.
	w = w - 19; // icone : 13 -> 32 : 19
	h = h - 140;
	if (ie)
		h = h - 15;
	m.style.width = w + 'px';
	m.style.height = h + 'px';
	w1 = Math.floor((w - 323) / 2);
	w3 = w - 232 - w1;
	h1 = Math.floor((h - 168) / 2);
	h3 = h - 168 - h1;
//alert('w='+w+'/w1='+w1+'/w3='+w3);
	m = document.getElementById('a1');
	m.width = w1;
	m = document.getElementById('a3');
	m.width = w3;
	m = document.getElementById('b1');
	m.height = h1;
	m = document.getElementById('b3');
	m.height = h1;
	m = document.getElementById('d1');
	m.height = h3;
	m = document.getElementById('d3');
	m.height = h3;
	m = document.getElementById('e1');
	m.width = w1;
	m = document.getElementById('e3');
	m.width = w3;
}

function InitGoogle2()
{
	InitCentrage();
	CreeTypes();
	MajChk();
	// On lance la suite de façon asynchrone.
	window.setTimeout("Suite1();", 200);
}

function Suite1()
{
	SablierOn();
	CreeTrk();
	SablierOff();
	window.setTimeout("Suite2();", 100);
}

function tri_marques(a, b)
{
	return b.itype - a.itype;
}

function Suite2()
{
	SablierOn();
	CreeTabMarques();
	
	AfficheMarques();
	SablierOff();
}

function SablierOn()
{
	document.getElementById('img_load').src = "/images/maprace/miniglobe.gif";
}

function SablierOff()
{
	document.getElementById('img_load').src = "/images/vide.gif";
}

