var map;
var geocoder;
var center =  new GLatLng(48.65468584817256, -66.104736328125);
var geoXml; 
var toggleState = 0;
var inizoom=8;
var Kaleidossarray=new Array();
var defautMap=null;
var defaultPoint=null;
var out=null;
var nocache=randomNumber();
var DivArray= new Array();
var KMZArray= new Array("Trajetsbrun09","Trajetsviolet09","Trajetsvert09");
var CategoriesArray= new Array("champ_Hebergement","champ_Attraits","champ_Agrotourisme","champ_Poissonneries","champ_Services");
var Pictosn5Array= new Array(
new Array(48.43362959769854,-68.21855892447147), 
new Array(48.57621066919698,-68.17948886042214),
new Array(48.69882679159569,-67.74577422322935), 
new Array(48.45686555812994,-67.41517526557095),  
new Array(48.34010878711957,-67.20715948398106), 
new Array(48.15945286153794,-66.87846598522108), 
new Array(48.09030468933295,-66.67165931947613), 
new Array(48.17324865628973,-66.41043222219498), 
new Array(48.18401268841971,-65.7693488999698), 
new Array(48.11527400740942,-65.07617638444158),  
new Array(48.41027579063704,-64.49720143248626),  
new Array(48.85700946809641,-64.58789034576583), 
new Array(49.18973395409763,-65.01737994724306), 
new Array(49.19769371501471,-65.81782866604243), 
new Array(49.08332474382829,-66.44069727669699), 
new Array(48.86226678396969,-67.10010113400571));

var Pictosn591Array= new Array( 
 /*
new Array(48.90763896564247,-65.3218713366268),
new Array(49.02860887073214,-65.55499483717492), 
//new Array(48.26627086309836,-65.75987345776892), 
new Array(48.45624026395783,-65.92338298051753), 
//new Array(48.59307330875281,-66.01891368653878),
new Array(48.69987915888298,-66.25748362116212), 
//new Array(48.8101241198469,-66.54012372877676), 
new Array(48.83673826327141,-66.75126514007548), 
//new Array(48.70567717397172,-67.61805729852296), 
//new Array(48.50663349288169,-67.68439746732982), 
new Array(48.45486897832902,-67.5931022029267), 
//new Array(48.38602937556284,-67.77833729331778), 
new Array(48.50623123506421,-68.01959761812572), 
//new Array(48.03404417568498,-67.38019217660099), 
*/
//new Array(48.23256865342864,-67.45317926687275)
);

var printmode=false;
var heightPage;


    function loadMap() {
      if (GBrowserIsCompatible()) {
       map = new GMap2(document.getElementById('map'));
       map.addControl(new GSmallMapControl());
       map.addControl(new GMapTypeControl());
	  // map.addMapType(G_PHYSICAL_MAP);
	   //map.enableScrollWheelZoom(); 
       map.setCenter(center, inizoom);
		if (defautMap) trouverlesattraits();
		for (i=0; i<CategoriesArray.length; i++) {
	 		setTimeout('document.getElementById("'+CategoriesArray[i]+'").disabled=false', 700);
		}
		setTimeout('loadSentiers()',500);
      }
      
    }

	function loadSentiers(){
		

	for (i=0; i<KMZArray.length; i++) {
	  	var kmlUrl = "http://www.tourisme-gaspesie.com/carteInteractive/"+KMZArray[i]+".kmz?"+nocache;
		if (i==KMZArray.length-1) {
		var kml = new GGeoXml(kmlUrl,kmlLoading(false)); 
		}else{
		var kml = new GGeoXml(kmlUrl); 	
		}
		
		map.addOverlay(kml);
		//alert(kml.getTileLayerOverlay());
		
	  }	
	 for (i=0; i<Pictosn5Array.length; i++) {
		var pict = nomsDesSentiers(Pictosn5Array[i][0],Pictosn5Array[i][1],"5");
		map.addOverlay(pict);
	}
	for (i=0; i<Pictosn591Array.length; i++) {
		var pict = nomsDesSentiers(Pictosn5Array[i][0],Pictosn5Array[i][1],"591");
		map.addOverlay(pict);
	}
	
	}
   function searchLocations() {
     var address = document.getElementById('addressInput').value;
     geocoder.getLatLng(address, function(latlng) {
       if (!latlng) {
         alert(address + ' not found');
       } else {
         searchLocationsNear(latlng);
       }
     });
   }

   function searchLocationsNear(center) {
     var radius = document.getElementById('radiusSelect').value;
     var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
     GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
       var markers = xml.documentElement.getElementsByTagName('marker');
      var sidebar = document.getElementById('sidebar');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'Aucun résultat.';
         map.setCenter(center, inizoom);
         return;
       }

       var bounds = new GLatLngBounds();
       for (var i = 0; i < markers.length; i++) {
         var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
         var distance = parseFloat(markers[i].getAttribute('distance'));
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
         
         var marker = createMarker(point, name, address);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, distance);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
   }
   
   function nomsDesSentiers(lat,lng,icone){
	var point = new GLatLng(parseFloat(lat), parseFloat(lng));
	//alert(lat+', '+lng+', '+icone+', '+texte);
	
	var baseIcon = new GIcon(); 
	baseIcon.image = 'http://www.tourisme-gaspesie.com/carteInteractive/png/'+ icone +'.png';
    baseIcon.iconSize = new GSize(25, 25);
    baseIcon.iconAnchor = new GPoint(15, 15);
    baseIcon.infoWindowAnchor = new GPoint(25, 7);
	baseIcon.shadow = null;
	baseIcon.shadowSize = null;
	baseIcon.transparent = null;
    opts = { 
          "icon": baseIcon,
          "clickable": false,
		  "labelClass":'markerNumber',
		  "labelOffset": new GSize(-5, -10)
        };
       var marker = new GMarker(point, opts);
       return marker;
	
	
   }
   
   function trouverlesattraits(myNum) {
	kmlLoading(true);
	//alert(map.getZoom());
	clearTimeout(out);
	var out=setTimeout('kmlLoading(false)', 600);
   	var numeroKaleidos=myNum;
	map.closeExtInfoWindow();
	for (i=0; i<Kaleidossarray.length; i++) {
		map.removeOverlay(Kaleidossarray[i]);
	 }
	Kaleidossarray=new Array();
	var sidebar = document.getElementById('sidebar');
	var numeroCat="";//document.getElementById("markerCat").value;
	for (i=0; i<CategoriesArray.length; i++) {
		if (document.getElementById(CategoriesArray[i]).checked) numeroCat+=document.getElementById(CategoriesArray[i]).value+",";
	}
	
   
	if (numeroCat!=""){
	//MM_showHideLayers('points','','show');
     var searchUrl = 'carteInteractive/xmlPoints.php?categorie=' + numeroCat;
     GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
       var markers = xml.documentElement.getElementsByTagName('marker');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'Aucun résultat';
		 clearTimeout(out);
		 var out=setTimeout('kmlLoading(false)', 500);
         return;
       }

       var bounds = new GLatLngBounds();
       for (var i = 0; i < markers.length; i++) {
		 clearTimeout(out);
		  var out=setTimeout('kmlLoading(false)', 500);
         var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
		 var icone = markers[i].getAttribute('icone');
		 var idMarker = markers[i].getAttribute('numero');
		 var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
		var tmpName=name;
		if (printmode){
			var marker = createMarker(point, i+1);
		 	map.addOverlay(marker);
			tmpName= "("+(i+1).toString()+") " + name; 
		 } else{
		 var marker = createMarkerKaleidos(point, name, address,icone, idMarker,i);
         map.addOverlay(marker);
		 if (defautMap==idMarker) defaultPoint=marker;
		 }
		var sidebarEntry = createSidebarEntry(marker, tmpName, address,icone);
		 sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
		Kaleidossarray.push(marker);
       }
	   
	 });
	}else{
	sidebar.innerHTML ="";
	
	}
   }
   
 function createMarker(point, index) { 

        var baseIcon = new GIcon(); 
		baseIcon.image = 'images/Upload/pictos/categories/print.png';//'http://gmaps-samples.googlecode.com/svn/trunk/markers/circular/greencirclemarker.png';
        baseIcon.iconSize = new GSize(30, 30);
        baseIcon.iconAnchor = new GPoint(15, 15);
        baseIcon.infoWindowAnchor = new GPoint(25, 7);
		baseIcon.shadow = null;
		baseIcon.shadowSize = null;
		baseIcon.transparent = null;
        opts = { 
          "icon": baseIcon,
          "clickable": false,
		  "labelClass":'markerNumber',
          "labelText": index.toString(),
		  "labelOffset": new GSize(-5, -10)
        };
        var marker = new LabeledMarker(point, opts); 
        return marker; 
 } 



function createMarkerKaleidos(point, name, address, icone, idMarker,numero) {

	if (icone!=""){
	var monicon = new GIcon();
	monicon.iconSize = new GSize(20, 20);
    monicon.image = icone;
	monicon.iconAnchor = new GPoint(0, 0);
    monicon.infoWindowAnchor = new GPoint(7, 0);
	monicon.shadow = null;
	monicon.shadowSize = null;
	monicon.transparent = null;
	 markerOptions = { icon:monicon };
	  var marker = new GMarker(point,markerOptions);
	}else{
	 var monicon = new GIcon();//G_DEFAULT_ICON
	 monicon.iconSize = new GSize(20, 20);
      monicon.iconAnchor = new GPoint(0, 0);
      monicon.infoWindowAnchor = new GPoint(7, 0);
	  	monicon.shadow = null;
	monicon.shadowSize = null;
	monicon.transparent = null;
      var marker = new GMarker(point, monicon);
	}

		  GEvent.addListener(marker, 'click', function(){ 
				if (checkCurrentState(idMarker+"tab1_content")) {
				nexshow(idMarker);
				}else{
				marker.openExtInfoWindow(map,"custom_info_window_tourisme","<div class=\"title\">"+name+"</div>",{beakOffset: 2, ajaxUrl: idMarker}); 
				map.getExtInfoWindow().resize();
				}
			}
          );
		 GEvent.addListener(marker, 'mouseover',function(){
			if (!checkCurrentState(idMarker+"tab1_content")) {
             marker.openExtInfoWindow(map,"custom_info_window_tourisme","<div class=\"title\">Chargement... "+name+"</div>",{beakOffset: 2, ajaxUrl: idMarker} );//
			map.getExtInfoWindow().resize();
			}
				
			}
          );
		  return marker;
        }
		
	function ftab1(num){
	hide(document.getElementById(num+"tab0_content"));
	hide(document.getElementById(num+"tab2_content"));
	show(document.getElementById(num+"tab1_content"));
    map.getExtInfoWindow().resize();		
	}
   	function ftab2(num){
	hide(document.getElementById(num+"tab0_content"));
	hide(document.getElementById(num+"tab1_content"));
	show(document.getElementById(num+"tab2_content"));
    map.getExtInfoWindow().resize();		
	}
	function ftab0(num){
	hide(document.getElementById(num+"tab1_content"));
	hide(document.getElementById(num+"tab2_content"));
	show(document.getElementById(num+"tab0_content"));
    map.getExtInfoWindow().resize();
	}
      /**
       * Helper function to hide the given DOM element
       * @param {Object} element The DOM element that should be hidden
       */
      function hide(element){
        element.style.display = "none";
        element.style.position = "absolute";
      }
      /**
       * Helper function to show the given DOM element
       * @param {Object} element The DOM element that should be displayed
       */
      function show(element){
        element.style.display = "block";
        element.style.position = "relative";
      }
	  function nexshow(idMarker){
		  var a=document.getElementById(idMarker+"tab0_content");
		  var b=document.getElementById(idMarker+"tab1_content");
		  var c=document.getElementById(idMarker+"tab2_content");
		if (a.style.display != "none"){
		show(b);
		hide(a);
		if (c) hide(c); 
		}else if (b.style.display != "none"){
		hide(a);
		hide(b);
		if (c) {
			show(c);
		}else{
			show(a);
		}
		}else if (c.style.display != "none"){
			show(a);
			hide(b);
			if (c) hide(c); 
		}
		map.getExtInfoWindow().resize();
		 
	  }
	//********************
    function createSidebarEntry(marker, name, address, icone) {
      var div = document.createElement('div');
		// image stuff
		var myImage=document.createElement("img");
		myImage.setAttribute('src', icone);
		myImage.setAttribute('alt', name);
		myImage.setAttribute('height', '20px');
		myImage.setAttribute('width', '20px');
		div.appendChild(myImage);
      var html=div.innerHTML+' <b>' + name + '</b><br/>' + address;
	  //var html=document.createTextNode(name);
	  
	  div.innerHTML = html;
	  //div.appendChild(html);
	  div.className='siteRow';
      div.style.cursor = 'pointer';
      div.style.marginBottom = '5px'; 
	  
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      });
    
	GEvent.addDomListener(div, 'mouseover', function() {
		div.className='siteRowOver';
      });
      GEvent.addDomListener(div, 'mouseout', function() {
      div.className='siteRow';
	  });

      return div;
    }

	
	
function randomNumber(limit){
  tmp=Math.floor(Math.random()*limit);
return tmp.toString();
}


function kmlLoading(etape) {
  this.thediv = document.getElementById('loading');
  this.WaitBarDiv = document.getElementById('WaitBarDiv');
  etat=this.thediv.style.visibility;
  if (etat!="visible" && etape==true){ 
  MM_showHideLayers('loading','','show');
  }else if(etape==false){
  MM_showHideLayers('loading','','hide');
  gotoKaleidos();
  }
}
function gotoKaleidos(){
	
	if (defaultPoint){
		GEvent.trigger(defaultPoint, 'click');
		defaultPoint=null;
	}
}
function checkCurrentState(searchName){
var windowContent = document.getElementById("custom_info_window_tourisme_contents");
if (!windowContent) return false;
var tempDiv = windowContent.getElementsByTagName('DIV');
		for (i=0; i<tempDiv.length; i++) {
		if (tempDiv[i].getAttribute("id") == searchName) return true;
		}
return false;
}


function printMap(){
if (printmode){
	UnprintMap();
	return;
}
printmode=true;
heightPage=document.getElementById("page").offsetHeight;
trouverlesattraits();
for (i=0; i<DivArray.length; i++) {
	var tempDiv = document.getElementById(DivArray[i]);	
	tempDiv.style.display = "none";
}


var MapContent = document.getElementById("corps");
MapContent.style.width='880px';
MapContent.style.position='absolute';
MapContent.style.top = 10 + 'px';
MapContent.className='resetStyle';

var MapFrame = document.getElementById("map");
MapFrame.style.height='600px';
MapFrame.style.width='880px';
MapFrame.className='resetStyle';

var BarFrame = document.getElementById("sidebar");
BarFrame.style.height="auto";//(IFheight-10)+'px';
BarFrame.style.width='880px';

var pageDiv=document.getElementById("page");
pageDiv.style.height=(740+BarFrame.offsetHeight)+"px";
//setTimeout("window.print()", 2000);
document.getElementById('categoriesPrint').style.display = "block";
}

function UnprintMap(){
printmode=false;
trouverlesattraits();
for (i=0; i<DivArray.length; i++) {
	var tempDiv = document.getElementById(DivArray[i]);	
	tempDiv.style.display = "block";
}
document.getElementById('categoriesPrint').style.display = "none";
var MapContent = document.getElementById("corps");
MapContent.style.position='relative';

var MapFrame = document.getElementById("map");
MapFrame.style.height='525px';
MapFrame.style.width='665px';
MapFrame.className='cmap';

var BarFrame = document.getElementById("sidebar");
BarFrame.className='csidebar';
BarFrame.style.height='525px';
BarFrame.style.width='200px';

var pageDiv=document.getElementById("page");
pageDiv.style.height=heightPage+"px";
}