function getVar(n)
{
	var i = location.href.substring(location.href.indexOf("?")+1, location.href.length)+"&";
//	if (i.indexOf("#")!=-1);
//		i = i.substring(0,i.indexOf("#"))+"&";
	var v=0;
	{
		n = n + "=";
		var t = n.length;
		if (i.indexOf(n)!=-1)
			v = i.substring(i.indexOf(n)+t,i.length).substring(0,i.substring(i.indexOf(n)+t,i.length).indexOf("&"));
	}
	return v;
} 

function getOptions()
{
	var o;
	var r = new Array;
  for(var v in mapRoutes.liste) 
  {
  	if (v.charAt(0)=="[" && mapRoutes.Get(v)==1) r.push(v);
  }
	o = r.join(","); 
	
  var elm = document.getElementsByName ( "inputFiltre[]");
  r = new Array;
  for ( var i = 0; i < elm.length; i++) 
  	r.push(elm[i].checked);
	o += ";"+r.join(","); 

  o += ";"+map.getExtent().toArray().join(",");

	return o;
}

function setinvdisplay(qui)
{
  if (qui.className)
  {
    if (qui.className=='plus') qui.className='moins';
    else if (qui.className=='moins') qui.className='plus';
  }

  if (qui.style.display)
  {
    if (qui.style.display != 'none')
      qui.style.display = 'none';
    else
      qui.style.display = 'inline';
  }
  var nbr = qui.childElementCount
  for (var i=0; i<qui.childElementCount; i++)
  {
    passim_setinvdisplay(qui.children[i]);
  }
}

function showhide ( qui)
{
	if (qui.style.display != 'block')
  	qui.style.display = 'block';
	else
  	qui.style.display = 'none';
}

function plusmoins ( qui)
{
	if (qui.className)
  {
    if (qui.className=='plus') qui.className='moins';
    else if (qui.className=='moins') qui.className='plus';
  }
}

function showhidetools ( e)
{
	showhide ( document.getElementById("zoneoutils"));
	plusmoins ( document.getElementById("pmbt"));
	showhide ( document.getElementById("pmtp"));
	showhide ( document.getElementById("pmtm"));
}

function hashmap () 
{
  this.liste = new Array;
}

hashmap.prototype = {
	Set : function(foo,bar) {this.liste[foo] = bar;},
	Get : function(foo) {return this.liste[foo];},
	Is : function(foo) {return this.liste[foo]!=undefined;}
}

var map;
var layerEvts;
var mapRoutes  = new hashmap();
var paysRoutes = new Array;
var treeRoutes = new Array;
var paysRouteslength = 0;
var autreRoutes = 0;
var initRoutes = new Array;

function displayPopupHelp ( e)
{
	var ev = e || window.event;
	var xx = ev.pageX;
	var yy = ev.pageY;
	
	var div = document.getElementById('help');
  div.innerHTML = _T(this.id);
	div.style.top = yy +"px";
	div.style.left = xx +"px";
	div.style.display = 'block'
}

function hiddenPopupHelp ( e)
{
	var div = document.getElementById('help');
	div.style.display = 'none'
}

var filtreDateFrom = 0;
var filtreDateTo = 0;
var changeZone = 0;

function getFiltreDate ( he, mi, j, m, a)
{
  var now = new Date();
//  var dateNow = now.getTime()/1000-3600;
  now.setHours ( document.getElementById(he).value);
  now.setMinutes ( document.getElementById(mi).value);
  now.setDate ( document.getElementById(j).value);
  now.setMonth ( document.getElementById(m).value);
  now.setFullYear ( document.getElementById(a).value);
  var dateNew = Math.floor(now.getTime()/1000);
//  if (dateNew<dateNow) return 0;
  return dateNew;
}

function setFiltreDate( )
{
  document.getElementById("idf").checked = true;
  setFiltreDateF( );
}

function setFiltreDateF( )
{
	var request =  document.getElementById("idf");
	if (request.checked)
	{
	  filtreDateFrom = getFiltreDate ( "fhe", "fmi", "fj", "fm", "fa");
	  filtreDateTo   = getFiltreDate ( "the", "tmi", "tj", "tm", "ta");
	  if (filtreDateTo < filtreDateFrom) 
	  {
	    document.getElementById("idt").checked = false;
	    setFiltreDateT ();
	    filtreDateTo = 0;
	  }
	}
	else
	{
    document.getElementById("idt").checked = false;
    setFiltreDateT ();
		filtreDateFrom = 0;
		filtreDateTo   = 0;
	}
	
	updateMarkers();
}

function setFiltreDateT( )
{
	var request =  document.getElementById("idt");
	if (request.checked)
	{
	  document.getElementById("the").selectedIndex = 1+document.getElementById("fhe").selectedIndex
	  document.getElementById("tmi").selectedIndex = 1+document.getElementById("fmi").selectedIndex
	  document.getElementById("tj").selectedIndex = 1+document.getElementById("fj").selectedIndex
	  document.getElementById("tm").selectedIndex = 1+document.getElementById("fm").selectedIndex
	  document.getElementById("ta").selectedIndex = 1+document.getElementById("fa").selectedIndex
	}
	else
	{
	  document.getElementById("the").selectedIndex = 0;
	  document.getElementById("tmi").selectedIndex = 0;
	  document.getElementById("tj").selectedIndex = 0;
	  document.getElementById("tm").selectedIndex = 0;
	  document.getElementById("ta").selectedIndex = 0;
	}
}

function makeCombo ( nom, mini, maxi, off, sel, valeur, vide)
{
	var txt;
	var combo = new Array;
	combo.push("<select id='"+nom+"' size='1'>");
	
	if (vide)
		combo.push("<option value='-1' selected>--</option>");
	
	for ( var i = mini; i < maxi; i += off)
	{
		if (valeur)
		{
			txt = valeur[i];
		}
		else
		{
			txt = i+'';
			if (txt.length==1) txt = '0'+txt;
		}
		combo.push("<option value='"+i+"' "+(sel==i?"selected":"")+">"+txt+"</option>");
	}
	combo.push("</select>");
	return combo.join("");
}

function setInnerHTML ( qui, txt)
{
	if (document.getElementById)
  {
  	document.getElementById(qui).innerHTML = txt;
	}
  else if (document.all)
  {
    document.all[qui].innerHTML = txt;
  }
}

function loadTools ()
{
	var now = new Date();
	
	var comboFromHe = makeCombo ( 'fhe', 0, 24, 1, now.getHours());
	var comboFromMi = makeCombo ( 'fmi', 0, 60, 15, Math.floor(now.getMinutes()/15)*15);
	var comboFromJ  = makeCombo ( 'fj', 1, 32, 1, now.getDate());
	var comboFromM  = makeCombo ( 'fm', 0, 12, 1, now.getMonth(), months[lg]);
	var comboFromA  = makeCombo ( 'fa', now.getFullYear(), now.getFullYear()+2, 1, now.getFullYear(), null);

	var comboToHe = makeCombo ( 'the', 0, 24, 1, null, null, true);
	var comboToMi = makeCombo ( 'tmi', 0, 60, 15, null, null, true);
	var comboToJ  = makeCombo ( 'tj', 1, 32, 1, null, null, true);
	var comboToM  = makeCombo ( 'tm', 0, 12, 1, null, months[lg], true);
	var comboToA  = makeCombo ( 'ta', now.getFullYear(), now.getFullYear()+2, 1, null, null, true);
	
	var checkF = "<input id='idf' type='checkbox' onclick='setFiltreDateF();'/>";
	var checkT = "<input id='idt' type='checkbox' onclick='setFiltreDateT();'/>";

	var buttonD = "<input class='bt' name='butonDate' type='button' onclick='setFiltreDate();' value='"+_T('filtrer')+"'/>";

	var txt = new Array;
	txt.push("<p class='d1'>"+checkF+_T('du')+comboFromHe+comboFromMi+' '+comboFromJ+comboFromM+comboFromA+'</p>');
	txt.push("<p class='d2'>"+checkT+_T('au')+comboToHe+comboToMi+' '+comboToJ+comboToM+comboToA+'&nbsp;&nbsp;&nbsp;'+buttonD+'</p>');
//	txt.push("<p class='bt'>"+buttonD+"</p>");

	setInnerHTML ( "tools", txt.join(""));
}

function updateMarkers()
{
  var filtres = new Array;
  var elm = document.getElementsByName ( "inputFiltre[]");
  for ( var i = 0; i < elm.length; i++) 
  {
    if (elm[i].checked)
    {
      filtres[elm[i].value]=1;
    }
  }

  for ( var i = 0; i < layerEvts.markers.length; i++) 
  {
    if (!mapRoutes.Get(layerEvts.markers[i].idr) || !filtres[layerEvts.markers[i].etype] ||
    		(filtreDateFrom && !filtreDateTo && (layerEvts.markers[i].dd>filtreDateFrom || filtreDateFrom>layerEvts.markers[i].df)) ||
    		(filtreDateFrom && filtreDateTo && (layerEvts.markers[i].dd>filtreDateTo || filtreDateFrom>layerEvts.markers[i].df))
    	)
    {
      layerEvts.markers[i].display(false);
    }
    else
    {
      layerEvts.markers[i].display(true);
    }
  }
  showEvts ();
}

function addRoute ( p, r, e)
{
	var i = "["+p+"]"+r;
	if (!mapRoutes.Is(i))
	{
		if (paysRoutes[p]==undefined)
		{
			paysRoutes[p] = paysRouteslength++;

			treeRoutes[paysRoutes[p]] = new Array;
			treeRoutes[paysRoutes[p]]['caption'] = p;
			treeRoutes[paysRoutes[p]]['isOpen'] = false;
			treeRoutes[paysRoutes[p]]['isChecked'] = 2;
			treeRoutes[paysRoutes[p]]['onChangeCheckboxAfter'] = setTreeRouteOk;
			treeRoutes[paysRoutes[p]]['children'] = new Array;
		}

		if (paysRoutes[p]==0 && e && autreRoutes)
		{
			if (treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children']==undefined)
				treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'] = new Array;

	  	var it = treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'].length
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it] = new Array;
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it]['target'] = i;
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it]['caption'] = r;
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it]['isChecked'] = 2;
			 
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it]['onChangeCheckbox'] = setTreeRoute;
			treeRoutes[paysRoutes[p]]['children'][autreRoutes]['children'][it]['onChangeCheckboxAfter'] = setTreeRouteOk;
				
			if (initRoutes && initRoutes.length)
	  		mapRoutes.Set(i,(initRoutes[0].indexOf(i)==-1 ? 0 : 1));
	  	else
		  	mapRoutes.Set(i,1);
			
			return it;
		}		
		
  	var it = treeRoutes[paysRoutes[p]]['children'].length
		treeRoutes[paysRoutes[p]]['children'][it] = new Array;
		treeRoutes[paysRoutes[p]]['children'][it]['target'] = i;
		treeRoutes[paysRoutes[p]]['children'][it]['caption'] = r;
		treeRoutes[paysRoutes[p]]['children'][it]['isChecked'] = 2;
		treeRoutes[paysRoutes[p]]['children'][it]['onChangeCheckbox'] = setTreeRoute;
		treeRoutes[paysRoutes[p]]['children'][it]['onChangeCheckboxAfter'] = setTreeRouteOk;
						
		if (initRoutes && initRoutes.length)
  		mapRoutes.Set(i,(initRoutes[0].indexOf(i)==-1 ? 0 : 1));
  	else
	  	mapRoutes.Set(i,1);
  	
		return it;  	
  }
  return 0;
}

function setTreeRoute ( request)
{
	mapRoutes.Set(request.target, request.isChecked==2 ? 1 : 0);
}

function setTreeRouteOk ( request)
{
  updateMarkers();
}

function showRoutes ()
{
	var t = new Bs_Tree();
  t.useCheckboxSystem = true;
  t.checkboxSystemWalkTree = 3;
  t.initByArray(treeRoutes);
  t.drawInto('routes');

}

function showEvts ()
{
  var bounds = layerEvts.map.getExtent();
  
  var txt = new Array;

  txt.push("<table>");
  txt.push("<thead><tr>");
  txt.push("<th style='width:10%'>"+_T('icone')+"</th>");
  txt.push("<th style='width:10%'>"+_T('route')+"</th>");
  txt.push("<th style='width:80%'>"+_T('message')+"</th>");
  txt.push("</tr></thead>");
  txt.push("<tbody>");
  for ( var i = 0; i < layerEvts.markers.length; i++) 
  {
    if (layerEvts.markers[i].icon.imageDiv.style.display=="none") continue;
    
    var pt = layerEvts.markers[i].lonlat;
    if (bounds.containsLonLat(pt))
    	txt.push( layerEvts.markers[i].evt);
  }
  txt.push( "</tbody></table>");
    
	setInnerHTML ( "evts", txt.join(""));    
}

function setZone (request)
{
  if (request.value=="0") return;
  
  changeZone = 1;
  
  var reg = new RegExp("[|]+", "g");
  var extend = request.value.split ( reg);
  
  var bounds = new OpenLayers.Bounds ( extend[0], extend[1], extend[2], extend[3]);
  layerEvts.map.setCenter ( bounds.getCenterLonLat(), layerEvts.map.getZoomForExtent( bounds));
}

function loadZones ()
{
  var url = "mapserver2/getxml.php5?type=zones&lg="+lg;
  OpenLayers.loadURL(url, null, null, loadSuccessZones, loadFailure);
}

function loadSuccessZones(request) 
{
  var xml = request.responseXML;

  var zones = xml.getElementsByTagName ( "z");

	var txt = new Array;
  txt.push("<select onchange='setZone(this);' name='selectZone' size='1'>");
  for ( var i = 0; i < zones.length; i++) 
  {
    txt.push("<option value='"+zones[i].getAttribute("e")+"'>"+zones[i].getAttribute("t")+"</option>");
  }
  txt.push("</select>");

	setInnerHTML ( "zones", txt.join(""));    

  var zone = document.getElementsByName ( "selectZone");
  if (zone.length && !initRoutes.length)
  {
    zone[0].selectedIndex = 9;
    setZone(zone[0]);
  }
}

function loadFiltres ()
{
  var url = "mapserver2/getxml.php5?type=filtres&lg="+lg;
  OpenLayers.loadURL(url, null, null, loadSuccessFiltres, loadFailure);
}

function loadSuccessFiltres(request) 
{
  var xml = request.responseXML;

  var filtres = xml.getElementsByTagName ( "f");

	var txt = new Array;
  for ( var i = 0; i < filtres.length; i++) 
  {
    txt.push("<input name='inputFiltre[]' type='checkbox' value='"+filtres[i].getAttribute("v")+"' onclick='updateMarkers();'"+((!initRoutes.length && !i)?" checked":"")+((initRoutes.length && initRoutes[1][i]=="true")?" checked":"")+"/>"+filtres[i].getAttribute("t"));
  }
	setInnerHTML ( "filtres", txt.join(" - "));    
}

function setFiltres ( etat)
{
  var elm = document.getElementsByName ( "inputFiltre[]");
  for ( var i = 0; i < elm.length; i++) 
  {
    elm[i].checked = etat;
  }
  updateMarkers();
}

function loadRoutes ()
{
  var url = "mapserver2/getxml.php5?type=routes&lg="+lg;
  OpenLayers.loadURL(url, null, null, loadSuccessRoutes, loadFailure);
}

function loadSuccessRoutes(request) 
{
  var xml = request.responseXML;

  var routes = xml.getElementsByTagName ( "r");

  for ( var i = 0; i < routes.length; i++) 
		addRoute ( routes[i].getAttribute("p"), routes[i].getAttribute("r"), 0);
		
	autreRoutes = addRoute ( routes[0].getAttribute("p"), _T("autre"), 0);
}

function loadEvts ()
{
  var url = "mapserver2/getxml.php5?type=evts&lg="+lg;
  OpenLayers.loadURL(url, null, null, loadSuccessEvts, loadFailure);
}

function loadSuccessEvts(request) 
{
  layerEvts.clearMarkers();

  var xml = request.responseXML;

  var evts = xml.getElementsByTagName ( "evt");
  
  var size = new OpenLayers.Size(20,20);
  var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));

  var reg = new RegExp("[|]+", "g");

  for ( var i = 0; i < evts.length; i++) 
  {
  	var txtevt = evts[i].childNodes[0].nodeValue;
    var txts = txtevt.split ( reg);

		var evt = new Array;
    var txt = new Array;
    for ( var j = 0; j < txts.length; j++)
    {
      if (txts[j].length)
      {
        if (txt.length) evt.push(txts[j]+"<br/>");
        txt.push ( txts[j]);
      }
    }
    
    var icone = new OpenLayers.Icon ( evts[i].getAttribute("i"), size, offset);
    icone.imageDiv.title = txt.join(" - ");
    
    var pt = new OpenLayers.LonLat ( evts[i].getAttribute("x"), evts[i].getAttribute("y"));
 	
 		var r = evts[i].getAttribute("r");
 		if (!r.length) r = _T('autre');
 		
 		var p = evts[i].getAttribute("p");
 		
    var marker = new OpenLayers.Marker ( pt, icone);
    marker.txt = txt;
    marker.idr  = "["+p+"]"+r;
    marker.etype = evts[i].getAttribute("t");
    marker.dd = parseInt(evts[i].getAttribute("dd"));
    marker.df = parseInt(evts[i].getAttribute("df"));

		marker.evt = "<tr><td style='text-align:center'><img src='"+marker.icon.url+"'/></td><td style='text-align:center'>"+evts[i].getAttribute("r")+"</td><td><b>"+marker.txt[0]+"</b><br/>"+evt.join("")+"</td></tr>";

    layerEvts.addMarker ( marker);

		addRoute( p, r, 1);
  }
  
  showRoutes();
  
  layerEvts.map.events.register( "moveend", layerEvts.map, showEvts);
  updateMarkers();
}

function loadEvtsJson ()
{
  var url = "mapserver2/getjson.php5?type=evts&lg="+lg;
  OpenLayers.loadURL(url, null, null, loadSuccessEvtsJson, loadFailure);
}

function loadSuccessEvtsJson(request) 
{
  layerEvts.clearMarkers();

	var evts = eval('(' + request.responseText + ')');
  
  var size = new OpenLayers.Size(20,20);
  var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));

  var reg = new RegExp("[|]+", "g");

  for ( var i = 0; i < evts.length; i++) 
  {
  	var txtevt = evts[i].e;
    var txts = txtevt.split ( reg);

		var evt = new Array;
    var txt = new Array;
    for ( var j = 0; j < txts.length-1; j++)
    {
      if (txts[j].length)
      {
        if (txt.length) evt.push(txts[j]+"<br/>");
        txt.push ( txts[j]);
      }
    }
    
    var icone = new OpenLayers.Icon ( "mapserver2/symbols/icone"+evts[i].i+".png", size, offset);
    icone.imageDiv.title = txt.join(" - ");
    
    var pt = new OpenLayers.LonLat ( evts[i].x, evts[i].y);
 	
 		var r = evts[i].r;
 		if (!r.length) r = _T('autre');
 		
 		var p = evts[i].p;
 		
    var marker = new OpenLayers.Marker ( pt, icone);
    marker.txt = txt;
    marker.idr  = "["+p+"]"+r;
    marker.etype = evts[i].t;
    marker.dd = evts[i].dd;
    marker.df = evts[i].df;

		marker.evt = "<tr><td style='text-align:center'><img src='"+marker.icon.url+"'/></td><td style='text-align:center'>"+evts[i].r+"</td><td><b>"+marker.txt[0]+"</b><br/>"+evt.join("")+"</td></tr>";

    layerEvts.addMarker ( marker);

		addRoute( p, r, 1);
  }
  
  showRoutes();
  
  layerEvts.map.events.register( "moveend", layerEvts.map, showEvts);
  updateMarkers();
}
  
function loadFailure(request) 
{
}

function mapMoveStart ( event) 
{
	if (changeZone) 
	{
		changeZone--;
		return;
	}
	var zone = document.getElementsByName ( "selectZone");
  if (zone.length)
  {
    zone[0].selectedIndex = 0;
		changeZone=0;
  }
}

function init()
{
	var p = getVar("option");
	if (p)
	{
		initRoutes = p.split(";");
		initRoutes[1] = initRoutes[1].split(",");
	}
	
	document.getElementById("pma").onclick=showhidetools;

	document.getElementById("aidefiltres").onmouseover=displayPopupHelp;
	document.getElementById("aideroutes").onmouseover=displayPopupHelp;
	document.getElementById("aidetools").onmouseover=displayPopupHelp;

	document.getElementById("aidefiltres").onmouseout=hiddenPopupHelp;
	document.getElementById("aideroutes").onmouseout=hiddenPopupHelp;
	document.getElementById("aidetools").onmouseout=hiddenPopupHelp;
	
	var elm = document.getElementsByName ( "_lg_");
	if (elm.length)
   lg = elm[0].value;
  else
  	lg = "fr";
  
  Proj4js.defs["EPSG:32632"] = "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
  
  var options = 
  {
    projection: new OpenLayers.Projection("EPSG:32632"),
    displayProjection: new OpenLayers.Projection("EPSG:32632"),
  
    units: "m",
    maxResolution: 1800,
    maxExtent: new OpenLayers.Bounds ( -300700,3965650,1758750,5445400),
    numZoomLevels: 5,

 		eventListeners: 
 		{
	    "movestart": mapMoveStart
    },
  
    controls: 
    [
    ]
  };

 	if (!initRoutes.length)
 	{
 		options.controls.push( new OpenLayers.Control.PanZoomBar());
 		options.controls.push( new OpenLayers.Control.MouseDefaults());
 	}
    
  map = new OpenLayers.Map( 'map', options);

  var layerTruckinfo = new OpenLayers.Layer.WMS( "TruckInfo", 
	  ["http://wms.cbconseil.com/tilecache.cgi","http://wms.cbconseil.com/tilecache.cgi"], {layers: 'truckinfo_evt_32632_'+lg, format:'image/png'}, {isBaseLayer: true, singleTile: false, transitionEffect: "resize"} );

  map.addLayer(layerTruckinfo);

  layerEvts = new OpenLayers.Layer.Markers( "Evts");
  map.addLayer(layerEvts);

	if (initRoutes.length)
	{
		var bounds = OpenLayers.Bounds.fromArray(initRoutes[2].split(","));
		map.zoomToExtent(bounds);
	}
		
	loadTools();
  loadFiltres();
  loadZones();
  loadRoutes();
  loadEvts();
//  loadEvtsJson();
}

window.onload = init;
