// Initializes a new instance of the StringBuilder class
// and appends the given value if supplied
function StringBuilder(value)
{
  this.strings = new Array("");
  this.append(value);
}

// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value)
{
  if (typeof(value)=="number") value = value.toString();
  if (value)
  {
    this.strings.push(value);
  }
}

// Clears the string buffer
StringBuilder.prototype.clear = function ()
{
  this.strings.length = 1;
}

// Converts this instance to a String.
StringBuilder.prototype.toString = function ()
{
  return this.strings.join("");
}



var indexnum = 0;

var imeiindex = indexnum; indexnum++;
var entryidindex = indexnum; indexnum++;
var statuszindex = indexnum; indexnum++;

var rendszamindex = indexnum; indexnum++;
var csoportindex = indexnum; indexnum++;
var azonositoindex = indexnum; indexnum++;

var idopontindex = indexnum; indexnum++;
var rmcidopindex = indexnum; indexnum++;

var cogindex = indexnum; indexnum++;
var iranystrindex = indexnum; indexnum++;
var sebkmphindex = indexnum; indexnum++;
var sebmpsindex = indexnum; indexnum++;

var latindex = indexnum; indexnum++;
var lonindex = indexnum; indexnum++;

var jelindex = indexnum; indexnum++;

var validindex = indexnum; //indexnum++;



var point = new Array(imeiarray.length);
var marker = new Array(imeiarray.length);
var entrydata = new Array(imeiarray.length);

var entries = "";
var imeientry = "";

function myParseXML(i, tagname)
{
  switch(i)
  {
    case 0 :
    {
      var kezd = entries.indexOf("<"+tagname+">") + tagname.length + 2;
      var hossz = entries.indexOf("</"+tagname+">");
      if ( ( kezd > (tagname.length + 2) ) && ( hossz > 0 ) )
      {
        var retvalue = entries.substring(kezd, hossz);
        entries = entries.substring(0, kezd-1) + entries.substring(hossz + tagname.length + 3, entries.length);
        return retvalue;
      }
      else return "";
      break;
    }
    case 1 :
    {
      var kezd = imeientry.indexOf("<"+tagname+">") + tagname.length + 2;
      var hossz = imeientry.indexOf("</"+tagname+">");
      if ( ( kezd > (tagname.length + 2) ) && ( hossz > 0 ) )
      {
        return retvalue = imeientry.substring(kezd, hossz);
      }
      else return "";
      break;
    }
    default : break;
  } /* end switch(i) */
}



var xmlhttp;

function refresh()
{
  try
  {
    xmlhttp =  new XMLHttpRequest();

    xmlhttp.open('GET', 'getentries.php?page=1' + imeilist);

    xmlhttp.onreadystatechange = xmlhttpOnReadyStateChange;

    xmlhttp.send(null);

  }
  catch (err)
  {
    setTimeout("refresh()", mapRefreshInterval);
  }

//  delete xmlhttp;

  setTimeout("refresh()", mapRefreshInterval);
}

function recenter(lat, lon, zoom)
{
  map.centerAndZoom(new GLatLng(lat, lon), zoom);
}

var focusedentry = 0;
//var entrylistlength = 10;

function refreshentrydata()
{
  var sb = new StringBuilder("<TABLE class=text cellSpacing=1 cellPadding=0 width=250 align=center bgColor=#888888 border=0 valign=\"top\"><TBODY><TR><TD colspan=2 vAlign=center align=middle width=100% bgcolor='006699' background='img/bg_blue.jpg' style='background-repeat: repeat-x;'><FONT color=#ffffff><B>Eszközök</B></FONT></TD></TR>");
  if (focusedentry)
    sb.append("<TR><td colspan=2><table class=text cellSpacing=1 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><TD style='cursor:hand' onclick='javascript:scrollUp(1);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=33% height=20 bgColor=#006699><font color='ffffff'><b>-1</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/up.gif' border='0'></td><TD style='cursor:hand' onclick='javascript:scrollUp(10);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=34% height=20 bgColor=#006699><font color='ffffff'><b>-10</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/up.gif' border='0'></td><TD style='cursor:hand' onclick='javascript:scrollUp(-1);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=33% height=20 bgColor=#006699><font color='ffffff'><b>Az elejére</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/up.gif' border='0'></td></tr></table></td></tr>");

  for(var i = 0; i < imeiarray.length; i++)
    if (entrydata[i][validindex])
    {
      var rszStr = entrydata[i][rendszamindex].substring(0, 8);
      sb.append("<TR id=\"entry");
      sb.append(imeiarray[i]);
      sb.append("\"><TD colspan=2 vAlign=center align=middle width=100% bgColor=#006699><table class=text cellSpacing=1 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><td><A HREF=\"javascript:void(0);\" onclick=\"javascript:recenter(");
      sb.append(entrydata[i][latindex]);
      sb.append(", ");
      sb.append(entrydata[i][lonindex]);
      sb.append(", ");
      sb.append(zoomlevel.toString());
      sb.append(");\"><FONT color=#ffffff><B>");
      sb.append(entrydata[i][csoportindex]);
      if ((entrydata[i][csoportindex] != "") && (entrydata[i][csoportindex] != "&nbsp;") && (entrydata[i][azonositoindex] != "") && (entrydata[i][azonositoindex] != "&nbsp;")) 
        sb.append(", ");
      sb.append(entrydata[i][azonositoindex]);
      sb.append("</B></FONT></A></td><td width=70><table class=smalltext cellSpacing=1 cellPadding=0 width=100% align=center bgcolor=000000 border=0 valign=\"top\"><tr><td width=100% align=center valign=middle bgcolor=");
      sb.append(deviceColors[entrydata[i][imeiindex]]);
      sb.append("><span class=\"text\"><b>");
      sb.append(((entrydata[i][rendszamindex] == "") || (entrydata[i][rendszamindex] == "&nbsp;")) ? deviceLetters[entrydata[i][imeiindex]] : rszStr);
      sb.append("</b></span><IMG height=1 src=\"images/spacer.gif\" width=1 border=0></td></tr></table></td></tr></table></TD></TR><TR id=\"entryrow");
      sb.append(imeiarray[i]);
      sb.append("\" name=\"row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p0\"><TD colspan=2 id=row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p3 vAlign=center align=left bgColor=#ffffff name=\"row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p3\"></TD></tr><tr id=\"entrydata");
      sb.append(imeiarray[i]);
      sb.append("\"><TD width=50% vAlign=center align=left bgColor=#ffffff name=\"row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p1\"><TABLE class=smalltext cellSpacing=0 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><td colspan='2' align=center valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][rmcidopindex]);
      sb.append("</FONT></span></td></tr><tr><td align=right valign=middle><FONT color=#006699 size=1><b>Lat:&nbsp;</b></FONT></td><td align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][latindex]);
      sb.append("</FONT></span></td></tr><tr><td align=right valign=middle><FONT color=#006699 size=1><b>Lon:&nbsp;</b></FONT></td><td align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][lonindex]);
      sb.append("</FONT></span></td></tr></table></TD><TD width=50% id=row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p1 vAlign=center align=left bgColor=#ffffff name=\"row");
      sb.append(entrydata[i][entryidindex]);
      sb.append("p1\"><TABLE class=smalltext cellSpacing=0 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><td width=35% align=right valign=middle><FONT color=#006699 size=1><b>Státusz:&nbsp;</b></FONT></td><td width=65% align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][statuszindex]);
      sb.append("</FONT></span></td></tr><tr><td align=right valign=middle><FONT color=#006699 size=1><b>Irány:&nbsp;</b></FONT></td><td align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][cogindex]);
      sb.append("°, ");
      sb.append(entrydata[i][iranystrindex]);
      sb.append("</FONT></span></td></tr><tr><td rowspan=2 align=right valign=middle><FONT color=#006699 size=1><b>Sebesség:&nbsp;</b></FONT></td><td align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][sebkmphindex]);
      sb.append(" km/h</FONT></span></td></tr><tr><td align=left valign=middle><span class=\"text\"><FONT color=#006699 size=1>");
      sb.append(entrydata[i][sebmpsindex]);
      sb.append(" m/s</FONT></span></td></tr></table></TD></TR>");
    }
    else
    {
      sb.append("<TR id=\"entry");
      sb.append(imeiarray[i]);
      sb.append("\"><TD colspan=2 vAlign=center align=middle width=100% bgColor=#ff9999><table class=text cellSpacing=1 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><td><FONT color=#ffffff><B>");
      sb.append(imeiarray[i]);
      sb.append("</B></FONT></td></tr></table></TD></TR><TR id=\"entryrow");
      sb.append(imeiarray[i]);
      sb.append("\" name=\"rowp0\"><TD colspan=2 id=rowp3 vAlign=center align=left bgColor=#ffffff name=\"rowp3\"><TABLE class=smalltext cellSpacing=1 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><td align=left valign=middle><FONT color=#cc3333 size=1><B>Nincs érvényes bejegyzés</B></FONT></td></tr></table></TD></tr></span>");
      window.status = "Érvénytelen bejegyzés.";
    }

/*

<TR onclick='javascript:scrollUp();' onmouseover='this.bgColor=#3388cc;' onmouseout='this.bgColor=#006699;'><TD colspan=2 vAlign=center align=middle width=100% bgColor=#006699><img src='images/up.gif' border='0'></td></tr>
<TR onclick='javascript:scrollDown();' onmouseover='this.bgColor=#3388cc;' onmouseout='this.bgColor=#006699;'><TD colspan=2 vAlign=center align=middle width=100% bgColor=#006699><img src='images/down.gif' border='0'></td></tr>

*/

  if (focusedentry < imeiarray.length - entrylistlength)
    sb.append("<TR><td colspan=2><table class=text cellSpacing=1 cellPadding=0 width=100% align=center border=0 valign=\"top\"><tr><TD style='cursor:hand' onclick='javascript:scrollDown(1);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=33% height=20 bgColor=#006699><font color='ffffff'><b>+1</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/down.gif' border='0'></td><TD style='cursor:hand' onclick='javascript:scrollDown(10);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=34% height=20 bgColor=#006699><font color='ffffff'><b>+10</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/down.gif' border='0'></td><TD style='cursor:hand' onclick='javascript:scrollDown(-1);' onmouseover='bgColor=\"#3388cc\"' onmouseout='bgColor=\"#006699\"' colspan=2 vAlign=center align=middle width=33% height=20 bgColor=#006699><font color='ffffff'><b>A végére</b></font><img src='images/spacer.gif' border='0' width='5' height='1'><img src='images/down.gif' border='0'></td></tr></table></td></tr>");
  sb.append("</TBODY></TABLE>");

  document.getElementById("entrydata").innerHTML = sb.toString();

  for (var i = 0; i < imeiarray.length; i++)
  {
    document.getElementById("entry" + imeiarray[i]).style.display = "none";
    document.getElementById("entryrow" + imeiarray[i]).style.display = "none";
    if (document.getElementById("entrydata" + imeiarray[i])) document.getElementById("entrydata" + imeiarray[i]).style.display = "none";
  }

  for (var i = focusedentry; ((i < imeiarray.length) && (i < focusedentry + entrylistlength)); i++)
  {
    document.getElementById("entry" + imeiarray[i]).style.display = "";
    document.getElementById("entryrow" + imeiarray[i]).style.display = "";
    if (document.getElementById("entrydata" + imeiarray[i])) document.getElementById("entrydata" + imeiarray[i]).style.display = "";
  }
  delete sb;
}

function scrollUp(i)
{
  if (focusedentry > 0)
  {
    switch (i)
    {
      case -1 :
      {
        focusedentry = 0;
        break;
      }
      case 1 :
      {
        focusedentry--;
        break;
      }
      case 10 :
      {
        focusedentry -= 10;
        if (focusedentry < 0)
          focusedentry = 0;
        break;
      }
      default : break;
    }
    refreshentrydata();
  }
}

function scrollDown(i)
{
  if (focusedentry < (imeiarray.length - entrylistlength))
  {
    switch (i)
    {
      case -1 :
      {
        focusedentry = imeiarray.length - entrylistlength;
        break;
      }
      case 1 :
      {
        focusedentry++;
        break;
      }
      case 10 :
      {
        focusedentry += 10;
        if (focusedentry >= imeiarray.length - entrylistlength)
          focusedentry = imeiarray.length - entrylistlength;
        break;
      }
      default : break;
    }
    refreshentrydata();
  }
}

function xmlhttpOnReadyStateChange()
  {
    if (xmlhttp.readyState == 4)
    {
      if (xmlhttp.status == 200)
      {
        entries.length = 0;
        entries = "";
        entries = xmlhttp.responseText;

        for (var i=0; i<imeiarray.length; i++)
        {
          imeientry = myParseXML(0, "imei"+imeiarray[i]);

          delete entrydata[i];
          entrydata[i] = new Array();

          if (imeientry!="")
          {

            entrydata[i].push(myParseXML(1, "imei"));
            entrydata[i].push(myParseXML(1, "entryid"));
            entrydata[i].push(myParseXML(1, "statusz"));

            entrydata[i].push(myParseXML(1, "rendszam"));
            entrydata[i].push(myParseXML(1, "csoport"));
            entrydata[i].push(myParseXML(1, "azonosito"));

            entrydata[i].push(myParseXML(1, "datetime"));
            entrydata[i].push(myParseXML(1, "UTCdatetime"));

            entrydata[i].push(myParseXML(1, "COG"));
            entrydata[i].push(myParseXML(1, "iranystr"));
            entrydata[i].push(myParseXML(1, "sebkmph"));
            entrydata[i].push(myParseXML(1, "sebmps"));

            entrydata[i].push(myParseXML(1, "lat"));
            entrydata[i].push(myParseXML(1, "lon"));

            entrydata[i].push(myParseXML(1, "displayclass"));

            entrydata[i].push(myParseXML(1, "valid"));



            entrydata[i][statuszindex]   = entrydata[i][statuszindex].htmlEntityDecode();
            entrydata[i][rendszamindex]  = entrydata[i][rendszamindex].htmlEntityDecode();
            entrydata[i][csoportindex]   = entrydata[i][csoportindex].htmlEntityDecode();
            entrydata[i][azonositoindex] = entrydata[i][azonositoindex].htmlEntityDecode();
            entrydata[i][iranystrindex]  = entrydata[i][iranystrindex].htmlEntityDecode();

            entrydata[i][validindex]     = parseInt(entrydata[i][validindex]);

            entrydata[i][latindex] = parseFloat(entrydata[i][latindex]);
            entrydata[i][lonindex] = parseFloat(entrydata[i][lonindex]);
            if ( ( entrydata[i][latindex] == NaN ) || ( entrydata[i][lonindex] == NaN ) ) entrydata[i][validindex] = 0;
            entrydata[i][jelindex] = parseInt(entrydata[i][jelindex]);

          }
          else entrydata[i][validindex] = 0;

        }

//        map.clearOverlays();

        for (var i=0; i<imeiarray.length; i++)
          if (entrydata[i][validindex])
          {
            if (!marker[i])
            {
              point[i] = new GPoint(entrydata[i][lonindex], entrydata[i][latindex]);
              marker[i] = createMarker(point[i], entrydata[i][jelindex], baseIcon, 1, i, entrydata[i][rendszamindex], entrydata[i][imeiindex]);
              map.addOverlay(marker[i]);
            }
            else
            {
              point[i] = new GLatLng(entrydata[i][latindex], entrydata[i][lonindex]);
              marker[i].setPoint(point[i]);
              
            }
          }

        refreshentrydata();

      }
      else
      {
        window.status = "Hiba.";
        return -1;
      }
    }
  }

refresh();


