    var map=false;
    var cpt=0;
    var MARKERS=[];
    function createMarker(point, index) {
  // Create a lettered icon for this point using our icon class
  var letter = String.fromCharCode("A".charCodeAt(0) + index);
  var Micon = new GIcon(baseIcon);
  Micon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
  var mkTitle = 'loc';
  var marker = new GMarker(point, { title:mkTitle, icon: Micon });
  marker.title=mkTitle;
  MARKERS[index]=marker;
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("Marker <b>" + letter + "</b>");
  });
  var mg='';
  for(var i=0;i<=index;i++){
     mg+= '<b>'+(String.fromCharCode("A".charCodeAt(0) + i))+'</b>)&nbsp;'+MARKERS[i].title+'&nbsp;'+MARKERS[i].getPoint().toString()+'<br>';
  }
  document.getElementById('points').innerHTML=mg;
  return marker;
}
var shtemp=0;
function shpoly(){
    shtemp--;
    if(shtemp%2==0){
        map.removeOverlay(polytemp);
    }
    else{
        map.addOverlay(polytemp);
    }
    if(shtemp>0){
      setTimeout("shpoly()",500);
    }
}
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

    var MTL=false;
    var polytemp=false;
    function doSearch(){
    GDownloadUrl(BASE_URL+"search.php?q="+escape(document.getElementById("q").value), function(data, responseCode) {
      var QRY=[];
       eval(data.substring(0,data.indexOf('**EOF**')));
      if(QRY.length==0){xalert('nothing found');}
      else{
        var S=QRY[0];
        var myBounds=new GLatLngBounds(
          new GLatLng(S.ymin,S.xmin),
          new GLatLng(S.ymax,S.xmax)
        );
var polygon = new GPolygon([
  new GLatLng(S.ymin,S.xmin),
  new GLatLng(S.ymin,S.xmax),
  new GLatLng(S.ymax,S.xmax),
  new GLatLng(S.ymax,S.xmin),
  new GLatLng(S.ymin,S.xmin)
], "#00ff00", 3,"#aaffaa",50);
map.addOverlay(polygon);        
polytemp=polygon;
shtemp=10;
setTimeout("shpoly()",500);
        var myZl = map.getBoundsZoomLevel(myBounds) ;
        //if (myZl>16){myZl=16;}

        var myCenter =  new GLatLng(S.ymin+parseFloat((S.ymax-S.ymin)/2),S.xmin+parseFloat((S.xmax-S.xmin)/2));
//        map.addOverlay(new GMarker(myCenter));
        map.setCenter(myCenter,myZl);
        document.getElementById('points').innerHTML=S.nume+' / '+myZl;
      }
    });        
    }
var  POINTS=[];
var TEMPS=[];
var LOAD=[];
var OBJID=[];
var POLYPOINTS=[];
var hvPoly=false;
var opco=0;
var mode=1;
var itemid=-1;
    function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"),{draggableCursor:'crosshair'}); //draggableCursor
        map.setCenter(new GLatLng(46.766705604283906, 23.599984645843506), 16);
        map.addControl(new GLargeMapControl());
		    map.addControl(new GMapTypeControl());
		    map.setMapType(G_HYBRID_MAP);
    		GEvent.addListener(map, "moveend", function() {	 
  	 		var center = map.getCenter();
  			opco++;
  			document.getElementById("message").innerHTML = center.toString()+' | '+opco;
		    });
		

        GEvent.addListener(map, "mouseover", function(point) {
         var F=getFeatureAt(point);
         if(F){
            document.getElementById('points').innerHTML=F.dbid+') '+F.title;
         }
        }); 
        
        GEvent.addListener(map, "mousemove", function(point) {    
          var F=getFeatureAt(point);
          if(F){
            document.getElementById('points').innerHTML=F.dbid+') '+F.title;
          }
          if((hvPoly!=false)&&(F==false)||(F.dbid!=hvPoly.dbid)){
             map.removeOverlay(hvPoly);            
             hvPoly=false;
          }
          if((hvPoly==false)&&(F!=false)){
            var P=[];
            for(var i=0;i<F.getVertexCount();i++){P.push(F.getVertex(i));}
            hvPoly=new BDCCPolygon(P, "#00ffff", 3,.9,"#aaffaa",.5,F.title);
            map.addOverlay(hvPoly);
            hvPoly.dbid=F.dbid;
            hvPoly.title=F.title;
            hvPoly.tip=F.tip;
            
 
            
            //map.openInfoWindowHtml(P[0],"Marker #<b>madi</b>");
         }
        }); 

    
    GEvent.addListener(map, "click", function(marker, point) {
       if(!hvPoly)return;
       var cl='';
       for(var i=0;i<CATS.length;i++)cl+=CATS[i]+',';
       cl+=hvPoly.dbid;
       map.openInfoWindowHtml(hvPoly.getVertex(0),"<div id='brefDetails'><b><a href='"+BASE_URL+"bounce.php?lang="+LANG+"&to="+cl+"'>"+hvPoly.title+"</a></b><div id='brefDetailsLoading'><img src='"+BASE_URL+"gfx/loading.gif'/></div></div>");
       var urlBref=BASE_URL+'bref.php?objid='+hvPoly.dbid+'&lang='+LANG;       
       setTimeout("latentLoadDetails('"+urlBref+"');",200);
       return;
  if (marker) {
    map.removeOverlay(marker);
  } else {
      if(mode==0){
      POINTS.push(point);      
      if(POINTS.length>1){
        var poly = new GPolyline([POINTS[POINTS.length-2],POINTS[POINTS.length-1]]
        , "#11ff11", 3);
        map.addOverlay(poly);  
        TEMPS.push(poly);
      }       
      }
      if(mode==1){
        //map.closeInfoWindow();  
        var infoTabs = [
  new GInfoWindowTab("Tab #1", "This is tab #1 content"),
  new GInfoWindowTab("Tab #2", "This is tab #2 content")
];

        var mk=new GMarker(point);
        map.addOverlay(mk);
        mk.openInfoWindowTabsHtml(infoTabs);

        //infoWindow(point.lat(),point.lng(),"FUCK YOU");
        return;       
        document.getElementById('mypoint').value = hvPoly.title;
        itemid=hvPoly.dbid;
        document.getElementById('ftype').value=hvPoly.tip;
        document.getElementById('about-info').src='about:blank';
        document.getElementById('pt_fotos').innerHTML ='pozele se incarca, asteptati 1 moment...';
        GDownloadUrl(BASE_URL+'loadfoto.php?ob_id='+itemid, function(data, responseCode) {
             var ht=data.substring(0,data.indexOf('<!-- //**EOF//-->'));       
             document.getElementById('pt_fotos').innerHTML = ht;
         });
/*         
        GDownloadUrl(BASE_URL+'gbounce.php?q='+escape(document.getElementById('mypoint').value+', Cluj Napoca'), function(data, responseCode) {
             var ht=data.substring(0,data.indexOf('**EOF**'));       
             document.getElementById('about-info').src= ht;
         });
*/

/*        
        var urlBref=BASE_URL+'bref.php?objid='+itemid+'&lang='+LANG;
       
        GDownloadUrl(urlBref, function(data, responseCode) {
        //     var ht=data.substring(0,data.indexOf('**EOF**'));    
             map.closeInfoWindow();                
             map.openInfoWindowHtml(point,responseCode);
         });
*/        
return;
        mode=2;        
        xalert('Now click on a photo to add it. (to id:'+itemid+')');
      } 
      if(mode==3){
          xalert('Saving photo "'+cfile+'" to id='+itemid+' at coords '+point.toString());
          var ht=BASE_URL+"savefoto.php?"+
                  "file="+escape(cfile)+
                  "&lat="+point.lat()+
                  "&lon="+point.lng()+
                  "&titlu="+prompt('ENTER Short Photo Tile:')+
                  "&ob_id="+itemid;
         GDownloadUrl(ht, function(data, responseCode) {
             xalert("Saved with photoid="+data);
         });	                  
          mode=1;
      }
  }
}); 
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 

    var copyright = new GCopyright(1,
                              new GLatLngBounds(new GLatLng(-90, -180), 
                                                new GLatLng(90, 180)),
                              0,
                              "©2006 around-cluj.info");
    var copyrightCollection = new GCopyrightCollection('Chart');
    copyrightCollection.addCopyright(copyright);
    var tilelayer = new GTileLayer(copyrightCollection , 3, 11);
    tilelayer.isPng = function() {return true;} 
    tilelayer.myLayers='topp:obiective,topp:kios_Union,topp:testm2s,topp:testm3s,topp:testm4s';
    tilelayer.myStyles='obiective_style,kios_Union_style,road_border,road_white,road_ave';
    tilelayer.myBaseURL='http://127.0.0.1:8080/geoserver/wms?';
    tilelayer.getTileUrl = CustomGetTileUrl;
    MTL = new GTileLayerOverlay(tilelayer );
    map.addOverlay( MTL );
    //var tilelayers = [tilelayer];
    // var custommap3 = new GMapType(tilelayers, G_SATELLITE_MAP.getProjection(), "GeoServer WMS", G_SATELLITE_MAP);      
    // map.addMapType(custommap3);    
//**++    document.getElementById('swRoads').checked=true;
	//	 return;
 GDownloadUrl(BASE_URL+'load.php?lang='+LANG, function(data, responseCode) {
           
       eval(data.substring(0,data.indexOf('**EOF**')));
       
       for(var i=0;i<DRAWTHESE.length;i++){
          var id=DRAWTHESE[i];
          var p=new GPolygon(POLYPOINTS[id],"#ff00ff", 3,.85,"#ffaaff",.05);
          map.addOverlay(p);
          if(DRAWTHESE.length==1){                             
             var cl='';
             var aTitle="";
             for(var i=0;i<CATS.length;i++)cl+=CATS[i]+',';
             for(var i=0;i<LOAD.length;i++){
                if(LOAD[i].dbid==id) {
                    aTitle=LOAD[i].title;
                    break;
                }
             }    
             map.setCenter(POLYPOINTS[id][0]);
             map.openInfoWindowHtml(map.getCenter(),"<div id='brefDetails'><b><a href='"+BASE_URL+"bounce.php?lang="+LANG+"&to="+cl+"'>"+aTitle+"</a></b><div id='brefDetailsLoading'><img src='"+BASE_URL+"gfx/loading.gif'/></div></div>");
             var urlBref=BASE_URL+'bref.php?objid='+id+'&lang='+LANG;       
             
             setTimeout("latentLoadDetails('"+urlBref+"');",200);
          }
      }
   });	
      }

    }
function infoWindow(lat,lon,ht){    
    setTimeout("map.openInfoWindowHtml(new GLatLng("+lat+","+lon+"),'"+ht+"');",400);
}    
function getFeatureAt(point){
  for(var i=0;i<LOAD.length;i++){
          if(InsidePolygon(point,LOAD[i])){              
              return LOAD[i]; 
          }
      }   
   return false;
}

function InsidePolygon(p,polygon)
{
  var N = polygon.getVertexCount();
  var counter = 0;
  var xinters=0.0;
  var p1,p2;

  p1 = polygon.getVertex(0);
  for (var i=1;i<=N;i++) {
    p2 = polygon.getVertex(i % N);
    if (p.lat() > Math.min(p1.lat(),p2.lat())) {
      if (p.lat() <= Math.max(p1.lat(),p2.lat())) {
        if (p.lng() <= Math.max(p1.lng(),p2.lng())) {
          if (p1.lat() != p2.lat()) {
            xinters = (p.lat()-p1.lat())*(p2.lng()-p1.lng())/(p2.lat()-p1.lat())+p1.lng();
            if (p1.lng() == p2.lng() || p.lng() <= xinters)
              counter++;
          }
        }
      }
    }
    p1 = p2;
  }
   if (counter % 2 == 0)
    return 0;
  else
    return 1;
}    
 
function endPoly(){
    for(var i=0;i<TEMPS.length;i++){map.removeOverlay(TEMPS[i]);}
    TEMPS=[];
    POINTS.push(POINTS[0]);
    var polygon = new GPolygon(POINTS, "#00ff00", 3,"#aaffaa",50);
    map.addOverlay(polygon);           
    polygon.title=document.getElementById('titlu').value;
    LOAD.push(polygon);
}
function undo(){
    POINTS.pop();
    map.removeOverlay(TEMPS[TEMPS.length-1]);
    TEMPS.pop();
}
function save(){
    var es = BASE_URL+'save.php?obj='+escape(document.getElementById('titlu').value)+'&poly=';
    for(var i=0;i<POINTS.length;i++){
       es+=POINTS[i].lat()+','+POINTS[i].lng()+'*';
    }    
   GDownloadUrl(es, function(data, responseCode) {  
      LOAD[LOAD.length-1].dbid=parseInt(data);
      if(parseInt(data+0)>0){
        xalert('Saved with id: '+data);          
      }
      else{
          xalert('feature too long, dump: '+es);
      }

   });
   POINTS=[];
}
function saveSHP(){
  GDownloadUrl(BASE_URL+"exportshp.php", function(data, responseCode) {  
      xalert('Export to "obiective.shp" : '+data);
   }); 
}
function removeFoto(obid,file){
 document.getElementById('imageview').src="foto/"+file;
 document.getElementById('photoview').style.display='block';
    xalert('todo: remove '+file+' from obid='+obid);
}
var cfile='';
function addFoto(file){
    var ht='<img src="thumb/'+file+ '" title="Click to remove" onclick="removePhoto('+itemid+',';
    ht+="'"+file+"'";
    ht+=')"/>';
    document.getElementById('pt_fotos').innerHTML = document.getElementById('pt_fotos').innerHTML + ht;    
    cfile=file;
    xalert('<b>Now click in the map from the point the photo was taken!</b>');
    mode=3;
}
function xalert(msg){
    document.getElementById('alert').innerHTML =msg;
}

function update(){
    xalert("Updating id="+itemid);
    var url=BASE_URL+'update.php?ob_id='+itemid+'&titlu='+escape(document.getElementById('mypoint').value)+'&tip='+document.getElementById('ftype').value;
    GDownloadUrl( url, function(data, responseCode) {  
      xalert('update of '+data);
      LOAD[itemid].tip=document.getElementById('ftype').value;
      LOAD[itemid].title=document.getElementById('mypoint').value;
      mode=1;
   }); 
}
var LAT1=46.80076450318144;
var LON0= 23.53992462158203    ;
var LAT0= 46.74809488145624;
var LON1= 23.70029926300049;
var LAT=LAT0;
var LON=LON0;
var zm=12;

function hover(){
 var P0=new GPoint(0,0);
 var P1=new GPoint(255,255);
 var K0= map.fromDivPixelToLatLng(P0);
 var K1= map.fromDivPixelToLatLng(P1);
 var DLat=K0.lat()-K1.lat();
 var DLon=K1.lng()-K0.lng();
 while(zm<20){ 
   while(LAT<LAT1){
    while(LON<LON1){
        LON+=DLon;
        map.setCenter(new GLatLng(LAT,LON),zm);
        setTimeout("hover()",2000);
        return;
    }
    LON=LON0;
    LAT+=DLat;
   }
   zm++;
   LAT=LAT0;
 }
}

function searchKeyPress(e)
{
 var characterCode;
 if(e && e.which){ //if which property of event object is supported (NN4)
   e = e;
   characterCode = e.which; //character code is contained in NN4's which property
 }
 else{
   e = event;
   characterCode = e.keyCode; //character code is contained in IE's keyCode property
 }
if (characterCode == 13){ 
  doSearch();
    return false;
  }  
  else
    return true;
}

var HILITED=[];
function expandSLE(id){
    setTimeout('delayed_expandSLE('+id+')',500);
    return false;    
}    
function delayed_expandSLE(id){
    var sle=document.getElementById('sle_'+id);
    var hsle=document.getElementById('hsle_'+id);
    if(hsle.innerHTML!=''){
        hsle.innerHTML='';
        map.removeOverlay(HILITED[id]);
    }
    else{
    hsle.innerHTML='<div style="background:#DDD"><center>'+
    '<a href="'+document.getElementById('asle_'+id).href+'" style="font-size:16px;font-weight:bold">Details: '+document.getElementById('asle_'+id).innerHTML+'</a>'
    +'</center></div>';
          var p=new GPolygon(POLYPOINTS[id],"#00ffff", 3,.95,"#00ffff",.55);
          map.addOverlay(p);
          map.setCenter(p.getVertex(9))
          HILITED[id]=p;
    }
    return false;
}


function findPosy(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return curtop;
}

var urlToBeLatentLoaded='';
function latentLoadDetails(urlBref){
 if(urlToBeLatentLoaded==urlBref)return;
 urlToBeLatentLoaded=urlBref ;
           GDownloadUrl(urlBref, function(data, responseCode) {
             var ht=data.substring(0,data.indexOf('**EOF**')); 
             while(ht.indexOf('\n')!=-1){ht=ht.replace('\n','');}
             if(ht!=''){              
              document.getElementById('brefDetailsLoading').innerHTML=ht;
             } 
             else{
              document.getElementById('brefDetailsLoading').innerHTML='';
                
            }
          });
}