//Copyright 2008 EarthNC, Inc www.earthnc.com

//initialize clock for load timer
var earthnc_time = new Date();
var earthnc_then = earthnc_time.getTime();
var earthncmap = null;
var rlevel = null;
var rchart = null;
var mapcontrol = null;
var tilelayers = null;   var map = null;
var rastermap; var opacity=.5;

$(document).ready(function(){
    $(".mm").mouseover(function(){
    this.style.filter = 'alpha(opacity=100)';
    this.style.opacity='1'; 
    });
    $(".mm").mouseout(function(){
    this.style.filter = 'alpha(opacity=60)';
    this.style.opacity='.6'; 
    });

    $("#menu > ul").tabs();
 
    });
    
function show(did){
document.getElementById(did).style.display='block';
}

function hide(did){
document.getElementById(did).style.display='none';
}

function earthnc_openmenu(flag){
if (flag==0){hide('menubar'); show('openmenubar');}
if (flag==1){show('menubar'); hide('openmenubar');}
}

function earthnc_help(){
show('help');
}
   
function load() {
   if (earthnc_getUrlVariable('ht')){document.getElementById('map').style.height=earthnc_getUrlVariable('ht');}
   if (earthnc_getUrlVariable('wd')){document.getElementById('map').style.width=earthnc_getUrlVariable('wd');}
   var lat= 27.808; var lon=-97.418; zoom=12; 
   if (earthnc_getUrlVariable('ll')){
   lat = earthnc_getUrlVariable('ll').split(',')[0];
   lon = earthnc_getUrlVariable('ll').split(',')[1]
   }
   if (earthnc_getUrlVariable('z')){
   zoom = earthnc_getUrlVariable('z');
   }
   if (GBrowserIsCompatible()) {     
        map = new GMap2(document.getElementById("map"));
        mapcontrol = new GMapTypeControl();
        map.addControl(mapcontrol);
        map.addControl(new GLargeMapControl());
        map.addControl(new EarthNCGEControl()); 
        map.setCenter(new GLatLng(lat, lon), parseInt(zoom)); 
        map.setMapType(G_HYBRID_MAP);
        
        /* Metal Mode */
          // set up pins, use the metalset
          var pins = new Array();
          pins["kml"] = "metalblue";
          pins["local"] = "metalred";

          var labels = new Array();
          labels["kml"] = "metalblue";
          labels["local"] = "metalred";

          // then in options pass:
          // pins : pins, labels : labels
          /**/
          var options = {
            listingTypes : GlocalSearch.TYPE_BLENDED_RESULTS,
            Xpins : pins,
            Xlabels : labels
          }
          var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20));
          map.addControl(new google.maps.LocalSearch(options),bottomRight);

        
        var ads_opts = {
          channel: 0532275439,
          maxAdsOnMap: 10
        };
        var adsManager = new GAdsManager(map, "pub-7720029083570370", ads_opts);
        adsManager.enable();

        //callback to update chart overlay as users pan map when layer is 'on'
        GEvent.addListener(map, "moveend", earthnc_chartlookup);      
      
        //check for custom content
        if (earthnc_getUrlVariable("url")){
        var url = earthnc_getUrlVariable("url");
        url = url.replace(/%26/g,"&").replace(/%3F/g,"?").replace(/%3D/g,"=").replace(/%2F/g,"/"); 
        loadUrl();
      } 
        if (earthnc_getUrlVariable("cap")){
        var cap = earthnc_getUrlVariable("cap");
        cap = cap.replace(/%26/g,"&").replace(/%3F/g,"?").replace(/%3D/g,"=").replace(/%20/g," ");
        document.getElementById("caption").innerHTML = cap;
        }
      }
    //comment next line if you do not wish to load the chart layer automatically
    earthnc_chartload();   
}
 
//function to create the 'View in Google Earth' button
function EarthNCGEControl() {}
EarthNCGEControl.prototype = new GControl();
EarthNCGEControl.prototype.initialize = function(map) {
  var container=document.createElement("div");
  var zoomInDiv=document.createElement("div");this.setButtonStyle_(zoomInDiv);
  container.appendChild(zoomInDiv);
   
  var img=document.createElement('img');
  img.setAttribute('src','http://earthnc.com/images/EarthNC_link.png');
   
   zoomInDiv.appendChild(img);
   GEvent.addDomListener(zoomInDiv,"click",function(){
   var center = map.getCenter();
   window.open('http://earthnc.info/earthnconline.php?ll='+center.lat()+','+center.lng());
   });
   
  map.getContainer().appendChild(container);return container;}

EarthNCGEControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(55, 35));
  }

EarthNCGEControl.prototype.setButtonStyle_ = function(button) {
  button.style.textDecoration = "underline";
  button.style.color = "#0000cc";
  button.style.textAlign = "center";
  button.style.width = "6em";
  button.style.cursor = "pointer";
}

//function to set proper URL to EarthNC Navaid file
function earthnc_getKMLUrl(nlat,nlon){
//base path
var URL = 'http://earthnc.com/kml/gmapsd/';

var loni = Math.floor(Math.abs(nlon));
var lond = Math.abs(nlon)-loni;
var lati = Math.floor(Math.abs(nlat));
var latd = Math.abs(nlat)-lati;

if (latd>=.75){latd=.75;} 
else if (latd<.75 && latd>=.5){latd=.5;} 
else if (latd<.5 && latd>=.25){latd=.25;} 
else if (latd<.25){latd=0;} 
if (lond>=.75){lond=0; loni+=1;} 
else if (lond<.75 && lond>=.5){lond=.75;}
else if (lond<.5 && lond>=.25){lond=.5;}
else if (lond<.25){lond=.25;}

 nlon = loni+lond;
 nlat = lati+latd;

URL = URL + nlat + '_' + nlon +'nearthncmarks.kmz';
lat = nlat;
lon = -nlon;
return URL;
}

function earthnc_chartlookup(){
  lookupraster();
  if (document.getElementById("showearthnc").checked){
    var nlat= map.getCenter().lat();
    var nlon= map.getCenter().lng();
    var zoom = map.getZoom();
    var time = new Date();
    var now = time.getTime();
    
    //test for movement magnitude and timeout
    if ((Math.abs(nlat-lat)>.5 || Math.abs(nlon-lon)>.5) && nlon<-45 && nlat>16 && zoom>=9 && (now-then)>12){
      var URL = earthnc_getKMLUrl(nlat,nlon);
      if (earthncmap != null){
      map.removeOverlay(earthncmap);
      }
      earthncmap = new GGeoXml(earthnc_getKMLUrl(nlat,nlon));
      map.addOverlay(earthncmap); 
      //reset timer
      then = now;
  }
  }
  else
  {
  map.removeOverlay(earthncmap);
  }
}

function earthnc_chartload(){
  lookupraster();
  if (document.getElementById("showearthnc").checked){
    var nlat= map.getCenter().lat();
    var nlon= map.getCenter().lng();
    var zoom = map.getZoom();
    var time = new Date();
    var now = time.getTime();
    
      var URL = earthnc_getKMLUrl(nlat,nlon);
      if (earthncmap != null){
      map.removeOverlay(earthncmap);
      }
      earthncmap = new GGeoXml(earthnc_getKMLUrl(nlat,nlon));
      map.addOverlay(earthncmap); 
      //reset timer
      then = now; 
   }
  else
  {
  map.removeOverlay(earthncmap);
  
  }
}

function earthnc_routeload(){
  if (document.getElementById("showroutemaker").checked){
  document.getElementById("routemaker").style.display="block";
   }
  else
  {
  document.getElementById("routemaker").style.display="none";
  
  }
}

function earthnc_routehide(){
document.getElementById("routemaker").style.display="none";
document.getElementById("showroutemaker").checked=false;
}
        
function earthnc_getUrlVariable(variable) {
  var url = document.location.href.split('?');
  if (url[1]){
  var vars = url[1].split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
    return pair[1];
    }
  }
  }
}

//Route Maker Functions
var line = null; 
    var COLORS = [["red", "#ff0000"], ["orange", "#ff8800"], ["green","#008000"],
              ["blue", "#000080"], ["purple", "#800080"]];
    var options = {};
    var lineCounter_ = 0;
    
    var colorIndex_ = 0;
    var featureTable_;
    
    function select(buttonId) {
    document.getElementById(buttonId).className="selected";
    }

    function stopEditing() {
    document.getElementById("line_b").className="unselected";
    }

    function getColor(named) {
      return COLORS[(colorIndex_++) % COLORS.length][named ? 0 : 1];
    }
    
    function startLine() {
      select("line_b");
      var color = getColor(false);
      if (line!=null)
      {
      var yes = confirm("Erase Current Route and Start Over?");
        if (!yes){
        document.getElementById("line_b").className="unselected";
        return;
        } else
        {clearRoute();
        document.getElementById("line_b").className="selected";
         }
      }
      line = new GPolyline([], color);
      GEvent.addListener(line, "lineupdated", function() {
        len = line.getLength();
        var lenkm = (Math.round(len*.539956803 / 10) / 100) + "nm";
        document.getElementById("routedist").innerHTML = "Distance: "+lenkm;
        });
      startDrawing(line, "My Route", function() {
      
      var len = line.getLength();
      var lenkm = (Math.round((len*.539956803 / 10) / 100)) + "nm";
      document.getElementById("routedist").innerHTML = "Dist: "+lenkm;
      }, color);
      document.getElementById("routetext").innerHTML = "Draw Route on Map, Double-Click When Finished";
      document.getElementById("routename").style.display = "block";
      document.getElementById("routedist").style.display = "block";
      document.getElementById("routesave").style.display = "block";
      document.getElementById("routeclear").style.display = "block";
    }
    
    function startDrawing(poly, name, onUpdate, color) {
      map.addOverlay(poly);
      poly.enableDrawing(options);
      poly.enableEditing({onEvent: "mouseover"});
      poly.disableEditing({onEvent: "mouseout"});
      
      
      GEvent.addListener(poly, "endline", function() {
        document.getElementById("line_b").className="unselected";
        var cells = document.getElementById("routedist");
        GEvent.bind(poly, "lineupdated", cells.innerHTML, onUpdate);
        GEvent.addListener(poly, "click", function(latlng, index) {
        if (typeof index == "number") {
        poly.deleteVertex(index);
      } 
    });
  });
}
    
    function clearRoute(){
    document.getElementById("routedist").innerHTML = "Dist: 0nm";
    document.getElementById("line_b").className="unselected";
    if (line!=null){
    map.removeOverlay(line);
    line = null;
    }
    startLine();
    }
    
    function saveRoute(format){
    serializeRoute();
   // var queryString = $('#EarthNCRouteForm').formSerialize(); 
    var submit = 0;
    if (format=="kml"){
    document.getElementById("RouteFormat").value = 'kml';
    submit = 1;
    }
    
    if (format=="gpx"){
    document.getElementById("RouteFormat").value = 'gpx';
    submit = 1;
    }
    
    if (format=="pdf"){
    document.getElementById("RouteFormat").value = 'pdf';
    submit = 1;
    }
    if (submit==1){
    window.open('',"newWin");
    var a = window.setTimeout("document.EarthNCRouteForm.submit();",500); 
    }
    }
    
    function serializeRoute(){
    if (line!=null){
     var RouteText = '';
     var vertcount = line.getVertexCount(); var i=0;
     for (i=0;i<vertcount;++i){
     RouteText = RouteText +line.getVertex(i).lng()+','+line.getVertex(i).lat()+' ';
     }
    document.getElementById("RoutePoints").value = RouteText;
    }
    }
    
//raster map functions
function lookupraster(){
var latlon = map.getCenter().lat()+','+map.getCenter().lng();
$.getJSON("./rnclookup.php",{ll: latlon, ajax: 'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
      $("#rastercharts").html(options);
});
}

function loadraster(){   
if (document.getElementById("showearthncraster").checked){
var rselect = document.getElementById("rastercharts");
var selchart = (rselect.options[rselect.selectedIndex].value).split(".");
if (selchart[0]!='none'){
rlevel = selchart[1];
rchart = selchart[0];
var zmin = selchart[2];
var zmax = selchart[3];
loadLayer(zmin,zmax); 
}
}
else {removeLayer();}
}

function customGetTileUrl(a,b) {
 var f = "http://marinas.com/rastertiles/"+ rchart +"/z" + b + "x" + a.x + "y" + a.y + ".png";
 //alert(f);
 return f;
}


function loadLayer(zmin,zmax) {
tilelayers = new GTileLayer(new GCopyrightCollection("EarthNC, Inc"),zmin,zmax);
tilelayers.getCopyright = function (a,b){return {prefix: "EarthNC, Inc"};}
tilelayers.getOpacity = function() {return opacity;}
tilelayers.getTileUrl = customGetTileUrl;
var hybridlayer = [G_HYBRID_MAP.getTileLayers()[0],tilelayers,G_HYBRID_MAP.getTileLayers()[1]];
 rastermap = new GMapType(hybridlayer, G_SATELLITE_MAP.getProjection(), "EarthNC Raster", {maxResolution:zmax,minResolution:zmin,errorMessage:"Outside of Chart Area, Select a Different Chart and Click Load or Clear to Remove"});
 map.setMapType(rastermap);
 map.removeControl(mapcontrol);
// document.getElementById("clearraster").style.display="block";
}

function removeLayer(){
 map.removeMapType(rastermap);
 map.setMapType(G_HYBRID_MAP);
 map.addControl(mapcontrol);
 //document.getElementById("clearraster").style.display="none";
}

function loadUrl(){  
       var tmpurl  = earthnc_getUrlVariable("url"); 
       if (tmpurl){
       var url = earthnc_getUrlVariable("url");
       url = url.replace(/%26/g,"&").replace(/%3F/g,"?").replace(/%3D/g,"=");
       }
       var geoXml = new GGeoXml(url); 
       map.addOverlay(geoXml);
}
    

