var sidemap; 

var region_center

var lieux_markers = {};
var lieux_points = {};
var villes = {};
var zoomC
var typeC;
var bounds;

var path;

var lieux = {};

var lieux_base = {};

var open_event_l;

var sidemap_opened = false;

function sidemap_init(){
  path = Cake.base;
  region_center = new GLatLng(43.850374,3.262939);
  sidemap = new GMap2(document.getElementById("sidemap_div"));
  sidemap.setCenter(region_center,6,G_SATELLITE_MAP);
  zoomC = new GSmallZoomControl();
  typeC = new GMenuMapTypeControl();
  
 
  sidemap_close();
 
}

function sidemap_open(){
  sidemap_opened = true;
  GEvent.clearListeners(sidemap,"click");
 
  sidemap.enableContinuousZoom();
  sidemap.enableDragging();
  sidemap.enableDoubleClickZoom();
  sidemap.disableScrollWheelZoom();
  sidemap.addControl(typeC);
  sidemap.addControl(zoomC);
  
  if(lieux.length){
    $('sidemap_loading').hide();
    sidemap_build_lieux(lieux);
    for(var i=0;i<lieux_base.length;i++){
      var cur_lieu = lieux_base[i];
      if(lieux_markers['lieu_'+cur_lieu['Lieu']['id']]){
        sidemap_open_marker(lieux_markers['lieu_'+cur_lieu['Lieu']['id']]);
      }
    }
     $('sidemap_div').style.visibility = "visible";
     $('sidemap_div').style.cursor = "";
  }
  sidemap.checkResize();
  
  if(bounds){
    sidemap.setCenter(bounds.getCenter());
    sidemap.setZoom(sidemap.getBoundsZoomLevel(bounds));
  }
  
  //
    //sidemap.setCenter(bounds.mid());
    //sidemap.setZoom(sidemap.getBoundsZoomLevel(bounds));
  
  
  //sidemap.panTo(bounds.mid());
  //sidemap.setZoom(sidemap.getBoundsZoomLevel(bounds));
 
  
}
function sidemap_dist(p1,p2){
  return Math.sqrt(Math.pow(p1.x-p2.x,2)+Math.pow(p1.y-p2.y,2));

}
function sidemap_update_lieu(json){
  //alert(json);
  var lieu_id = json.Lieu.id;
  var marker = lieux_markers["lieu_"+json.Lieu.id];
  for(var i=0; i<lieux.length; i++){
    if(lieux[i]['Lieu']['id'] == lieu_id){
     // alert('ok');
      lieux[i]['EvenementFutur'] = json.EvenementFutur;
      lieux[i]['EvenementPresent'] = json.EvenementPresent;
      sidemap_fill_marker(marker,lieux[i]);
      break;
    }
  }
  
  
}

function sidemap_fill_marker(marker,lieu){
  
  var text = "";
  
  text += "<a href=\"javascript:void('0')\" onclick=\"sidemap_close_lieu("+lieu.Lieu.id+")\" class='winbouton' style='border-bottom:1px solid #fff'><img src='"+Cake.webroot+"img/icones/fermer_noir.gif'></a>";
  text += "<div class='content'><div class='lieu'>"+lieu.Lieu.ville+", "+lieu.Lieu.departement+"</div><b><a href='"+Cake.base+"/lieux/voir/"+lieu.Lieu.id+"'>"+lieu.Lieu.nom+"</a></b><br/>"+lieu.Lieu.sousnomformat+"";
  //text += "<a href='"+Cake.base+"/lieux/voir/"+marker.opts_.lieu.Lieu.id+"' style='float:right'>page du lieu</a>";
  //text += "<div style='clear:both'></div>";
  text += "</div>";
  if((lieu.EvenementPresent == undefined) && (lieu.EvenementFutur == undefined)){
    new Ajax.Request(
    Cake.base+"/evenements/lieu/"+lieu.Lieu.id+".json",
      {
        method:'get',
        onSuccess: function(transport){ 
          //alert(transport.statusText+":\n"+transport.responseJSON) 
          //lieux = transport.responseJSON;
          
          sidemap_update_lieu(transport.responseText.evalJSON());
        }
      
      }
    );
    text += chargement_html;
  
  }else if(lieu.EvenementPresent.length + lieu.EvenementFutur.length > 0){
    text += "<div class='content' id='sidemap_lieu"+lieu.Lieu.id+"_evenements' style='border-top:1px solid #fff'><small>";
    if(lieu.EvenementPresent.length){
      text += "<b>en ce moment</b><ul class='micro_evenements'>";
      for(var i=0; i<lieu.EvenementPresent.length; i++){
        evenement = lieu.EvenementPresent[i];
        text += "<li><a href='"+Cake.base+"/evenements/voir/"+evenement.id+"'>"+evenement.titre+"</a></li>";
      }
      text += "</ul>";
    }
    if(lieu.EvenementFutur.length){
      text += "<b>&agrave; venir</b><ul class='micro_evenements'>";
      for(var i=0; i<lieu.EvenementFutur.length; i++){
        evenement = lieu.EvenementFutur[i];
        text += "<li><a href='"+Cake.base+"/evenements/voir/"+evenement.id+"'>"+evenement.titre+"</a></li>";
        
      }
      text += "</ul>";
    }
    text += "</small></div>";
  }
  
  marker.div_.innerHTML = text;
}

function sidemap_open_marker(marker){
  
  marker.open_ = true;
  
  sidemap_fill_marker(marker,marker.opts_.lieu);
  if(Prototype.Browser.Webkit){
    GEvent.clearListeners(marker,"click");
  }  
  marker.div_.className = "gmapMarkerText";

}
function sidemap_fuck_safari(){
  for(var i in lieux_markers){
    marker = lieux_markers[i];
    GEvent.clearListeners(marker,"click");
    GEvent.addListener(marker,"click",function(){  if(!this.open_ && sidemap_opened){ sidemap.panTo(this.getLatLng()); sidemap_open_marker(this); }else{ sidemap_close_marker(this); }  });
  }
}
function sidemap_close_marker(marker){
  marker.open_ = false;
  marker.div_.className = "gmapMarkerText_hidden";
  marker.div_.innerHTML = "<div class='content'><div class='lieu'>"+marker.opts_.lieu.Lieu.ville+", "+marker.opts_.lieu.Lieu.departement+"</div><b>"+marker.opts_.lieu.Lieu.nom+"</b><br/>"+marker.opts_.lieu.Lieu.sousnomformat+"</div>";
  //GEvent.addListener(marker,"click",function(){ sidemap.panTo(this.getLatLng()); sidemap_open_marker(this); });
  if(Prototype.Browser.Webkit){
    setTimeout("sidemap_fuck_safari()",200);
  }
       
}
function sidemap_close_lieu(lieu_id){
  sidemap_close_marker(lieux_markers["lieu_"+lieu_id]);
  
}
function sidemap_build_lieux(lieux_array){
  //var outp = "map:\n";
  //alert("building array");
  var points = new Array();
    
  lieux_markers = {};
  lieux_points = {};
  
  bounds = new GLatLngBounds();
  
  for( var i=0; i< lieux_array.length; i++){
      var lieu = lieux_array[i];
     
      //if(!lieux_markers["lieu_"+lieu.Lieu.id]){
        var new_lieu_point = new GLatLng(lieu.Lieu.latitude, lieu.Lieu.longitude);
        var new_lieu_marker = new LabeledMarker(new_lieu_point,{
          //'title':lieu.Lieu.nom,
          'labelText':"<div class='content'><div class='lieu'>"+lieu.Lieu.ville+", "+lieu.Lieu.departement+"</div><b>"+lieu.Lieu.nom+"</b><br/>"+lieu.Lieu.sousnomformat+"</div>",
          'icon':gicon_fleche,
          'labelOffset':new GSize(-30,12),
          'labelClass':'gmapMarkerText_hidden',
          'lieu':lieu
        });
        GEvent.addListener(new_lieu_marker,"mouseover",function(){ if(!this.open_){this.div_.className = "gmapMarkerText"+(sidemap_opened ? "" : "_mini")+"_hover";} });
        GEvent.addListener(new_lieu_marker,"mouseout",function(){ if(!this.open_){this.div_.className = "gmapMarkerText_hidden"; } });
        GEvent.addListener(new_lieu_marker,"click",function(){  if(!this.open_ && sidemap_opened){ sidemap.panTo(this.getLatLng()); sidemap_open_marker(this); }else{ sidemap_close_marker(this); }  });
        lieux_markers["lieu_"+lieu.Lieu.id] = new_lieu_marker;
        lieux_points["lieu_"+lieu.Lieu.id] = new_lieu_point;
      
        bounds.extend(new_lieu_point);
      
        points.push(new_lieu_point);
        sidemap.addOverlay(new_lieu_marker);
    
   //}
    
  }
  
  sidemap.checkResize();
  sidemap.setCenter(bounds.getCenter());
  if(lieux_markers.length > 1){
    
    sidemap.setZoom(sidemap.getBoundsZoomLevel(bounds));
  }else if(lieux_array.length == 1){
    sidemap.setZoom(8);
  }else{
    sidemap.setCenter(region_center,6);
  }
  
}

function sidemap_close(){
    sidemap_opened = false;
    sidemap_build_lieux(lieux_base);
    
    sidemap.savePosition();
    
    sidemap.disableDragging();
    sidemap.disableContinuousZoom();
    sidemap.disableDoubleClickZoom();
    sidemap.disableScrollWheelZoom();
    
    sidemap.removeControl(zoomC);
    sidemap.removeControl(typeC);
    sidemap.setMapType(G_SATELLITE_MAP);
    
    for(var i= 0; i<lieux_markers.length; i++){
      GEvent.clearInstanceListeners(lieux_markers[i]);
    }
    GEvent.addListener(sidemap,"click",function(){ sidemap_start_open(); GEvent.clearListeners(sidemap,"click"); });
    
    
    $('sidemap_div').style.visibility = "visible";
    $('sidemap_close_button').style.display = "none";
    $('sidemap_open_button').style.display = "block";
    $('sidemap_div').style.cursor = "pointer";
    sidemap.checkResize();
}

function sidemap_start_open(){

  $('sidemap_div').style.visibility = "hidden";
  $('sidemap_open_button').style.display = "none";
  $('sidemap_close_button').style.display = "block";
  $('sidemap_loading').show();
  new Ajax.Request(
    path+"/lieux/tous.json",
    {
      method:'get',
      onSuccess: function(transport){ 
        //alert(transport.statusText+":\n"+transport.responseJSON) 
       
        lieux = transport.responseText.evalJSON();
         //alert(lieux);
        if(sidemap_opened){
          sidemap_open();
        }
      }
      
    }
  );
  new Effect.Morph("carte_menu", {style:{width:"500px"},queue:{position:"end",limit:2,scope:"carte_menu"},duration:0.3});
  new Effect.Morph("carte_content", {style:{height:"400px"},queue:{position:"end",limit:2,scope:"carte_menu"},duration:0.3,afterFinish:sidemap_open})

}
function sidemap_start_close(){
  
  $('sidemap_div').style.visibility = "hidden";
  sidemap.clearOverlays();
  new Effect.Morph("carte_menu", {style:{width:"180px"},queue:{position:"end",limit:2,scope:"carte_menu"},duration:0.3});
  new Effect.Morph("carte_content", {style:{height:"180px"},queue:{position:"end",limit:2,scope:"carte_menu"},duration:0.3,afterFinish:sidemap_close})
}

