//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=1;

var zmin; var zmax;

var rastermaploaded = 0;

var rasterloadedname = ""; var rasterloadednum = "";

var map;



$(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();

    //earthnc_openmenu(1);

    });

    

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');}

   

   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.addMapType(G_PHYSICAL_MAP);

        map.removeMapType(G_SATELLITE_MAP);

        map.addMapType(G_SATELLITE_3D_MAP);

        map.setMapType(G_HYBRID_MAP);

        map.enableContinuousZoom();

			  map.enableScrollWheelZoom();

        

        /* 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 publisher_id = 'pub-7720029083570370'; // Replace 1234123412341234 with your Google AdSense publisher id.

        var adPos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 30)); // Set the anchor position and GSize offset to your desired values.



        adsManagerOptions = {

        maxAdsOnMap : 2,

        style: 'adunit',

        channel: '6820387357', // This field is optional - replace 12345678 with a channel number that you created for GooYAMLgle AdSense tracking

        position: adPos

        };



        adsManager = new GAdsManager(map, publisher_id, adsManagerOptions);

        adsManager.enable();



        //callback to update chart overlay as users pan map when layer is 'on'

        GEvent.addListener(map, "moveend", earthnc_chartlookup);    

        //GEvent.addListener(map, "moveend", onMapViewChanged);

        

        

      

        //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();  

    resize(); 

    

    /*

    var publisherId = 721; // Use your own publisher Id

        Lat49.initAds(publisherId); 

      

        function onMapViewChanged(lat, lon, zoomlevel)

        {

          var bnds = map.getBounds();

          var center = bnds.getCenter();

          var lat = center.lat();

          var lon = center.lng();

          try {

            var zoomlevel = Lat49.Tile.convertGMap2Zoom(map.getZoom());

            Lat49.updateAdByLatLon("adcontainer", lat, lon, zoomlevel);

          } catch (e) {}

          }

    */

    if (earthnc_getUrlVariable("chart")){

    loadraster_single(earthnc_getUrlVariable("chart"));

    }

}



  function getWindowHeight() {

			        if (self.innerHeight) return self.innerHeight;

			        if (document.documentElement && document.documentElement.clientHeight)

			            return document.documentElement.clientHeight;

			        if (document.body) return document.body.clientHeight;

			        return 0;

			    }



			    function getWindowWidth() {

			        if (self.innerWidth) return self.innerWidth;

			        if (document.documentElement && document.documentElement.clientWidth)

			            return document.documentElement.clientWidth;

			        if (document.body) return document.body.clientWidth;

			        return 0;

			    }



			    function resize() {  

			        var mapc = document.getElementById("map");  

			        var header = document.getElementById("menubar");  

			        mapc.style.height = (getWindowHeight()-130) + "px";

			        mapc.style.width = (getWindowWidth()-20) + "px";

			        header.style.width = (getWindowWidth()-20) + "px";

			        // map.checkResize();

			    } 

 

//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_LEFT, new GSize(75, 15));

  }



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);alert(URL);

      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();

    document.getElementById("routetext").innerHTML = "Click Icon to Start Route";

    }

    

    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){

 if (rastermaploaded==0){

 var options = '<option value="none">Select a Chart to View</option>';

} else { var options = '<option value="loaded"><b>Loaded: '+rasterloadedname+'</b></option><option value="hide"><b>Hide Chart</b></option>'; }

for (var i = 0; i < j.length; i++) {

if (j[i].optionValue!=rasterloadednum){

options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';

}

}

$("#rastercharts").html(options);

});

}



//raster map functions

function lookupraster_single(chart){

 $.getJSON("./rnclookup.php",{chart: chart, ajax: 'true'}, function(j){

 var options = '<option value="'+j[0].optionValue+'"><b>Loaded: '+j[0].optionDisplay+'</b></option><option value="hide"><b>Hide Chart</b></option>'; 

 var selchart = j[0].optionValue.split(".");

    rlevel = selchart[1];

    rchart = selchart[0];

    zmin = selchart[2];

    zmax = selchart[3];

    loadLayer(zmin,zmax);

    rastermaploaded=1;

    lookupraster();

    rasterloadednum = selchart[0];

    rasterloadedname=j[0].optionDisplay;

 $("#rastercharts").html(options);

});

}



function loadraster(){

var rselect = document.getElementById("rastercharts");

var selchart = (rselect.options[rselect.selectedIndex].value).split(".");

if (selchart[0]!='none' && selchart[0]!='loaded' && selchart[0]!='hide'){

rlevel = selchart[1];

rchart = selchart[0];

zmin = selchart[2];

zmax = selchart[3];

loadLayer(zmin,zmax);

rastermaploaded=1;

rasterloadednum = rselect.options[rselect.selectedIndex].value;

rasterloadedname=rselect.options[rselect.selectedIndex].innerHTML;

lookupraster();

}

if (selchart[0]=='hide'){

removeLayer();

}

}



function loadraster_single(chart){

    lookupraster_single(chart);  

}



function loadLayer(zmin,zmax) {

tilelayers = new GTileLayer(new GCopyrightCollection("EarthNC, Inc"),zmin,zmax);

tilelayers.getCopyright = function (a,b){return {prefix: "EarthNC, Inc"};}

var mercator = new GMercatorProjection(zmax+1);

			         tilelayers.getTileUrl = function(tile,zoom) {

			              if ((zoom < zmin) || (zoom > zmax)) {

			                  return "http://earthnc.info/images/blank.png";

			              } 

			              var ymax = 1 << zoom;

			              var y = ymax - tile.y -1;

			              var tileBounds = new GLatLngBounds(

			                  mercator.fromPixelToLatLng( new GPoint( (tile.x)*256, (tile.y+1)*256 ) , zoom ),

			                  mercator.fromPixelToLatLng( new GPoint( (tile.x+1)*256, (tile.y)*256 ) , zoom )

			              );

			              

			              return "http://earthnc.info/tiles/"+rchart+"/"+zoom+"/"+tile.x+"/"+y;

			        

			          }

tilelayers.getOpacity = function() {return opacity;}



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);

}



function setTileOpacity(){

if (document.getElementById("chartopacity").checked){opacity=.5;} else {opacity=1;}

map.removeMapType(rastermap);

loadLayer(zmin,zmax);

}



function removeLayer(){

 rastermaploaded=0; 

 lookupraster();

 map.removeMapType(rastermap);

 map.setMapType(G_HYBRID_MAP);

}



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,"=").replace(/%2F/g,'/');

       }

       var geoXml = new GGeoXml(url); 

       map.addOverlay(geoXml);

}

    

function hide(did){

document.getElementById(did).style.display='none';

}



function bookmark(){

var url = document.location.href;

var url = url.split("?");

var params = '';

var cent = map.getCenter();

params += '?ll=' + cent.lat() +','+cent.lng();

params += '&z=' + map.getZoom();

  if (earthnc_getUrlVariable('url')){

    params += '&url=' + earthnc_getUrlVariable('url'); 

  }

  if (rastermaploaded==1){

  var tmp  = rasterloadednum.split('.');

  params += '&chart='+tmp[0];

  }

document.getElementById('bmark').value=url[0]+params;

show('bookmark');

selectall('bmark');

//document.location.href=url[0]+params;

}



function embed(){

var url = document.location.href;

var url = url.split("?");

var params = '';

var cent = map.getCenter();

params += '?ll=' + cent.lat() +','+cent.lng();

params += '&z=' + map.getZoom();

  if (earthnc_getUrlVariable('url')){

    params += '&url=' + earthnc_getUrlVariable('url'); 

  }

  if (rastermaploaded==1){

  var tmp  = rasterloadednum.split('.');

  params += '&chart='+tmp[0];

  }

document.getElementById('embedc').value='<iframe src="'+url[0]+params+'" width="100%" height="600px"></iframe>';

show('embed');

selectall('embedc');

}



function selectall(id){

    document.getElementById(id).focus();

    document.getElementById(id).select();

}

