function TipOverlay() {
  this.marker = null;
  this.div = null;
  this.hideTimeout = null;
}
TipOverlay.prototype = new GOverlay();

TipOverlay.prototype.initialize = function(map) {
  var div = document.createElement("div");
  div.className = "tip";
  div.style.display = "none";

  this.map = map;
  this.div = div;
  map.getPane(G_MAP_FLOAT_PANE).appendChild(div);
};

TipOverlay.prototype.remove = function() {
  this.div.parentNode.removeChild(this.div);
};

TipOverlay.prototype.redraw = function(force) {
  if (!force) return;
  if (!this.marker) return;

  var offsetX = 7;
  var offsetY = 7;
  var pixMarker = this.map.fromLatLngToDivPixel(this.marker.getPoint());
  this.div.style.top = (pixMarker.y + offsetY) + 'px';
  this.div.style.left = (pixMarker.x + offsetX) + 'px';
};

TipOverlay.prototype.showTip = function(marker, html) {
  this.marker = marker;
  this.div.innerHTML = html;
  this.div.style.display = "block";
  if (this.hideTimeout) clearTimeout(this.hideTimeout);
  this.redraw(true);
};

TipOverlay.prototype.hideTip = function(marker) {
  if (marker && marker != this.marker) return;
  if (this.hideTimeout) clearTimeout(this.hideTimeout);
  var div = this.div;
  this.hideTimeout = setTimeout(function() {
    div.style.display = "none";
  }, 200);
};


   var map;
   var tipOverlay;
   var places=new Array();
   var search_places=new Array();

    function importanceOrder (marker,b) 
    {
        return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
    } 

   function fairepoint(point,idlink,nom,icon,imp)
   {
     var marker = new GMarker(point,{icon:icon,zIndexProcess:importanceOrder});  
     marker.importance = imp;
     map.addOverlay(marker);
     GEvent.addListener(marker, "click", function() { window.location.assign("site.asp?id="+idlink); });
     GEvent.addListener(marker, "mouseover", function() { tipOverlay.showTip(marker, nom); });
     GEvent.addListener(marker, "mouseout", function() { tipOverlay.hideTip(marker); }); 
     return marker;
   }

   function refairepoint(point,idlink,nom,nicon,place)
   {
     place.setImage(nicon); 
     place.setLatLng(point);
     GEvent.addListener(place, "click", function() { window.location.assign("site.asp?id="+idlink); });
     GEvent.addListener(place, "mouseover", function() { tipOverlay.showTip(place, nom); });
     GEvent.addListener(place, "mouseout", function() { tipOverlay.hideTip(place); }); 
   }



function getmarkers(url,stat,icon,center)
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
        
        var strg = xmlHttp.responseText;
        var j = 0;
        var old;


        while (!(strg=="%"))
        {

          j = j + 1; 

          i=strg.search("%");
          var str=strg.substr(0,i);
          strg = strg.substr(i+1);

          i=str.search("!");
          var id = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var name = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var lng = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var lat = str.substr(0,i);        

          var prior = str.substr(i+1);

          if (icon=="prior")
          {
            if (prior > 0)
            {
               nicon = "http://labs.google.com/ridefinder/images/mm_20_red.png";
            } 
            else
            {
               nicon = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
            } 
          } 
          else
          { 
          if (icon=="letter")
          {
            if (j > 26)
            {
              nicon = "http://labs.google.com/ridefinder/images/mm_20_red.png";
            }
            else
            {
              nicon = "http://www.google.com/mapfiles/marker" + String.fromCharCode(64+j) + ".png";
            }
          }
          else
          {
            nicon = "http://labs.google.com/ridefinder/images/mm_20_" + icon + ".png";
          }
          }
   
          var point = new GLatLng(lat,lng);

          if ( center!=0  && j == 1)
          {  
            map.setCenter(point, center);
          } 

          if (stat==0)
          {
            if (places[j] == null) 
            { 
              var ricon = new GIcon();
              ricon.image = nicon;
              ricon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
              ricon.iconSize = new GSize(12, 20);
              ricon.shadowSize = new GSize(22, 20);
              ricon.iconAnchor = new GPoint(6, 20);
              ricon.infoWindowAnchor = new GPoint(5, 1);
              ricon.imageMap = [ 10, 11, 12, 13, 14, 15 ];  
              places[j] = fairepoint(point,id,name,ricon,1);
            }
            else
            {
              refairepoint(point,id,name,nicon,places[j]);
            }
          }
          else 
          { 
            if (stat==2)
            {
              if (!(old == null ))
              {
                var polyline = new GPolyline([ old, point], "#00FF00", 6);
                map.addOverlay(polyline);
              }
              old=point;
            }
            if (!(icon=="blank"))
            {
              var ricon = new GIcon();
              ricon.image = nicon;
              ricon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
              ricon.iconSize = new GSize(12, 20);
              ricon.shadowSize = new GSize(22, 20);
              ricon.iconAnchor = new GPoint(6, 20);
              ricon.infoWindowAnchor = new GPoint(5, 1);
              ricon.imageMap = [ 10, 11, 12, 13, 14, 15 ];  
              fairepoint(point,id,name,ricon,1);
            }
         }

        }

      }

    }

  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
  }

function setMapWindow() 
{
  if (parseInt(navigator.appVersion) > 3) 
  {
    if (navigator.appName == "Netscape") 
    {
      winW = window.innerWidth;
      winH = window.innerHeight;
    }
    if (navigator.appName.indexOf("Microsoft") != -1) 
    {
      winW = document.body.offsetWidth;
      winH = document.body.offsetHeight;
    }

  if (winW<600) {winW=600;}
  if (winH<600) {winH=600;}

  var mapDivReference = document.getElementById("menu");
  mapDivReference.style.height = winH - 178;
  mapDivReference.style.width  = winW - 178;

  }
}

 function show_adrs(obj)
 {
  if (parseInt(navigator.appVersion) > 3) 
  {
    if (navigator.appName == "Netscape") 
    {
      winW = window.innerWidth;
      winH = window.innerHeight;
    }
    if (navigator.appName.indexOf("Microsoft") != -1) 
    {
      winW = document.body.offsetWidth;
      winH = document.body.offsetHeight;
    }

    if (winW<600) {winW=600;}
    if (winH<600) {winH=600;}

    var adrs = document.getElementById(obj)
    adrs.style.visibility = "visible";
    if (obj=="search") { adrs.style.left = winW-290 + "px"; }
    if (obj=="backg") { adrs.style.left = winW-290 + "px"; }
  }
 } 

 function hidd_adrs(obj)
 {
    var adrs = document.getElementById(obj)

    adrs.style.visibility = "hidden";

 } 
function setCookie() 
{
  var cookiename = "mapinfo";  // name for this cookie
  var expiredays = 1;          // number of days before cookie expiry

  maptype = 0;
  for (var i=0;i<map.getMapTypes().length;i++) 
  {
    if (map.getCurrentMapType() == map.getMapTypes()[i]) 
    {
      maptype = i;
    }
  }
  var cookietext = cookiename+"="+map.getCenter().lat()+"|"+map.getCenter().lng()+"|"+map.getZoom()+"|"+maptype;
  if (expiredays) 
  {
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    cookietext += ";expires="+exdate.toGMTString();
  }
       
  // == write the cookie ==
  document.cookie=cookietext;
}

function centerfromcookie() 
{

  var cookiename = "mapinfo";  // name for this cookie
  var expiredays = 1;          // number of days before cookie expiry

  var lat = 13.7440852899736;
  var lng = 100.538012981415;
  var zoom = 15;
  var maptype = 1;


  if (document.cookie.length>0) 
  {
    cookieStart = document.cookie.indexOf(cookiename + "=");
    if (cookieStart!=-1) 
    {
      cookieStart += cookiename.length+1; 
      cookieEnd=document.cookie.indexOf(";",cookieStart);
      if (cookieEnd==-1) 
      {
        cookieEnd=document.cookie.length;
      }
      cookietext = document.cookie.substring(cookieStart,cookieEnd);
      // == split the cookie text and create the variables ==
      bits = cookietext.split("|");
      lat = parseFloat(bits[0]);
      lng = parseFloat(bits[1]);
      zoom = parseInt(bits[2]);
      maptype = parseInt(bits[3]);
    } 
  }

  map.setCenter(new GLatLng(lat,lng),zoom,map.getMapTypes()[maptype]);

}

function map2adr()
{
   var adrs = document.getElementById("adrs");
   var maptype = 0;
   for (var i=0;i<map.getMapTypes().length;i++) 
   {
     if (map.getCurrentMapType() == map.getMapTypes()[i]) 
     {
       maptype = i;
     }
   }
   adrs.value = "http://www.ebangkok.org/map.asp?lng=" + map.getCenter().lng() + "&lat=" + map.getCenter().lat() + "&zoo=" + map.getZoom() + "&mty=" + maptype;
}

function mapsearch(search_text,bkk)
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
        
        var strg = xmlHttp.responseText;

        var j = 0;

        var search = document.getElementById("search")

        search.innerHTML = search.innerHTML.substring(0,search.innerHTML.toUpperCase().indexOf("</TABLE>")+8);
        search.innerHTML = search.innerHTML + "<br>";

        var bounds = new GLatLngBounds();

        while (!(strg=="%"))
        {

          j = j + 1; 

          i=strg.search("%");
          str=strg.substr(0,i);
          strg = strg.substr(i+1);

          i=str.search("!");
          var id = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var name = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var lng = str.substr(0,i);        
          str=str.substr(i+1);

          i=str.search("!");
          var lat = str.substr(0,i);        

          var prior = str.substr(i+1);

          search.innerHTML = search.innerHTML + "<a href='javascript: void(0)' onclick='point(" + j + ")'>" + name + "</a><br>";

        var point = new GLatLng(lat,lng);

         bounds.extend(point);

         nicon = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";

            if (search_places[j] == null) 
            { 
              var ricon = new GIcon();
              ricon.image = nicon;
              ricon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
              ricon.iconSize = new GSize(12, 20);
              ricon.shadowSize = new GSize(22, 20);
              ricon.iconAnchor = new GPoint(6, 20);
              ricon.infoWindowAnchor = new GPoint(5, 1);
              ricon.imageMap = [ 10, 11, 12, 13, 14, 15 ];  
              search_places[j] = fairepoint(point,id,name,ricon,10);
            }
            else
            {
              refairepoint(point,id,name,nicon,search_places[j]);
              if (search_places[j].isHidden()) 
              {
                search_places[j].show();
              }
            }
        }

        if (j>0) 
        {
          var zm = map.getBoundsZoomLevel(bounds);
          if (zm>18) 
          {
            zm=18; 
          }
          map.setCenter(bounds.getCenter(), zm);
          backg.style.height = 320 + 'px';
        }

        j = j + 1;
        while (!(search_places[j] == null))
        {
           search_places[j].hide();
           j = j + 1
        }
 
      }

    }

  var url = "point.asp?typ=r&search=" + search_text;
  if (bkk) { url = url + "&bkk=bkk" }

  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
  }

    function point(nb){
      var point = search_places[nb].getLatLng();
      var zm = map.getZoom()
      if (zm<=14) {zm=14;}
      map.setCenter(point,zm);
    }


function encodeNumber(num) {
  var encodeString = "";

  while (num >= 0x20) {
    encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63));
    num >>= 5;
  }

  encodeString += (String.fromCharCode(num + 63));
  return encodeString;
}


function encodeSignedNumber(num) {
  var sgn_num = num << 1;
  if (num < 0) {
    sgn_num = ~(sgn_num);
  }
 return(encodeNumber(sgn_num));
}

function getpoly(url,color,idline)
{
  var xmlHttp;
  try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
  catch (e)
  {
  // Internet Explorer
  try
    {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }

  xmlHttp.onreadystatechange=function()
  {
    if(xmlHttp.readyState==4)
    {
        
      var strg = xmlHttp.responseText;
      var j = 0;

      var encoded_points = "";
      var encoded_levels = "";
      var plat = 0;
      var plng = 0;

      while (!(strg=="%"))
      {

        j = j + 1; 

        i=strg.search("%");
        var str=strg.substr(0,i);
        strg = strg.substr(i+1);

        i=str.search("!");
        var id = str.substr(0,i);        
        str=str.substr(i+1);

        i=str.search("!");
        var name = str.substr(0,i);        
        str=str.substr(i+1);

        i=str.search("!");
        var lng = str.substr(0,i);        
        str=str.substr(i+1);

        i=str.search("!");
        var lat = str.substr(0,i);        

        var prior = str.substr(i+1);

        var late5 = Math.round(lat * 1e5);
        var lnge5 = Math.round(lng * 1e5);

        dlat = late5 - plat;
        dlng = lnge5 - plng;

        plat = late5;
        plng = lnge5;

        encoded_points += encodeSignedNumber(dlat) + encodeSignedNumber(dlng);
        encoded_levels += encodeNumber(3);
      }

    if (vecteur[color] != null) {
      map.removeOverlay(vecteur[color]);
    }

    vecteur[color] = GPolyline.fromEncoded({color: backColor[color],
                                              weight: 6,
                                              opacity: 0.5,
                                              points: encoded_points,
                                              zoomFactor: 32,
                                              levels: encoded_levels,
                                              numLevels: 4
                                             });

    map.addOverlay(vecteur[color]);

    }

  }

  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}


