function CheckBody()
{
	var sBody = document.getElementById('Body').value;
    if ( sBody == "" )  // for IExplorer 7
        sBody = document.getElementById('Body').options[ document.getElementById('Body').selectedIndex ].text;

	// TODO: use ajax to check it the body is Moon or Aries so it is language independent.
	document.getElementById('CalcHeightButton').disabled = sBody == "Luna" || sBody == "Aries";
	document.getElementById('CalcDecButton').disabled = sBody == "Luna" || sBody == "Aries";	
}

function CalcAll()
{
	document.getElementById('HeighResultPane').style.display = 'none';
	document.getElementById('HLResultPane').style.display = 'none';	
	document.getElementById('DecResultPane').style.display = 'none';	
	DoCalcAll();
	document.getElementById('ResultsPane').style.display = 'block';	    
}

function CalcHL()
{
	document.getElementById('HeighResultPane').style.display = 'none';
	document.getElementById('HLResultPane').style.display = 'none';	
	document.getElementById('DecResultPane').style.display = 'none';	
	DoCalcHL();
	document.getElementById('ResultsPane').style.display = 'block';	        
}

function CalcDec()
{
	document.getElementById('HeighResultPane').style.display = 'none';
	document.getElementById('HLResultPane').style.display = 'none';	
	document.getElementById('DecResultPane').style.display = 'none';	
	DoCalcDec();
	document.getElementById('ResultsPane').style.display = 'block';	        
}

function CalcAv()
{
	document.getElementById('HeighResultPane').style.display = 'none';
	document.getElementById('HLResultPane').style.display = 'none';	
	document.getElementById('DecResultPane').style.display = 'none';	
	DoCalcAv();
	document.getElementById('ResultsPane').style.display = 'block';	        
}


function DoCalcAll()
{
	document.getElementById('HeighResultPane').style.display = 'none';
	document.getElementById('HLResultPane').style.display = 'none';	
	document.getElementById('DecResultPane').style.display = 'none';	
	
	if( document.getElementById('CalcHeightButton').disabled == false )
		DoCalcAv();
	if( document.getElementById('CalcDecButton').disabled == false )
		DoCalcDec();	
	if( document.getElementById('CalcHLButton').disabled == false )
		DoCalcHL();
}


function DoCalcHL()
{
	var xmlHttp = GetHttpRequest();
    if( !xmlHttp )
        return;

    xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4) 
		{
            //alert( xmlHttp.responseText );
            var results = eval('(' + xmlHttp.responseText + ')');

            // check errors
            if ( results[ "CDif" ][ "status"] < 0 ) 
            {
				if( results[ "CDif" ][ "status"] == -2 )
					alert( "No se puede calcular el horario este astro." );
				else
                	alert( "Error calculando correccion en tabla de minutos y segundos (Dif)." );
                return;
            }			
            if ( results[ "CMS" ][ "status"] < 0 ) 
            {
				if( results[ "CMS" ][ "status"] == -2 )
					alert( "No se puede calcular el horario para este astro." );
				else
                	alert( "Error calculando correccion en tabla de minutos y segundos." );
                return;
            }			
            if ( results[ "HgBase" ][ "status"] < 0 ) 
            {
				if( results[ "HgBase" ][ "status"] == -2 )
					alert( "No se puede calcular el horario para este astro." );
				else
                	alert( "Error calculando la declinacion para la fecha y hora indicadas." );
                return;
            }			
            if ( results[ "HgResult" ][ "status" ] < 0 ) 
            {
				if( results[ "HgResult" ][ "status"] == -2 )
					alert( "No se puede calcular el horario para este astro." );
				else
                	alert( "Error calculando la declinacion corregida para la fecha y hora indicadas." );
                return;
            }			
            if ( results[ "AS" ][ "status" ] < 0 ) 
            {
				if( results[ "AS" ][ "status"] == -2 )
					alert( "No se puede calcular el horario para este astro." );
				else
                	alert( "Error calculando el angulo sidereo." );
                return;
            }			
			
            // Calc
            var startPoint = new DMSPoint();
            var longSigned = new LongLat();                
            
            var hgBase = new LongLat();    
            var hgcResult = new LongLat();
            var hgResult = new LongLat();            
            var hgCMS = new LongLat();
            
            // for stars: sidereal angle and final horarie
            var AS = new LongLat();            
            var hgResultStar = new LongLat();
            
            GetData( startPoint.longitude, 'DegLon', 'MinLon', 'SecLon', 'SideLonW' );
            SetDMS( GetDegrees( startPoint.longitude ), longSigned );            
            
            SetDMS( results[ "HgBase" ][ "value" ], hgBase );    
            SetDMS( results[ "HgResult" ][ "value" ], hgcResult );                
            SetDMS( results[ "CMS" ][ "value" ], hgCMS );                            
             
            SetDMS(Ang360(GetDegrees(startPoint.longitude) + GetDegrees(hgcResult)), hgResult);
            
            if (results["AS"]["status"] == 1) 
            {
                SetDMS(results["AS"]["value"], AS);
                SetDMS(Ang360(GetDegrees(hgResult)+ GetDegrees(AS)), hgResultStar);                
            }
                        
            
	        // show results
            if ( results[ "Hour" ][ "status" ] == 1 ) 
                document.getElementById('ResultHgBaseTime').innerHTML = "(" + iHour + "h)&nbsp;";
            else
                document.getElementById('ResultHgBaseTime').innerHTML = "";            

            if (results["CDif"]["status"] == 1) 
            {
                document.getElementById('HgNote1').style.display = 'block';
                document.getElementById('ResultHgDifValue').innerHTML = results[ "Dif" ][ "value" ];   
                document.getElementById('HgNote1Mark').innerHTML = "(*)&nbsp;"
            }
            else 
            {
                document.getElementById('HgNote1').style.display = 'none';
                document.getElementById('HgNote1Mark').innerHTML = ""                
            }
                
            
            document.getElementById('ResultHgBase').innerHTML = GetDMString( hgBase );
            if( results[ "CDif" ][ "status" ] == 0 )
                document.getElementById('ResultHgCDif').innerHTML = "N/A";            
            else            
                document.getElementById('ResultHgCDif').innerHTML = results[ "CDif" ][ "value" ] + "'";            
            document.getElementById('ResultHgCms').innerHTML = GetDMString( hgCMS );            
            document.getElementById('ResultHgC').innerHTML = GetDMString( hgcResult );

            document.getElementById('ResultHgLong').innerHTML = GetDMString( longSigned );
            
            if (results["AS"]["status"] == 1) 
            {
                // For a star we must add the sidereal angle, the horarie of Aries and the final result
                document.getElementById('ResultHgAries').innerHTML = GetDMString(hgResult);
                document.getElementById('HLResultPaneAS').style.display = 'block';
                document.getElementById('ResultAS').innerHTML = GetDMString(AS);
                document.getElementById('ResultHgStar').innerHTML = GetDMString(hgResultStar);
                document.getElementById('Step6Hg').style.display = 'none';
                document.getElementById('Step6HgAries').style.display = 'block';
                
                document.getElementById('ResultNameAries1').innerHTML = "Aries"; 
                document.getElementById('ResultNameAries2').innerHTML = "Aries";                 
            }
            else 
            {
                // For a  non-star body we must hide the Aries part
                document.getElementById('ResultHg').innerHTML = GetDMString( hgResult );            
                document.getElementById('HLResultPaneAS').style.display = 'none';
                document.getElementById('Step6Hg').style.display = 'block';
                document.getElementById('Step6HgAries').style.display = 'none';                                
                document.getElementById('ResultNameAries1').innerHTML = "Astro"; 
                document.getElementById('ResultNameAries2').innerHTML = "Astro";                 
            }

        	document.getElementById('HLResultPane').style.display = 'block';	                        
            

        }
    }
    
    var iDay = parseInt( document.getElementById('Day').value ) ;
    if( isNaN(iDay) )
        iDay = 0;
    var iHour = parseInt( document.getElementById('Hours').value ) ;
    if( isNaN(iHour) )
        iHour = 0;
    var iMin = parseInt( document.getElementById('Minutes').value ) ;
    if( isNaN(iMin) )
        iMin = 0;
    var iSec = parseInt( document.getElementById('Seconds').value ) ;
    if( isNaN(iSec) )
        iSec = 0;
    var iMonth = parseFloat( document.getElementById('Month').selectedIndex ) + 1;
    var sBody = document.getElementById('Body').value;
    if ( sBody == "" )  // for IExplorer 7
        sBody = document.getElementById('Body').options[ document.getElementById('Body').selectedIndex ].text;
    var sYear = document.getElementById('Year').value;
    if ( sYear == "" )  // for IExplorer 7
        sYear = document.getElementById('Year').options[ document.getElementById('Year').selectedIndex ].text;

    var url = window.location.href.substr( 0, window.location.href.lastIndexOf('/') ) + "/php/calc/horarie.php";
    url = url + "?body=" + sBody +
                "&day=" + iDay + "&month=" + iMonth + "&year=" + sYear +
                "&h=" + iHour + "&m=" + iMin + "&s=" + iSec;
                
    //alert( url);
    xmlHttp.open("GET", url,true);
    xmlHttp.send(null);    
}

function DoCalcDec()
{
	var xmlHttp = GetHttpRequest();
    if( !xmlHttp )
        return;

    xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4) 
		{
            //alert( xmlHttp.responseText );
            var results = eval('(' + xmlHttp.responseText + ')');
			
            // check errors
            if ( results[ "C" ][ "status"] < 0 ) 
            {
				if( results[ "C" ][ "status"] == -2 )
					alert( "No se puede calcular la declinacion para este astro." );
				else
                	alert( "Error calculando correccion en tabla de minutos y segundos (Dif)." );
                return;
            }			
            if ( results[ "DecBase" ][ "status"] < 0 ) 
            {
				if( results[ "DecBase" ][ "status"] == -2 )
					alert( "No se puede calcular la declinacion para este astro." );
				else
                	alert( "Error calculando la declinacion para la fecha y hora indicadas." );
                return;
            }			
            if ( results[ "DecResult" ][ "status" ] < 0 ) 
            {
				if( results[ "DecResult" ][ "status"] == -2 )
					alert( "No se puede calcular la declinacion para este astro." );
				else
                	alert( "Error calculando la declinacion corregida para la fecha y hora indicadas." );
                return;
            }			
			
            // Calc
            var decBase = new LongLat();    
            var decResult = new LongLat();
            SetDMS( results[ "DecBase" ][ "value" ], decBase );    
            SetDMS( results[ "DecResult" ][ "value" ], decResult );                
             
            
	        // show results
            if ( results[ "Hour" ][ "status" ] == 1 ) 
                document.getElementById('ResultDecBaseTime').innerHTML = "(" + iHour + "h)&nbsp;";
            else
                document.getElementById('ResultDecBaseTime').innerHTML = "";            

            if (results["Dif"]["status"] == 1) 
            {
                document.getElementById('DecNote1').style.display = 'block';
                document.getElementById('ResultDecDifValue').innerHTML = results[ "Dif" ][ "value" ];   
                document.getElementById('DecNote1Mark').innerHTML = "(*)&nbsp;"
            }
            else 
            {
                document.getElementById('DecNote1').style.display = 'none';
                document.getElementById('DecNote1Mark').innerHTML = ""                
            }
                
            
            document.getElementById('ResultDecBase').innerHTML = GetDMString( decBase );
            if( results[ "C" ][ "status" ] == 0 )
                document.getElementById('ResultDecCDif').innerHTML = "N/A";            
            else            
                document.getElementById('ResultDecCDif').innerHTML = results[ "C" ][ "value" ] + "'";            
            document.getElementById('ResultDec').innerHTML = GetDMString( decResult );
                        
                        
            document.getElementById('DecResultPane').style.display = 'block';
        }
    }
    
    var iDay = parseInt( document.getElementById('Day').value ) ;
    if( isNaN(iDay) )
        iDay = 0;
    var iHour = parseInt( document.getElementById('Hours').value ) ;
    if( isNaN(iHour) )
        iHour = 0;
    var iMin = parseInt( document.getElementById('Minutes').value ) ;
    if( isNaN(iMin) )
        iMin = 0;
    var iSec = parseInt( document.getElementById('Seconds').value ) ;
    if( isNaN(iSec) )
        iSec = 0;
    var iMonth = parseFloat( document.getElementById('Month').selectedIndex ) + 1;
    var sBody = document.getElementById('Body').value;
    if ( sBody == "" )  // for IExplorer 7
        sBody = document.getElementById('Body').options[ document.getElementById('Body').selectedIndex ].text;
    var sYear = document.getElementById('Year').value;
    if ( sYear == "" )  // for IExplorer 7
        sYear = document.getElementById('Year').options[ document.getElementById('Year').selectedIndex ].text;

    var url = window.location.href.substr( 0, window.location.href.lastIndexOf('/') ) + "/php/calc/declination.php";
    url = url + "?body=" + sBody +
                "&day=" + iDay + "&month=" + iMonth + "&year=" + sYear +
                "&h=" + iHour + "&m=" + iMin + "&s=" + iSec;
                

    //alert( url);
    xmlHttp.open("GET", url,true);
    xmlHttp.send(null);    
    
}

function DoCalcAv()
{
    var xmlHttp = GetHttpRequest();
    if( !xmlHttp )
        return;

    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4)
        {
            //alert( xmlHttp.responseText );
            var results = eval('(' + xmlHttp.responseText + ')');

            // check errors
            if ( results[ "A" ][ "status"] < 0 ) 
            {
                if( results[ "A" ][ "status"] == -2 )
                    alert( "No se puede calcular la altura para este astro." );
                else
                    alert( "Error calculando correccion en tabla A." );
                return;
            }
            if ( results[ "B1" ][ "status" ] < 0 ) 
            {
                alert( "Error calculando correccion en tabla B (Refr.-Paralaje)." );
                return;
            }
            if ( results[ "B2" ][ "status" ] < 0 ) 
            {
                alert( "Error calculando correccion en tabla B (Fecha)." );
                return;
            }
            if ( results[ "C1" ][ "status" ] < 0 ) 
            {
                alert( "Error calculando correccion en tabla C (Refracción)." );
                return;
            }
            if ( results[ "C2" ][ "status" ] < 0 ) 
            {
                alert( "Error calculando correccion en tabla C (Paralaje)." );
                return;
            }

            // calculate partial results
            var a = new LongLat();    
            var ao = new LongLat();    
            var aap = new LongLat();                
            var av = new LongLat();  
            
            GetData( a, "DegAi", "MinAi", "", "" );
            SetDMS( GetDegrees( a ) + parseFloat( document.getElementById('MinEi').value ) / 60, ao );        
            SetDMS( GetDegrees( ao ) + parseFloat( results[ "A" ][ "value"] ) / 60, aap );                    
            SetDMS( GetDegrees( aap ) + ( parseFloat( results[ "B1" ][ "value"] ) + 
                                          parseFloat( results[ "B2" ][ "value"] )+
                                          parseFloat( results[ "C1" ][ "value"] )+ 
                                          parseFloat( results[ "C2" ][ "value"] ) ) / 60, av );                                
            // disable unused values
            if ( results[ "B1" ][ "status" ] == 0 ) 
                document.getElementById('Step6Sun').style.display = 'none';
            else
                document.getElementById('Step6Sun').style.display = 'block';
            if ( results[ "C1" ][ "status" ] == 0 ) 
                document.getElementById('Step7Planet').style.display = 'none';
            else
                document.getElementById('Step7Planet').style.display = 'block';            
            
            // show results
            document.getElementById('ResultAi').innerHTML = document.getElementById('DegAi').value + "&deg;" + document.getElementById('MinAi').value + "'";
            document.getElementById('ResultEi').innerHTML = document.getElementById('MinEi').value + "'";
            document.getElementById('ResultAo').innerHTML = GetDMString( ao ); 
            document.getElementById('ResultCorrA').innerHTML = results[ "A" ][ "value"] + "'";             
            document.getElementById('ResultAap').innerHTML = GetDMString( aap );             
            document.getElementById('ResultCorrB1').innerHTML = results[ "B1" ][ "value"] + "'";             
            document.getElementById('ResultCorrB2').innerHTML = results[ "B2" ][ "value"] + "'";             
            document.getElementById('ResultCorrC1').innerHTML = results[ "C1" ][ "value"] + "'"; 
            if( results[ "C2" ][ "status" ] == 0 )
                document.getElementById('ResultCorrC2').innerHTML = "N/A";                         
            else            
                document.getElementById('ResultCorrC2').innerHTML = results[ "C2" ][ "value"] + "'";             
            document.getElementById('ResultAv').innerHTML = GetDMString( av );             
            //alert( xmlHttp.responseText );
            //   var results = eval(  xmlHttp.responseText );
            
            document.getElementById('HeighResultPane').style.display = 'block';
        }
    }
    
    var aDeg = parseFloat( document.getElementById('DegAi').value );
    var aMin = parseFloat( document.getElementById('MinAi').value ) 
    var eiMin = parseFloat( document.getElementById('MinEi').value );
    var iMonth = parseFloat( document.getElementById('Month').selectedIndex ) + 1;

    aMin = aMin + eiMin;
    if ( aMin < 0 ) 
    {
        aMin = aMin + 60;
        aDeg = aDeg - 1;
    }

    var sBody = document.getElementById('Body').value;
    if ( sBody == "" )  // for IExplorer 7
        sBody = document.getElementById('Body').options[ document.getElementById('Body').selectedIndex ].text;
    var sYear = document.getElementById('Year').value;
    if ( sYear == "" )  // for IExplorer 7
        sYear = document.getElementById('Year').options[ document.getElementById('Year').selectedIndex ].text;

    var url = window.location.href.substr( 0, window.location.href.lastIndexOf('/') ) + "/php/calc/height.php";
    url = url + "?eo=" + document.getElementById('Eo').value + "&ei=" + document.getElementById('MinEi').value +
                "&aiMin=" + aMin + "&aiDeg=" + aDeg +
                "&body=" + sBody +
                "&day=" + document.getElementById('Day').value + "&month=" + iMonth + "&year=" + sYear;
                

    //alert( url);
    xmlHttp.open("GET", url,true);
    xmlHttp.send(null);

    
}

