var map;
var emisores = new Array();
var markers = new Array();
var polis = new Array();
var act = null;
var track = new Array();
var lineaTrack;
var claseAct = "todos";

var d = new Date();
var ano = String(d.getFullYear()).substr(2);
var mes = (String(d.getMonth()+1).length == 2) ? String(d.getMonth()+1) : String(0) + String(d.getMonth()+1);
var dia = (String(d.getDate()).length == 2) ? String(d.getDate()) : String(0) + String(d.getDate());
var fecha = ano+mes+dia;

function procesaTxt(data, responseCode)
{
  if (lineaTrack) { map.removeOverlay(lineaTrack); }
  track = [];
  if(responseCode == 200)
  {
    lineas = data.split("\n");
    for (var i=0; i<lineas.length; i++)
    {
      if (lineas[i].length > 1)
      {
      nLatLon = lineas[i].split("|");
      var punto = new GLatLng(parseFloat(nLatLon[0]),parseFloat(nLatLon[1]));
        track.push(punto);
      }
    }
    if (track.length > 1)
    {
      lineaTrack = new GPolyline(track,"#0000FF",2,0.5);
      map.addOverlay(lineaTrack);
    }
  }
}

function procesaXml(origenXml)
{
  emisores = [];

  var request = GXmlHttp.create();
  request.open("GET", origenXml, false);
  request.send(null);
  var xmlDoc = request.responseXML;
  var puntos = xmlDoc.documentElement.getElementsByTagName("punto");
  for (i=0;i<puntos.length;i++)
  {
    var pDatos = new Array();
    pDatos["hora"] = puntos[i].getElementsByTagName("hora")[0].childNodes[0].nodeValue;
    pDatos["dia"] = pDatos["hora"].substr(0,6);
    if (document.URL.match("Compe") !== null)
    {
      if (fecha == pDatos["dia"])
      {
        pDatos["CN"] = puntos[i].getElementsByTagName("CN")[0].childNodes[0].nodeValue;
        pDatos["id"] = puntos[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;
        pDatos["gPunto"] = new GLatLng(puntos[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue , puntos[i].getElementsByTagName("lon")[0].childNodes[0].nodeValue);
        pDatos["alt"] = puntos[i].getElementsByTagName("alt")[0].childNodes[0].nodeValue;
        pDatos["dir"] = puntos[i].getElementsByTagName("dir")[0].childNodes[0].nodeValue;
        pDatos["vel"] = puntos[i].getElementsByTagName("vel")[0].childNodes[0].nodeValue;
        pDatos["clase"] = (puntos[i].getElementsByTagName("clase")[0].childNodes[0]) ? puntos[i].getElementsByTagName("clase")[0].childNodes[0].nodeValue : "n.d." ;
        emisores.push(pDatos);
      }
    } else
    {
      pDatos["CN"] = puntos[i].getElementsByTagName("CN")[0].childNodes[0].nodeValue;
      pDatos["id"] = puntos[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;
      pDatos["gPunto"] = new GLatLng(puntos[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue , puntos[i].getElementsByTagName("lon")[0].childNodes[0].nodeValue);
      pDatos["alt"] = puntos[i].getElementsByTagName("alt")[0].childNodes[0].nodeValue;
      pDatos["dir"] = puntos[i].getElementsByTagName("dir")[0].childNodes[0].nodeValue;
      pDatos["vel"] = puntos[i].getElementsByTagName("vel")[0].childNodes[0].nodeValue;
      pDatos["clase"] = (puntos[i].getElementsByTagName("clase")[0].childNodes[0]) ? puntos[i].getElementsByTagName("clase")[0].childNodes[0].nodeValue : "n.d." ;
      emisores.push(pDatos);
    }
  }
}

var t;
var c = 0;
function andaSimu()
{
  var txAnda = "/web/scripts/gprsSimWeb.php?nLin=" + c;
  var request = GXmlHttp.create();
  request.open("GET", txAnda, false);
  request.send(null);

  c = c + parseInt(document.getElementById("velSel").value); // c = c + 2 - lee cada dos líneas del archivo, la velocidad x1.
  document.getElementById("sim").style.backgroundColor = "#00BB00";
  t = setTimeout("andaSimu()",2000);
}

function paraSimu()
{
  var txFile = "/web/scripts/gprsSimWeb.php?estado=off";
  var request = GXmlHttp.create();
  request.open("GET", txFile, false);
  request.send(null);

  clearTimeout(t);
  document.getElementById("sim").style.backgroundColor = "transparent";
}

function cargarTareas()
{
  xmlFile = "/web/gprs/tareas." + fecha + ".xml";
  var request = GXmlHttp.create();
  request.open("GET", xmlFile, true);
  request.onreadystatechange = function()
  {
    if (request.readyState == 4)
    {
      if (request.status == 404)
      {
        alert("Todavía no hay tareas para hoy");
        document.getElementById("tdRecargar").style.visibility = "visible";
        document.getElementById("tdTareas").style.visibility = "hidden";
      } else
      {
        document.getElementById("tdRecargar").style.visibility = "hidden";
        document.getElementById("tdTareas").style.visibility = "visible";

        var xmlDoc = GXml.parse(request.responseText);
        var areas = xmlDoc.documentElement.getElementsByTagName("Area");

        for (var i = 0; i < areas.length; i++)
        {
          var nombre = areas[i].getAttribute("nombre");
          var clase = areas[i].parentNode.getAttribute("nombre");
          var strokeColor = areas[i].getAttribute("strokeColor");
          var strokeWeight = parseFloat(areas[i].getAttribute("strokeWeight"));
          var strokeOpacity = parseFloat(areas[i].getAttribute("strokeOpacity"));
          var fillColor = areas[i].getAttribute("fillColor");
          var fillOpacity = parseFloat(areas[i].getAttribute("fillOpacity"));
          var puntos = areas[i].getElementsByTagName("punto");
          var pts = [];
          for (var j = 0; j < puntos.length; j++)
          {
            pts[j] = new GLatLng(parseFloat(puntos[j].getAttribute("lat")),parseFloat(puntos[j].getAttribute("lon")));
          }
          var pol = new GPolygon(pts, strokeColor,  strokeWeight,  strokeOpacity,  fillColor,  fillOpacity);
          pol.clase = clase;
          polis[i]= pol;
          polis[i].visible = false;
        }
      }
    }
  }
  request.send(null);
}

var s;
var b=0;
function datosGPRS()
{
  var origenXml = "/web/scripts/gprs.xml.php";
  procesaXml(origenXml);
  verDatos();

  for (i=0;i<markers.length;i++)
  {
    if (markers[i]) { map.removeOverlay(markers[i]) }
  }
  markers = [];
  for (i=0;i<emisores.length;i++)
  {
    if (claseAct !== "todos")
    {
      if (emisores[i]["clase"] == claseAct)
      {
        createMarker(emisores[i]["gPunto"], i, emisores[i]["CN"]);
        markers[i].setLatLng(emisores[i]["gPunto"]);
        map.addOverlay(markers[i]);
      } else
      {
        continue;
      }
    } else
    {
      createMarker(emisores[i]["gPunto"], i, emisores[i]["CN"]);
      markers[i].setLatLng(emisores[i]["gPunto"]);
      map.addOverlay(markers[i]);
    }
  }

  if (act != null)
  {
    if (document.getElementById("trk").checked == true)
    {
      var txtFile = "/web/gprs/vuelos/" + emisores[act]["id"] + ".trayecto.txt?z=" + Math.random();
      GDownloadUrl(txtFile, procesaTxt);
    } else
    {
      if (lineaTrack) { map.removeOverlay(lineaTrack); }
      track = [];
    }

    if (document.getElementById("centrar").checked == true)
    {
      map.panTo(emisores[act]["gPunto"]);
    }
  }

  b = b + 1;
  s = setTimeout("datosGPRS()",4000);
}

function paraDatosGPRS()
{
  clearTimeout(s);
}

function createMarker(point, i, cn)
{
  var cnIcon = new GIcon();
  cnIcon.iconSize = new GSize(36, 24);
  cnIcon.iconAnchor = new GPoint(18, 12);
  cnIcon.image = "http://www.aeroclubdeocana.aero/web/images/gprs/" + cn + ".png";
  var markerOptions = { icon:cnIcon};
  var marker = new GMarker(point, markerOptions);

  GEvent.addListener(marker, "click", function()
  {
    act = i;
    verDatos();
  });

  markers[i] = marker;

  return marker;
}

function verClase(clase)
{
  claseAct = clase;
  act = null;
  document.getElementById("centrar").checked = false;
  if (document.getElementById("trk") != null) { document.getElementById("trk").checked = false; }
  if (lineaTrack) { map.removeOverlay(lineaTrack); }
  document.getElementById("tdCentrar").style.visibility = "hidden";
  if (clase == "todos")
  {
    for (t in polis)
    {
      if (polis[t].visible === true)
      {
        polis[t].visible = false;
        map.removeOverlay(polis[t]);
      }
    }
  } else
  {
    for (t in polis)
    {
      if (polis[t].clase == clase)
      {
        if (polis[t].visible == false)
        {
          polis[t].visible = true;
          map.addOverlay(polis[t]);
        }
      } else
      {
        if (polis[t].visible !== false)
        {
          polis[t].visible = false;
          map.removeOverlay(polis[t]);
        }
      }
    }
  }
}

function verDatos()
{
   if (act !== null)
   {
     document.getElementById("CN").innerHTML = emisores[act]["CN"];
     var lat = String(emisores[act]["gPunto"].lat());
     var lon = String(emisores[act]["gPunto"].lng());
     document.getElementById("pos").innerHTML = "Lat: " + lat.slice(0,8) + "<br />Lon: " + lon.slice(0,8);
     var fechora = emisores[act]["hora"];
     var strHora = fechora.substring(0,2) + "/" + fechora.substring(2,4) + "/" + fechora.substring(4,6) + "<br />" + fechora.substring(6,8) + ":" + fechora.substring(8,10) + ":" + fechora.substring(10,12);
     document.getElementById("hora").innerHTML = strHora;
     document.getElementById("alt").innerHTML = emisores[act]["alt"];
     document.getElementById("dir").innerHTML = emisores[act]["dir"];
     document.getElementById("vel").innerHTML = emisores[act]["vel"];
     document.getElementById("tdCentrar").style.visibility = "visible";
   } else
   {
     document.getElementById("CN").innerHTML = "";
     document.getElementById("pos").innerHTML = "";
     document.getElementById("hora").innerHTML = "";
     document.getElementById("alt").innerHTML = "";
     document.getElementById("dir").innerHTML = "";
     document.getElementById("vel").innerHTML = "";
     document.getElementById("tdCentrar").style.visibility = "hidden";
   }
}

function gprs(tipo)
{
  map = new GMap2(document.getElementById('map'));
  map.addMapType(G_PHYSICAL_MAP);
  if (document.URL.match("Compe") !== null)
  {
    var centro= new GLatLng(39.46, -3.7);
    map.setCenter(centro, 9, G_PHYSICAL_MAP);
  } else
  {
    var centro= new GLatLng(40.6,-2.6);
    map.setCenter(centro, 7, G_PHYSICAL_MAP);
  }
  map.addControl(new GScaleControl());
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  map.enableScrollWheelZoom();

  document.getElementById("tdCentrar").style.visibility = "hidden";

  if (tipo == "compe")
  {
    document.getElementById("tdTareas").style.visibility = "hidden";
    cargarTareas();
  }

  datosGPRS();
  verClase("todos");
  return map;
}

