var map;
function loadLiveport()
{ 
   jQuery.noConflict();

   if (GBrowserIsCompatible() && document.getElementById("liveport")) {

   map = new GMap2(document.getElementById("liveport"));
   var iosll = new GLatLng(36.703659, 25.3125);
   var ioszoom = 9;
   map.enableScrollWheelZoom();
   map.setCenter(iosll, ioszoom);
   map.addControl(new GLargeMapControl());
   map.addControl(new GMapTypeControl());

   map.addControl(new HotlinkControl(strings['ZOOM_TO_IOS'],iosll,ioszoom), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(70, 7)));

   map.addControl(new HotlinkControl(strings['ZOOM_TO_CYCLADES'], iosll,7), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(160, 7)));
 
   setTimeout('updateMap()', 500);
   }
}
   
function updateMap(){

   jQuery.ajax({
      url: "/liveport/current.xml",
      cache: false,
      success: function(xml){	
         map.clearOverlays();
         jQuery("vessel", xml).each(function(){
         var mmsi = jQuery("mmsi", this).text();
         var name = jQuery("name", this).text();
         var lat = jQuery("latitude", this).text();
         var lon = jQuery("longitude", this).text();
         var dest = jQuery("destination", this).text();
         var sog = jQuery("sog", this).text();
         var seenl = jQuery("last_seen", this).text();
         var seenf = jQuery("first_seen", this).text();
         var status = jQuery("status", this).text();

         if(name == "") name = strings['UKNOWN_VESSEL'];

         var d = new Date();
         d.setTime(seenf*1000);
         var html = "<b>"+name+"</b><br/>MMSI: "+mmsi;
         if(sog < 1023)
            html += "<br/>" + strings['SPEED'] + ": " + sog/10.0 +  " " +  strings['KNOTS'];

         if(typeof(status) != undefined && status >= 0 && status <9)
            html += "<br/>" + strings['STATUS_TXT'] + ": " + strings['STATUS'][status];

         if(dest)
            html += "<br/>" + strings['DESTINATION'] + ": " + dest

         var now = new Date();
         html += "<br/>" + strings['FIRST_SEEN'] + " " + millisToString(now - d);
         d.setTime(seenl*1000);
         html += "<br/>" + strings['LAST_SEEN'] + " " + millisToString(now - d);

         if((!lat || !lon) && document.getElementById('noposition')) {
            document.getElementById('noposition').innerHtml += html; 
         }
         else {

            var latlng = new GLatLng(lat,lon);
            map.addOverlay(createMarker(map,latlng,html));
         }
         });
         setTimeout('updateMap()',30000);
      }});
   }


function createMarker(map,latlng, info) {
   var marker = new GMarker(latlng);
   GEvent.addListener(marker,"click", function() {
      map.openInfoWindowHtml(latlng, info);
   });
   return marker;
}

// Gets time in milliseconds and returns a textual representation in
// years, months, days, hours, minutes or seconds.
function millisToString(time) {
   time = time/1000;
   var ret;
 
   if(time <= 10)
      return strings['JUST_NOW'];
   else if(time < 60)
   {
      var t = Math.floor(time);
      if(t == 1)
         ret = "1 " + strings['SECOND'];
      else
         ret = t + " " + strings['SECONDS'];
   }
   else if(time < 3600)
   {
      var t = Math.floor(time/60);
      if(t == 1)
         ret = "1 " + strings['MINUTE'];
      else
         ret = t + " " + strings['MINUTES'];
   }
   else if(time < 86400)
   {
      var t = Math.floor(time/3600);
      if(t == 1)
         ret = "1 " + strings['HOUR'];
      else
         ret = t + " " + strings['HOURS'];
   }
   else if(time < 2629743.83) {
         var t = Math.floor(time/86400); // days
         if(t == 1)
            ret = "1 " + strings['DAY'];
         else
            ret = t + " " + strings['DAYS'];
   }
   else if(time < 31556926) {
         var t = Math.floor(time/2629743.83); // months
         if(t == 1)
            ret = "1 " + strings['MONTH'];
         else
            ret = t + " " + strings['MONTHS'];
   }
   else
   {
         var t = Math.floor(time/31556926); // years
         if(t == 1)
            ret = "1 " + strings['YEAR'];
         else
            ret = t + " " + strings['Years'];
   }
   return ret + " " + strings['AGO'];
}

function HotlinkControl(text, defaultLatLon, defaultZoom) {

   this.latlng = defaultLatLon;
   this.zoom = defaultZoom;
   this.text = text;
}

HotlinkControl.prototype = new GControl();

HotlinkControl.prototype.initialize = function(map) {

   var container = document.createElement("div");
   var link = document.createElement("div");
   this.setButtonStyle_(link);
   container.appendChild(link);
   link.appendChild(document.createTextNode(this.text));
   var ll = this.latlng;
   var z = this.zoom;
   GEvent.addDomListener(link, "click", function() {
      map.setZoom(z);
      map.panTo(ll);
      });

   map.getContainer().appendChild(container);
   return container;
}

HotlinkControl.prototype.getDefaultPosition = function() {
   return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(7, 7));
}

HotlinkControl.prototype.setButtonStyle_ = function(button) {

   button.style.textDecoration = "none";
   button.style.color = "black";
   button.style.backgroundColor = "white";
   button.style.font = "small Arial";
   button.style.border = "2px ridge black";
   button.style.padding = "2px";
   button.style.marginBottom = "3px";
   button.style.textAlign = "center";
   button.style.width = "6em";
   button.style.cursor = "pointer";
}