//Copyright 2009 EarthNC, Inc www.earthnc.com
//initialize clock for load timer
var earthnc_time = new Date();
var then = earthnc_time.getTime();
var earthncmap = null;
var rlevel = null;
var rchart = null;
var mapcontrol = null;
var tilelayers = null;   var map = null;
var rastermap = null; var opacity=.5;
var zmin; var zmax;
var rastermaploaded = 1;
var rasterloadedname = "'OneChart' View - Click for Individual Charts"; var rasterloadednum = "onechart.c5.5.17";
var map; var planmap=null; var postmap=null; var tweetmap=null; var anchoragemap=null; var historymap=null; var cposmap = null;

google.load("maps", "2.x");
        google.load("elements", "1", {
        packages: ["localsearch"]
});

jQuery(document).ready(function($){
    load();
    });
   
function load() {
   show('menubar');

   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 google.maps.Map2(document.getElementById("map"));
        mapcontrol = new GMapTypeControl();
        map.addControl(mapcontrol);
        if (!earthnc_getUrlVariable('em')){
        map.addControl(new GLargeMapControl());
        var adcount = 2;
        } else {map.addControl(new GSmallMapControl()); var adcount=1;}

        map.setCenter(new GLatLng(lat, lon), parseInt(zoom)); 
        map.removeMapType(G_SATELLITE_MAP);
        map.addMapType(G_SATELLITE_3D_MAP);
        map.setMapType(G_HYBRID_MAP);
        map.enableContinuousZoom();
			  map.enableScrollWheelZoom();
        resize(); 
        /* 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 : google.elements.localSearch.TYPE_BLENDED_RESULTS,
            client : 'pub-7720029083570370',
            channel : '', //add channel ID here for adense
            searchFormHint : 'Search the Map',
            Xpins : pins,
            Xlabels : labels
          }
          var bottomLeft= new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(8, 15));
          map.addControl(new google.elements.LocalSearch(options),bottomLeft);

        var publisher_id = 'pub-7720029083570370'; // Replace 1234123412341234 with your Google AdSense publisher id.
        var adPos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(70, 8)); // Set the anchor position and GSize offset to your desired values.
        
        adsManagerOptions = {
        maxAdsOnMap : adcount,
        style: 'adunit',
        channel: '', // 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, "zoomend", earthnc_zoomend);    

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

      }
      
    loadraster_single("onechart");
    //comment next line if you do not wish to load the chart layer automatically
    map.setCenter(new GLatLng(lat, lon), parseInt(zoom)); 
    tahina_planload();
    tahina_cposload();
    tahina_tweetload();
    tahina_historyload();
    tahina_postload();
    map.setMapType(G_HYBRID_MAP);
}

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() {  
			        hoffset = 260;
              woffset = 120;
			        if (earthnc_getUrlVariable("em")){hoffset = 70;}
			        var mapc = document.getElementById("map");  
			        var header = document.getElementById("menubar"); 
              var height = (getWindowHeight()-hoffset);
              var width =  (getWindowWidth()-woffset);
              if (height<500) height=500;
              if (width<500) width = 500;
              if (width>900) width = 900;
			        mapc.style.height = height + "px";
			        mapc.style.width =  width+ "px";
			        header.style.width = (getWindowWidth()-woffset) + "px";
			        map.checkResize();
			    } 

function tahina_planload(){
if (document.getElementById("showplan").checked){
      planmap = new GGeoXml("http://maps.google.com/maps/ms?source=embed&hl=en&geocode=&ie=UTF8&t=k&msa=0&output=kml&msid=103005318482134016767.0004670ab348ba9fa7b1f");
      map.addOverlay(planmap);
      }
      else {if (planmap!=null) map.removeOverlay(planmap); planmap=null;}
}

function tahina_cposload(){
if (document.getElementById("showcpos").checked){
      cposmap = new GGeoXml("http://earthnc.info/tahina/current_location.kml");
      map.addOverlay(cposmap);
      }
      else {if (cposmap!=null) map.removeOverlay(cposmap); cposmap=null;}
}

function tahina_historyload(){
if (document.getElementById("showhistory").checked){
      historymap = new GGeoXml("http://earthnc.info/tahina/tahina_expedition.kml");
      map.addOverlay(historymap);
      }
      else {if (historymap!=null) map.removeOverlay(historymap); historymap=null;}
}

function tahina_postload(){
if (document.getElementById("showposts").checked){
      postmap = new GGeoXml("http://tahinaexpedition.com/fb-index.xml");
      map.addOverlay(postmap);
      }
      else {if (postmap!=null) map.removeOverlay(postmap); postmap=null;}
}

function tahina_tweetload(){
if (document.getElementById("showtweets").checked){
      tweetmap = new GGeoXml("http://earthnc.info/tahina/tweetkml.kml");
      map.addOverlay(tweetmap);
      }
      else {if (tweetmap!=null) map.removeOverlay(tweetmap); tweetmap=null;}
}


function earthnc_chartload(){
//  lookupraster();
    var nlat= map.getCenter().lat();
    var nlon= map.getCenter().lng();
    var zoom = map.getZoom();
    var time = new Date();
    var now = time.getTime();
  if (document.getElementById("showearthnc").checked){
    var URL = earthnc_getKMLUrl(nlat,nlon);
    earthncmap = new GGeoXml(earthnc_getKMLUrl(nlat,nlon));
    map.addOverlay(earthncmap); 
  } else {if (earthncmap!=null) map.removeOverlay(earthncmap);}
      //reset timer
      then = now; 
}

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];
    }
  }
  }
}  
//raster map functions
function lookupraster_single(chart){
 if (chart=="onechart"){
    rlevel = 'c5';
    rchart = 'onechart';
    zmin = 0;
    zmax = 19;
    loadLayer(zmin,zmax);
    rastermaploaded=1;
    //lookupraster();
    rasterloadednum = 'onechart';
    rasterloadedname='OneChart View - Click for Individual Charts';
 } 
}


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);
               if (rchart=='onechart'){
               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/stiles/"+zoom+"/"+tile.x+"/"+y;
			          }
               } else {
			         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]];
 if (rastermap){map.removeMapType(rastermap);}
 rastermap = new GMapType(hybridlayer, G_HYBRID_MAP.getProjection(), "Charts", {maxResolution:zmax,minResolution:zmin,errorMessage:"Outside of Chart Area, Select a Different Chart and Click Load or Clear to Remove"});
 map.addMapType(rastermap);
 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,'/');
       }
      if (earthnc_getUrlVariable("zmkml")){ 
      var geoXml = new GGeoXml(url, function() {
        zoomToGeoXML(geoXml);
      }); 
      } else
       { 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 getembedcode(){
var url = document.location.href;
var url = url.split("?");
var params = '';
var cent = map.getCenter();
params += '?em=1&ll=' + cent.lat() +','+cent.lng();
params += '&z=' + map.getZoom();
  if (earthnc_getUrlVariable('url') && document.getElementById('embedkml').value!='KML Link'){
    params += '&url=' + earthnc_getUrlVariable('url'); 
  }
  if (document.getElementById('embedkml').value!='KML Link'){
    params += '&url=' + cleanurl(document.getElementById('embedkml').value);
  }
  
  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('embedoutput');
selectall('embedc');
}

function embed(){
show('embed');
}

function cleanurl(url){
   url = url.replace(/&/g,"%26");
   url = url.replace(/=/g,"%3D");
   url = url.replace("?","%3F"); 
   url = url.replace("//","%2F%2F");
   url = url.replace("/","%2F");
   return url;
   }

function selectall(id){
    document.getElementById(id).focus();
    document.getElementById(id).select();
}

function show(did){
document.getElementById(did).style.display='block';
}

function earthnc_openmenu(flag){
if (flag==0){hide('menubar'); show('openmenubar');}
if (flag==1){show('menubar'); hide('openmenubar');}
}

function earthnc_help(){
show('help');
}

function updatePosition(position) {
 lat =  position.latitude; 
 lon =  position.longitude;
 map.setCenter(new GLatLng(lat, lon));
 map.setZoom(12);
}

function updatePosition2(lat,lon,zoom) {
 map.setCenter(new GLatLng(lat, lon));
 map.setZoom(zoom);
}

function handleError(positionError) {
}

function zoomToGeoXML(geoXml) {
/*
      var center = geoXml.getDefaultCenter();
      
      var span = geoXml.getDefaultSpan();
      var sw = new GLatLng(center.lat() - span.lat() / 2,
                       center.lng
      () - span.lng() / 2);
      var ne = new GLatLng(center.lat() + span.lat() / 2,
                       center.lng() + span.lng() / 2);
      var bounds = new GLatLngBounds(sw, ne);
      map.setCenter(center);
      var newZoom = map.getBoundsZoomLevel(bounds);
      if (newZoom==17) newZoom=7;
      map.setZoom(newZoom);
      */
}

