/////////////////////////////////
// var dashboard contains text for accordion menus on affiliate sites. To update the content, escape all single quotes (i.e. ')with a backslash  (i.e. \') and include no line breaks in the finished code. HTML breaks (i.e. <br />) are fine, but code in the javascripted innerHTML text must be on a single line. Expand the text in a text editor such as PSPad for editing, but restore it to a single line, or break lines with javascript (i.e. ' + ') for use as a javascript variable. 
////////////////////////////////
var dashboard = '<div class="dashboard" id="dashboards"> <a class="title">Search</a><div class="content"><p class="search_field"><br /> Enter an address,<br /> postal code or location name:<br /> <input  id="location" class="txt" onkeypress="searchKeyPress(event)" type="text" > <input type="button" id="searchbtn" class="btn" onClick="buttonClick()" value="Go">  </p>       <p id="top_text"> Browse the world\'s largest lidar data warehouse to select lidar data (<img src="http://maps.google.com/mapfiles/kml/paddle/grn-stars.png" style="height:11px">) and oblique imagery (<img src="http://maps.google.com/mapfiles/kml/paddle/ylw-stars.png" style="height:11px">) for your mapping and modeling projects.</p><div id="map"></div></div>' + 
' <a class="title">Instructions</a><div class="content">   <br><p >&bull; Enter a street address, location name or postal code in the search field, or use your mouse cursor to navigate to your area of interest.<br /><p >&bull; Allow a few seconds for data to load when you navigate to a new region. Search at aircraft altitudes to locate available data. <br></p><p >&bull; Green pins <img src="http://maps.google.com/mapfiles/kml/paddle/grn-stars.png" style="height:10px">and overlays indicate available Lidar data. Yellow pins<img src="http://maps.google.com/mapfiles/kml/paddle/ylw-stars.png" style="height:9px"> and overlays indicate available oblique imagery sets. Click a pin to view details.<br /></p><p >&bull; When you locate the dataset that interests you, click the "Order this data" link in the detail dialogue.<br /></p><p >&bull; A Lidarxchange business representative will contact you within one business day to provide pricing and delivery details.<br />   </p></div>' +
' <a class="title">Layers and Options</a><div class="content" id="right"><p><div style="display:inline" id="obliqueicon"></div> <label for="kml-red-check"> Oblique Imagery Sets:</label><input type="checkbox" id="kml-99S-check" checked="true" onclick="toggleKml(\'99S\');"/><br /> <label for="roads"> Roads:</label> <input type="checkbox" id="roads"  onclick="layers_options();"/><br /> <label for="borders"> Borders and Outlines:</label> <input type="checkbox" id="borders"  checked="true" onclick="layers_options();"/><br /> <label for="buildings"> Buildings:</label> <input type="checkbox" id="buildings"  onclick="layers_options();"/><br /> <label for="terrain"> Terrain: </label> <input type="checkbox" id="terrain"   checked="true" onclick="layers_options();"/><br /><form name="options" action=\'javascript:layers_ptions();\'> <label for="statusbar"> Status Bar:</label> <input type="checkbox" onclick=\'layers_options()\' id="statusbar" /><br /> <label for="nav">Navigation Controls:</label> <input type="checkbox" onclick=\'layers_options()\' checked="true" id="nav" /> <br /> <label for="grid"> Grid:</label>    <input type="checkbox" onclick=\'layers_options()\' name="grid" />      <br /><label for="overview"> Overview Map:</label> <input type="checkbox" onclick=\'layers_options()\' name="overview" />      <br /> <label for="scaleLegend"> Scale Legend:</label> <input type="checkbox" onclick=\'layers_options()\' name="scaleLegend" />      <br /> <label for="atmosphere"> Atmosphere:</label> <input type="checkbox" onclick=\'layers_options()\' name="atmosphere" checked />    </form>  <br /> <br /><br /></p></div> '+
'<a class="title">Data List and Uploads</a><div class="content" id="uploads"><div id="msg"></div><p class="input_label"> Enter an URL <br /> to view an online KML file:</p> <input style="margin:0 0 0 20px; id="userKml" class="txt" value="http://" type="text" > <input type="button"  style="margin:0 10px 0 0;" class="btn" onClick="fetchKmlFromInput()" value="Load">  <div id="userKmlMsg" style="color:red;font-size:10px;text-align:left;margin:5px 0 0 10px;">&nbsp;</div><p id="upload_limits">Send a KML file or other data descriptions to LidarXchange to have your lidar data and oblique imagery listed in the world\'s largest lidar data warehouse:<div style="position:relative;right:10px; text-align:right;"><input type="button" onClick="open_uploadlimits()" class="btn" value="Upload Limits"></div></p></div></div>';
  	// call the accordion layout 
  	

jQuery().ready(function(){
	    document.getElementById('leftid').innerHTML = dashboard;
		$('#dashboards').accordion({autoHeight:false });

    });  
   var wUtm = null;
   var eUtm = null;
    var ge;
 var  curUtm = null;
    var lookAtlatlon = null
    var map = null;
  var currentKmlkit = [];
  var latlongloc = null;
    google.load("earth", "1");
        google.load("maps", "2");
  var LocationCookie = null;
        var currentKmlObjects = {};
var brUtm = null;
var blUtm = null;
var centerLat = null;
var centerLong = null;
 var utmNS = null;
var lmostUtm = null;
var rmostUtm = null;
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

var  LocationCookie = readCookie('LidarPortalLoc');





    
    function init(latlon) {  
reSize();

if (LocationCookie != null){lookAtlatlon = LocationCookie; } else{lookAtlatlon = latlon;}
        map = new GMap2(document.getElementById('map'));
      map.setCenter(new GLatLng(0, 0), 0);
      map.disableDragging(); 
      google.earth.createInstance('map3d', initCallback, failureCallback);
   
latlon=null;
    }
    
    function initCallback(instance) {
      ge = instance;
      ge.getWindow().setVisibility(true);
   
      // add a navigation control at top left
      ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
  ge.getNavigationControl().getScreenXY().setXUnits(ge.UNITS_INSET_PIXELS);
  ge.getNavigationControl().getScreenXY().setYUnits(ge.UNITS_INSET_PIXELS);
    
      // add some layers
      ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
      ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, false);
 
var  lookAtsplit = lookAtlatlon.split(",");
 lookAtlat = 1 * lookAtsplit[0];
 lookAtlon = 1 * lookAtsplit[1];
 
 // lookAtlat =  lookAtlat.substr(7,10);
// lookAtlon = lookAtlon.substrr(7,10);

 //adjust layers and options per checkboxes
 layers_options();
      var la = ge.createLookAt('');
      la.set(lookAtlat, lookAtlon, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0 , 40, 150000);
      ge.getView().setAbstractView(la);
        // fetch the KML index 
  loadKml('index');
  
  //get global oblique imagery set after loading index
  
    if (document.getElementById('kml-99S-check').checked){
    loadKml('99S');document.getElementById('obliqueicon').innerHTML ='<img src="http://maps.google.com/mapfiles/kml/paddle/ylw-stars.png" style="height:20px">'}




var currentKmlObject = null;
      var currentKMLkit = [];
      
/////////////////////////////////     
//look up and load some lidar data by UTM zone when the motion stops    
/////////////////////////////////

   google.earth.addEventListener(ge.getView(), 'viewchangeend', function() {
   
  

//////////////
// get some specs about what the viewer sees
/////////////


var hitTestCenter = ge.getView().hitTest(.5, ge.UNITS_FRACTION, .5, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
var hitTestTL = ge.getView().hitTest(0, ge.UNITS_FRACTION, 0, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
var hitTestTR = ge.getView().hitTest(1, ge.UNITS_FRACTION, 0, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);



var centerLat = hitTestCenter.getLatitude();
var centerLong =hitTestCenter.getLongitude() ;
 var hitTestTML = ge.getView().hitTest(0, ge.UNITS_FRACTION, .8, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
 var hitTestTMR = ge.getView().hitTest(1, ge.UNITS_FRACTION, .8, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
 var hitTestML = ge.getView().hitTest(0, ge.UNITS_FRACTION, .6, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
 var hitTestMR = ge.getView().hitTest(1, ge.UNITS_FRACTION, .6, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
 var hitTestBML = ge.getView().hitTest(0, ge.UNITS_FRACTION, .3, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
 var hitTestBMR = ge.getView().hitTest(1, ge.UNITS_FRACTION, .3, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);

///////////////////
///use hit tests to deterime viewer area for KML loading
///////////////////

 curUtm = btnToUTM_OnClick(centerLat,centerLong);
 
 if (hitTestTR){
  var trLat = hitTestTR.getLatitude();
 var trLong = hitTestTR.getLongitude() ;
 var rmostLong = trLong;
var rmostLat = trLat;
 //alert("lat" + trLat + "long" + trLong + "utm" +trUtm)
 }
  else if (hitTestTMR){
  var tmrLat = hitTestTMR.getLatitude();
 var tmrLong = hitTestTMR.getLongitude() ;

  var rmostLong = tmrLong;
 //alert("lat:" + mrLat + "lon:" + mrLong + mrUtm)
 var rmostLat = tmrLat;

 }
  else if (hitTestMR){
  var mrLat = hitTestMR.getLatitude();
 var mrLong = hitTestMR.getLongitude() ;

  var rmostLong = mrLong;
 //alert("lat:" + mrLat + "lon:" + mrLong + mrUtm)
var rmostLat = mrLat;
 }
  else if (hitTestBMR){
  var bmrLat = hitTestBMR.getLatitude();
 var bmrLong = hitTestBMR.getLongitude();

 //alert("lat:" + mrLat + "lon:" + mrLong + mrUtm)
  var rmostLong = bmrLong;
var rmostLat = bmrLat;
 }
 else 
 { var hitTestBR = ge.getView().hitTest(1, ge.UNITS_FRACTION, 1, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);  var brLat = hitTestBR.getLatitude();
var brLong = hitTestBR.getLongitude();  var rmostLat = brLat; var rmostLong = brLong;}



  if (hitTestTL){
  var tlLat = hitTestTL.getLatitude();
 var tlLong = hitTestTL.getLongitude();
var lmostLat = tlLat;
var lmostLong = tlLong;
}
else if(hitTestTML){
  var tmlLat = hitTestTML.getLatitude();
 var tmlLong = hitTestTML.getLongitude() ;

var lmostLong = tmlLong; var lmostLat = tmlLat;
 }
else if(hitTestML){
  var mlLat = hitTestML.getLatitude();
 var mlLong = hitTestML.getLongitude() ;

 var lmostLong = mlLong;
 var lmostLat = mlLat;
 }
 else 
 {var hitTestBL = ge.getView().hitTest(0, ge.UNITS_FRACTION, 1, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
var blLat = hitTestBL.getLatitude();
var blLong = hitTestBL.getLongitude();var lmostLong = blLong;var lmostLat = blLat;}
///////////////////////////////////////////
// set how far beyond the edge of the tested viewing area to call kml i.e. - add a factor to the longitude beyond the edge of the viewing area.
//set null for now -- need to figure out cases where west long is + and east long is -
///////////////////////////////////////////


if (lmostLong > 0 && rmostLong > 0){var scope = Math.abs(parseFloat(lmostLong - rmostLong))}
if (lmostLong > 0 && rmostLong < 0){var scope =  parseFloat(180 - lmostLong)+ (180 - Math.abs(rmostLong))}
if (lmostLong < 0 && rmostLong < 0){var s = parseFloat(lmostLong - rmostLong);var scope = Math.abs(s)}
if (lmostLong < 0 && rmostLong > 0){var scope =  Math.abs(parseFloat(lmostLong - rmostLong))}

//document.getElementById('data').innerHTML =  lmostLong  + "-"+ rmostLong + "=" + scope ;
//reach factor......
scope = scope/5;
function extraWest(x){ 
x= x - scope;
return x;

}

function extraEast(x){
 x= x + scope

return x;
}
var lmostUtm = btnToUTM_OnClick(lmostLat,extraWest(lmostLong));
var rmostUtm = btnToUTM_OnClick(rmostLat,extraEast(rmostLong));
//document.getElementById('data').innerHTML =  lmostLong  + "-"+ rmostLong + "=" + scope + "<br />" + extraWest(lmostLong) + " " + extraEast(rmostLong);
utm = curUtm;
var kmlUrl  = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+utm;
//if there is nothing on list, go ahead and load whatever is in the center of the screen
// so far, no concern about edges, just whatever is the current UTM -- which we have set to the lookAtlatlon variable if not already set on cookie
var pFutm  = parseFloat(utm)
if (currentKmlkit.length == 0) {loadKml(kmlUrl);currentKmlkit.unshift(kmlUrl);} 
var NS = utm.replace(/[0-9]/g,"")
 if((pFutm- 1) > 0 && (pFutm- 1) <=60){var westUtm = (pFutm - 1) + NS;}
    else if ((pFutm - 1) <= 0) {sutm = 60 + pFutm; var westUtm = (sutm - 1) + NS;}
 else if ((pFutm- 1)>60){sutm = pFutm - 60;var westUtm = (sutm - 1) + NS;}
 var wUtm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ westUtm ;
    if((pFutm + 1) > 0 && (pFutm + 1) <=60){var eastUtm = (pFutm + 1) + NS;}
       else if ((pFutm + 1) <=0) {sutm = 60 + pFutm; var eastUtm = (sutm + 1) + NS;}
 else if ((pFutm + 1)>60){sutm = pFutm - 60; var eastUtm = (sutm + 1) + NS;}
 var eUtm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ eastUtm ;
 
 var midUtm = pFutm;
//document.getElementById('data').innerHTML = brUtm + '' + utm + ''+blUtm;  
getUtm(kmlUrl);
var sutm;
if((parseFloat(midUtm) - 1)>= parseFloat(lmostUtm)){getUtm(wUtm);}
 if((parseFloat(midUtm) + 1)<= parseFloat(rmostUtm)){getUtm(eUtm);}

if((pFutm - 2) > 0 && (pFutm - 2) <=60){ var west2Utm =(pFutm - 2) + NS;}
    else if ((pFutm - 2) <=0) {sutm = 60 + pFutm; var west2Utm =(sutm - 2) + NS;}
 else if ((pFutm- 2)>60){sutm = sutm - 60;var west2Utm = (sutm - 2) + NS;}
 var w2Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west2Utm ;
    if((pFutm + 2) > 0 && (pFutm + 2) <=60){var east2Utm = (pFutm + 2) + NS;}
    else if ((pFutm + 2) <=0) {sutm = 60 + pFutm; var east2Utm = (sutm + 2) + NS;}
 else if ((pFutm+ 2)>60){sutm = pFutm - 60;var east2Utm = (sutm + 2) + NS;}
 var e2Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east2Utm ;
 if((pFutm - 3) > 0 && (pFutm - 3) <=60){ var west3Utm = (pFutm - 3) + NS;}
    else if ((pFutm - 3) <=0) {sutm = 60 + pFutm; var west3Utm = (sutm - 3) + NS;}
 else if ((pFutm- 3)>60){sutm = pFutm - 60;var west3Utm = (sutm - 3) + NS;}
 var w3Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west3Utm ;
    if((pFutm + 3) > 0 && (pFutm + 3) <=60){ var east3Utm =(pFutm + 3) + NS;}
    else if ((pFutm + 3) <=0) {sutm = 60 + pFutm; var east3Utm =(sutm + 3) + NS;}
 else if ((pFutm+ 3)>60){sutm = pFutm - 60;var east3Utm =(sutm + 3) + NS;}
 var e3Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east3Utm ;
 if((pFutm - 4) > 0 && (pFutm - 4) <=60){ var west4Utm = (pFutm - 4) + NS;}
    else if ((pFutm - 4) <=0) {sutm = 60 + pFutm; var west4Utm = (sutm - 4) + NS;}
 else if ((pFutm- 4)>60){sutm = pFutm - 60;var west4Utm = (sutm - 4) + NS;}
 var w4Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west4Utm ;
    if((pFutm + 4) > 0 && (pFutm + 4) <=60){ var east4Utm =(pFutm + 4) + NS;}
    else if ((pFutm + 4) <=0) {sutm = 60 + pFutm; var east4Utm =(sutm + 4) + NS;}
 else if ((pFutm+ 4)>60){sutm = pFutm - 60;var east4Utm =(sutm + 4) + NS;}
 var e4Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east4Utm ;
 if((pFutm - 5) > 0 && (pFutm - 5) <=60){ var west5Utm = (pFutm - 5) + NS;}
    else if ((pFutm - 5) <=0) {sutm = 60 + pFutm; var west5Utm = (sutm - 5) + NS;}
 else if ((pFutm- 5)>60){sutm = pFutm - 60;var west5Utm = (sutm - 5) + NS;}
 var w5Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west5Utm ;
    if((pFutm + 5) > 0 && (pFutm + 5) <=60){ var east5Utm =(pFutm + 5) + NS;}
    else if ((pFutm + 5) <=0) {sutm = 60 + pFutm; var east5Utm =(sutm + 5) + NS;}
 else if ((pFutm+ 5)>60){sutm = pFutm - 60;var east5Utm =(sutm + 5) + NS;}
 var e5Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east5Utm ;
 if ((parseFloat(midUtm) - 2)>= parseFloat(lmostUtm)){getUtm(w2Utm)};
 if ((parseFloat(midUtm) + 2)<= parseFloat(rmostUtm)){getUtm(e2Utm)};
  if ((parseFloat(midUtm) - 3)>= parseFloat(lmostUtm)){getUtm(w3Utm)};
 if ((parseFloat(midUtm) + 3)<= parseFloat(rmostUtm)){getUtm(e3Utm)};
   if ((parseFloat(midUtm) - 4)>= parseFloat(lmostUtm)){getUtm(w4Utm)};
 if ((parseFloat(midUtm) + 4)<= parseFloat(rmostUtm)){getUtm(e4Utm)};
    if ((parseFloat(midUtm) - 5)>= parseFloat(lmostUtm)){getUtm(w5Utm)};
 if ((parseFloat(midUtm) + 5)<= parseFloat(rmostUtm)){getUtm(e5Utm)};
/* * /var pFutm  = parseFloat(utm)
 if((pFutm- 1) > 0 && (pFutm- 1) <=60){var westUtm = (pFutm - 1) + NS;}
    else if ((pFutm - 1) < 0) {pFutm = 60 + pFutm; var eastUtm = (pFutm - 1) + NS;}
 else if ((pFutm- 1)>60){pFutm = pFutm - 60;var eastUtm = (pFutm - 1) + NS;}
 var wUtm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ westUtm ;
    if((pFutm + 1) > 0 && (pFutm + 1) <=60){var eastUtm = (pFutm + 1) + NS;}
       else if ((pFutm + 1) < 0) {pFutm = 60 + pFutm; var eastUtm = (pFutm + 1) + NS;}
 else if ((pFutm+ 1)>60){pFutm = pFutm - 60; var eastUtm = (pFutm + 1) + NS;}
 var eUtm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ eastUtm ;
 
 var midUtm = pFutm;
//document.getElementById('data').innerHTML = brUtm + '' + utm + ''+blUtm;  
getUtm(kmlUrl);
if((parseFloat(midUtm) - 1)>= parseFloat(lmostUtm)&&(parseFloat(midUtm) - 1)>0){getUtm(wUtm);}
 if((parseFloat(midUtm) + 1)<= parseFloat(rmostUtm)&&(parseFloat(midUtm) + 1)<=60){getUtm(eUtm);}

 if((pFutm - 2) > 0 && (pFutm - 2) <=60){ var west2Utm =(pFutm - 2) + NS;}
    else if ((pFutm - 2) < 0) {pFutm = 60 + pFutm; var west2Utm =(pFutm - 2) + NS;}
 else if ((pFutm- 2)>60){pFutm = pFutm - 60;var west2Utm =(pFutm - 2) + NS;}
 var w2Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west2Utm ;
    if((pFutm + 2) > 0 && (pFutm + 2) <=60){var east2Utm = (pFutm + 2) + NS;}
    else if ((pFutm + 2) < 0) {pFutm = 60 + pFutm; var east2Utm = (pFutm + 2) + NS;}
 else if ((pFutm+ 2)>60){pFutm = pFutm - 60;var east2Utm = (pFutm + 2) + NS;}
 var e2Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east2Utm ;
 if((pFutm - 3) > 0 && (pFutm - 3) <=60){ var west3Utm = (pFutm - 3) + NS;}
    else if ((pFutm - 3) < 0) {pFutm = 60 + pFutm; var west3Utm = (pFutm - 3) + NS;}
 else if ((pFutm- 3)>60){pFutm = pFutm - 60;var west3Utm = (pFutm - 3) + NS;}
 var w3Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west3Utm ;
    if((pFutm + 3) > 0 && (pFutm + 3) <=60){ var east3Utm =(pFutm + 3) + NS;}
    else if ((pFutm + 3) < 0) {pFutm = 60 + pFutm; var east3Utm =(pFutm + 3) + NS;}
 else if ((pFutm+ 3)>60){pFutm = pFutm - 60;var east3Utm =(pFutm + 3) + NS;}
 var e3Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east3Utm ;
 if()(pFutm - 4)  > 0 && )(pFutm - 4)  <=60){ var west4Utm = (pFutm - 4) + NS;}
    else if ((pFutm - 4) < 0) {pFutm = 60 + pFutm; var west4Utm = (pFutm - 4) + NS;}
 else if ((pFutm- 4)>60){pFutm = pFutm - 60;var west4Utm = (pFutm - 4) + NS;}
 var w4Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west4Utm ;
   if((pFutm + 4) > 0 && (pFutm + 4) <=60){ var east4Utm = (pFutm + 4) + NS;}
        else if ((pFutm + 4) < 0) {pFutm = 60 + pFutm; var east4Utm = (pFutm + 4) + NS;}
 else if ((pFutm+ 4)>60){pFutm = pFutm - 60;var east4Utm = (pFutm + 4) + NS;}
var e4Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east4Utm ;
   if((pFutm - 5) > 0 && (pFutm - 5) <=60){var west5Utm = (pFutm - 5) + NS;}
    else if ((pFutm - 5) < 0) {pFutm = 60 + pFutm; var west5Utm = (pFutm - 5) + NS;}
 else if ((pFutm- 5)>60){pFutm = pFutm - 60;var west5Utm = (pFutm - 5) + NS;}
 var w5Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ west5Utm ;
    if((pFutm + 5) > 0 && (pFutm + 5) <=60){var east5Utm = (pFutm + 5) + NS;}
     else if (pFutm + 5) < 0 {pFutm = 60 + pFutm; var east5Utm = (pFutm + 5) + NS;}
 else if ((pFutm + 5)>60){pFutm = pFutm - 60;var east5Utm = (pFutm + 5) + NS;}
 var e5Utm = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM='+ east5Utm ;
 
 if ((parseFloat(midUtm) - 2)>= parseFloat(lmostUtm)&&(parseFloat(midUtm) - 2)>0){getUtm(w2Utm)};
 if ((parseFloat(midUtm) + 2)<= parseFloat(rmostUtm)&&(parseFloat(midUtm) + 2)<=60){getUtm(e2Utm)};
  if ((parseFloat(midUtm) - 3)>= parseFloat(lmostUtm)&&(parseFloat(midUtm) - 3)>0){getUtm(w3Utm)};
 if ((parseFloat(midUtm) + 3)<= parseFloat(rmostUtm)&&(parseFloat(midUtm) + 3)<=60){getUtm(e3Utm)};
   if ((parseFloat(midUtm) - 4)>= parseFloat(lmostUtm)&&(parseFloat(midUtm) - 4)>0){getUtm(w4Utm)};
 if ((parseFloat(midUtm) + 4)<= parseFloat(rmostUtm)&&(parseFloat(midUtm) + 4)<=60){getUtm(e4Utm)};
    if ((parseFloat(midUtm) - 5)>= parseFloat(lmostUtm)&&(parseFloat(midUtm) - 5)>0){getUtm(w5Utm)};
 if ((parseFloat(midUtm) + 5)<= parseFloat(rmostUtm)&&(parseFloat(midUtm) + 5)<=60){getUtm(e5Utm)};
 
 */
 /*
 var minUtm;
var maxUtm;
if (lmostUtm>=rmostUtm){maxUtm=lmostUtm}else{maxUtm=rmostUtm}
if (lmostUtm<=rmostUtm){minUtm=lmostUtm}else{minUtm=rmostUtm}

document.getElementById('data').innerHTML = minUtm +  midUtm + maxUtm;
 */
//alert ( midUtm +  brUtmn +  w2Utm )
var nowLoading=null;
var timeout = "";

//checks first to see if it's already on the list before calling for it again
function getUtm(u){

if (u != currentKmlkit[0]){
var kmlLength = currentKmlkit.length;
for ( var i=0, len=kmlLength; i<len; ++i ){
if (currentKmlkit[i]==u){var onList = '1';}}
//alert(kmlUrl + currentKmlkit[0] + curUtm);

if (onList != '1'){
if (nowLoading == '1'){setTimeout("loadKml(u)",2000)}else{
loadKml(u);}
//add requested kml to list 
currentKmlkit.unshift(u);
var nowLoading = '1';
onList='0'

setTimeout("nowLoading = 0",3000)

}
}
}




//get rid of whatever KML isn't used in the current view

unloadKML();

function unloadKML(){
var kmlLength = currentKmlkit.length;
for ( var i=0, len=kmlLength; i<len; ++i ){
var curTest = currentKmlkit[i].replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","");
var curTestUtm = curTest;
var testNS = curTest.replace(/[0-9]/g,"")
//var curNS = curUtm.replace(/[0-9]/g,"")
var curTest = curTest.replace("N","")
var curTest = curTest.replace("S","")
var curRutm = rmostUtm.replace("N","");
 curRutm = curRutm.replace("S","");
var curLutm = lmostUtm.replace("N","");
curLutm = curLutm.replace("S","");
var minUtm;
var maxUtm;
//if (curLutm>=curRutm){maxUtm=curLutm}else{maxUtm=curRutm}
var maxUtm = Math.max(curLutm,curRutm)
//if (curLutm<=curRutm){minUtm=curLutm}else{minUtm=curRutm}
var minUtm = Math.min(curLutm,curRutm)
//document.getElementById('data').innerHTML = 'minUTM' + minUtm + '  maxUtm' +maxUtm + '  curRutm' +curRutm + '  curLutm' +curLutm + ' curTest:' + curTest;
//
if((curTest < minUtm || curTest > maxUtm)&& (curLutm < curRutm)){


removeKml(curTestUtm);}


}
/*
*/
}












/////////////


/*


if (kmlUrl != currentKmlkit[0]){
//then check to see if it's anywhere on the list. if not, it's already loaded and we don't need it, so set onList to 1

//alert(kmlUrl + currentKmlkit[0] + curUtm);
if (onList!='1'){

google.earth.fetchKml(ge, kmlUrl, finishFetchKml);

 //add requested kml to list

currentKmlkit.unshift(kmlUrl);
//reset variable used to find if kmlUrl is already loaded.
onList='0';
}}}




*/

//if there are not files on the list yet, load one and add it to the list; either way, add something to the list



//iterate through and find those that don't match our requirement

var kmlLength = currentKmlkit.length;var utmNS = utm;
for ( var i=0, len=kmlLength; i<len; ++i ){
var lookUp = currentKmlkit[i].replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","")

var lookUp = lookUp.replace("N","")
var lookUp = lookUp.replace("S","")

var utm = utm.replace("N","")
var utm = utm.replace("S","")
var eKml = utm + 1;
var wKml = utm - 1;

//if the lookUp (the most recent array entry) isn't the same as the current URL drop the request from the array.
//if (lookUp != utm && lookUp != eKml && lookUp != wKml){
//alert(lookUp + utm + currentKmlfile)
//currentKmlkit = currentKmlkit.shift();
//ge.getFeatures().removeChild(currentKmlfile);+latlongloc+
//}

}

    curUtm = utmNS;
var x = 'Now centered in UTM' + curUtm + '<br />'+latlongloc  +  '<br  />Lidar limits displayed in UTM: ' ;

for(var i=0;i<currentKmlkit.length;i++){
var currentUTM = currentKmlkit[i].replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","");
x  = x + currentUTM + "<input type='checkbox' checked='true' onclick=\"removeKml('"+ currentUTM +"')\";/> ";




}
 
document.getElementById('msg').innerHTML = x;  
  
  });  
  /*
  function finishFetchKml(kmlObject) {
  // check if the KML was fetched properly
  if (kmlObject) {
    // add the fetched KML to Earth



    currentKmlObject = kmlObject;
    ge.getFeatures().appendChild(currentKmlObject);
  } else {
    // wrap alerts in API callbacks and event handlers
    // in a setTimeout to prevent deadlock in some browsers
    setTimeout(function() {
      alert(' KML3.' + kmlObject + ': data did not load.');
    }, 0);
    //window.location.reload();
  }
}

  */

      google.earth.addEventListener(ge.getView(), 'viewchange', function(evt) {


//////////////////////
//   draw the viewport indicator, with script to fetch lat/lons for the UTM converter in real time:
/////////////////////

        map.clearOverlays();
    
        var totalBounds = new GLatLngBounds();
    
        // get the globe bounds (method 1)
        var globeBounds = ge.getView().getViewportGlobeBounds();
        var fakeBoundsCenter = null;
    
        if (globeBounds) {
          globeBounds.setNorth(Math.min(globeBounds.getNorth(), 85));
          globeBounds.setSouth(Math.max(globeBounds.getSouth(), -85));
    
          if (globeBounds.getEast() == 180 && globeBounds.getWest() == -180) {
            fakeBoundsCenter = new GLatLng(0, 0);
            var globeBoundsPolygon = new GPolygon([
                new GLatLng(globeBounds.getNorth(), -179),
                new GLatLng(globeBounds.getNorth(), 0),
                new GLatLng(globeBounds.getNorth(), 179),
                new GLatLng(globeBounds.getSouth(), 179),
                new GLatLng(globeBounds.getSouth(), 0),
                new GLatLng(globeBounds.getSouth(), -179),
                new GLatLng(globeBounds.getNorth(), -179)],
                '#0000ff', 2, 1.00,
                '#0000ff',    0.25,
                { clickable: false });
          } else {
            var globeBoundsPolygon = new GPolygon([
                new GLatLng(globeBounds.getNorth(), globeBounds.getWest()),
                new GLatLng(globeBounds.getNorth(), globeBounds.getEast()),
                new GLatLng(globeBounds.getSouth(), globeBounds.getEast()),
                new GLatLng(globeBounds.getSouth(), globeBounds.getWest()),
                new GLatLng(globeBounds.getNorth(), globeBounds.getWest())],
                '#0000ff', 2, 1.00,
                '#0000ff',    0.25,
                { clickable: false });
          }
    
         
    
          var polyBounds = globeBoundsPolygon.getBounds();
          totalBounds.extend(polyBounds.getNorthEast());
          totalBounds.extend(polyBounds.getSouthWest());
        }
    
        // hit test the corners (method 2)
        var hitTestTL = ge.getView().hitTest(0, ge.UNITS_FRACTION, 0, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
        var hitTestTR = ge.getView().hitTest(1, ge.UNITS_FRACTION, 0, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
        var hitTestBR = ge.getView().hitTest(1, ge.UNITS_FRACTION, 1, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
        var hitTestBL = ge.getView().hitTest(0, ge.UNITS_FRACTION, 1, ge.UNITS_FRACTION, ge.HIT_TEST_GLOBE);
    
    
var TLlong = hitTestTL.getLongitude() ;
var TRlong = hitTestTR.getLongitude() ;
var BLlong =  hitTestBL.getLongitude();
var BRlong =  hitTestBR.getLongitude();
var longs = [TLlong,TRlong,BLlong,BRlong]; 
var maxLong = Math.max.apply(-180,longs);
var minLong =  Math.min.apply(-180,longs);
var centerLong = (maxLong + minLong)/2;

var bcenterLong = (BRlong + BLlong)/2;


var TLlat = hitTestTL.getLatitude() ;
var TRlat = hitTestTR.getLatitude() ;
var BLlat =  hitTestBL.getLatitude();
var BRlat =  hitTestBR.getLatitude();
var lats = [TLlat,TRlat,BLlat,BRlat]; 
var maxLat = Math.max.apply(-180,lats);
var minLat =  Math.min.apply(-180,lats);
var centerLat = (maxLat + minLat)/2;
var bcenterLat = (BRlat + BLlat)/2;
//////////////////////////////////////////////
//// some adjustments so the page will reload near the location set in the cookie + some hack to make it work in IE
/////////////////////////////////////////////
bcenterLat = (centerLat + bcenterLat)/2;
/*@cc_on
   @if (@_win32)
      bcenterLat = (centerLat + ((BRlat + BLlat)/2)) / 2;
   @end
@*/

function roundN(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

var lon = centerLong;
var lat = centerLat;
//show max and min of four corners (for fetching all kml)
//'<br /> '+roundN(maxLong,5)+'<br />' + roundN(minLong,5) + 
latlongloc = 'Latitude: '+ roundN(lat,8) +'<br />Longitude: '+ roundN(lon,8) ;
curUtm = btnToUTM_OnClick(centerLat,centerLong);

 var center = '' + bcenterLat + ',' + bcenterLong + '';
createCookie("LidarPortalLoc",center,7)
// createDomainCookie("kmlsize","",,"http://www.airborne1.datatransfer")
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

//var utmZone = btnToUTM_OnClick(centerLat,centerLong);

// '<br />TL' + hitTestTL.getLongitude() + '<br />TR' + hitTestTL.getLatitude() + '<br />TR:' + hitTestTR.getLongitude() + '<br />TR:' + hitTestTR.getLatitude() +'<br />BL:' + hitTestBL.getLongitude()+ '<br />BL:' + hitTestBL.getLatitude()+ '<br />BR:' + hitTestBR.getLongitude()+ '<br />BL:' + hitTestBR.getLatitude()+ '';

        
        
        // ensure that all hit tests succeeded (i.e. the viewport is 2d-mappable i.e. no sky)
        if (hitTestTL && hitTestTR && hitTestBL && hitTestBR) {
          var hitTestBoundsPolygon = new GPolygon([
              new GLatLng(hitTestTL.getLatitude(), hitTestTL.getLongitude()),
              new GLatLng(hitTestTR.getLatitude(), hitTestTR.getLongitude()),
              new GLatLng(hitTestBR.getLatitude(), hitTestBR.getLongitude()),
              new GLatLng(hitTestBL.getLatitude(), hitTestBL.getLongitude()),
              new GLatLng(hitTestTL.getLatitude(), hitTestTL.getLongitude())],
              '#ff0000', 2, 1.00,
              '#ff0000',    0.25,
              { clickable: false });
          map.addOverlay(hitTestBoundsPolygon);
    
          var polyBounds = hitTestBoundsPolygon.getBounds();
          totalBounds.extend(polyBounds.getNorthEast());
          totalBounds.extend(polyBounds.getSouthWest());
        }
    
        if (!totalBounds.isEmpty()) {
          map.setCenter(fakeBoundsCenter ? fakeBoundsCenter : totalBounds.getCenter(),
              map.getBoundsZoomLevel(totalBounds));
        }
      });
    
      function finished(object) {
    if (!object) {
      // wrap alerts in API callbacks and event handlers
      // in a setTimeout to prevent deadlock in some browsers
      setTimeout(function() {
        alert('2');
      }, 0);
      return;
    }
    
    
    ge.getFeatures().appendChild(object);
  
  }








      
    }
    
    function failureCallback(errorCode) {
    }
    

 //for toggling kml files on user select

function toggleKml(file) {
  // remove the old KML object if it exists
  if (currentKmlObjects[file]) {
    ge.getFeatures().removeChild(currentKmlObjects[file]);
    currentKmlObject = null;
 
  
  
 }else {  if (file !=="99S" && file != "index"){loadKml(file)};}
 


 
 
  // if the checkbox is checked, fetch the KML and show it on Earth
  var kmlCheckbox = document.getElementById('kml-' + file + '-check');

  if (file == "99S"){
  if (kmlCheckbox.checked){document.getElementById('obliqueicon').innerHTML ='<img src="http://maps.google.com/mapfiles/kml/paddle/ylw-stars.png" height="20px">';  loadKml(file);} else (document.getElementById('obliqueicon').innerHTML ='' )
}}


 //for toggling kml files on user select

function removeKml(file) {
  // remove the old KML object if it exists
  if (currentKmlObjects[file]) {
    ge.getFeatures().removeChild(currentKmlObjects[file]);
    currentKmlObject = null;
     //and take it off of the UTM list
  for(var i=0;i<currentKmlkit.length;i++){
var thisUTM = currentKmlkit[i].replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","");
  if (thisUTM == file){currentKmlkit.splice(i,1)}}
 } 

var x = 'Now centered in UTM' + curUtm + '<br />'+latlongloc  +  '<br  />Lidar limits displayed in UTM: ' ;

for(var i=0;i<currentKmlkit.length;i++){
var currentUTM = currentKmlkit[i].replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","");


x  = x + currentUTM + "<input type='checkbox' checked='true' onclick=\"removeKml('"+ currentUTM +"')\";/> ";
}
 document.getElementById('msg').innerHTML = x ;  
 }



function loadKml(file) {
file = file.replace("http://www.airborne1datatransfer.com/downloads/zones.php?UTM=","")

  var kmlUrl = 'http://www.airborne1datatransfer.com/downloads/zones.php?UTM=' + file;
  // fetch the KML
  google.earth.fetchKml(ge, kmlUrl, function(kmlObject) {
    
    if (kmlObject) {
      // show it on Earth
      currentKmlObjects[file] = kmlObject;
      ge.getFeatures().appendChild(kmlObject);
    } else {
      // bad KML
      currentKmlObjects[file] = null;

      // wrap alerts in API callbacks and event handlers
      // in a setTimeout to prevent deadlock in some browsers
      setTimeout(function() {
        alert('KML data did not load. 1: ' + file + '.');
      }, 0);

      // check the box
    //  document.getElementById('kml-' + file + '-check').checked = 'checked';
    }
  });
}

function buttonClick() {
  var geocodeLocation = document.getElementById('location').value;

  var geocoder = new google.maps.ClientGeocoder();
  geocoder.getLatLng(geocodeLocation, function(point) {
    if (point) {
      var lookAt = ge.createLookAt('');
      lookAt.set(point.y, point.x, 10, ge.ALTITUDE_RELATIVE_TO_GROUND,
                 0, 40, 150000);
      ge.getView().setAbstractView(lookAt);
    }
  });
}

// make the enter key submit the search form after text is entered in search box

     function searchKeyPress(e)
        {
                // look for window.event in case event isn't passed in
                if (window.event) { e = window.event; }
                if (e.keyCode == 13)
                {
                        document.getElementById('searchbtn').click();
                }
        }



 
 function layers_options(){
 if (document.getElementById('borders').checked == true) {
 showBorders()}
  if (document.getElementById('borders').checked == false) {
hideBorders()}
 if (document.getElementById('buildings').checked == true) {
 showBuildings()}
  if (document.getElementById('buildings').checked == false) {
hideBuildings()}
 if (document.getElementById('roads').checked == true ){
 showRoads()}
  if (document.getElementById('roads').checked == false ){
hideRoads()}
if (document.getElementById('terrain').checked == true) {
showTerrain()}
  if (document.getElementById('terrain').checked == false) {
hideTerrain()}
if (document.getElementById('nav').checked == true) {showNav()}
if (document.getElementById('nav').checked == false) {hideNav()}
 


 
   function hideBorders() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, false);
}

 function showBorders() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
}
 
 
  function hideRoads() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, false);
}

 function showRoads() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
}
 
 function hideBuildings() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);
}

 function showBuildings() {
  ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
}

function showTerrain() {
   ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
}

function hideTerrain() {
   ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);
}


function showNav(){ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);}
function hideNav(){ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);}
 var options = ge.getOptions();
  var form = document.options;

options.setStatusBarVisibility(form.statusbar.checked);
  options.setGridVisibility(form.grid.checked);
  options.setOverviewMapVisibility(form.overview.checked);
  options.setScaleLegendVisibility(form.scaleLegend.checked);
  options.setAtmosphereVisibility(form.atmosphere.checked);




}




    // Load and display KML file
  function  fetchKml(kmlUrl){
		google.earth.fetchKml(ge, kmlUrl, this.addKml.createDelegate(this));
    };

    // Add KML object (called by above function)
   function addKml(kmlObject){
        if (kmlObject) {
       		ge.getFeatures().appendChild(kmlObject);
   
      		
       		
   		} else {
       		alert('KML did not load');
   		}
    };
    
  var currentKmlObject = null;

function fetchKmlFromInput() {
  // remove the old KML object if it exists
  if (currentKmlObject) {
    ge.getFeatures().removeChild(currentKmlObject);
    currentKmlObject = null;
  }

  var kmlUrlBox = document.getElementById('userKml').value;


  google.earth.fetchKml(ge, kmlUrlBox, finishFetchKml);
}

function finishFetchKml(kmlObject) {
  // check if the KML was fetched properly
  if (kmlObject) {
    // add the fetched KML to Earth
    currentKmlObject = kmlObject;
    ge.getFeatures().appendChild(currentKmlObject);
    document.getElementById('userKmlMsg').innerHTML = "&nbsp;";
  } else {
    // wrap alerts in API callbacks and event handlers
    // in a setTimeout to prevent deadlock in some browsers
    setTimeout(function() {
      document.getElementById('userKmlMsg').innerHTML = "File did not validate as KML.";
    }, 0);
  }
}

//open a pop-up window to upload limits to lidarxchange.com
function open_uploadlimits()
{
	window.open("http://www.lidarxchange.com/sendLimits.php","contact","menubar=0,resizable=1,width=450,height=530");
}


 //size portal to fit full window:
    function reSize(){

      
 var h = document.body.clientHeight  ;  var w = document.body.clientWidth  ;
 width = (w*1)-300;
 height = (h*1)-145;
 

document.getElementById('center').style.width = width + "px";
document.getElementById('center').style.height = height + "px";


// set maximum window size in which scroll bars will appear (prevents Jquery Accordion hiccup in I.E.)
if (height < 520){document.body.style.overflowY='auto'}else {document.body.style.overflowY='hidden'}
if (width < 500){document.body.style.overflowX='auto'}else {document.body.style.overflowX='hidden'}
 };



 