<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs title="__MSG_status_title__ __UP_callsign__" 
    directory_title="__MSG_status_directory_title__"
    title_url="http://aprs.fi/?call=__UP_callsign__"
    description="__MSG_status_description__"
    screenshot="__MSG_status_screenshot__"
    thumbnail="__MSG_status_thumbnail__"
    height="50" 
    width="550" 
    scrolling="false"
    author="Richard C. Greenwood" 
    author_email="rcgreenw@gmail.com"> 
    <Require feature="dynamic-height"/>
    <Require feature="views"/>
    <Require feature="settitle"/>
    <Locale messages="http://www.ae6ps.org/google/aprs/ALL_ALL.xml" />
  </ModulePrefs>
  <UserPref required="true" name="callsign" display_name="__MSG_callsign__" default_value="W1AW" urlparam="callsign" datatype="string" />
  <UserPref required="true" name="field" display_name="__MSG_field__" default_value="status" urlparam="field" datatype="enum" >
    <EnumValue value="status" display_value="__MSG_field_status__" />
    <EnumValue value="comment" display_value="__MSG_field_comment__" />
  </UserPref>
  <Content type="html" ><![CDATA[
  <style type="text/css">
  body {
     margin:0px; 
  }
  #small {
     font-size:12px;
     color:gray;
     margin:0px; 
  }
  p {
     margin:0px; 
  }
  </style>

  <div id="content_div"></div>
  <div id="time_div"></div>
  <script type="text/javascript">

   String.prototype.splitCSV = function(sep) {
     for (var foo = this.split(sep = sep || ","), x = foo.length - 1, tl; x >= 0; x--) {
       if (foo[x].replace(/"\s+$/, '"').charAt(foo[x].length - 1) == '"') {
         if ((tl = foo[x].replace(/^\s+"/, '"')).length > 1 && tl.charAt(0) == '"') {
           foo[x] = foo[x].replace(/^\s*"|"\s*$/g, '').replace(/""/g, '"');
         } else if (x) {
           foo.splice(x - 1, 2, [foo[x - 1], foo[x]].join(sep));
         } else foo = foo.shift().split(sep).concat(foo);
       } else foo[x].replace(/""/g, '"');
     } return foo;
   };

  function indexOf(arr, obj) {
    for(var i=0; i<arr.length; i++) {
      if (arr[i] == obj) return i;
    }
  }

  function timeAgo(time, currentTime) {
    currentTime = new Date(Date.UTC(currentTime.getUTCFullYear(),currentTime.getUTCMonth(),currentTime.getUTCDate(),currentTime.getUTCHours(),currentTime.getUTCMinutes(),currentTime.getUTCSeconds(),currentTime.getUTCMilliseconds())); 
    var diff = (currentTime - time);
    diff = (diff-diff%1000)/1000;
    var seconds = diff%60;
    var minutes = ((diff - seconds)/60)%60;
    var hours   = (((diff - seconds)/60)-minutes)/60%24;
    var days    = ((((diff - seconds)/60)-minutes)/60-hours)/24;
    var ago     = (days)?days + "&nbsp;Days":((hours)?hours + "&nbsp;Hours":((minutes)?minutes + "&nbsp;Minutes":seconds + "&nbsp;Seconds"));
    return ago;
  }

  function changeTitle(newTitle) {
    gadgets.window.setTitle(newTitle);
  }

  function showTime(packetTime){
    var currentTime=new Date();
    var hours=currentTime.getHours();
    var minutes=currentTime.getMinutes();
    var seconds=currentTime.getSeconds();

    if (minutes<=9)
     minutes="0"+minutes;

    if (seconds<=9)
     seconds="0"+seconds;

     var ctime=hours+":"+minutes+":"+seconds;
     var ptime=packetTime;
     timeText = "<p id=\"small\">" + packetTime + "\n";
     var ago = timeAgo(new Date(packetTime + " UTC"), currentTime);
     timeText = timeText + "About&nbsp;" + ago + "&nbsp;Ago&nbsp;as&nbsp;of&nbsp;" + ctime + "</p>\n";
     document.getElementById('time_div').innerHTML=timeText;
  }

  function getHtml() {
    var params = {};  
    params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;  
    params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 300;
    var url = "http://www.ae6ps.org/aprs/aprs.csv";
    gadgets.io.makeRequest(url, response, params);
    var url2 = "http://www.ae6ps.org/google/aprs/status.php?callsign=__UP_callsign__";
  }

  function response(obj) {
//    changeTitle("__MSG_status_title__ __UP_callsign__");
    //obj.text contains the text of the page that was requested  
    var csv = obj.text;
    var lines = csv.split('\n');
    var headers = lines[0].splitCSV();
    var sourceIndex = indexOf(headers, "source");
    if ("__UP_field__" == "status") {
       var statusIndex = indexOf(headers, "status");
       var dateIndex   = indexOf(headers, "status_date");
    } else {
       var statusIndex = indexOf(headers, "comment");
       var dateIndex   = indexOf(headers, "packet_date");
    }
    var found = 0;
    for(var i=1; i<lines.length; i++) {
      var line = lines[i].splitCSV();
      var source = line[sourceIndex];
      if (source == "__UP_callsign__") {
        var parsed = line;
        found = 1;
      }
    }
    if (found == 1) {
       var statusText = "<p>" + parsed[statusIndex] + "</p>\n";
       var packetTime = parsed[dateIndex];
       document.getElementById('content_div').innerHTML = statusText;
       showTime(packetTime);
//       setInterval("showTime(packetTime)",1000);
    } else {
       var text = "No status yet.";
       document.getElementById('content_div').innerHTML = text;
    }
  }

  gadgets.util.registerOnLoadHandler(getHtml);
  </script>
  ]]>
  </Content>
</Module>

