﻿var debug = false;
var visFunksjonsKall = false;

function erDefinert(variabel)
{
    return(typeof(window[variabel]) == "undefined")? false:true;
}

function erObjekt(variabel)
{
    return(typeof(window[variabel]) == "object")? false:true;
}

function SatAzElev(Pos, Inc, Lat, Lng) 
{    
    if(visFunksjonsKall) alert("SatAzElev()");
    try{
        var dlng, alpha, pi, El, Az;
        
        pi = 4 * Math.atan(1);
        Pos = (Pos * pi) / 180;
        Inc = (Inc * pi) / 180;
        Lat = (Lat * pi) / 180;
        Lng = (Lng * pi) / 180;
        dlng = Pos - Lng;        
        alpha = ArcCos(Math.sin(Lat) * Math.sin(Inc) + Math.cos(Lat) * Math.cos(Inc) * Math.cos(dlng));
        El = Math.atan((Math.cos(alpha) - 0.15126) / (Math.sin(alpha) + 1.0E-307));
        Az = pi - (pi / 2 - Math.atan((Math.sin(Lat) * Math.cos(dlng) - Math.tan(Inc) * Math.cos(Lat)) / Math.sin(dlng)));
        if(dlng < 0){
            Az = Az + pi;
        }

        Az = Az * 180 / pi;
        El = El * 180 / pi;
        
        return {elev:El,al:Az}
    }
    catch(err)
    {
        if(debug)alert("SatAzElec() feilet. " + err);
        return null;
    }  
    
}

function ArcCos(x)
{
    var ArcCos = Math.atan(-x / Math.sqrt(-x * x + 1)) + 2 * Math.atan(1);
    return ArcCos;
}

function DegreesToLatLng(latLng, lat)
{
    var grader = latLng.substring(0, latLng.indexOf("°"))
    var min = latLng.substring(latLng.indexOf("°") + 1, latLng.indexOf("'"))
    var sekunder = latLng.substring(latLng.indexOf("'") + 1, latLng.indexOf("''"))
    grader = parseFloat(grader) + (parseFloat(min)/60);
    grader = parseFloat(grader) + (parseFloat(sekunder)/3600);
    
    if(lat && latLng.indexOf("S") > 0)
    {
        grader = -grader;
    }
    else if(!lat && latLng.indexOf("W") > 0)
    {
        grader = -grader
    }        
    return grader;
}

function removeChildren(element)
{
    var i = 2;
    while(element.childNodes.length > 2)
    {   
        element.removeChild(element.childNodes[i]);
        i++;
    }
}

function finnBeamElev()
{
    var beams = document.getElementsByName("beamPosisjon");
    var beamsPosTabell = document.getElementById(dlBeamPosId);
    var lat = document.getElementById(tdBreddeId).value;
    var lng = document.getElementById(tdLengdeId).value;
    
    lat = DegreesToLatLng(lat,true);
    lng = DegreesToLatLng(lng, false);
    
    var utgangsPunkt = KARTLISTE.hentKart(kartId)._utgangsPunkt._marker.getPoint();
    for(var i = 0; i < beams.length; i++)
    {
        var elevAl = SatAzElev(beams[i].value, 0, lat, lng);        
        var al = elevAl.al;
        var el = elevAl.elev;   
        beamsPosTabell.tBodies[0].rows[i].cells[3].innerHTML = Math.round(al) + "°";
        beamsPosTabell.tBodies[0].rows[i].cells[2].innerHTML = Math.round(el) + "°";
        beamsPosTabell.tBodies[0].rows[i].cells[3].style.textAlign = "right";
        beamsPosTabell.tBodies[0].rows[i].cells[2].style.textAlign = "right";
        if(beamsPosTabell.tBodies[0].rows[i].cells[3].innerHTML.indexOf("NaN") >= 0 || beamsPosTabell.tBodies[0].rows[i].cells[2].innerHTML.indexOf("NaN") >= 0)
        {
            beamsPosTabell.tBodies[0].rows[i].style.display = "none";    
        }
        else
        {
            beamsPosTabell.tBodies[0].rows[i].style.display = "";
        }
    }
    
    for(var i = 0; i < beams.length; i++)
    {
        var html = beamsPosTabell.tBodies[0].rows[i].cells[3].innerHTML;
        if(html.substring(0,1) == "-")
        {
           beamsPosTabell.tBodies[0].rows[i].style.display = "none"; 
        }
        else if(beamsPosTabell.tBodies[0].rows[i].cells[3].innerHTML.indexOf("NaN") < 0)
        {
            beamsPosTabell.tBodies[0].rows[i].style.display = ""; 
        }
        html = beamsPosTabell.tBodies[0].rows[i].cells[2].innerHTML;
        if(parseInt(html.substring(0, html.indexOf("°"))) < 0)
        {
            beamsPosTabell.tBodies[0].rows[i].style.display = "none";
        }
        else if(beamsPosTabell.tBodies[0].rows[i].cells[2].innerHTML.indexOf("NaN") < 0)
        {
            beamsPosTabell.tBodies[0].rows[i].style.display = "";
        }
    }
}

