// Watershed support code
//
// Copyright 2009 Jeffrey D. Campbell, except as noted

// var kmlSourceBaseURL = "http://environmentalinformatics.home.comcast.net/~environmentalinformatics/"


//<![CDATA[
var forestryURL="../wslog.php"
    var kmlSourceBaseURL = "http://www.environmentalinformatics.com/Maps/Columbia/data/"


/*
 "XXXX": 
 {"kmlFile": "XXXX.kml",
  "name": "Beaver Run Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
*/    
    var layers = {
 "WSPatuxent": 
 {"kmlFile": "Patuxent.kml",
  "name": "Patuxent Watershed",
  "parent": "sidebarLIST",
  "overlayListener": "",
  "blnVisible": true},
 "WSLittlePatuxent": 
 {"kmlFile": "LittlePatuxent.kml",
  "name": "Little Patuxent Watershed",
  "parent": "Patuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLakeKittamaqundi": 
 {"kmlFile": "sWSLakeKittamaqundi.kml",
  "name": "Lake Kittamaqundi",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSBeaverRun": 
 {"kmlFile": "sWSBeaverRun.kml",
  "name": "Beaver Run Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSCentenialLake": 
 {"kmlFile": "sWSCentenialLake.kml",
  "name": "Centenial Lake Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSGatewayTributary": 
 {"kmlFile": "sWSGatewayTributary.kml",
  "name": "Gateway Tributary Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSGuilfordBranch": 
 {"kmlFile": "sWSGuilfordBranch.kml",
  "name": "Guilford Branch Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLakeElkhorn": 
 {"kmlFile": "sWSLakeElkhorn.kml",
  "name": "Lake Elkhorn Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},  
 "WSMiddlePatuxent": 
 {"kmlFile": "MiddlePatuxent.kml",
  "name": "Middle Patuxent Watershed",
  "parent": "Patuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLittlePatuxentBelowElkhorn":
 {"kmlFile": "sWSLittlePatuxentBelowElkhorn.kml",
  "name": "Little Patuxent Watershed below Elkhorn",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLittlePatuxentbelowFontHill": 
 {"kmlFile": "sWSLittlePatuxentbelowFontHill.kml",
  "name": "Little Patuxent Watershed below FontHill",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLittlePatuxentbelowLakeKittamaqundi": 
 {"kmlFile": "sWSLittlePatuxentbelowLakeKittamaqundi.kml",
  "name": "Little Patuxent Wateshed below Lake Kittamaqundi",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLowerDorseyRun": 
 {"kmlFile": "sWSLowerDorseyRun.kml",
  "name": "Lower Dorsey Run Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSLowerRiverHillTributary": 
 {"kmlFile": "sWSLowerRiverHillTributary.kml",
  "name": "Lower River Hill Tributary Watershed",
  "parent": "MiddlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSMiddlePatuxentInMPEA": 
 {"kmlFile": "sWSMiddlePatuxentInMPEA.kml",
  "name": "Middle Patuxent Watershed in MPEA",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSMiddlePatuxentBelowMPEA": 
 {"kmlFile": "sWSMiddlePatuxentBelowMPEA.kml",
  "name": "Middle Patuxent Watershed Below MPEA",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSMiddlePatuxentInGorman": 
 {"kmlFile": "sWSMiddlePatuxentInGorman.kml",
  "name": "Middle Patuxent Watershed In Gorman",
  "parent": "MiddlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSPindellSchoolRoadTributary": 
 {"kmlFile": "sWSPindellSchoolRoadTributary.kml",
  "name": "Pindell School Road Tributary Watershed",
  "parent": "MiddlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSPlumtreeBranch": 
 {"kmlFile": "sWSPlumtreeBranch.kml",
  "name": "Plumtree Branch Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSRedHillBranch": 
 {"kmlFile": "sWSRedHillBranch.kml",
  "name": "Red Hill Branch Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSUpperDorseyRun": 
 {"kmlFile": "sWSUpperDorseyRun.kml",
  "name": "Upper Dorsey Run Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "sWSWildeLake": 
 {"kmlFile": "sWSWildeLake.kml",
  "name": "Wilde Lake Watershed",
  "parent": "LittlePatuxent",
  "overlayListener": "",
  "blnVisible": true},
 "WSPatapsco": 
 {"kmlFile" : "Patapsco.kml",
   "name": "Patapsco Watershed",
  "parent": "sidebarLIST",
  "overlayListener": "",
  "blnVisible": true},
 "WSPatapscoLNBr":  
{"kmlFile": "PatapscoLNBr.kml",
   "name": "Patapsco Lower North Branch Watershed",
  "parent": "sidebarLIST",
  "overlayListener": "",
  "blnVisible": true},
 "sWSUpperDeepRun": 
 {"kmlFile": "sWSUpperDeepRun.kml",
  "name": "Upper Deep Run Watershed",
  "parent": "Patapsco L N Branch",
  "overlayListener": "",
  "blnVisible": true}
};

var map;
var currentULLevel =1;

var mruOverlay;
var mruCount = 1;

// ************************************  onLoad ********************************
    function onLoad() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
	map.addMapType(G_PHYSICAL_MAP);
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	//typeControl.addEventListener("onchange", function(){alert("Change Type");});
	//GEvent.addListener(typeControl, "click", function(){alert("Change Type");});
	map.addControl(new AboutControl());
	map.addControl(new HelpControl());
        map.setCenter(new GLatLng(39.2264429, -76.858117), 11);
//	map.setMapType(G_HYBRID_MAP);
//	map.setMapType(G_NORMAL_MAP);
	map.setMapType(G_PHYSICAL_MAP);

/*  	GEvent.addListener(map,"click", function(overlay, latlng) {     
  	if (latlng) { 
    	  var myHtml = "The Overlay value is: " + latlng;
    	  map.openInfoWindow(latlng, myHtml);
  	}
        });
*/
  	GEvent.addListener(map,"addoverlay", function(overlay){handleLayerAdded(overlay)});


// Resize logic code from page 216 Google Maps Hacks
   if (window.attachEvent) {
        window.attachEvent("onresize", function() {this.map.onResize()} );
	window.attachEvent("onload", function() {this.map.onResize()});
   } else if (window.addEventListener) {
        window.addEventListener("resize",
	    function() {this.map.onResize()}, false);
	window.addEventListener("load", function() {this.map.onResize()}, false);
   }
  // request that tabular search results should be suppressed
  var options = {
    resultList : google.maps.LocalSearch.RESULT_LIST_SUPPRESS,
    onSearchCompleteCallback: searchComplete,
    searchFormHint : "Find watershed for address"
  };

    map.addControl(new google.maps.LocalSearch(options),
        new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
    document.getElementById("currentWatershed").innerHTML = "maps loading";    	
// LOAD KML Layers
	for(var layer in layers) {
	     // addList(layer, layers[layer].name);
	      if (layers[layer].blnVisible){ 
	           addLayer(layer, false);
	      } else {
              }
	      try {
	          document.getElementById(layer).checked = layers[layer].blnVisible;
	      }
	      catch (err) {
	          alert ("Error Loading Layer " + layer + " " + err.description);

	      }
	}
    document.getElementById("currentWatershed").innerHTML = "move mouse to see name when maps finish loading";    		
 }  // if browser compatible
        
} // end of function onLoad

    GSearch.setOnLoadCallback(onLoad);
 

function addLayer(id, isZoomTo) {
//    document.getElementById("debugger").innerHTML = "begin addLayer" + id;
 //GLog.write ("begin addLayer" + id);
 var geoXml = new GGeoXml(kmlSourceBaseURL + layers[id].kmlFile); 
   GEvent.addListener(geoXml, 'load', function() {
      if (geoXml.loadedCorrectly()) {
       // geoXml.gotoDefaultViewport(map);
        layers[id].geoXml = geoXml;
	//GLog.write("loaded kml " + id);
      //  document.getElementById("status").innerHTML = "";
      } else {
	//GLog.write ("geoXML not loadedCorrectly " + id);
      }
    });
    layers[id].geoXml = geoXml;
    //mruOverlay = layers[id].name + mruCount++;
    map.addOverlay(layers[id].geoXml);

}
function toggleGeoXML(id, checked, isZoomTo) {

if (checked) {
    //GLog.write ("Toggle " + id + " ON");
    addlayer(id, isZoomTo);
/*
    var geoXml = new GGeoXml(kmlSourceBaseURL + layers[id].kmlFile);
   GEvent.addListener(geoXml, 'load', function() {
      if (geoXml.loadedCorrectly()) {
        if (isZoomTo) {geoXml.gotoDefaultViewport(map)};
        layers[id].geoxml = geoXml;
        document.getElementById("status").innerHTML = "";
	}
    });
   layers[id].geoXml = geoXml;
   map.addOverlay(layers[id].geoXml);
    //document.getElementById("status").innerHTML += "toggleGeoXML " + id + " after addOverlay\n";

*/  
  } else if (layers[id].geoXml) {
    //GLog.write ("Toggle " + id + " OFF");
    map.removeOverlay(layers[id].geoXml);
    GEvent.removeListener(layers[id].overlayListener);
  //  should unset layers[id].geoXml ???  12/9/2009   1/5/10 NO but should remove mouseover mouseout?
  }
}


function handleLayerAdded(overlay) {
	if (overlay.name == undefined) {
		////GLog.write ("add listner for mouse over Aborted - overlay.name is undefined");
	} else {
	//GLog.write ("adding listener for mouseover for " + overlay.name);
  	listenerIn = GEvent.addListener(overlay,"mouseover", function() {     
	mruOverlay = overlay.name;
	document.getElementById("currentWatershed").innerHTML = overlay.name;
	var myHtml = "Event  entering overlay " + overlay.name + " Display is " + mruOverlay;
    	//GLog.write( myHtml);	 
        });
  	listenerOut=GEvent.addListener(overlay,"mouseout", function() {     
	document.getElementById("currentWatershed").innerHTML = "Outside plan area";    	
	mruOverlay = "";
	var myHtml = "Event  leaving overlay " + overlay.name + " Display is " + mruOverlay;
	//GLog.write( myHtml);
        });
	for(var layer2 in layers) {
	        //GLog.write ("handleAddedOverlay attempt to match overlay to layer: " +overlay.name + " " + layers[layer2].name);
		if (layers[layer2].name == overlay.name) { 
	           layers[layer2].overlayListener = listenerIn;
		   //GLog.write ("found layer for listenerIn for " + overlay.name);
		   break;
		}
	}

} // end of if overlay

}


function searchComplete(response) {
  // Triggers after a user does a search
//   alert('response tpye is' +  typeof response);
//   alert('onSearchCompleteCallback: result #1: ' + response.results[0].titleNoFormatting);

  var args = "?A=AdSr&SA=" + escape(response.results[0].titleNoFormatting);
  parent.document.getElementById("Messager").src= forestryURL + args;
}


function goToKML(id) {
// if visible just go there
if (document.getElementById(id).checked) {
//     document.getElementById("debugger").innerHTML = id;
     layers[id].geoXml.gotoDefaultViewport(map);
} else {   // not visible, 
     document.getElementById(id).checked = true;
     toggleGeoXML(id, true, true)
}
//log it
  var args = "?A=Go&WSID=" + id + "&WS=" + escape(layers[id].name)
parent.document.getElementById("Messager").src= forestryURL + args;
}



/*  does not work since supportsHide is FALSE
function xxtoggleGeoXML(id, checked, isZoomTo) {

if (layers[id].supportsHide) {

if (checked) {
     layers[id].geoXml.hide;
} else {
     layers[id].geoXml.show;
}


} else {
//   document.getElementById("debugger").innerHTML = "Does not support Hide";
}
}
*/


//********************************************* About "control" *********************************code modified from ???
   function AboutControl() {
    }
    AboutControl.prototype = new GControl();

    // Creates a one DIV for each of the buttons and places them in a container
    // DIV which is returned as our control element. We add the control to
    // to the map container and return the element for the map class to
    // position properly.
    AboutControl.prototype.initialize = function(map) {
      var container = document.createElement("div");

      var zoomInDiv = document.createElement("div");
      this.setButtonStyle_(zoomInDiv);
      container.appendChild(zoomInDiv);
      zoomInDiv.appendChild(document.createTextNode("Watershed Interface by J. Campbell"));
  
      GEvent.addDomListener(zoomInDiv, "click", function() {
        window.open("http://www.environmentalInformatics.com", "_blank");
      }
      );

      map.getContainer().appendChild(container);
      return container;
    }

    AboutControl.prototype.getDefaultPosition = function() {
      return new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(50, 2));
    }

    // Sets the proper CSS for the given button element.
    AboutControl.prototype.setButtonStyle_ = function(button) {
      button.style.textDecoration = "underline";
      button.style.color = "#0000cc";
      //button.style.backgroundColor = "white";
      //button.style.font = "small Arial";
      button.style.font = "60% Arial";
      button.style.border = "0px solid black";
      button.style.padding = "2px";
      button.style.marginBottom = "3px";
      button.style.textAlign = "center";
      button.style.width = "25em";
      button.style.cursor = "pointer";
    }
//********************************************* Help "control" *********************************
   function HelpControl() {
    }
    HelpControl.prototype = new GControl();

    HelpControl.prototype.initialize = function(map) {
      var container = document.createElement("div");

      var zoomInDiv = document.createElement("div");
      this.setButtonStyle_(zoomInDiv);
      container.appendChild(zoomInDiv);
      zoomInDiv.appendChild(document.createTextNode("Help"));
  
      GEvent.addDomListener(zoomInDiv, "click", function() {
        window.open("WatershedHelp.htm", "","scrollbars=yes,width=450,height=200");
      }
      );

      map.getContainer().appendChild(container);
      return container;
    }

    HelpControl.prototype.getDefaultPosition = function() {
      return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 30));
    }

    // Sets the proper CSS for the given button element.
    HelpControl.prototype.setButtonStyle_ = function(button) {
      //button.style.textDecoration = "underline";
      button.style.color = "#0000cc";
      button.style.backgroundColor = "white";
      //button.style.font = "small Arial";
      button.style.font = "90% Arial";
      button.style.border = "1px solid black";
      button.style.padding = "2px";
      button.style.marginBottom = "3px";
      button.style.textAlign = "center";
      button.style.width = "4em";
      button.style.cursor = "pointer";
    }

 //]]>


