function LabeledMarker(a,b){this.latlng_=a;this.opts_=b;this.labelText_=b.labelText||"";this.labelClass_=b.labelClass||"LabeledMarker_markerLabel";this.labelOffset_=b.labelOffset||new GSize(0,0);this.clickable_=b.clickable||true;this.title_=b.title||"";this.labelVisibility_=true;if(b.draggable){b.draggable=false}GMarker.apply(this,arguments)}
LabeledMarker.prototype=new GMarker(new GLatLng(0,0));
LabeledMarker.prototype.initialize=function(c){GMarker.prototype.initialize.apply(this,arguments);this.map_=c;this.div_=document.createElement("div");this.div_.className=this.labelClass_;this.div_.innerHTML=this.labelText_;this.div_.style.position="absolute";this.div_.style.cursor="pointer";this.div_.title=this.title_;c.getPane(G_MAP_MARKER_PANE).appendChild(this.div_);if(this.clickable_){function newEventPassthru(a,b){return function(){GEvent.trigger(a,b)}}var d=['click','dblclick','mousedown','mouseup','mouseover','mouseout'];for(var i=0;i<d.length;i++){var e=d[i];GEvent.addDomListener(this.div_,e,newEventPassthru(this,e))}}}
// patched to use fixed zIndex
LabeledMarker.prototype.redraw=function(a){GMarker.prototype.redraw.apply(this,arguments);var p=this.map_.fromLatLngToDivPixel(this.latlng_);var z=this.numindex;this.div_.style.left=(p.x+this.labelOffset_.width)+"px";this.div_.style.top=(p.y+this.labelOffset_.height)+"px";this.div_.style.zIndex=z}
LabeledMarker.prototype.remove=function(){GEvent.clearInstanceListeners(this.div_);if(this.div_.outerHTML){this.div_.outerHTML=""}if(this.div_.parentNode){this.div_.parentNode.removeChild(this.div_);}this.div_=null;GMarker.prototype.remove.apply(this,arguments)}
LabeledMarker.prototype.copy=function(){return new LabeledMarker(this.latlng_,this.opt_opts_)}
LabeledMarker.prototype.show=function(){GMarker.prototype.show.apply(this,arguments);if(this.labelVisibility_){this.showLabel()}else{this.hideLabel()}}
LabeledMarker.prototype.hide=function(){GMarker.prototype.hide.apply(this,arguments);this.hideLabel()}
LabeledMarker.prototype.setLabelVisibility=function(a){this.labelVisibility_=a;if(!this.isHidden()){if(this.labelVisibility_){this.showLabel()}else{this.hideLabel()}}}
LabeledMarker.prototype.getLabelVisibility=function(){return this.labelVisibility_}
LabeledMarker.prototype.hideLabel=function(){this.div_.style.visibility='hidden'}
LabeledMarker.prototype.showLabel=function(){this.div_.style.visibility='visible'}

var map;
var moveend_listener;
var markers=[];
var gmopts;

function mclick(l){
  for (var n=0; n < markers.length; n++){
    var m=markers[n];
    if(m.label==l){
      m.openInfoWindowHtml(m.html, {maxWidth:220});
      m.xiti_mark();
      break;}
  }
}

function ordermarker(marker, b){return marker.numindex;}

function createMarker(r, i, Baseicon, n){
	var icon=new GIcon(Baseicon);
  var iconNbr=n>1?(i+1):"";
  icon.image=r.iconname;
  var priority=r.priority?" prioColor":"";
  icon.shadow="/images/gmap/shadow_marker_gmap.png";
  icon.shadowSize=new GSize(48,32);
  var opts={ 
    "icon": icon,
    "clickable": true,
    "labelText": '<strong id="marker_id_'+ iconNbr +'" class="nbrOverlay'+priority+'">'+ r.label +"</strong>",
    "labelOffset": new GSize(0, -14),
    "zIndexProcess": ordermarker
  };
  var m=new LabeledMarker(new GLatLng(r.lat, r.lng), opts);
  m.descr=r.descr;
  m.url=r.url;
  m.zoom_enabled=false;
  m.zoom_desactivated=false;
  m.html='';
  m.numindex=n-i+1;
  m.label=r.label;
  m.xiti_mark=function(){if(this.xt_clicked==null){eval(gmopts.xiti);this.xt_clicked=1;}};
  m.set_zoom=function(xbool,forcehidden){
    if((xbool==m.zoom_enabled) || m.zoom_desactivated){return;}
    m.zoom_enabled=(xbool==true)
    m.html ='<div style="height:100%;width:100%;"><font size="2">' + m.descr
    if(xbool){m.html=m.html+'<a href="javascript:zoomin(' + i + ')">Zoom</a>';}
    else {m.html=m.html+'<span style="color:#A9A9A9">Zoom</span>';}
    m.html=m.html+m.url+'</font></div>'
    var infowin_hidden=map.getInfoWindow().isHidden();
    var marker_in_map = map.getBounds().contains(m.getLatLng());
    if(!marker_in_map || infowin_hidden || forcehidden){m.bindInfoWindowHtml(m.html, {maxWidth:220});}
    else {m.openInfoWindowHtml(m.html, {maxWidth:220});}
  };
	return m;
}

function disable_zoom_links(old_level, new_level){
  if(old_level==new_level){return;}
  for (var i=0; i < markers.length; i++){markers[i].set_zoom(new_level!=map.getCurrentMapType().getMaximumResolution());}
}

function gmapload(opts, results){
 if(GBrowserIsCompatible()){
	var Baseicon=new GIcon();
	Baseicon.iconAnchor=new GPoint(6, 20);
	Baseicon.infoWindowAnchor=new GPoint(5, 1);
	Baseicon.iconSize=new GSize(48,32);
	map=new GMap2(document.getElementById("gMap"));
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  gmopts = opts;
  if(gmopts.overviewmap){map.addControl(new GOverviewMapControl());}
  map.setCenter(new GLatLng(47,5) , 5);
	map.setMapType(G_NORMAL_MAP);
	var b=new GLatLngBounds();
	for (var i=results.length-1; i>=0; i--){
    var m=createMarker(results[i], i, Baseicon, results.length);
    markers[i]=m;
		b.extend(m.getLatLng());
    map.addOverlay(m);
    GEvent.addListener(m, 'click', m.xiti_mark);
    m.set_zoom(true,true);
  }
  if(!b.isEmpty()){
    if(gmopts.nozoom){map.setZoom(12);markers[0].set_zoom(false);markers[0].zoom_desactivated=true;}
    else {map.setZoom(map.getBoundsZoomLevel(b));}
		map.setCenter(new GLatLng((b.getNorthEast().lat()+b.getSouthWest().lat())/2,(b.getNorthEast().lng()+b.getSouthWest().lng())/2));
	}
  var max_res = map.getCurrentMapType().getMaximumResolution();
  if(map.getZoom() == max_res){disable_zoom_links(1, max_res);}
  GEvent.addListener(map, "zoomend", disable_zoom_links);
 }
}

function zoomin(i){
  var m = markers[i];
  m.closeInfoWindow();
  var p=m.getLatLng();
  moveend_listener=GEvent.addListener(map, "moveend", function (){
    map.zoomIn();map.panTo(p);GEvent.removeListener(moveend_listener);
  });
  map.panTo(p);
}

