		if (!Array.prototype.forEach) {
			Array.prototype.forEach = function(fun /*, thisp*/) {
			    var len = this.length;
			    if (typeof fun != "function")
					throw new TypeError();
				var thisp = arguments[1];
				for (var i = 0; i < len; i++) {
					if (i in this)
						fun.call(thisp, this[i], i, this);
				}
			};
		};
		if (!Array.prototype.indexOf) {
			Array.prototype.indexOf = function(elt /*, from*/) {
				var len = this.length;
				var from = Number(arguments[1]) || 0;
					from = (from < 0)
						? Math.ceil(from)
						: Math.floor(from);
					if (from < 0)
						from += len;
				for (; from < len; from++) {
					if (from in this && this[from] === elt)
						return from;
				}
				return -1;
			};
		};
		var species = [];
		var itis_hash = [];
		YAHOO.util.Event.onAvailable("caudataspeciestablebodydiv",
			function () {
				var el = document.getElementById("anuraspeciestablebodydiv");
				el.innerHTML = "Loading...";
				el = document.getElementById("caudataspeciestablebodydiv");
				el.innerHTML = "Loading...";
				var ajax_request = YAHOO.util.Connect.asyncRequest('GET', "get_species_data2.php",
					{
						success: function (o) {
							species = eval('(' + o.responseText + ')');
							//alert(species.length + " species loaded."); // *debug*
							build_table ('Anura', "anuraspeciestablebodydiv", "draw_map");
							build_table ('Caudata', "caudataspeciestablebodydiv", "draw_map");
							species.forEach(function (s, si) {
								itis_hash[s.itis] = si;
							});
						},
						failure: function (o) {
							el.innerHTML = o.responseText;
						}
					}); 
			});
		function build_table (sorder, elid, fname) {
			var el = document.getElementById(elid);
			var table_str = "<table class='speciestable'>";
			var rn = 0;
			species.forEach(function (s, si) {
				if (s.o == sorder) {
					rn++;
					var class_str = "";
					if (rn%2 == 0) {
						class_str = "";
					} else {
						class_str = " class='colorrow'";
					};
					table_str += "<tr" + class_str + ">" +
						"<td><a href='javascript:" + fname + "(\"" + s.itis + "\");'>" + s.cn + "</a></td>" +
						"<td><a href='javascript:" + fname + "(\"" + s.itis + "\");'>" + s.sn + "</a></td>" +
						"</tr>";
				};
			});
			table_str += "</table>";
			el.innerHTML = table_str;
		}
		function spsort (fld) {
			species.sort(function(a,b){
				var rv = 0;
				if (a[fld].toUpperCase()==b[fld].toUpperCase()) {
					rv = 0;
				} else if (a[fld].toUpperCase() < b[fld].toUpperCase()) {
					rv = -1;
				} else {
					rv = 1;
				};
				return rv;
			});
			species.forEach(function (s, si) {
				itis_hash[s.itis] = si;
			});
		}

function dsupdate (sel) {
	var ds_content_el = document.getElementById("ds_content");
	if (sel == "species") {
		var hstr = '<div class="speciestablelabel">Frogs &amp; Toads (Anura)</div>';
		hstr += '<div class="speciestablehead">';
		hstr += '<table class="speciestable">';
		hstr += '<tr><td><a href="javascript:spsort(\'cn\');build_table(\'Anura\',\'anuraspeciestablebodydiv2\',\'get_sources\');">Common Name</a></td>';
		hstr += '<td><a href="javascript:spsort(\'sn\');build_table(\'Anura\',\'anuraspeciestablebodydiv2\',\'get_sources\');">Scientific Name</a></td></tr>';
		hstr += '</table></div><div id="anuraspeciestablebodydiv2" class="speciestablebody">&nbsp;</div>';
		hstr += '<div class="speciestablelabel">Salamanders (Caudata)</div>';
		hstr += '<div class="speciestablehead">';
		hstr += '<table class="speciestable">';
		hstr += '<tr><td><a href="javascript:spsort(\'cn\');build_table(\'Caudata\',\'caudataspeciestablebodydiv2\',\'get_sources\');">Common Name</a></td>';
		hstr += '<td><a href="javascript:spsort(\'sn\');build_table(\'Caudata\',\'caudataspeciestablebodydiv2\',\'get_sources\');">Scientific Name</a></td></tr>';
		hstr += '</table></div><div id="caudataspeciestablebodydiv2" class="speciestablebody">&nbsp;</div>';
		ds_content_el.innerHTML = hstr;
		build_table ('Anura', "anuraspeciestablebodydiv2", "get_sources");
		build_table ('Caudata', "caudataspeciestablebodydiv2", "get_sources");
	} else {
		var hstr2 = 'Select a state&nbsp;<br/><select id="state_sel2" onselect=""><option value="">-All States-</option>';
		hstr2 += '<option value="02">Alabama</option><option value="03">Alaska</option><option value="06">Arizona</option>';
		hstr2 += '<option value="07">Arkansas</option><option value="14">California</option><option value="17">Colorado</option>';
		hstr2 += '<option value="18">Connecticut</option><option value="21">Delaware</option><option value="22">District of Columbia</option>';
		hstr2 += '<option value="25">Florida</option><option value="27">Georgia</option><option value="96">Hawaii</option>';
		hstr2 += '<option value="33">Idaho</option><option value="34">Illinois</option><option value="35">Indiana</option>';
		hstr2 += '<option value="36">Iowa</option><option value="38">Kansas</option><option value="39">Kentucky</option>';
		hstr2 += '<option value="42">Louisiana</option><option value="44">Maine</option><option value="46">Maryland</option>';
		hstr2 += '<option value="47">Massachusetts</option><option value="49">Michigan</option><option value="50">Minnesota</option>';
		hstr2 += '<option value="51">Mississippi</option><option value="52">Missouri</option><option value="53">Montana</option>';
		hstr2 += '<option value="54">Nebraska</option><option value="55">Nevada</option><option value="58">New Hampshire</option>';
		hstr2 += '<option value="59">New Jersey</option><option value="60">New Mexico</option><option value="61">New York</option>';
		hstr2 += '<option value="63">North Carolina</option><option value="64">North Dakota</option><option value="66">Ohio</option>';
		hstr2 += '<option value="67">Oklahoma</option><option value="69">Oregon</option><option value="72">Pennsylvania</option>';
		hstr2 += '<option value="74">Puerto Rico</option><option value="77">Rhode Island</option><option value="80">South Carolina</option>';
		hstr2 += '<option value="81">South Dakota</option><option value="82">Tennessee</option><option value="83">Texas</option>';
		hstr2 += '<option value="85">Utah</option><option value="87">Vermont</option><option value="88">Virginia</option>';
		hstr2 += '<option value="89">Washington</option><option value="90">West Virginia</option><option value="91">Wisconsin</option>';
		hstr2 += '<option value="92">Wyoming</option></select><br/>';
		ds_content_el.innerHTML = hstr2;
	}
}

function get_sources (itis) {
	
}

function get_state_sources (state) {
	
}

var g_content_loaded = ""; // Global: Which page is loaded into content?
var myMap1 = new Object();
var myMap2 = new Object();
var g_itis = "" // Global: What is the itis of the current map?

function update_map_thumbnail () {
	//alert(myMap1.get_map_url()); // *debug*
	//document.getElementById('map_snapshot').src = myMap1.get_map_url();
	if (myMap1.get_map_url) {
		newwindow = window.open("","name","left=10,top=10,height=430,width=620");
		// open new document 
		newwindow.document.open();

		// Text of the new document
		newwindow.document.write("<html><title>Species Map Image</title>");
		newwindow.document.write("<body bgcolor=\"#FFFFFF\">");
		newwindow.document.write("<img src="+myMap1.get_map_url()+">");
		newwindow.document.write("</body></html>");

		// close the document
		newwindow.document.close(); 
	}
}

function build_pdf () {
	if (myMap1.get_map_url) {
		newwindow2 = window.open("get_pdf.php?s=" + species[itis_hash[g_itis]].sn +
			"&cn=" + species[itis_hash[g_itis]].cn +
			"&mapurl=" + encodeURIComponent(myMap1.get_map_url()),
			"name", "left=10,top=10,height=630,width=520");
	}
}

function species_string (commonname, sciname) {
  var str = "";
  str = "<span style='text-transform:capitalize;'>" + commonname +
    "</span>&nbsp;<span style='font-style:italic;'>(" + sciname + ")</span>";
  return str;
} // end species_string

function draw_map (itis) {
  document.getElementById('map_tag').innerHTML = ""; // Remove any previous map image.
  document.getElementById('ref_tag').innerHTML = ""; // Ditto for the reference map.
  if (itis !== "") {
  	g_itis = itis;
    document.getElementById('speciesStringSpan').innerHTML = species_string(species[itis_hash[itis]].cn,
		species[itis_hash[itis]].sn);
	//alert(species[itis_hash[itis]].mn);
    document.getElementById('mapnote').innerHTML = species[itis_hash[itis]].mn;
    myMap1 = new msMap (document.getElementById('map_tag'), "standardRight");
    //myMap1.debug(); // Turn on debug mode.
    myMap1.setCgi ('/cgi-bin/mapserv.exe');
    myMap1.setFullExtent(species[itis_hash[itis]].minx, species[itis_hash[itis]].maxx,
		species[itis_hash[itis]].miny); // was -6500000,3443692,-2400000);
    //myMap1.setFullExtent(-6500000,3443692,-2400000);
    if (document.domain == "localhost") {
      myMap1.setMapFile( '../htdocs/mapserver/naatlas.map'); // set map location relative to location of mapserver cgi
    } else {
      myMap1.setMapFile( '../../../MapserverData/naatlas.map'); // set map location relative to location of mapserver cgi	  	
    }
    myMap1.setLayers(species[itis_hash[itis]].o);
    myMap1.setArgs("spsi="+(species[itis_hash[itis]].pid-1)); //pid=Species Position String Index
    //alert("In drawMap... ITIS="+itis+" Order="+species[itis_hash[itis]].o+" SPSI="+species[itis_hash[itis]].pid);
    //alert("Extent={"+species[itis_hash[itis]].minx+","+species[itis_hash[itis]].maxx+","+species[itis_hash[itis]].miny+","+species[itis_hash[itis]].maxy+"}");
    myMap2 = new msMap(document.getElementById('ref_tag'));
    myMap2.setCgi( '/cgi-bin/mapserv.exe' );
    myMap2.setActionNone();
    myMap2.setFullExtent(-6500000, 3443692, -2400000);
    if (document.domain == "localhost") {
      myMap2.setMapFile('../htdocs/mapserver/naatlasref.map');
    } else {
      myMap2.setMapFile('../../../MapserverData/naatlasref.map');
    }
    myMap1.setReferenceMap(myMap2);
    myMap1.redraw();
    myMap2.redraw();
  }
} // end draw_map

function onAccordionOpen (obj) {
	var dl = obj.dl;
	var dt = obj.dt;
	var dd = obj.dd;
	if ((dt.id == "my-dt-1") || (dt.id == "my-dt-2")) {
		if (g_content_loaded != "map.php") {
			load_url ("map.php", "content");
		}
	}
}

var accordion_options= {
	/*all options are optional*/
	/* [ bool ] if dependent is false, then each menu opens/closes independently*/
	dependent: false,
	/* [function] callback when a menu is opened*/
	onOpen: onAccordionOpen,
	/* [function] ccallback when a menu is closed*/
	/*onClose: onAccordionClose,*/
	/* [array] ids of opened by default <dt>*/
	openedIds: [], // was ['my-dt-2','my-dt-3'],
	/* [number ] seconds for animations*/
	seconds: 0.3,
	/*[ bool ] set true if the animation is to be played slower and slower and vise versa*/
	easeOut: true,
	/*[ bool ] set true if the animation is to be played*/
	animation: true };

//var setting = new AccordionMenu.setting ("navbar-accordion", accordion_options);

YAHOO.util.Event.onDOMReady(
	function () {
		load_url("map.php","content");
	});

// Utility function to do the general AJAX load content into a block.
function load_url (url, div) {
	var ajax_request = YAHOO.util.Connect.asyncRequest('GET', url,
		{
			success: function (o) {
				document.getElementById (div).innerHTML = o.responseText;
				g_content_loaded = url;
			},
			failure: function (o) {
				document.getElementById (div).innerHTML = o.responseText;
			}
		}); 
}