var map;
var extremites = new Array();
var markerInfo = new Array();
var markersArrayParking = [];
var markersArrayVelib = [];
var markersArrayBus = [];
var markersArrayMetro = [];
var markersArrayRer = [];
var markersArrayTrain = [];
var markersArrayTramway = [];
var markersArray = [];
var markersPoi = [];
var mediaURL = 'http://media.orpi.com/';
var distance=5;
var typeCarte = "";


function initMap(){

	if(document.getElementById('map'))
	{
		 
	  function TextualZoomInControl() {}
	  function TextualZoomOutControl() {}
		TextualZoomInControl.prototype = new GControl();
		TextualZoomOutControl.prototype = new GControl();
		
		TextualZoomInControl.prototype.initialize = function(map) 
		{  
			var container = document.createElement("div");  
			
			var zoomInDiv = document.createElement("div");  
			this.setButtonStyle_(zoomInDiv);  
			container.appendChild(zoomInDiv);  
			zoomInDiv.appendChild(document.createTextNode("Zoom +"));  
			GEvent.addDomListener(zoomInDiv, "click", function() {    map.zoomIn();  });  
			
			map.getContainer().appendChild(container);  
			return container;
		}
		
		TextualZoomOutControl.prototype.initialize = function(map) 
		{  
			var container = document.createElement("div");  
			
			var zoomOutDiv = document.createElement("div");  
			this.setButtonStyle_(zoomOutDiv);  
			container.appendChild(zoomOutDiv);  
			zoomOutDiv.appendChild(document.createTextNode("Zoom -"));  
			GEvent.addDomListener(zoomOutDiv, "click", function() {    map.zoomOut();  });  
		
			map.getContainer().appendChild(container);  
			return container;
		}
		
			
		
		TextualZoomInControl.prototype.getDefaultPosition = function() 
		{  
			return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5, 5));
		}
		
		TextualZoomOutControl.prototype.getDefaultPosition = function() 
		{  
			return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5, 25));
		}
		
		TextualZoomInControl.prototype.setButtonStyle_ = function(button) 
		{  
			button.className = 'mapGIIPlus';
			
		}
		
		TextualZoomOutControl.prototype.setButtonStyle_ = function(button) 
		{  
			button.className = 'mapGIIMoins';
		
		}
	
	
		function createMarker(point,html,icon) {
			var marker = new GMarker(point,icon);
			GEvent.addListener(marker, "click", function() {
			  marker.openInfoWindowHtml(html);
			});
			return marker;
		}	
		
		var tabMAgence = document.getElementById('mapagence').value.split('#');
		
		
		var tabAgence = document.getElementById('agence').value.split('#');
		map = new GMap2(document.getElementById("map"));
		var zoom = parseInt(tabMAgence[2]);
		map.setCenter(new GLatLng(tabMAgence[0], tabMAgence[1]), zoom);
		
  	gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);
    
		var baseIcon = new GIcon();
		baseIcon.iconSize=new GSize(31,37);
		baseIcon.shadowSize=new GSize(52,37);
		baseIcon.iconAnchor=new GPoint(16,37);
		baseIcon.infoWindowAnchor=new GPoint(16,0);
		var picto_url = document.getElementById('picto_google_map').value;
		var icon = new GIcon(baseIcon, picto_url, null,null);

		var point = new GLatLng(tabAgence[0], tabAgence[1]);
		var marker = new GMarker(point,icon);



	  	map.disableDoubleClickZoom();
	  	map.addControl(new TextualZoomInControl());
	  	map.addControl(new TextualZoomOutControl());
	  	

  var xhr = createXHR();
  xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
      var TabAgence = xhr.responseText;
      var tab = TabAgence.split('|');
      var agence = tab[0].split(';');

      var html="<table><tbody><tr><td style='vertical-align: middle'><a target='_blank' href='"+agence[3]+"'><img src='"+agence[4]+"' style='width:75px;' /></a></td><td style='vertical-align: middle'><a style='text-decoration:none;color:#777' target='_blank' href='"+agence[3]+"'>"+agence[5]+"<br />"+agence[6]+"<br />"+agence[7]+" "+agence[8]+"<br />Tel : "+agence[9]+"</a><br>"+tab[1]+"</td></tr></tbody></table>";
      marker.openExtInfoWindow(map,"extInfoWindow_funkyBox_beak",html,{beakOffset: 3});
      map.addOverlay(marker);
    }
  }
  xhr.open("GET","../ajax/get_lat_lng_agence.ajax.php?agence="+document.getElementById('idAge').value,true);
  xhr.send(null);
  }
}
  //  -------------------- Fonction clear Markers
function clearOverlaysAll() {
  if (markersArray) {
    for (i in markersArray) {
	  map.removeOverlay(markersArray[i]);
    }
  }
}

function clearOverlaysParking() {
  if (markersArrayParking) {
    for (i in markersArrayParking) {
		  map.removeOverlay(markersArrayParking[i]);
    }
  }
}

function clearOverlaysVelib() {
if (markersArrayVelib) {
    for (i in markersArrayVelib) {
		  map.removeOverlay(markersArrayVelib[i]);
    }
  }
  
}

function clearOverlaysMetro() {
  if (markersArrayMetro) {
    for (i in markersArrayMetro) {
		  map.removeOverlay(markersArrayMetro[i]);
    }
  }
  
} 
function clearOverlaysTrain() {
  if (markersArrayTrain) {
    for (i in markersArrayTrain) {
		  map.removeOverlay(markersArrayTrain[i]);
    }
  }
  
} 
function clearOverlaysBus() {
  if (markersArrayBus) {
    for (i in markersArrayBus) {
   
		  map.removeOverlay(markersArrayBus[i]);
    }
  }
} 
function clearOverlaysTramway() {
  if (markersArrayTramway) {
    for (i in markersArrayTramway) {
		  map.removeOverlay(markersArrayTramway[i]);
    }
  }
  
} 
function clearOverlaysRer() {
  if (markersArrayRer) {
    for (i in markersArrayRer) {
		  map.removeOverlay(markersArrayRer[i]);
    }
  }
  
} 
function appel_twimmo_flux(nomfonction,type,distance,_CLE_MOVIKEN){  
        typeCarte = type;
       
        if(document.getElementById(type).checked == true){
        
          var infosCenterMap = map.getCenter();
          var lat = infosCenterMap.lat();
          var lng = infosCenterMap.lng();
        
	  var date      = new Date();
      var jour      = '0'+date.getDate();
      var mois      = date.getMonth()+1;
      var annee     = date.getFullYear();
      var minutes   = date.getMinutes();
      var heure     = date.getHours();
       
      var date_actuelle = annee+'-'+mois+'-'+jour;
      var time          = heure+':'+minutes;

      if(typeCarte != "parking" && typeCarte != "velib"){
        if(typeCarte == "metro"){
          var typeTP = "&train=no&rer=no&metro=yes&tramway=no&coach=no&bus=no&boat=no";
        }else if(typeCarte == "bus"){
          var typeTP = "&train=no&rer=no&metro=no&tramway=no&coach=no&bus=yes&boat=no";
        }else if(typeCarte == "rer"){
          var typeTP = "&train=no&rer=yes&metro=no&tramway=no&coach=no&bus=no&boat=no";
        }else if(typeCarte == "train"){
          var typeTP = "&train=yes&rer=no&metro=no&tramway=no&coach=no&bus=no&boat=no";
        }else if(typeCarte == "tramway"){
          var typeTP = "&train=no&rer=no&metro=no&tramway=yes&coach=no&bus=no&boat=no";
        }
      
      
        var libraryName = 'http://api.itransports.fr/transports/get_stoppoints_isochrone/?key='+_CLE_MOVIKEN+typeTP+'&date='+date_actuelle+'T'+time+'+01:00'+'&return=json&latitude='+lat+'&longitude='+lng+'&maxminutes='+distance;
        
      
        // Appel 
        $.ajax({
          type: "GET",
          dataType: "jsonp",
          url: libraryName
        }).done(function( msg ) {
            //var reponse = jQuery.parseJSON(msg);
            var  pointLat = 0;
            var  pointLng = 0;
            
            if(typeCarte == 'metro'){
              clearOverlaysMetro(); 
              iconeGoogle = mediaURL+"/images/site_exclusif/map_metro.png";
            }else if(typeCarte == "bus"){
              clearOverlaysBus(); 
              iconeGoogle = mediaURL+"/images/site_exclusif/map_bus.png";
            }else if(typeCarte == "rer"){
              clearOverlaysRer(); 
              iconeGoogle = mediaURL+"/images/site_exclusif/map_rer.png";
            }else if(typeCarte == "train"){
              clearOverlaysTrain(); 
              iconeGoogle = mediaURL+"/images/site_exclusif/map_train.png";
            }else if(typeCarte == "tramway"){
              clearOverlaysTramway(); 
              iconeGoogle = mediaURL+"/images/site_exclusif/map_tramway.png";
            }
            
        
            
            
          if(msg.stoppoints.stoppoint.lat != "" && msg.stoppoints.stoppoint.lat != undefined){ 
              var point = new GLatLng(msg.stoppoints.stoppoint.lat,msg.stoppoints.stoppoint.long);
              title = msg.stoppoints.stoppoint.name;
             
              var baseIcon = new GIcon();
              baseIcon.iconSize=new GSize(31,37);
              baseIcon.shadowSize=new GSize(52,37);
              baseIcon.iconAnchor=new GPoint(16,37);
              baseIcon.infoWindowAnchor=new GPoint(16,0);
              baseIcon.image = iconeGoogle;
              
              // Set up our GMarkerOptions object
              markerOptions = { 
                icon:baseIcon,
                title: title
              };
              
              
              var marker = new GMarker(point, markerOptions);
              markersArray.push(marker);
              map.addOverlay(marker);
              
              if(typeCarte =="metro"){
              	markersArrayMetro.push(marker);
              }else if(typeCarte == "bus"){
                markersArrayBus.push(marker);
              }else if(typeCarte == "rer"){
               markersArrayRer.push(marker);
              }else if(typeCarte == "train"){
                markersArrayTrain.push(marker);
              }else if(typeCarte == "tramway"){
                markersArrayTramway.push(marker);
              }
             
          }else{
            
            $.each(msg.stoppoints.stoppoint, function(key, value) { 
             
              var point = new GLatLng(value.lat,value.long);
                title = value.name;
              
              var baseIcon = new GIcon();
            	baseIcon.iconSize=new GSize(31,37);
            	baseIcon.shadowSize=new GSize(52,37);
            	baseIcon.iconAnchor=new GPoint(16,37);
            	baseIcon.infoWindowAnchor=new GPoint(16,0);
            	baseIcon.image = iconeGoogle;
              
            	// Set up our GMarkerOptions object
            	markerOptions = { 
                icon:baseIcon,
                  title: title
              };
	
	
          		var marker = new GMarker(point, markerOptions);
          		markersArray.push(marker);
          		map.addOverlay(marker);
          
          		if(typeCarte =="metro"){
          			markersArrayMetro.push(marker);
              }else if(typeCarte == "bus"){
                markersArrayBus.push(marker);
              }else if(typeCarte == "rer"){
               markersArrayRer.push(marker);
              }else if(typeCarte == "train"){
                markersArrayTrain.push(marker);
              }else if(typeCarte == "tramway"){
                markersArrayTramway.push(marker);
              }
            });
            }
          
            
        });    
        
        
        
        
         
        

      }else{
      
      
        var libraryName = "http://api.twimmo.com/scriptflux/9-95b7c7856be10d08fb4e4eda6992ec43/poi/json/?lat="+lat+"&lng="+lng+"&type="+type+"&distance=5&callback="+nomfonction;
          
          try{
           
			var req = new XMLHttpRequest();
            req.open("GET", libraryName, true); 
			req.onreadystatechange = myCode;   // the handler 
			req.send(null); 
            
			function myCode() 
			{ 
              if (req.readyState == 4)
              {
					//alert(type)
					var doc = eval('(' + req.responseText + ')'); 
					
              }
            }   
          }catch(e){
				var script = document.createElement('script');
				script.type = 'text/javascript';
				script.src = libraryName;
				document.getElementsByTagName('head')[0].appendChild(script);
          }
      }
        }else{ 
    
    
   
            if(type =="parking"){
              clearOverlaysParking();
            }else if(type =="velib"){
              clearOverlaysVelib();
        } else if(type =="metro"){
          clearOverlaysMetro();
        } else if(type =="bus"){
          clearOverlaysBus();
        } else if(type =="train"){
          clearOverlaysTrain();
        } else if(type =="tramway"){
          clearOverlaysTramway();
            }
			
        }
} 
     

function retourReponse(json){
  //var iconeGoogle = "http://google-maps-icons.googlecode.com/files/airport.png";
  
  
  if(typeCarte =="parking"){
    clearOverlaysParking();
    iconeGoogle = mediaURL+"/images/site_exclusif/map_parking.png";
  }else if(typeCarte =="velib"){
    clearOverlaysVelib();
    iconeGoogle = mediaURL+"/images/site_exclusif/map_velib.png";
  }
  
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(31,37);
	baseIcon.shadowSize=new GSize(52,37);
	baseIcon.iconAnchor=new GPoint(16,37);
	baseIcon.infoWindowAnchor=new GPoint(16,0);
	baseIcon.image = iconeGoogle;
  
	// Set up our GMarkerOptions object
	markerOptions = { icon:baseIcon };
	
	for(var key in json){
		var obj= json[key]; 
		
		
		var point = new GLatLng(obj.lat,obj.lng);
		var marker = new GMarker(point, markerOptions);
		markersArray.push(marker);
		
		map.addOverlay(marker);

		if(typeCarte =="parking"){
			markersArrayParking.push(marker);
		}else if(typeCarte =="velib"){
			markersArrayVelib.push(marker);
		}
		//alert("nom="+obj.titre+"\nlat="+obj.lat+"\nlng="+obj.lng+"\ndistance en M"+obj.distanceVol);
	}
	
	//Si il esiste des données dans le tableau alors on doit relancer la fonction :
	var count = markersPoi.length;
	var type="";
  if(count>0){
    type= markersPoi[0];
    markersPoi.shift();
    appel_twimmo_flux("retourReponse",type,distance);
  }        
	
}

function onGDirectionsLoad(){
    // Use this function to access information about the latest load()
    // results.
    // e.g.
    // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
	  // and yada yada yada...
}

function handleErrors(){
	   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	     alert("Aucun endroit géographique ne correspond.");
 	   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
       alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known");
     else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
       alert("Une des adresses n'a pas été renseignée.");
     else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
       alert("Mauvaise demande\nLa demande d'itinéraire ne peut aboutir.");
     else alert("Une erreur inconnue s'est produite.");
}


function addCoordonnees(latitude, longitude)
{	
	if(extremites.length == 0)
	{
		extremites["minLat"] = latitude;
		extremites["maxLat"] = latitude;
		extremites["minLong"] = longitude;
		extremites["maxLong"] = longitude;
	}
	else
	{
		if(latitude < extremites["minLat"])
		{
			extremites["minLat"] = 	latitude;
		}
		if(latitude > extremites["maxLat"])
		{
			extremites["maxLat"] = 	latitude;
		}
		if(longitude < extremites["minLong"])
		{
			extremites["minLong"] = 	longitude;
		}
		if(longitude > extremites["maxLong"])
		{
			extremites["maxLong"] = 	longitude;
		}
	}
}

function center_google_map(minLat, minLong, maxLat, maxLong) {
	
	
	var bounds = new GLatLngBounds; 
	bounds.extend(new GLatLng(minLat, minLong)); 
	bounds.extend(new GLatLng(maxLat, maxLong)); 
	
	var zoom = map.getBoundsZoomLevel(bounds);
	if(zoom > 12)
	{
		zoom = 12;
	}
	
	map.setCenter(bounds.getCenter(), zoom); 
}

