//
//  GMaps APRS handler, v0.3-SV1LH-09/2007.
//
    var sidebar_html = "";
    var gmarkers = [];
    var htmls = [];
    var i = 0;
    var inviewloaded = 0;
    var upd_stns = 0;
    var histmins = 5;
    var upd=60000*3;  // 3 mins autoupdate interval
    var laststation;
    var timenow = "";
    var timefrom = "";
    var stations = [];
    var reqdata = "";
    var bcninterval = "";
    var bcnsent = 0;
    var updatecntr=null;
    var icons = new Array();
    baseIcon = new GIcon();
    baseIcon.image = "images/mm_20_red.png";
    baseIcon.iconSize = new GSize(12, 20);
    baseIcon.iconAnchor = new GPoint(9, 9);
    baseIcon.infoWindowAnchor = new GPoint(9, 10);
    baseIcon.src = 'images/mm_20_red.png';
    icons['red'] = baseIcon;
    icons['purple'] = new GIcon(baseIcon);
    icons['purple'].image = "images/mm_20_purple.png";
    icons['purple'].src = 'images/mm_20_purple.png';

function createMarker(point, name, html, iconurl, msgs) {
        var marker;
        var k = i;
        var icon = new GIcon(baseIcon);
        if (iconurl) {
          icon.image = iconurl;
          icon.iconSize = new GSize(19, 19);
          marker = new GMarker(point, icon);
        } else { marker = new GMarker(point, icons["purple"]); }
        GEvent.addListener(marker, "click", function() {
        showonmap(k);
        });
        gmarkers[i] = marker;
        stations[i] = name;
        if(msgs>0) { html+='<font size="2"><br> <b>'+msgs+'</b> messages  <a target="_blank" href="messages.php?call='+name+'&hist='+histmins+'">Show msgs</a></font>'; }
        htmls[i] = html;
        sidebar_html += '<img src="' + iconurl + '" width="16" height="16" align="left"><a href="javascript:showonmap(' + i + ')">' + name + '</a><br>';
        name = name.replace("-","_");
        marker.setTooltip(name);
        i++;
        return marker;
}

function showonmap(k) {
        var point = gmarkers[k].getPoint();
        laststation = stations[k];
        gmarkers[k].openInfoWindowHtml(htmls[k]);
}

function positionOverview(x,y) {
     var omap=document.getElementById("map_overview");
     omap.style.left = x+"px";
     omap.style.top = y+"px";
     omap.firstChild.style.border = "1px solid gray";
     omap.firstChild.firstChild.style.left="4px";
     omap.firstChild.firstChild.style.top="4px";
     omap.firstChild.firstChild.style.width="120px";
     omap.firstChild.firstChild.style.height="120px";
}
   
function loadata(reqdata) {
    if(updatecntr) { clearTimeout(updatecntr); }
    map.closeInfoWindow();
    map.clearOverlays();
//    sidebar_html = "";
    sidebar_html = '<font size="2">';
    gmarkers.length = 0;
    stations.length = 0;
    htmls.length = 0;
    i = 0;
    window.status="";    
    var request = GXmlHttp.create();
    request.open("GET", "aprs.php?"+reqdata+"&hist="+histmins, true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
       if (request.status == 200) {    
          var xmlDoc = request.responseXML;
          var markers = xmlDoc.documentElement.getElementsByTagName("station");
          var stats = xmlDoc.documentElement.getElementsByTagName("stats");		    
          for (var j = 0; j < markers.length; j++) {
 		var point = new GPoint(parseFloat(markers[j].getAttribute("lon")),
    			           parseFloat(markers[j].getAttribute("lat")));
		var call = markers[j].getAttribute("call");
		var desc = markers[j].getAttribute("desc");
		var iconurl = markers[j].getAttribute("icon");
		var msgs = markers[j].getAttribute("msgs");
		var marker = createMarker(point, call, desc, iconurl, msgs);
		map.addOverlay(marker);
                }
          }
          document.getElementById("sidebar").innerHTML = sidebar_html;
          for (var j = 0; j < stats.length; j++) {
                var total = stats[j].getAttribute("total");
                var inview = stats[j].getAttribute("inview");
                var invalid = stats[j].getAttribute("invalid");
                var lastupdate = stats[j].getAttribute("lastupdate");
                timenow = stats[j].getAttribute("timenow");
                inviewloaded = inview;
                }
                document.getElementById("inview").innerHTML = inviewloaded;
                document.getElementById("lastupdate").innerHTML = lastupdate;
	setTimeout("loadhistory()",upd);
//        if(laststation != undefined) { showlast(); }
        if(laststation != undefined) {
          for(var j=0;j<i;j++) {
            if(stations[j] == laststation) {
	       sidebar_html=sidebar_html.replace(laststation,'<font color="green">'+laststation+'*</font>');
               document.getElementById("sidebar").innerHTML = sidebar_html;
               showlast();
               break;
	       }
            }
        laststation=null;        
	}
//
	}
      }
      request.send(null);
}

function displayInfo() {
	var center = map.getCenter();
	var zoom = map.getZoom();
	var bounds = map.getBounds();
        var northeast = bounds.getNorthEast();
        var southwest = bounds.getSouthWest();
	reqdata = 'minX=' + southwest.lng() + '&minY=' + southwest.lat() + '&maxX=' + northeast.lng() + '&maxY=' + northeast.lat();
	loadata(reqdata);
}

function showlast() {
  for(var j=0;j<i;j++) {
    if(stations[j] == laststation) { showonmap(j); break; }
  }
}

function updatestns() {
  map.closeInfoWindow();
  laststation=null;
  timefrom=timenow;
  upd_stns = 0;
  updatedata();
}

function updatedata() {
    var newstns = 0;
    var request = GXmlHttp.create();
    request.open("GET", "aprs.php?"+reqdata+'&from='+timefrom, true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
       if (request.status == 200) {    
          var xmlDoc = request.responseXML;
          var markers = xmlDoc.documentElement.getElementsByTagName("station");
          var stats = xmlDoc.documentElement.getElementsByTagName("stats");		    
          sidebar_html=sidebar_html.replace(/\*/g,'');
          sidebar_html=sidebar_html.replace(/\+/g,'');
          sidebar_html=sidebar_html.replace(/green/g,'');
          sidebar_html=sidebar_html.replace(/brown/g,'');
          for (var j = 0; j < markers.length; j++) {
		var call = markers[j].getAttribute("call");
		var desc = markers[j].getAttribute("desc");
                for(var k=0;k<i;k++) {
		   if(stations[k] == call) {
                      upd_stns++;
		      htmls[k] = desc;
                      sidebar_html=sidebar_html.replace(call,'<font color="green">'+call+'*</font>');
		      break;
		      }
                   }
               if(k==i) {
 		var point = new GPoint(parseFloat(markers[j].getAttribute("lon")),
    			           parseFloat(markers[j].getAttribute("lat")));
		var call = markers[j].getAttribute("call");
		var desc = markers[j].getAttribute("desc");
		var iconurl = markers[j].getAttribute("icon");
		var msgs = markers[j].getAttribute("msgs");
		var marker = createMarker(point, call, desc, iconurl, msgs);
		map.addOverlay(marker);
                sidebar_html=sidebar_html.replace(call,'<font color="brown">'+call+'+</font>');
                newstns++;
	       }	
		}   
          }
          document.getElementById("sidebar").innerHTML = sidebar_html;
          for (var j = 0; j < stats.length; j++) {
//                var updview = stats[j].getAttribute("inview");
                var lastupdate = stats[j].getAttribute("lastupdate");
                timenow = stats[j].getAttribute("timenow");
                }
                document.getElementById("lastupdate").innerHTML = lastupdate;
//		inviewloaded=(Number(inviewloaded)+Number(newstns));
		inviewloaded=eval((Number(inviewloaded)+Number(newstns)));
                document.getElementById("inview").innerHTML = inviewloaded;
        window.status=lastupdate+": Updated "+upd_stns+" stations.(*). New Heard "+newstns+" stations.(+)";
	}
      }
      request.send(null);
}

function loadhistory() { 
  laststation=null;
  histmins = document.ref.history.value;
  loadata(reqdata);
}

function txbeacon() {
    var request = GXmlHttp.create();
    request.open("GET", "users/beacon.php", true);
    request.onreadystatechange = function() {
    if (request.readyState == 4) {
       if (request.status == 200) {    
          var xmlDoc = request.responseXML;
          var stats = xmlDoc.documentElement.getElementsByTagName("status");		    
          for (var j = 0; j < stats.length; j++) {
                var status = stats[j].getAttribute("statext");
                var result = stats[j].getAttribute("result");
                }
                alert(status+' ('+result+')');
                if(bcninterval != '') { clearInterval(bcninterval); bcninterval=''; }
        if(result != '' && result != '99') { bcnsent++; result*=60000; bcninterval=setInterval("txbeacon()", result); }
	}
     }
    }
    request.send(null);
}

function firstbcn() {
    if(bcnsent == 0) { txbeacon(); }
}
