﻿/**** Utgangspunkt ***/
function UtgangsPunkt(kartId, ikonUrl)
{
    if(visFunksjonsKall)
    {    
        alert('Oppretter utgangspunkt...');
    }
    //Egenskaper
    this._marker = new GMarker(new GPoint(0,0), {draggable:true});
    this._kartId = kartId;
    GEvent.addListener(this._marker, "drag",function(){drag(kartId);});
    this._sirkel = new KartSirkel(kartId, this._marker, ikonUrl);                         
    
}

function drag(id)
{
    var kart = KARTLISTE.hentKart(id);
    kart._rapportRedigering.oppdaterTekstBokser(kart._utgangsPunkt._marker.getPoint()); 
    kart._rapport.oppdaterRapport(kart._kartPunkter, kart.finnSkala(), kart._rapportRedigering.radius(),kart._utgangsPunkt);
}

UtgangsPunkt.prototype.oppdaterPunkt = function(point)
{
    var kartId = this._kartId;
    var kart = KARTLISTE.hentKart(kartId);

    if(this._marker != null) kart._map.removeOverlay(this._marker);
    
    this._marker = new GMarker(point, {draggable:true});
    kart._map.addOverlay(this._marker);
//    
    GEvent.addListener(this._marker, "drag",function(){var kart = KARTLISTE.hentKart(kartId);kart.oppdaterHiddenTekstBokser();kart._utgangsPunkt._sirkel.oppdaterDiameter(kart._utgangsPunkt);kart._rapportRedigering.oppdaterTekstBokser(kart._utgangsPunkt._marker.getPoint());kart._rapport.oppdaterRapport(kart._kartPunkter,kart.finnSkala(),kart._rapportRedigering.radius(),kart._utgangsPunkt);});    
}

/**** KartSirkel ***/
function KartSirkel(kartId,marker,ikonUrl)
{
    if(visFunksjonsKall) alert('Oppretter kartsirkel...');
    
    //Egenskaper                    
    this._ikon = new GIcon();
    
    if(ikonUrl != null){
        this._ikon.image = ikonUrl; 
    }
    else{                    
        this._ikon.image = infolinkUrl + "/Images/KartIkoner/sirkel.png";
    }
    this._marker = marker;
    this._kartId = kartId;
}

//Metoder
KartSirkel.prototype.finnDiameter = function()
{
    if(visFunksjonsKall) alert('finnDiameter()');
    try{
        var kart = KARTLISTE.hentKart(this._kartId);        
        if(kart._rapportRedigering != null)
        {                   
            if(!isNaN(kart._rapportRedigering.radius())){
                var punkt = kart._utgangsPunkt._marker.getPoint();                
                var radius = kart._rapportRedigering.radius();
                var antGrader = parseFloat(radius) / 111; //Antar at en breddegrad er lik 111 km
                var nyBreddeGrad = punkt.y + antGrader;
                
                if (nyBreddeGrad > 70) nyBreddeGrad = punkt.y - antGrader;
                
                var tmpPunkt = new GLatLng(nyBreddeGrad, punkt.x);
                var utgangsPunktPixel = kart._map.fromLatLngToDivPixel(punkt);
                var tmpPunktPixel = kart._map.fromLatLngToDivPixel(tmpPunkt);
                                            
                var sirkelRadius = parseFloat(tmpPunktPixel.y - utgangsPunktPixel.y);
                if(sirkelRadius < 0) sirkelRadius *= -1;
                var diameter = sirkelRadius * 2;
                return diameter;
            }
        }  
    }
    catch(err)
    {
        if(debug)alert("finnDiameter feilet. " + err);
        return 0;
        
    }
}                           


KartSirkel.prototype.oppdaterDiameter = function(utgangsPunkt)
{           
    if(visFunksjonsKall)alert('oppdaterDiameter()');
    try{    
        var kart =  KARTLISTE.hentKart(this._kartId);
        if(utgangsPunkt._marker != null && utgangsPunkt._sirkel._marker != null && utgangsPunkt != null && kart._rapportRedigering.radius() != "")
        {
            var diameter = this.finnDiameter(); 

//            if(utgangsPunkt._sirkel._marker != null)
//            {
               kart._map.removeOverlay(utgangsPunkt._sirkel._marker);                                                
//            }
            
            utgangsPunkt._sirkel._marker  = new GMarker(kart._utgangsPunkt._marker.getPoint(), kart._utgangsPunkt._sirkel._ikon);                                                                                   
            utgangsPunkt._sirkel._ikon.iconSize = new GSize(diameter,diameter);
            utgangsPunkt._sirkel._ikon.iconAnchor = new GPoint(diameter/2,diameter/2);                            
            
            kart._map.addOverlay(utgangsPunkt._sirkel._marker);
        }
    }
    catch(err)
    {
        if(debug)alert("oppdaterDiameter feilet. " + err);
        return false;
    }
} 
