var map1;
var callsign;
var zeitfenster;
var startdate = '';
var enddate = '';
var cookieID = 0;
var counter = 0;
var lat = 0;
var lon = 0;
var zoom = 3;
var start = 0;
var count = 10;
var positionen;
var lastpoint;
var lasttime;
var lastposition;
var msgwindow;
var windowtimer;
var trackctrl;
var startmodified = false;
var logbuchtext;
var logheight = 150;
var logshowed = true;
var greyrow = false;

function slideDown() {
  document.getElementById("logbook").style.height = 20;
  document.getElementById('logbook').style.top = clientheight - 49;
  logshowed = false;
  document.getElementById("logbookheadsyms").innerHTML = "<img src=\"/pictures/pfeilH.jpg\" onClick=\"slideUp();\">";

}

function slideUp() {
  document.getElementById("logbook").style.height = 170;
  document.getElementById('logbook').style.top = clientheight - 199;
  logshowed = true;
  document.getElementById("logbookheadsyms").innerHTML = "<img src=\"/pictures/pfeilU.jpg\" onClick=\"slideDown();\">";
}

function formatLatLng(latlong) {
  var xmouse = latlong.lng();
  var ymouse = latlong.lat();
  if (xmouse < 0) {
    directionLon = 'W';
    xmouse0 = -xmouse;
  } else {
    directionLon = 'E';
    xmouse0 = xmouse;
  }
  if (ymouse < 0) {
    directionLat = 'S';
    ymouse0 = -ymouse;
  } else {
    directionLat = 'N';
    ymouse0 = ymouse;
  }
  xmouse1 = (xmouse0 - Math.floor(xmouse0)) * 60;
  ymouse1 = (ymouse0 - Math.floor(ymouse0)) * 60;
  xmouse2 = (xmouse1 - Math.floor(xmouse1)) * 60;
  ymouse2 = (ymouse1 - Math.floor(ymouse1)) * 60;
  var text = '';
  if (!isNaN(xmouse) && !isNaN(ymouse)) {
    text = formatnumber(ymouse0,0) + '°'+formatnumber(ymouse1,0)+'\''+formatnumber(ymouse2,0)+ '\'\' ' + directionLat;
    text = text + '&nbsp;&nbsp;&nbsp; ' + formatnumber(xmouse0,0)+'°'+formatnumber(xmouse1,0)+'\''+formatnumber(xmouse2,0) + '\'\' ' + directionLon;
  }
  return text;
}

function showWindow(myquery) {
  ogcquery = 'http://www.positionsreport.de/php/getCallInfo.php?MyCallSign=' + myquery;
  if (msgwindow != null) {
    if (msgwindow.closed) {
      msgwindow = null;
    } else {
      msgwindow.document.open();
    }
  } 
  if (msgwindow == null) {
    msgwindow = window.open(ogcquery, '', 'width=980,height=580,resizable=no,scrollbars=no') ;
  } else {
    msgwindow.location = ogcquery;
  } 
  msgwindow.focus();
  return true;
}

function addtrack() {
  var datastring;
  var eingabe = window.prompt("Please enter description", callsign);
  lat = map1.getCenter().lat();
  lon = map1.getCenter().lng();
  zoom = map1.getZoom();
  if ((eingabe != '') && (eingabe != null)) {
    datastring = eingabe + ',' + callsign + ',' + startdate + ',' + enddate + ',' + lat + ',' + lon + ',' + zoom + ',';
    if (trackctrl.getLast()) {
      datastring = datastring + '1,';
    } else {
      datastring = datastring + '0,';
    }
    if (trackctrl.getNow()) {
      datastring = datastring + '1';
    } else {
      datastring = datastring + '0';
    }
    counter = parseInt(counter) + 1;
    createCookie("counter", counter, 730);  
    createCookie("tr" + counter, datastring, 730);
  }
  refresh();
}

function deltrack() {
  eraseCookie("tr" + cookieID);
  refresh();
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  } else {
    var expires = "";
  }
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

function getCurrentDatum() {
  var now = new Date();
  var monthnumber = now.getUTCMonth() + 1;
  var monthday = now.getUTCDate();
  var year = now.getUTCFullYear();
  if (monthnumber < 10) {
    monthnumber = '0' + monthnumber;
  }
  if (monthday < 10) {
    monthday = '0' + monthday;
  }
  return year + '-' + monthnumber + '-' + monthday;
}

function getCurrentZeit() {
  var now = new Date();
  var hour = now.getUTCHours();
  var minute = now.getUTCMinutes();
  var second = now.getUTCSeconds();
  if (hour < 10) {
    hour = '0' + hour;
  } 
  if (minute < 10) {
    minute = '0' + minute;
  }
  if (second < 10) {
    second = '0' + second;
  }
  return hour + ':' + minute + ':' + second;
}

function getCurrentDate() {
  return getCurrentDatum() + ' ' + getCurrentZeit();
}

function findCall() {
  var mycall = document.getElementById("call").value;
  new Effect.Appear('calldiv');
  var updater = new Ajax.Updater('maindiv', '/php/findCall2.php', {asynchronus: true, method: 'get', onComplete: showResponse, parameters: 'search=' + mycall});
}

function showResponse(resp) {
  $('maindiv').innerHTML = resp.responseText;
}

function closeCalldiv() {
  new Effect.Fade('calldiv');
  $('maindiv').innerHTML = '';
  return true;
}

function resizeMap() {
  if (document.body.clientWidth != null) {
    // microsoft version
    clientwidth = document.body.clientWidth;
    clientheight = document.body.clientHeight; 
  } else {
    // netscape version
    clientwidth = (window.innerWidth -16);
    clientheight = window.innerHeight; 
  }

  mapwidth = clientwidth - 174;
  mapheight = clientheight - 79;
  
  document.getElementById('mapdiv').style.width = mapwidth;
  document.getElementById('mapdiv').style.height = mapheight;
  document.getElementById('logbook').style.width = mapwidth - 2;
  if (logshowed) {
    document.getElementById('logbook').style.top = clientheight - 199;
  } else {
    document.getElementById('logbook').style.top = clientheight - 49;
  }
  document.getElementById('logbookheadtext').style.width = mapwidth - 42;
  document.getElementById('logbookheadsyms').style.left = mapwidth - 42;
  document.getElementById('logbooktext').style.width = mapwidth - 5;

}

function trackCall(rufzeichen) {
  startdate = '';
  enddate = '';
  callsign = rufzeichen;
  if (trackctrl.getNow()) {
    window.clearTimeout(windowtimer);
  }
  var img;
  loadMap();
}

function showmap(ident) {
  var datastring = readCookie('tr' + ident);
  var alleElemente = datastring.split(',');
  trackctrl.reset();
  if (trackctrl.getNow()) {
    window.clearTimeout(windowtimer);
  }
  cookieID = ident;
  callsign = alleElemente[1];
  startdate = alleElemente[2];
  enddate = alleElemente[3];
  document.getElementById('startdate').value = startdate;
  document.getElementById('enddate').value = enddate;
  lat = parseFloat(alleElemente[4]);
  lon = parseFloat(alleElemente[5]);
  zoom = alleElemente[6];
  if (alleElemente[7] == 1) {
    trackctrl.setLast();
  }
  if (alleElemente[8] == 1) {
    trackctrl.setNow();
  }
  map1.setCenter(new GLatLng(lat, lon), zoom);	
  loadMap();
}

function refresh() {
  var html = '';
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    var line = c.split('=');
    var id = line[0];
    if (id.indexOf('tr') == 0) {
      var uId = id.substring(2,id.length);
      var datastring = line[1];
      var alleElemente = datastring.split(',');
      html = html + '<span style="cursor: pointer;" class="postext" id="' + uId  + '" onMouseOver="document.getElementById(\'' + uId  + '\').style.color=\'#dd0000\';" onMouseOut="document.getElementById(\'' + uId  + '\').style.color=\'#ffffff\'" onClick="showmap(' + uId  + ')">&nbsp;' + alleElemente[0] + '</span><br>';
    }
  }
  document.getElementById('kekse').innerHTML = html;
}

function makeTableRow(Course, Speed, Lat, Lng, Packet, ReportTime) {
Course = Course.substring(0, Course.indexOf('.') + 3);
  var kmh = Speed.substring(0, Speed.indexOf('.') + 3);
  Speed = String(parseFloat(Speed) * 0.5399568);
  var knots = Speed.substring(0, Speed.indexOf('.') + 3);
  if (Lat < 0) {
    Lat = -Lat + ' S';
  } else {
    Lat = Lat + ' N';	
  }
  if (Lng < 0) {
    Lng = -Lng + ' W';
  } else {
    Lng = Lng + ' O';	
  }
  if (greyrow) {
    var col = "bgcolor=\"#cccccc\"";
    greyrow = false;
  } else {
    var col = "";
    greyrow = true;
  }
  var html = "<tr><td "+col+"><span class=\"yacht_info_text_normal_bold_rot\">"+ReportTime+"</span></td><td "+col+"><span class=\"yacht_info_text_normal_bold_blau\">"+Lat+"</span></td><td "+col+"><span class=\"yacht_info_text_normal_bold_blau\">"+Lng+"</span></td><td "+col+"><span class=\"yacht_info_text_normal\">"+Course+" T</span></td><td "+col+"><span class=\"yacht_info_text_normal\">"+knots+" kts</span></td><td "+col+"><span class=\"yacht_info_text_normal\">"+kmh+" km/h</span></td><td "+col+"><span class=\"yacht_info_text_normal\">"+Packet+"</span></td></tr>";
  return html;
}

function makeHtml(Callsign, Course, Speed, Lat, Lng, Packet, ReportTime) {
  Course = Course.substring(0, Course.indexOf('.') + 3);
  var kmh = Speed.substring(0, Speed.indexOf('.') + 3);
  Speed = String(parseFloat(Speed) * 0.5399568);
  var knots = Speed.substring(0, Speed.indexOf('.') + 3);
  if (Lat < 0) {
    Lat = -Lat + ' S';
  } else {
    Lat = Lat + ' N';	
  }
  if (Lng < 0) {
    Lng = -Lng + ' W';
  } else {
    Lng = Lng + ' O';	
  }
  var html = '<div id="posinfo">' +	'<table>' +	'<tr><td colspan="2"><b>' + Callsign + '</b></td></tr>' + '<tr><td>Course</td><td>' + Course + ' T&nbsp;</td></tr>' +
 		 '<tr><td>Speed</td><td>' + knots + ' kts / ' + kmh + ' km/h&nbsp;</td></tr>' + '<tr><td>Location</td><td>' + Lat + " / " + Lng + '</td></tr>' +
		 '<tr><td>Report Time</td><td>' + ReportTime + '</td></tr>' + '<tr><td colspan="2">' + Packet.replace(/\+/g, ' ') + '&nbsp;</td></tr>' + '</table>' + '</div>';
  return html;
}

function googleXMLDatei(data, responseCode) {
  var polypoints = new Array();
  var xml = GXml.parse(data);
  var counters = xml.documentElement.getElementsByTagName("count");
  var zahl = parseInt(counters[0].getAttribute("number"));
  var markers = xml.documentElement.getElementsByTagName("marker");
  var j = 0;
  var rufzeichen;
  if (markers != null) {
    var point = new GLatLng(parseFloat(markers[0].getAttribute("lat")), parseFloat(markers[0].getAttribute("lng")));
    var rectIcon = new GIcon();
    rectIcon.image = "http://www.positionsreport.de/pictures/home/mm_20_green.png";
    rectIcon.shadow = "http://www.positionsreport.de/pictures/home/mm_20_shadow.png";
    rectIcon.iconSize = new GSize(12,20);
    rectIcon.shadowSize = new GSize(22,20);
    rectIcon.iconAnchor = new GPoint(6,20);
    rectIcon.infoWindowAnchor = new GPoint(5,1);
    var startIcon = new GIcon();
    startIcon.image = "http://www.positionsreport.de/pictures/home/mm_20_yellow.png";
    startIcon.shadow = "http://www.positionsreport.de/pictures/home/mm_20_shadow.png";
    startIcon.iconSize = new GSize(12,20);
    startIcon.shadowSize = new GSize(22,20);
    startIcon.iconAnchor = new GPoint(6,20);
    startIcon.infoWindowAnchor = new GPoint(5,1);
    var stopIcon = new GIcon();
    stopIcon.image = "http://www.positionsreport.de/pictures/home/mm_20_red.png";
    stopIcon.shadow = "http://www.positionsreport.de/pictures/home/mm_20_shadow_big.png";
    stopIcon.iconSize = new GSize(24,40);
    stopIcon.shadowSize = new GSize(44,40);
    stopIcon.iconAnchor = new GPoint(12,40);
    stopIcon.infoWindowAnchor = new GPoint(10,15);
    if (start > 0) {
      polypoints[0] = lastpoint;
      j = 1;
    } else {
      rufzeichen = decodeURIComponent(markers[0].getAttribute("time"));
      lastposition = new PdMarker(point, {title : "Last Position: " + rufzeichen, icon : stopIcon});
	if (markers[0].getAttribute("speed") == null) {
        speed = "0";
      } else {
	  speed = markers[0].getAttribute("speed");
	}
	if (markers[0].getAttribute("course") == null) {
        course = "0";
      } else {
	  course = markers[0].getAttribute("course");
	}
	if (markers[0].getAttribute("packet") == null) {
        packet = "";
      } else {
	  packet = decodeURIComponent(markers[0].getAttribute("packet"));
	}
	var html = makeHtml(callsign, course, speed, markers[0].getAttribute("lat"), markers[0].getAttribute("lng"), packet, rufzeichen);
	lastposition.setDetailWinHTML(html);
      lasttime = rufzeichen;
    }
    for (var i = 0; i< markers.length; i++) {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));   
      polypoints[i + j] = point;
      rufzeichen = decodeURIComponent(markers[i].getAttribute("time"));
      if ((start > 0)  || (i > 0)) {
	  var mark = new PdMarker(point, {title : rufzeichen, icon : rectIcon});
	  if (markers[i].getAttribute("speed") == null) {
          speed = "0";
        } else {
	    speed = markers[i].getAttribute("speed");
	  }
	  if (markers[i].getAttribute("course") == null) {
          course = "0";
        } else {
	    course = markers[i].getAttribute("course");
	  }
	  if (markers[i].getAttribute("packet") == null) {
          packet = "";
        } else {
	    packet = decodeURIComponent(markers[i].getAttribute("packet"));
	  }
	  var html = makeHtml(callsign, course, speed, markers[i].getAttribute("lat"), markers[i].getAttribute("lng"), packet, rufzeichen);
	  mark.setDetailWinHTML(html);
	  map1.addOverlay(mark);
        logbuchtext = logbuchtext + makeTableRow(course, speed, markers[i].getAttribute("lat"), markers[i].getAttribute("lng"), packet, rufzeichen);
//        document.getElementById('logbooktext').innerHTML = logbuchtext + "</table>";
      }
      if (i == (markers.length - 1)) {
	  lastpoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
      }
    }
    var polyline = new GPolyline(polypoints, "#000088", 3, 0.8);
    map1.addOverlay(polyline);
  } 
  if ((zahl < count) || (start >= positionen)) {
    start = 0;
    var mark = new GMarker(lastpoint, {title : rufzeichen, icon : startIcon});
    map1.addOverlay(mark);
    map1.addOverlay(lastposition);
    lastposition.openInfoWindowHtml("<span class=\"yacht_info_text_gross\">&nbsp;&nbsp;" + callsign + "</span><br><span class=\"yacht_info_text_normal\">&nbsp;" + lasttime + "<br>&nbsp;" + formatLatLng(lastposition.getPoint()) + "<br><div class=\"yacht_info_text_normal_blau\" id=\"showme\" onClick=\"showWindow('" + callsign + "');\">&nbsp;show station info</div></span>", {maxWidth : 200});
    document.getElementById('loadingdiv').style.visibility = "hidden";
    document.getElementById('loadingProgressDiv').style.visibility = "hidden";
    document.getElementById('loadingTextDiv').style.visibility = "hidden";
    document.getElementById('loadingProgressDiv').style.width = "0px";
    document.getElementById('logbooktext').innerHTML = logbuchtext + "</table>";
  } else {
    start = start + zahl;
    var width = Math.round((start / positionen) * 150);
    document.getElementById('loadingProgressDiv').style.width = width + "px";
    GDownloadUrl("/php/googleTrack.php?callSign=" + callsign + "&start=" + start + "&count=" + count + zeitfenster, function(a,b) {googleXMLDatei(a,b);});
  }
}

function setCount(data, responseCode) {
  var xml = GXml.parse(data);
  var counters = xml.documentElement.getElementsByTagName("zaehler");
  positionen = parseInt(counters[0].getAttribute("number"));
  var symbol = counters[0].getAttribute("symfile");
  var desc = counters[0].getAttribute("desc");
  document.getElementById('callsignColumn').innerHTML = '<span class="postextgr">Tracking for<br>' + callsign + '<BR><img src="' + symbol + '"><br>' + desc + '</span>';
  start = 0;
  logbuchtext = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  greyrow = false;
  GDownloadUrl("/php/googleTrack.php?callSign=" + callsign + "&start=" + start + "&count=" + count + zeitfenster, function(a,b) {googleXMLDatei(a,b);});
}

function loadMap() {
  var letzte24;
  map1.clearOverlays();
  if (trackctrl.getNow()) {
    startdate = trackctrl.startdate();
    startmodified = true;
    letzte24 = '2';
    windowtimer = window.setTimeout("loadMap()", 120000);
  } else if (trackctrl.getLast()) {
    startmodified = false;
    startdate = '';
    letzte24 = '1';
  } else {
    startmodified = false;
//    startdate = '';
    letzte24 = '0';
  }
  zeitfenster = '&last24=' + letzte24 + '&startdate=' + startdate + '&enddate=' + enddate;
  document.getElementById('loadingdiv').style.visibility = "visible";
  document.getElementById('loadingProgressDiv').style.visibility = "visible";
  document.getElementById('loadingTextDiv').style.visibility = "visible";
  GDownloadUrl("/php/googleTrack.php?callSign=" + callsign + "&getCount=1" + zeitfenster, function(a,b) {setCount(a,b);});
}

function takeValues() {
  trackctrl.reset();
  startdate = document.getElementById("startdate").value;
  enddate = document.getElementById("enddate").value;
  loadMap();
}

function loadPage(lati, loni, call) {
  window.onresize = resizeMap;
  resizeMap();
  counter = readCookie('counter');
  if (counter == null) {
    counter = 0;
  } else {
    counter = parseInt(counter);
  }
  new Effect.Opacity('loadingdiv', {duration:0.0, from:0.7, to:0.7});
  callsign = call;
  lat = lati;
  lon = loni;
  zoom = 8;
  map1 = new GMap2(document.getElementById("mapdiv"));
  map1.setCenter(new GLatLng(lat, lon), zoom);	
  map1.setMapType(G_NORMAL_MAP);
  addCustomMaps(map1);
  map1.addControl(new GLargeMapControl());
  map1.addControl(new GScaleControl());
  map1.addControl(new GMapTypeControl());
  map1.addControl(new GOverviewMapControl(new GSize(200,200)));
  map1.addControl(new ShowMousePositionControl());
  trackctrl = new trackControl();
  map1.addControl(trackctrl);
  refresh();
  loadMap();
}
