var map;
var globpoint;
var ringicon;
var clickedicon;
var oicons=[];
var mapdiv='<div id=\'mapx\' style=\'width:400px;height:400px\'></div>';



var geocoder= null;
var thiscarrier;

var prevlat;
var prevlng;
var showlat;
var showlng;
var notallowchangepos;

// Center the map in the middle of europe
var centerLatitude = 57;
var centerLongitude = 10;
var startZoom = 4;

var imagedir="/mapimg/";


function tooltip(txt){ return overlib(txt,FGCOLOR,'#ffffcc', TEXTPADDING,1,TEXTSIZE,'10px',OFFSETX,-5, OFFSETY,20,WRAP); }




// Init function
function init() 
{

  var mapobj = document.getElementById("map");
  map = new GMap2(mapobj);

  // Map controls
  //map.addControl(new GLargeMapControl());
if (showlat || showlng)
{ map.addControl(new GSmallMapControl()); }
else
{ map.addControl(new GLargeMapControl()); 
  map.addControl(new GScaleControl(50));}

  map.addControl(new GMapTypeControl());
  map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

  // Zoom functions
  map.enableContinuousZoom(); 
  map.enableDoubleClickZoom();

  // Possible to set map type to satellite
  // map.setMapType(G_SATELLITE_MAP);
 
  // MapOverviewControl
  map.addControl(new GOverviewMapControl(new GSize(80,80)));
  map.addMapType(G_PHYSICAL_MAP);
 // map.setMapType(G_PHYSICAL_MAP);
  var omap=document.getElementById("map");
omap.firstChild.style.border = "1px solid #006add";
omap.firstChild.firstChild.style.border = "1px solid #006add";
//omap.style.left="2px";
//omap.style.top="2px";
omap.firstChild.firstChild.style.left="0px";
omap.firstChild.firstChild.style.top="0px";
omap.firstChild.firstChild.style.width="79px";
omap.firstChild.firstChild.style.height="79px";


geocoder = new GClientGeocoder();

// Add test marker
var draggable=false; 

  makeomarkericon();

  bounds = new GLatLngBounds();
  addthemarkers();
  var thezoom=map.getBoundsZoomLevel(bounds);
  if (thezoom>14) {thezoom=14;}
  map.setZoom(thezoom);
  map.setCenter(bounds.getCenter());


}


function addmarker(point,isdraggable)
{
    //map.addOverlay(new GMarker(point));
    marker=new GMarker(point,{draggable: isdraggable});
    if (notallowchangepos<2)
    {
      document.Addentry.lat.value=point.lat().toFixed(6);
      document.Addentry.lng.value=point.lng().toFixed(6);
      document.getElementById("currmarkerpos").innerHTML = "<font size=1>Current position: <i>Latitude: "+point.lat().toFixed(6)+" "+"Longitude: "+point.lng().toFixed(6) +"</i> <a href=\"Javascript:centerandzoom("+ point.lat() +","+point.lng() +");\">Center and zoom</a></font>";
    }


  if (isdraggable)
  {
    GEvent.addListener(marker, "dragend", function() {
      point=marker.getPoint();
    document.Addentry.lat.value=point.lat().toFixed(6);
    document.Addentry.lng.value=point.lng().toFixed(6);
    document.getElementById("currmarkerpos").innerHTML = "<font size=1>Current position: <i>Latitude: "+point.lat().toFixed(6)+" "+"Longitude: "+point.lng().toFixed(6) +"</i> <a href=\"Javascript:centerandzoom("+ point.lat() +","+point.lng() +");\">Center and zoom</a></font>";
    });
  }

    map.addOverlay(marker);
}

function addmarkerlatlng(lat,lng)
{
  addmarker(new GLatLng(lat,lng),true);
}


function wheelZoom(a) { 
    if ((a.detail || -a.wheelDelta) < 0) 
        map.zoomIn(); 
    else 
        map.zoomOut(); 

}

function centerandzoom(lat,lng) 
{ 
  tzoom=8;
  nowzoom=map.getZoom() 
  if (nowzoom>=tzoom)
  {tzoom=nowzoom+1;}
  map.setCenter(new GLatLng(lat,lng),tzoom); 
}

    function jumptocountry() {
showAddress(document.Addentry.country.value,5);
}
    function jumptoregion() {
if (document.Addentry.region.value){
showAddress(document.Addentry.region.value + "," + document.Addentry.country.value,7); }
else
{ showAddress(document.Addentry.country.value,5); }
}
    function jumptoplace() {
if (document.Addentry.place.value){
showAddress(document.Addentry.place.value + "," + document.Addentry.country.value,8);}
else
{ showAddress(document.Addentry.country.value,5); }
}

// from Google API official site

    function showAddress(address,zoom) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found.");
            } else {
              map.setCenter(point, zoom);
             // var marker = new GMarker(point);
             // map.addOverlay(marker);
             // marker.openInfoWindowHtml(address);
            }
          }
        );
      }
    }





// Creates a marker at the given point with the given number label
        function createamarker(point, text) {
          var marker = new GMarker(point,aicon);
          GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml(text);
          });
          return marker;
        }

        function createomarker(point,over,url,html,ii) {
          var marker = new GMarker(point,oicons[ii]);
          //var marker = new GMarker(point);
          //GEvent.addListener(marker, "click", function() {
          //  marker.openInfoWindowHtml(html);
          //});

GEvent.addListener(marker, "click", function() {
    // marker.openInfoWindowHtml(text);
   // return overlib(text,STICKY,NOCLOSE,OFFSETY,0,OFFSETX,0,WIDTH,450,CAPTION,over);
   window.open(url,over,'width=1000,heigth=800,resizable=yes,scrollbars=yes,location=yes')
   //  overlib(OLiframeContent(url, 600, 500, 'if1', 1, 'auto'), WIDTH,600,CLOSECLICK,DRAGGABLE, TEXTPADDING,0, BORDER,2, STICKY, SCROLL, CAPTIONPADDING,4, CAPTION,'World of O Maps', MIDX,0, RELY,90);
  });
  GEvent.addListener(marker,"mouseover", function() {
    return overlib(html,WIDTH,300,0,0);
  });
  GEvent.addListener(marker,"mouseout", function() {
    return nd();
  });



          return marker;
        }

        function createwmarker(point, text) {
          var marker = new GMarker(point,wicon);
          GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml(text);
          });
          return marker;
        }


function addmapmarker(data,nr)
{

  // Bounds to show only the found items


  parts = data.split("|");
  var name = parts[0];
  var lat = parseFloat(parts[1]);
  var lng = parseFloat(parts[2]);
  var year = parts[3];
  var country = parts[4];
  var owner = parts[5];
  var scale = parts[6];
  var area = parts[7];
  var image = parts[8];
  var url = 'http://maps.worldofo.com/showmap.php?id='+parts[9];

  // $name|$lat|$lng|$year|$country|$owner|$scale|$area|$image

  var point = new GLatLng(lat,lng);
 
  var html="";
  if (image)
      {
         smallimage=image.substring(0,image.length-4) + "_s.jpg";
         html+= "<img align=right border=1 src=\""+imagedir+smallimage+"\">";
      }
  html+="<h3>Map: "+name+"</h3>\n";
  html+="<table class=details>";
  html+="<tr><td><b>Country:</b></td><td>"+country+"</td></tr>";
  html+="<tr><td><b>Year:</b></td><td>"+year+"</td></tr>";
  html+="<tr><td><b>Owner:</b></td><td>"+owner+"</td></tr>";
  html+="<tr><td><b>Scale:</b></td><td>"+scale+"</td></tr>";
  html+="</table>";

  var over="Map: "+name;
  marker=createomarker(new GLatLng(parseFloat(lat),parseFloat(lng)),over,url,html,nr);
  map.addOverlay(marker);
  bounds.extend(point);

}

function JSONscriptRequest(fullUrl) {
    // REST request path
    this.fullUrl = fullUrl; 
    // Keep IE from caching requests
    this.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
    // Get the DOM location to put the script tag
    this.headLoc = document.getElementsByTagName("head").item(0);
    // Generate a unique script tag id
    this.scriptId = 'YJscriptId' + JSONscriptRequest.scriptCounter++;
}

// Static script ID counter
JSONscriptRequest.scriptCounter = 1;

// buildScriptTag method
//
JSONscriptRequest.prototype.buildScriptTag = function () {

    // Create the script tag
    this.scriptObj = document.createElement("script");
    
    // Add script object attributes
    this.scriptObj.setAttribute("type", "text/javascript");
    this.scriptObj.setAttribute("src", this.fullUrl + this.noCacheIE);
    this.scriptObj.setAttribute("id", this.scriptId);
}
 
// removeScriptTag method
// 
JSONscriptRequest.prototype.removeScriptTag = function () {
    // Destroy the script tag
    this.headLoc.removeChild(this.scriptObj);  
}

// addScriptTag method
//
JSONscriptRequest.prototype.addScriptTag = function () {
    // Create the script tag
    this.headLoc.appendChild(this.scriptObj);
}

function showoutline(id) {
  GDownloadUrl("findoutline.php?id=" + id, process_outline) ;
}

process_outline = function(doc)
{
var pointsstr = doc.split(" ");
var points = [];
for (var i = 0; i < pointsstr.length; i++) {
  var xy= pointsstr[i].split(",");
  points.push(new GLatLng(xy[0],xy[1]) );
}
thisoutlineobj=new GPolyline(points,"#0000FF",4);
map.addOverlay(thisoutlineobj);
  map.setCenter(new GLatLng(prevlat,prevlng),12); 
}

function makeomarkericon()
{
    var ii;

    for (ii=1;ii<=200;ii++)
    {
        oicons[ii-1] = new GIcon();
if (ii<=100)
{
        oicons[ii-1].image = "basis/opost" + ii + ".png";
        oicons[ii-1].shadow = "basis/opost" + ii + ".png";
}
else
{
        oicons[ii-1].image = "basis/opost0.png";
        oicons[ii-1].shadow = "basis/opost0.png";
}


        oicons[ii-1].iconSize = new GSize(20, 20);
        oicons[ii-1].shadowSize = new GSize(1,1);
        oicons[ii-1].iconAnchor = new GPoint(10,10);
        oicons[ii-1].infoWindowAnchor = new GPoint(10, 10);

    }
        ringicon = new GIcon();
        ringicon.image = "basis/ring2.png";
        ringicon.shadow = "basis/ring2.png";
        ringicon.iconSize = new GSize(40, 40);
        ringicon.shadowSize = new GSize(1,1);
        ringicon.iconAnchor = new GPoint(20,20);
        ringicon.infoWindowAnchor = new GPoint(20, 20);

        clickedicon = new GIcon();
        clickedicon.image = "basis/clicked.png";
        clickedicon.shadow = "basis/clicked.png";
        clickedicon.iconSize = new GSize(11, 11);
        clickedicon.shadowSize = new GSize(1,1);
        clickedicon.iconAnchor = new GPoint(6,6);
        clickedicon.infoWindowAnchor = new GPoint(6, 6);
}


function mapsearchmax()
{
  overlib(mapdiv,FGCOLOR,'#ffffff', STICKY,CENTER, OFFSETY,2,CLOSECLICK,CAPTION,'Mark position',SHADOW,DRAGGABLE,SHADOWX,8,SHADOWY,8);

  var mapobj = document.getElementById("mapx");
  map = new GMap2(mapobj);
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());

  // Find lat,lon in s.latlon
  //latlonstr=document.s.latlng.value;
  //ll = latlonstr.split(",");
  //Lat=parseFloat(ll[0]);
  //Lon=parseFloat(ll[1]);
  Lat=document.s.maxlat.value;
  Lon=document.s.maxlng.value;

  if (Lat && Lon)
  {
    Zoom=4;
    map.setCenter(new GLatLng(Lat, Lon), Zoom);
    addmarker(new GLatLng(Lat, Lon));
  }
  else
  {
    Zoom=2;Lat=30;Lon=10;
    map.setCenter(new GLatLng(Lat, Lon), Zoom);
  }

  GEvent.addListener(map, "click", function(clickedmarker, point) {
    map.clearOverlays();
    if (point)
    { addmarkerformmax(point); }
    else
    { 
document.s.maxlat.value=''; 
document.s.maxlng.value=''; 
}
  });

  return false;
}

function addmarkerformmax(point)
{
    //map.addOverlay(new GMarker(point));
    marker=new GMarker(point,{draggable: true});    
   document.s.maxlat.value=point.lat().toFixed(3) 
   document.s.maxlng.value=point.lng().toFixed(3);
    GEvent.addListener(marker, "dragend", function() {
      point=marker.getPoint();    
     document.s.maxlat.value=point.lat().toFixed(3) 
     document.s.maxlng.value=point.lng().toFixed(3);
    });
    map.addOverlay(marker);
}




function mapsearchmin()
{
  overlib(mapdiv,FGCOLOR,'#ffffff', STICKY,CENTER, OFFSETY,2,CLOSECLICK,CAPTION,'Mark position',SHADOW,DRAGGABLE,SHADOWX,8,SHADOWY,8);

  var mapobj = document.getElementById("mapx");
  map = new GMap2(mapobj);
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());

  // Find lat,lon in s.latlon
  //latlonstr=document.s.latlng.value;
  //ll = latlonstr.split(",");
  //Lat=parseFloat(ll[0]);
  //Lon=parseFloat(ll[1]);
  Lat=document.s.minlat.value;
  Lon=document.s.minlng.value;

  if (Lat && Lon)
  {
    Zoom=4;
    map.setCenter(new GLatLng(Lat, Lon), Zoom);
    addmarker(new GLatLng(Lat, Lon));
  }
  else
  {
    Zoom=2;Lat=30;Lon=10;
    map.setCenter(new GLatLng(Lat, Lon), Zoom);
  }

  GEvent.addListener(map, "click", function(clickedmarker, point) {
    map.clearOverlays();
    if (point)
    { addmarkerformmin(point); }
    else
    { 
document.s.minlat.value=''; 
document.s.minlng.value=''; 
}
  });

  return false;
}

function addmarkerformmin(point)
{
    //map.addOverlay(new GMarker(point));
    marker=new GMarker(point,{draggable: true});    
   document.s.minlat.value=point.lat().toFixed(3) 
   document.s.minlng.value=point.lng().toFixed(3);
    GEvent.addListener(marker, "dragend", function() {
      point=marker.getPoint();    
     document.s.minlat.value=point.lat().toFixed(3) 
     document.s.minlng.value=point.lng().toFixed(3);
    });
    map.addOverlay(marker);
}






    	

window.onload = init;


