var map;

var geocoder = null;

var gmarkers=[];
var htmlmains=[];
var htmlovers=[];
var lats=[];
var lngs=[];
var oicons=[];
var latpoint;
var lngpoint;
var globpoint;
var outlinemarker;
var ringicon;
var clickedicon;
var bounds;
var foundmaps=0;
var thisoutlineobj=0;
// var imagedir="http://localhost/Jan/tmp/";
var imagedir="/mapimg/";

if (type==1)
{
  var t_notfound=" not found. You must typically type for example 'Bergen, Norway', 'Bern, Switzerland', 'Prague, Czech Republic', 'Stockholm, Sweden' etc. You can also type 'latitude, longitude'.";
  var t_found='Found';
  var t_items='items';
  var t_zoomtofound='Zoom to found';
  var t_in='Zoom in';
  var t_out='Zoom out';
  var t_year='Year';var t_country='Country';var t_owner='Owner';var t_kilde='Source';
  var t_scale='Scale';
  var t_center='Center';
  var t_distance='Distance';
  var     t_showoutline="Show outline";
  var itemlistdefaultbackground='ffffff';
  var itemlisthoverbackground='F9F1DB';
  var t_area='Area';
  var t_allinfo='Map page';
  var t_allinfol='View all available info';
}
else
{
  var t_notfound=" ikke funnet. Du må søke på for eksempel 'Bergen, Norway', 'Moss, Norway' eller lignende.";
  var t_found='Fant';
  var t_items='kart';
  var t_zoomtofound='Zoom inn til funn';
  var t_in='Zoom inn';
  var t_out='Zoom ut';
  var t_year='År';var t_country='Land';var t_owner='Eier';var t_kilde='Kilde';
  var t_scale='Målestokk';
  var t_center='Sentrer';
  var t_distance='Avstand';
  var    t_showoutline="Vis omriss";
  var itemlistdefaultbackground='ffffff';
  var itemlisthoverbackground='ffdd30';
  var t_area='Areal';
}

// Center the map in the middle of europe
if (type==1)
{
var centerLatitude = 57;
var centerLongitude = 10;
var startZoom = 4;
}
else
{
var centerLatitude = 63;
var centerLongitude = 11;
var startZoom = 5;
}

if (getlat && getlng && getzoom)
{
centerLatitude = getlat;
centerLongitude = getlng;
startZoom = getzoom;
}
var timeOut = null; // This is global !!

//Create the tile layer object
var worldofocoll = new GCopyrightCollection('O data');

var detailLayer = new GTileLayer(worldofocoll);
var worldofocopyright = new GCopyright('worldofo',new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180)),0,'© Geo.WorldofO.com');
worldofocoll.addCopyright(worldofocopyright);

//Method to retrieve the URL of the tile
detailLayer.getTileUrl = function(tile, zoom){
if (type==1)
{ tiledir='tiles';}
else
{ tiledir='ntiles';}

    if (ti[zoom+"_"+tile.x+"_"+tile.y])
    { var tileURL = tiledir + "/tile_"+zoom+"_"+tile.x+"_"+tile.y+".gif";}
    else
    { var tileURL = tiledir + "/blank.gif";}

    return tileURL;
};

detailLayer.isPng = function() {
    //The example uses GIF's
    return false;
}

detailLayer.getOpacity = function() {
    return 0.6; // Note - can lead to poorer performance
   // return 1.0;
}


//add your tiles to the normal map projection
detailMapLayers = G_NORMAL_MAP.getTileLayers();
detailMapLayers.push(detailLayer);

//add your tiles to the satellite map projection
detailMapLayers = G_SATELLITE_MAP.getTileLayers();
detailMapLayers.push(detailLayer);


// Create the oicon used to mark an item on the map
function makeomarkericon()
{
    var ii;

    for (ii=1;ii<=20;ii++)
    {
        oicons[ii-1] = new GIcon();
        oicons[ii-1].image = "basis/opost" + ii + ".png";
        oicons[ii-1].shadow = "basis/opost" + ii + ".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);
}

// A function to create a marker and set up event window
function createMarker(point,icon,htmlmain,htmltool,htmlover) {

  var marker = new GMarker(point,icon);
  GEvent.addListener(marker, "click", function() {
   // marker.openInfoWindowHtml(html);
    return overlib(htmlmain,STICKY,NOCLOSE,OFFSETY,0,OFFSETX,0,WIDTH,300,CAPTION,htmlover);
  });
  GEvent.addListener(marker,"mouseover", function() {
    return overlib(htmltool,0,0,CAPTION,htmlover);
  });
  GEvent.addListener(marker,"mouseout", function() {
    return nd();
  });




  map.addOverlay(marker);
  return marker;
}


// Function to load maps and show icons
function showmaps() 
{
  map.clearOverlays();

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();


  GDownloadUrl("findmaps.php?lat=" + latpoint + "&lng=" + lngpoint + "&swlat=" + southWest.lat() + "&swlng=" + southWest.lng() + "&nelat=" + northEast.lat() + "&nelng=" + northEast.lng() + "&type=" + type, process_it) ;
  // GDownloadUrl("findmaps.php?lat=" + latpoint + "&lng=" + lngpoint , process_it) ;
}

process_it = function(doc) 
{

  // Add marker at clicked point
  var clickedmarker = new GMarker(new GLatLng(latpoint,lngpoint),clickedicon);
  map.addOverlay(clickedmarker);

  // Bounds to show only the found items
  bounds = new GLatLngBounds();

  // === split the document into lines ===
  lines = doc.split("\n");
  lines.length=lines.length-1;
  foundmaps=lines.length;

  //  showinfo('<h2>Found ' + (lines.length) + ' maps.</h2>');

  
 
  var tfoundinfo='<h2>' + t_found + ' ' + foundmaps + ' ' + t_items +'</h2>';
  if (foundmaps>0) { tfoundinfo+='<a class=button href="javascript:zoomtobounds()">' + t_zoomtofound +'</a><p style="margin-bottom: 0px;margin-top: 10px;"><a class=button href="javascript:zoomin()">&nbsp;'+ t_in +'&nbsp;</a> <a class=button href="javascript:zoomout()">&nbsp;'+ t_out +'&nbsp;</a>';}
  var foundinfo=document.getElementById('foundinfo');
  foundinfo.innerHTML=tfoundinfo;


  clearitemlist();
  lines=lines.sort(); // sort alphabetically
  for (var i=0; i<lines.length; i++) 
  {
    if (lines[i].length > 1) 
    {
      // === split each line into parts separated by "|" and use the contents ===
      parts = lines[i].split("|");
      //var lat = parseFloat(parts[0]);
      //var lng = parseFloat(parts[1]);
      //var name = parts[2];
      var name = parts[0];
      var lat = parseFloat(parts[1]);
      var lng = parseFloat(parts[2]);
      var year = parts[3];
      var id = parts[4];
      var sourceurl = parts[5];
      var source = parts[6];
      var owner = parts[7];
      var scale = parts[8];
      var country = parts[9];
      var checked = parts[10];
      var outline = parts[11];
      var area = parts[12];
      var image = parts[13];
      var email = parts[14];

      // calculate distance from latpoint, lngpoint, lat, lng
     // var distance=((ACOS(SIN(RADIANS(55))*SIN(RADIANS(latitude))*360/2/3.1415+COS(RADIANS(55))*COS(RADIANS(latitude))*COS(RADIANS(22-longitude))))*60*1.1852);
      var point = new GLatLng(lat,lng);



      var distance=point.distanceFrom(globpoint)/1000;


      var htmlmain = "";
      var ip1=i+1;
      var htmlover=ip1 + ". " + name;

      var htmltool="<table class=details>";
      var htmlmain="<table class=details>";

      if (type == 1)
      { htmlmain+="<tr><td><b>"+t_allinfo+":</b></td><td> <a target=_blank href=\"showmap.php?id="+ id +"\">"+t_allinfol+"</a></td></tr>"; }

      if (year)
      {
        htmltool+="<tr><td><b>"+t_year+":</b></td><td>" + year + "</td></tr>";
        htmlmain+="<tr><td><b>"+t_year+":</b></td><td>" + year + "</td></tr>";
      }

      if (type==1)
      {
        if (country)
        {
          htmlmain+="<tr><td><b>"+t_country+":</b></td><td> " + country +"</td></tr>";
          htmltool+="<tr><td><b>"+t_country+":</b></td><td> " + country +"</td></tr>";
        } 
      }
      if (owner)
      {htmlmain+="<tr><td><b>"+t_owner+"</b></td><td> " + owner +"</td></tr>";
       htmltool+="<tr><td><b>"+t_owner+"</b></td><td> " + owner +"</td></tr>"} 
      if (scale)
      {htmlmain+="<tr><td><b>"+t_scale+":</b></td><td> " + scale +"</td></tr>"; 
      htmltool+="<tr><td><b>"+t_scale+":</b></td><td> " + scale +"</td></tr>"} 
      if (area+0)
      {htmlmain+="<tr><td><b>"+t_area+":</b></td><td> " + area +" km<sup>2</sup></td></tr>"; 
      htmltool+="<tr><td><b>"+t_area+":</b></td><td> " + area +" km<sup><font size=1>2</font></sup></td></tr>"} 


      if (source)
      {  
         htmlmain+= "<tr><td><b>"+t_kilde+":</b></td><td> <a target=_blank href=\"" + sourceurl + "\">" + source + "</a></td></tr>";
         htmltool+= "<tr><td><b>"+t_kilde+":</b></td><td> "  + source + "</td></tr>";
      } 


      if (type != 1)
      {
        htmlmain+="<tr><td><b>Endringer:</b></td><td> <a target=_blank href=\"addmaps.php?lang=N&id="+ id +"\">Endre info</a></td></tr>";
        if (email == 1)
        {
          htmlmain+="<tr><td><b>Bestill kart:</b></td><td> <a target=_blank href=\"ordermaps.php?lang=N&id="+ id +"\">Bestillingsskjema</a></td></tr>";
        }
      }
      else
      {
        htmlmain+="<tr><td><b>Add/change info:</b></td><td> <a target=_blank href=\"addmaps.php?id="+ id +"\">Click here</a></td></tr>";
      }
      htmlmain+="</table>";
      htmltool+="</table>";

      htmlmain+="<div id=btn>";
      htmlmain+=" <a class=button2 href=\"javascript:centerandzoom(" + i + ")\">"+ t_center +" & zoom</a>"

      if (outline==1)
      {
        htmlmain+=" <a class=button2 href=\"javascript:showoutline(" + i + "," + id + ")\">"+t_showoutline+"</a>";
      }


      htmlmain+=" <a class=button2 href=\"ge.php?id=" + id + "\">Google Earth</a>";
      htmlmain+="</div>";

      if (image)
      {
         smallimage=image.substring(0,image.length-4) + "_s.jpg";
         htmltool+= "<br><img src=\""+imagedir+smallimage+"\"><br>";
         htmlmain+= "<br><a target=_blank href=\""+imagedir+image+"\"><img border=1 src=\""+imagedir+smallimage+"\"></a><br>";
      }
      //if (checked==0)
      //{html+="<b>Note! This item has not been checked by webmaster yet.</b>";} 

      // var html = "<b>"+ name + "(" + year + ")</b><br>" + link + "<br><a href=\"ge.php?id=" + id + "\">Fly me there in Google Earth</a><br><br><a href=\"add.php?id=" + id + "\">Change information about map</a><br><br><a href=\"addjpg.php?id=" + id + "\">Add overlay for map with Google Earth</a>";

      var marker = createMarker(point,oicons[i],htmlmain,htmltool,htmlover);
      htmlmains[i]=htmlmain;
      htmlovers[i]=htmlover;
      gmarkers[i]=marker;
      lats[i]=lat;
      lngs[i]=lng;

      bounds.extend(point);
 
      if (year)
      { var yearinfo='<br>'+t_year+': ' + year;}
      else
      { var yearinfo='';}

      addtoitemlist('<div class="iteminfo" onmouseover="this.style.backgroundColor=\'#'+itemlisthoverbackground+'\';jtHov(' + i + ')" onmouseout="this.style.backgroundColor=\'#'+itemlistdefaultbackground+'\';jtOut(' + i + ')"><span class="iteminfotitle"><a href="javascript:void(0);" onclick="javascript:myclick(' + i + ')"><img align=right border=0 src="basis/opost' + eval(i+1) + '.png">' + name + '</a></span><span class="iteminfoingress">' + yearinfo + '<br>' + t_distance +': ' + distance.toFixed(1) + ' km<br></span></div>');

    }          
  }
  // zoomtobounds();
}

      function myclick(i) {
       // gmarkers[i].openInfoWindowHtml(htmls[i]);
       return overlib(htmlmains[i],STICKY,NOCLOSE,CENTER,OFFSETY,1,WIDTH,300,CAPTION,htmlovers[i]);
      }

      function centerandzoom(i) {
        map.setCenter(new GLatLng(lats[i],lngs[i]));
       // map.panTo(new GLatLng(lats[i],lngs[i]));
        if (type==1)
        { map.setZoom(11);}
        else
        { map.setZoom(13);}
}

function showoutline(i,id) {
  map.setCenter(new GLatLng(lats[i],lngs[i]));
  map.setZoom(12);
  GDownloadUrl("findoutline.php?id=" + id, process_outline) ;
}

process_outline = function(doc) 
{
  // Add outline here

// alert(thisoutlineobj);
if (thisoutlineobj)
{ map.removeOverlay(thisoutlineobj);}

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);
// thisoutlineobj=new GPolyline(points);
map.addOverlay(thisoutlineobj);

}



// Init function
function init() 
{
  var mapobj = document.getElementById("map");
  map = new GMap2(mapobj);


  // Mouse wheel functions
  GEvent.addDomListener(mapobj, "DOMMouseScroll", wheelZoom); 
  GEvent.addDomListener(mapobj, "mousewheel", wheelZoom);


  // Map controls
  //map.addControl(new GLargeMapControl());
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());
  map.addControl(new GScaleControl(50));
  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(100,100)));
  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="99px";
omap.firstChild.firstChild.style.height="99px";



geocoder = new GClientGeocoder();

  // Keyboard steering of map
  new GKeyboardHandler(map); 

  // Make o marker icon
  makeomarkericon();

  // Add a marker as a test
  // createMarker(new GLatLng(57,10),oicon,'Test marker');

  // Test showmaps()
  //latpoint=57;lngpoint=10;
  //showmaps();



  // Add listener which shows maps
 // Old function: Works - but double click problem!
 // GEvent.addListener(map, "click", function(marker, point) {
 //  if (marker) 
 //   { } else 
 //   { latpoint=point.lat();lngpoint=point.lng();showmaps(); }
 // });



// ..............

GEvent.addListener(map, 'click', mapClick);


if (getlat && getlng && getzoom)
{ 
  latpoint=getlat;lngpoint=getlng;
  globpoint = new GLatLng(latpoint,lngpoint);
  showmaps(); 
}


// ..............

function mapClick(marker, point) {
       if (timeOut) {
               window.clearTimeout(timeOut);
               timeOut = null;
               doubleClick(marker, point);
       }
       else {
               timeOut = window.setTimeout(function(){singleClick(marker,point)},200);
       }
}

function doubleClick(marker, point) {
       // alert('double click');
}

function singleClick(marker, point) {
       window.clearTimeout(timeOut);
       timeOut = null;
      //  alert('single click');
      if (marker) 
      { } else 
      { globpoint=point;latpoint=point.lat();lngpoint=point.lng();showmaps(); }
}



}

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

}

function zoomtobounds()
{
  if (foundmaps>0)
  {
    var thezoom=map.getBoundsZoomLevel(bounds);
    if (thezoom>13) {thezoom=13;}
    map.setZoom(thezoom);
    // var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
    // var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
    //map.setCenter(new GLatLng(clat,clng));
    map.setCenter(bounds.getCenter());
  }
}

function jtHov(i) {
//gmarkers[i].hide();
// add correct marker here later on!
outlinemarker = new GMarker(new GLatLng(lats[i],lngs[i]),ringicon);
map.addOverlay(outlinemarker);
//map.panTo(new GLatLng(lats[i],lngs[i]));
}


function jtOut(i) {
map.removeOverlay(outlinemarker);
//gmarkers[i].show();
}

function zoomin(){
	ist=map.getZoom();
	if (ist<17) map.setZoom(ist+1);
}

function zoomout(){
	ist=map.getZoom();
	if (ist>=2) map.setZoom(ist-1);
}


function jumptoarea(name) 
{
  switch (name) {
	case 'america':
		map.setCenter(new GLatLng(25,-100),3);
		break;
        case 'europe':
		map.setCenter(new GLatLng(51.167,6.94),4);
		break;
        case 'africa':
		map.setCenter(new GLatLng(0,20),3);
		break;
	case 'asia':
		map.setCenter(new GLatLng(20,100),3);
		break;
	case 'oceania':
		map.setCenter(new GLatLng(-20,140),3);
		break;
	default:
		break;
	}
}


function jumptopoint(tlat,tlng,tzoom) 
{ 
tzoom=parseFloat(tzoom);
map.setCenter(new GLatLng(tlng,tlat),tzoom); 
  //globpoint = new GLatLng(tlng,tlat);
  //showmaps(); 
}



function clearitemlist()
{
  var id=document.getElementById('itemlist');
  id.innerHTML="";
}

function addtoitemlist(htmltext)
{
  var id=document.getElementById('itemlist');
  id.innerHTML+=htmltext;
}

function showhelp()
{
  var helpdiv=document.getElementById('help');
  helpdiv.style.visibility = 'visible';
}

function closehelp()
{
  var helpdiv=document.getElementById('help');
  helpdiv.style.visibility = 'hidden';
}

function showhelp2()
{
  var helpdiv=document.getElementById('help2');
  helpdiv.style.visibility = 'visible';
}

function closehelp2()
{
  var helpdiv=document.getElementById('help2');
  helpdiv.style.visibility = 'hidden';
}

// from Google API official site

    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + t_notfound);
            } else {
              map.setCenter(point, 7);
              var marker = new GMarker(point);
              map.addOverlay(marker);

  globpoint = point;
  latpoint=point.lat();lngpoint=point.lng()
  showmaps(); 

              //marker.openInfoWindowHtml(address);
            }
          }
        );
      }
    }

//function sortit(a,b){
//return(b-a)
//}

function go()
{ 
  var thestr=document.countryform.countrysel.options[document.countryform.countrysel.selectedIndex].value;

  if (thestr)
  {
    coord = thestr.split(",");
    jumptopoint(coord[0],coord[1],coord[2]);
  }
}

function makelink()
{
  var lpoint = map.getCenter();
  var lzoom = map.getZoom();
  prompt('Link to this map','http://maps.worldofo.com/?zoom=' + lzoom + '&lat=' + lpoint.lat() + '&lng=' + lpoint.lng());
}

window.onload = init;
