﻿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 getActiveBeams(markers) {
    var ret = [];
    for(var i=0; i<markers.length; i++) {
        var marker = markers[i];
        if (marker.inReport == true ) {
            for(var key in marker.beams) {
                ret[key] = true;
            }
        }
    }

    return ret;
}

function finnBeamElev(markers)
{
    var beams = document.getElementsByName("beamPosisjon");
    var beamsPosTabell = document.getElementById(dlBeamPosId);
    var lat = document.getElementById(tdBreddeId).value;
    var lng = document.getElementById(tdLengdeId).value;
    var activeBeams = getActiveBeams(markers);
    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 row = beamsPosTabell.tBodies[0].rows[i];
        if (activeBeams[row.cells[1].innerHTML] != true) {
            row.style.display = "none";
            beamsPosTabell.tBodies[0].rows[i].style.display = "none";
            continue;
        }
        var elevAl = SatAzElev(beams[i].value, 0, lat, lng);        
        var al = elevAl.al;
        var el = elevAl.elev;
        row.cells[3].innerHTML = Math.round(al) + "°";
        row.cells[2].innerHTML = Math.round(el) + "°";
        row.cells[3].style.textAlign = "right";
        row.cells[2].style.textAlign = "right";
        if (row.cells[3].innerHTML.indexOf("NaN") >= 0 || beamsPosTabell.tBodies[0].rows[i].cells[2].innerHTML.indexOf("NaN") >= 0)
        {
            row.style.display = "none";    
        }
        else
        {
            row.style.display = "";
        }
        
        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 = "";
        }
    }
}

