
var botonesDivBak = '';
var botonesDivBakI = 0;
var metar_dec = '';

function chgA(i)	{
	var sel = document.getElementById('a'+i);;
	if (sel.selectedIndex > 0)	{
		var a = sel.options[sel.selectedIndex].value;
		botones(a, i);
	}
}
function botones(a, i)	{
	var botonesDiv = document.getElementById('botones'+i);
	botonesDiv.innerHTML = '';
	botonesDiv.innerHTML += ' <input stlye="font-size:9px;" type="button" value="DETALLES" onclick="detalles(\''+ a +'\', '+ i +')" />';
	botonesDiv.innerHTML += ' <input stlye="font-size:9px;" type="button" value="MAS CERCANOS" onclick="cercanos(\''+ a +'\', '+ i +')" />';
	botonesDiv.innerHTML += ' <input stlye="font-size:9px;" type="button" value="METAR" onclick="metar(\''+ a +'\', '+ i +')" />';
	botonesDiv.innerHTML += ' <input stlye="font-size:9px;" type="button" value="TAF" onclick="taf(\''+ a +'\', '+ i +')" />';
}
function detalles(a, i)	{
	var botonesDiv = document.getElementById('botones'+i);
	botonesDivBak = botonesDiv.innerHTML;
	botonesDivBakI = i;
	botonesDiv.innerHTML = ' Consultando detalles para '+ a +', por favor espere...';
	EnviaGet('datos_ajax.php', 'a='+a+'&accion=detalles', ajaxVuelta);
}
function cercanos(a, i)	{
	var botonesDiv = document.getElementById('botones'+i);
	botonesDivBak = botonesDiv.innerHTML;
	botonesDivBakI = i;
	botonesDiv.innerHTML = ' Consultando más cercanos para '+ a +', por favor espere...';
	EnviaGet('datos_ajax.php', 'a='+a+'&accion=cercanos', ajaxVuelta);
}
function metar(a, i)	{
	var botonesDiv = document.getElementById('botones'+i);
	botonesDivBak = botonesDiv.innerHTML;
	botonesDivBakI = i;
	botonesDiv.innerHTML = ' Consultando METAR para '+ a +', por favor espere...';
	EnviaGet('datos_ajax.php', 'a='+a+'&accion=metar', ajaxVuelta);
}
function taf(a, i)	{
	var botonesDiv = document.getElementById('botones'+i);
	botonesDivBak = botonesDiv.innerHTML;
	botonesDivBakI = i;
	botonesDiv.innerHTML = ' Consultando TAF para '+ a +', por favor espere...';
	EnviaGet('datos_ajax.php', 'a='+a+'&accion=taf', ajaxVuelta);
}
function ajaxVuelta()	{
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var Respuesta = http_request.responseText;
			var tmp = Respuesta.split("\n");
			//metar_decode('SADF 282100Z 02008KT 9999 SCT200 26/15 Q1009');
			metar_decode(tmp[3]);
			if (metar_dec.substr(0,10) == 'Situacion:')	{
				Respuesta += "\n" + metar_dec;
			}
			alert(Respuesta);
			var botonesDiv = document.getElementById('botones'+botonesDivBakI);
			botonesDiv.innerHTML = botonesDivBak;
		} else {
			alert('Se detectó un problema con la petición.');
		}
	}
}
function EnviaGet(url, parametros, Funcion) {
	http_request = false;	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {http_request.overrideMimeType('text/xml');}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert('Problema al crear instancia de XMLHTTP.');
		return false;
	}	
	http_request.onreadystatechange = Funcion;
	http_request.open('GET', url+"?"+parametros, true);
	http_request.send(null);
}




///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////



function is_num_digit(ch)
{
    return ( (ch == '0') || (ch == '1') || (ch == '2') || (ch == '3') ||
             (ch == '4') || (ch == '5') || (ch == '6') || (ch == '7') ||
             (ch == '8') || (ch == '9') );
}

function is_alphabetic_char(ch)
{
    return ( (ch >= 'A') && (ch <= 'Z') );
}

function decode_token(token)
{
    // mira si el viento esta en calma
    if(token == "00000KT")
    {
        add_output("Viento en calma\n");
        return;
    }

    // mira la indicacion del viento
    var reWindKT  = /^(\d{3}|VRB)(\d{2,3})(G\d{2,3})?(KT|MPS|KMH)$/;
    if(reWindKT.test(token))
    {
        // mira Dirección de viento y velocidad
        var myArray = reWindKT.exec(token);
        var units = myArray[4];
        add_output("Viento: ");
        if(myArray[1]=="VRB")
          add_output(" Dirección variable");
        else
          add_output(" Dirección " + myArray[1] + " grados");
        add_output(", velocidad " + parseInt(myArray[2],10));
        if(units=="KT") add_output(" nudos");
        else if(units=="KMH") add_output(" km/h");
        else if(units=="MPS") add_output(" m/s");
        if(myArray[3] != null)
        {
            // mira si existen rachas de viento
			
            if (myArray[3]!="")
            {
                add_output(", con rachas máximas de " + parseInt(myArray[3].substr(1,myArray[3].length),10));
                if(units=="KT") add_output(" nudos");
                else if(units=="KMH") add_output(" km/h");
                else if(units=="MPS") add_output(" m/s");
             }
        }

        add_output("\n");  return;
    }


    // mira vi el viento es Dirección variable 
    var reVariableWind = /^(\d{3})V(\d{3})$/;
    if(reVariableWind.test(token))
    {
        // saca la Dirección varibale del viento
        add_output("La dirección del viento es variable de "+token.substr(0,3)+" a "+token.substr(4,3)+"\n");
        return;
    }
	
	//comprobar visibilidad eeuu
	
		var reVis =  /\d{2}SM/;   // /A\d{4}/;
		if (reVis.test(token))
		{
			
			var myArray=reVis.exec(token);
			add_output("Visibilidad: ");
			if (myArray=="10SM")
			{
				add_output("10 millas o más");
			}
			add_output("\n"); return;
			
		}
		
		var reVis = /\d{1}SM/;
		if (reVis.test(token))
		{
			var myArray=reVis.exec(token);
			add_output ("Visibilidad: ");
			if (myArray=="0SM")
			{
				add_output("la visiblidad es nula");
			}
			else
			{
				reVis=/\d{1}/;
				if (reVis.test(myArray))
				{
					
					myArray=reVis.exec(myArray);
					add_output(myArray + " millas");
				}
			}
			add_output("\n"); return;
		}


    // comprueba la visibilidad
    var reVis = /^(\d{4})(N|S)?(E|W)?$/;
    if(reVis.test(token))
    {
        var myArray = reVis.exec(token);
        add_output("Visibilidad: ");
        if(myArray[1]=="9999")
          add_output("10 km o más");
        else if (myArray[1]=="0000")
          add_output("menos de 50 m");
        else
          add_output(parseInt(myArray[1],10) + " m");

	var dir = "";
        if(typeof myArray[2] != "undefined")
        {
          dir=dir + myArray[2];
        }
        if(typeof myArray[3] != "undefined")
        {
          dir=dir + myArray[3];
        }
        if(dir != "")
        {
          add_output(" Dirección ");
          if(dir=="N") add_output("Norte");
          else if(dir=="NE") add_output("Nordeste");
          else if(dir=="E") add_output("Este");
          else if(dir=="SE") add_output("Sudeste");
          else if(dir=="S") add_output("Sur");
          else if(dir=="SW") add_output("Sudoeste");
          else if(dir=="W") add_output("Oeste");
          else if(dir=="NW") add_output("Noroeste");
        }
        add_output("\n"); return;
    }


    // comprueba el QNH
    var reQNHhPa = /Q\d{3,4}/;
    if(reQNHhPa.test(token))
    {
        // QNH tcomprueba si el QNH esta en HPA
        add_output("QNH: ");
        add_output(parseInt(token.substr(1,4),10) + " hPa"); 
        add_output("\n");  return;
    }

    // comprueba si el QNH esta en pulgadas de mercurio
    var reINHg = /A\d{4}/;
    if(reINHg.test(token))
    {
        add_output("QNH: ");
        add_output(token.substr(1,2) + "." + token.substr(3,4) + " inHg");
        add_output("\n");  return;
    } 

    // comprueba el rango visual de cada pista RVR
    var reRVR = /^R(\d{2})(R|C|L)?\/(M|P)?(\d{4})(V\d{4})?(U|D|N)?$/;
    if(reRVR.test(token))
    {
        var myArray = reRVR.exec(token);
        add_output("Pista ");
        add_output(myArray[1])
        if(typeof myArray[2] != "undefined")
        {
          if(myArray[2]=="L") add_output(" L");
          else if(myArray[2]=="R") add_output(" R");
          else if(myArray[2]=="C") add_output(" C");
        }
        add_output(", la visivilidad en la cabecera es ");
		
        if(typeof myArray[5] != "undefined")
        {
            // Variable 
            add_output("variable de un mínimo de ");
            if(myArray[3]=="P") add_output("más de ");
            else if(myArray[3]=="M") add_output("menos de ");
            add_output(myArray[4]);
            add_output(" metros");
            add_output(" hasta un máximo de "+myArray[5].substr(1,myArray[5].length)+" metros");
        }
        else
        {
          // valor simple
          if( (typeof myArray[3] != "undefined") &&
              (typeof myArray[4] != "undefined")    )
          {
            if(myArray[3]=="P") add_output("más de ");
            else if(myArray[3]=="M") add_output("menos de ");
            add_output(myArray[4]);
            add_output(" metros");
          }
		  add_output(myArray[4]);
          add_output(" metros");
        }
        if( (myArray.length > 5) && (typeof myArray[6] != "undefined") )
        {
		  if ((myArray[3]=="P")||(myArray[3]=="M")) add_output(myArray[4]);
          if(myArray[6]=="U") add_output(" y aumentando");
          else if(myArray[6]=="D") add_output(" y disminuyendo");
        }
		
        add_output("\n");
        return;
    }


    // mira si es cavol
    if(token == "CAVOK")
    {
        add_output("CAVOK: Visibilidad de 10km o más, no hay nubes por debajo de 5000ft, no hay cumulonimbus, no existen fenómenos atmosféricos significativos\n");
        return;
    }


    // nira si no hay nada significativo
    if(token == "NOSIG")
    {
        add_output("No se esperan cambios significativos\n");
        return;
    }


    // Cmira las condiciones meteorologicas actuales
    var reWX = /^(\-|\+)?(VC)?(MI|BC|BL|SH|TS|FZ|PR)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS|BR|FG|FU|VA|DU|SA|HZ|PO|SQ|FC|SS|DS)$/;
    if(reWX.test(token))
    {
        add_output("Condiciones meteorologicas: ");
        var myArray = reWX.exec(token);
        for(var i=1;i<myArray.length; i++)
        {
            if(myArray[i] == "-") add_output("Leve ");
            if(myArray[i] == "+") add_output("Fuerte ");
            if(myArray[i] == "VC") add_output("En las proximidades ");
            if(myArray[i] == "MI") add_output("Baja ");
            if(myArray[i] == "BC") add_output("Bancos ");
            if(myArray[i] == "SH") add_output("chubascos ");
            if(myArray[i] == "TS") add_output("Tormenta ");
            if(myArray[i] == "FZ") add_output("Sobrenfriado ");
            if(myArray[i] == "PR") add_output("Parcial ");
            if(myArray[i] == "DZ") add_output("Llovizna ");
            if(myArray[i] == "RA") add_output("Lluvia ");
            if(myArray[i] == "SN") add_output("Nieve ");
            if(myArray[i] == "SG") add_output("Nieve granulada ");
            if(myArray[i] == "IC") add_output("Cristales de hielo ");
            if(myArray[i] == "PL") add_output("Hielo granulado ");
            if(myArray[i] == "GR") add_output("Granizo ");
            if(myArray[i] == "GS") add_output("Granizo pequeño ");
            if(myArray[i] == "BR") add_output("Neblina ");
            if(myArray[i] == "FG") add_output("Niebla ");
            if(myArray[i] == "FU") add_output("humo ");
            if(myArray[i] == "VA") add_output("Ceniza volvanica ");
            if(myArray[i] == "DU") add_output("Polvo extendido ");
            if(myArray[i] == "SA") add_output("Arena ");
            if(myArray[i] == "HZ") add_output("Bruma ");
            if(myArray[i] == "PO") add_output("Remolinos de arena y polvo ");
            if(myArray[i] == "SQ") add_output("Turbonadas ");
            if(myArray[i] == "FC") add_output("Tornado ");
            if(myArray[i] == "SS") add_output("Tormenta de aerena ");
            if(myArray[i] == "DS") add_output("Tormenta de polvo ");
			if(myArray[i] == "BL") add_output("Venticas altas  ");
			if(myArray[i] == "DR") add_output("Venticas bajas ");
      
        }
        add_output("\n");  return;
    }


    // mira las observaciones recientes
    var reREWX = /^RE(\-|\+)?(VC)?(MI|BC|BL|SH|TS|FZ|PR)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS)?(DZ|RA|SN|SG|IC|PL|GR|GS|BR|FG|FU|VA|DU|SA|HZ|PO|SQ|FC|SS|DS)?$/;
    if(reREWX.test(token))
    {
        add_output("Recientemente: ");
        var myArray = reREWX.exec(token);
        for(var i=1;i<myArray.length; i++)
        {
            if(myArray[i] == "-") add_output("Leve ");
            if(myArray[i] == "+") add_output("Fuerte ");
            if(myArray[i] == "VC") add_output("En las proximidades, ");
            if(myArray[i] == "MI") add_output("Baja ");
            if(myArray[i] == "BC") add_output("Bancos ");
            if(myArray[i] == "SH") add_output("chubascos ");
            if(myArray[i] == "TS") add_output("Tormenta ");
            if(myArray[i] == "FZ") add_output("Sobrenfriado ");
            if(myArray[i] == "PR") add_output("Parcial ");
            if(myArray[i] == "DZ") add_output("Llovizna ");
            if(myArray[i] == "RA") add_output("Lluvia ");
            if(myArray[i] == "SN") add_output("Nieve ");
            if(myArray[i] == "SG") add_output("Nieve granulada ");
            if(myArray[i] == "IC") add_output("Cristales de hielo ");
            if(myArray[i] == "PL") add_output("Hielo granulado ");
            if(myArray[i] == "GR") add_output("Granizo ");
            if(myArray[i] == "GS") add_output("Granizo pequeño ");
            if(myArray[i] == "BR") add_output("Neblina ");
            if(myArray[i] == "FG") add_output("Niebla ");
            if(myArray[i] == "FU") add_output("humo ");
            if(myArray[i] == "VA") add_output("Ceniza volvanica ");
            if(myArray[i] == "DU") add_output("Polvo extendido ");
            if(myArray[i] == "SA") add_output("Arena ");
            if(myArray[i] == "HZ") add_output("Bruma ");
            if(myArray[i] == "PO") add_output("Remolinos de arena y polvo ");
            if(myArray[i] == "SQ") add_output("Turbonadas ");
            if(myArray[i] == "FC") add_output("Tornado ");
            if(myArray[i] == "SS") add_output("Tormenta de aerena ");
            if(myArray[i] == "DS") add_output("Tormenta de polvo ");
			if(myArray[i] == "BL") add_output("Venticas altas  ");
			if(myArray[i] == "DR") add_output("Venticas bajas ");
      
        }
        add_output("\n"); return;
    }


    // temperatura y punto de rocio
    var reTempDew = /^(M?\d\d|\/\/)\/(M?\d\d)?$/;
    if(reTempDew.test(token))
    {
        var myArray = reTempDew.exec(token);

        if(myArray[1].charAt(0)=='M')
          add_output("Temperatura: -" + myArray[1].substr(1,2) + " grados\n");
        else
          add_output("Temperatura: " + myArray[1].substr(0,2) + " grados\n");

        if(myArray[2]!="")
        {
          if(myArray[2].charAt(0)=='M')
            add_output("Punto de rocío: -" + myArray[2].substr(1,2) + " grados\n");
          else
            add_output("Punto de rocío: " + myArray[2].substr(0,2) + " grados\n");
        }

        return;
    }


    // mira la indicacion de cielo despejado
    if(token=="SKC")
    {
        add_output("Cielo despejado\n");
        return;
    }


    // mira la condicion de visibilidad vertical
	var reVV = /^VV(\d{3}|\/{3})$/;
    if(reVV.test(token))
    {
     
        var myArray = reVV.exec(token);
        add_output("Visibilidad vertical: ");
        if(myArray[1] == "///")
          add_output(" clielo despejado\n");
        else
          add_output(": " + (100*parseInt(myArray[1],10)) + " ft\n");

        return;
    }


    // mira las nuves
    var reCloud = /^(FEW|SCT|BKN|OVC)(\d{3})(CB|TCU)?$/;
    if(reCloud.test(token))
    {
        
        var myArray = reCloud.exec(token);
        add_output("Nubes: ");
        if(myArray[1] == "FEW") add_output("Escasas  ");
        else if(myArray[1] == "SCT") add_output("Dispersas");
        else if(myArray[1] == "BKN") add_output("Fragmentado");
        else if(myArray[1] == "OVC") add_output("Cubierto");
       
        add_output(", a " + (100*parseInt(myArray[2],10)) + " ft");

        if(myArray[3] == "CB") add_output(", cumulonimbus");
        else if(myArray[3] == "TCU") add_output(", towering cumulus");

        add_output("\n"); return; 
    }


    // busca windshear
    var reRWY = /^RWY(\d{2})(L|C|R)?$/;
    if(token=="WS")       { add_output("windshear en "); return; }
    else if(token=="ALL") { add_output("todas las pistas "); return; }
    else if(token=="RWY") { add_output("pista\n"); return; }
    else if (reRWY.test(token))
    {
        var myArray = reRWY.exec(token);
        add_output("pista "+myArray[1]);
        if(myArray[2]=="L")      add_output(" L");
        else if(myArray[2]=="C") add_output(" C");
        else if(myArray[2]=="R") add_output(" R");
        add_output("\n");
        return;
    }
    

    // busca indicacion de nada significativo
    if(token=="NSW")
    {
        add_output("Nada significativo al momento\n");
        return;
    }


    // no nubes
    if(token=="NSC")
    {
        add_output("No hay nubes significativas por debajo de 5000ft\n");
        return;
    }


    // busca la indicacion de siguiente
    if(token=="BECMG")
    {
        add_output("\nEsperado proximamente:\n\n");
        return;
    }
    if(token=="TEMPO")
    {
        add_output("\nTemporalmente:\n\n");
        return;
    }
    var reFM = /^FM(\d{2})(\d{2})Z?$/;
    if(reFM.test(token))
    {
        var myArray = reFM.exec(token);
        add_output("Desde "+myArray[1]+":"+myArray[2]+" UTC, ");
        return;
    }
    var reTL = /^TL(\d{2})(\d{2})Z?$/;
    if(reTL.test(token))
    {
        var myArray = reTL.exec(token);
        add_output("hasta "+myArray[1]+":"+myArray[2]+" UTC, ");
        return;
    }
    var reAT = /^AT(\d{2})(\d{2})Z?$/;
    if(reAT.test(token))
    {
        var myArray = reAT.exec(token);
        add_output("a "+myArray[1]+":"+myArray[2]+" UTC, ");
        retur
    }


    // busca el estado de la pista
    var reRSG = /^(\d\d)(\d|C|\/)(\d|L|\/)(\d\d|RD|\/)(\d\d)$/;
    if(reRSG.test(token))
    {
        var myArray = reRSG.exec(token);
        add_output("Estado de las pistas:\n");

        // busca la pista
        var r = parseInt(myArray[1],10);
        if(r < 50) add_output("Pista " + myArray[1] + " ( "+myArray[1]+" L): ");
        else if(r < 88)
		{
							if ((r-50)>=10)
							{
								add_output("Pista" + (r-50) +" ( "+(r-50) +" R): " );
							}
							else
							{
								add_output("Pista 0"+(r-50)+" ( 0"+(r-50) +" R): ");
							}
						
						
		}
        else if(r == 88) add_output("Todas las pistas: ");

        // busa los fenomenos
        if(token.substr(2,4)=="CLRD") add_output("limpia, ");
        else
        {
          // estado de la pista
          if(myArray[2]=="0") add_output("limpia y seca, ");
          else if(myArray[2]=="1") add_output("humeda, ");
          else if(myArray[2]=="2") add_output("mojada con charcos de agua, ");
          else if(myArray[2]=="3") add_output("cubierta por cencellada o escarcha, ");
          else if(myArray[2]=="4") add_output("nieve seca, ");
          else if(myArray[2]=="5") add_output("nieve mojada, ");
          else if(myArray[2]=="6") add_output("nieve fundente, ");
          else if(myArray[2]=="7") add_output("hielo, ");
          else if(myArray[2]=="8") add_output("nieve compacta o apisionada, ");
          else if(myArray[2]=="9") add_output("surcos o crestas heladas, ");
          else if(myArray[2]=="/") add_output("suciedad no reportada, ");

          // busca info de contaminación de pista
          if(myArray[3]=="1") add_output("contaminación 10% o menos, ");
          else if(myArray[3]=="2") add_output("contaminación 11% a 25%, ");
          else if(myArray[3]=="5") add_output("contaminación 26% a 50%, ");
          else if(myArray[3]=="9") add_output("contaminación 51% a 100%, ");
          else if(myArray[3]=="/") add_output("contaminación no reporteda, ");

          // busca info de los depositos de suciedad
          if(myArray[4]=="//") add_output("profundidad de depositos no reportada, ");
          else
          {
              var d = parseInt(myArray[4],10);
              if(d == 0) add_output("depositos de menos de 1mm, ");
              else if ((d >  0) && (d < 91)) add_output("depositos de "+d+" mm , ");
              else if (d == 92) add_output("depositos de 10 mm,  ");
              else if (d == 93) add_output("depositos de 15 mm,  ");
              else if (d == 94) add_output("depositos de 20 mm, ");
              else if (d == 95) add_output("depositos de 25 mm, ");
              else if (d == 96) add_output("depositos de 30 mm, ");
              else if (d == 97) add_output("depositos de 35 mm, ");
              else if (d == 98) add_output("depositos de 40 mm o más, ");
              else if (d == 99) add_output("La pista(s) no esta operativa debido a nieve hielo accion de frenada muy mala, depositos no reportados, ");
          }
        }

        // busca el efecto de frenado
        if(myArray[5]=="//") add_output("efecto de frenado no reportado");
        else
        {
            var b = parseInt(myArray[5],10);
            if(b<91) add_output("coeficiente de friccion 0."+myArray[5]);
            else
            {
                 if(b == 91) add_output("efecto de frenado malo");
                 else if(b == 92) add_output("efecto de frenado medio/malo");
                 else if(b == 93) add_output("efecto de frenado medio");
                 else if(b == 94) add_output("efecto de frenado medio/bueno");
                 else if(b == 95) add_output("efecto de frenado bueno");
                 else if(b == 99) add_output("efecto de frenado no confiable");
            }
        }
        add_output("\n"); return;
    } 

    if(token=="SNOCLO")
    {
        add_output("Aerodromo cerrado por nieve en pistas\n");
        return;
    }

    // temperatura nivel de mal
    reSea = /^W(M)?(\d\d)\/S(\d)/;
    if(reSea.test(token))
    {
        var myArray = reSea.exec(token);
        add_output("Temperatura a nivel de mar: ");
        if(myArray[1]=="M")
            add_output("-");
        add_output(parseInt(myArray[2],10) + " grados\n");

        add_output("Nivel olas: ");
        if(myArray[3]=="0") add_output("0 m (calma)\n");
        else if(myArray[3]=="1") add_output("0-0,1 m\n");
        else if(myArray[3]=="2") add_output("0,1-0,5 m\n");
        else if(myArray[3]=="3") add_output("0,5-1,25 m\n");
        else if(myArray[3]=="4") add_output("1,25-2,5 m\n");
        else if(myArray[3]=="5") add_output("2,5-4 m\n");
        else if(myArray[3]=="6") add_output("4-6 m\n");
        else if(myArray[3]=="7") add_output("6-9 m\n");
        else if(myArray[3]=="8") add_output("9-14 m\n");
        else if(myArray[3]=="9") add_output("más de 14 m \n");
        return;
    }
}

function metar_decode(text)
{
    //document.encoded.decreport.value = "";
	metar_dec = '';
    
    var newlineJoined = text.replace(/\n/, " ");

    // si tiene = es un fin de reporte
    var equalPosition = newlineJoined.indexOf("=");
    if (equalPosition > -1)
    {
        alert("El fin del metar es indicado por'=' solo se descodificara hasta el primer '='");
        newlineJoined = newlineJoined.substr(0,equalPosition);
    }
    
    var arrayOfTokens;
    arrayOfTokens = newlineJoined.split(" ");
    var numToken = 0;

    // busca el dato de que no hay metar
    var reDate = /^\d\d\d\d\/\d\d\/\d\d/;
    if (reDate.test(arrayOfTokens[numToken]))
        numToken++;

    // busca si no hay metar
    var reTime = /^\d\d:\d\d/;
    if (reTime.test(arrayOfTokens[numToken]))
        numToken++;

    // mira si es un SPECI
    if(arrayOfTokens[numToken] == "METAR")
        numToken++;
    else if(arrayOfTokens[numToken] == "SPECI")
    {
        add_output("El reporte es un SPECI \n");
        numToken++;
    }

    // Parse location token
    if (arrayOfTokens[numToken].length == 4)
    {
        add_output("Situacion: " + arrayOfTokens[numToken] + "\n");
        numToken++;
    }
    else
    {
        add_output("Reporte invalido: codigo de localizacion incorrecto '" + arrayOfTokens[numToken] + "' \n-- debe tener 4 caracteres de largo!");
        return;
    }


    if ( (
           ( (arrayOfTokens[numToken].length == 7) &&
             (arrayOfTokens[numToken].charAt(6) == 'Z') ) ||
           ( arrayOfTokens[numToken].length == 6 )
         ) &&
         is_num_digit(arrayOfTokens[numToken].charAt(0)) &&
         is_num_digit(arrayOfTokens[numToken].charAt(1)) &&
         is_num_digit(arrayOfTokens[numToken].charAt(2)) &&
         is_num_digit(arrayOfTokens[numToken].charAt(3)) &&
         is_num_digit(arrayOfTokens[numToken].charAt(4)) &&
         is_num_digit(arrayOfTokens[numToken].charAt(5))    )
    {
        add_output("Dia: " + arrayOfTokens[numToken].substr(0,2) + "\n");
        add_output("Hora: " + arrayOfTokens[numToken].substr(2,2) +":" +
                              arrayOfTokens[numToken].substr(4,2) + " UTC");

        if(arrayOfTokens[numToken].length == 6)
            add_output(" (Hpra especificada no compilada!)");

        add_output("\n");
        numToken++;
    }
    else
    {
        add_output("tiempo en formato incorrecto!");
        return;
    }
    

    // Check if "AUTO" or "COR" token comes next.
    if (arrayOfTokens[numToken] == "AUTO")
    {
        add_output("El reporte meteorlogico es automatico, no ha sido creado por el servicio meteorologico del aerodromo\n");
        numToken++;
    }
    else if (arrayOfTokens[numToken] == "COR")
    {
        add_output("El reporte es una correccion de un METAR o SPECI\n");
        numToken++;
    }
	
	else if (arrayOfTokens[numToken] == "NIL")
    {
        add_output("No hay informacion meteorologica disponible\n");
        numToken++;
    }

    // busca mas token
    for (var i=numToken; i<arrayOfTokens.length; i++)
    {
        if(arrayOfTokens[i].length > 0)
        {
            decode_token(arrayOfTokens[i].toUpperCase());
        }
        else
        {
            //add_output("Proximo token 0 caracteres\n");
            add_output("\n");
        }
    }
}
function add_output(text)
{
    //document.encoded.decreport.value = document.encoded.decreport.value + text;
	metar_dec += text;
}





