/* 
 * menuEngine.js: 
 * 
 * "Obligatory Header" Information
 * 
 * AJAX and other Javascript functions to support the main page for the JBNHS website.
 * Uses YUI (open source, public license) software.
 *
 * Built for John Burroughs Natural History Society
 * Copyright Helena Ridolfo, Idea & Action, 8/31/2007
 *
 */
 
//--------------- LOCALIZEABLE GLOBALS ---------------
var d=new Date();
var monthname=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
//Ensure correct for language. English is "January 1, 2004"
var TODAY = monthname[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear();
//---------------   END LOCALIZEABLE   ---------------

ME = new Object();
ME.isIE = 0;
ME.isFF = 0;
ME.docDir = "../docs/";
ME.phpDir = "./php/";

ME.setVars = function() {

		
	var hm = YAHOO.util.Dom.get("home"); 
	hm.onclick = ME.loadPage;
	YAHOO.util.Dom.get("home2").onclick=ME.loadPage;
	
	ME.bb = YAHOO.util.Dom.get("birdButt");
	ME.bb.onclick=ME.loadPage;
	YAHOO.util.Dom.get("mem2").onclick=ME.loadPage;
	YAHOO.util.Dom.get("members").onclick=ME.loadPage;
	YAHOO.util.Dom.get("contact2").onclick=ME.loadPage;
	YAHOO.util.Dom.get("about").onclick = ME.loadPage;
	YAHOO.util.Dom.get("member").onclick = ME.loadPage;
	YAHOO.util.Dom.get("contact").onclick = ME.loadPage;
	YAHOO.util.Dom.get("events").onclick = ME.loadPage;
	YAHOO.util.Dom.get("field").onclick = ME.loadPage;
    YAHOO.util.Dom.get("locations").onclick = ME.loadPage;
	YAHOO.util.Dom.get("links").onclick = ME.loadPage;
		
	ME.textArea = YAHOO.util.Dom.get("textBody");

	ME.isIE = (navigator.appName.indexOf("Microsoft") != -1);
  	ME.isFF = (navigator.appName.indexOf("Netscape") != -1);
	ME.cform = "notSet";
	ME.ta1 = YAHOO.util.Dom.get("textArea2");
	ME.tb2 = YAHOO.util.Dom.get("textBody2");
	ME.td1 = YAHOO.util.Dom.get("wl1");
	ME.td2 = YAHOO.util.Dom.get("wl2");

	var prm = YAHOO.util.Dom.get("param");
	if (prm) { ME.loadPage("",prm.childNodes[0].nodeValue); }
}

ME.clearTextArea = function(wh,s) {
	var whe = ((wh != "") ? wh : ME.textArea);
	var st = ((s) ? s: 0);
	if (whe.hasChildNodes()) {			
		while ( whe.childNodes.length > st){
			var t = whe.childNodes[0];
			whe.removeChild(t);
		}
	}

}

ME.loadPage = function(evt,el) {
  var thisEl;
  if (typeof(el) == "string" ) { thisEl = el; }
  else {
	 evt = (evt) ? evt : ((window.event) ? window.event : "");
 	 var elem = (evt.target) ? evt.target: evt.srcElement;  
	 thisEl = elem.id;
  }
    ME.clearTextArea("",0);
	ME.clearTextArea(ME.ta1,0);
	ME.clearTextArea(ME.tb2,0);
	ME.clearTextArea(ME.td1,0);
	ME.clearTextArea(ME.td2,0);
	ME.bb.src = "./images/birdButton.jpg";
	ME.bb.className = "";
	
	
	ME.pg = thisEl;
	switch(thisEl) {
		case "home":
		case "home2":
			ME.getInfo("main.txt");
			break;
		case "about":
			ME.fname="jbnhs.htm";
			ME.page="about";
			ME.getXMLInfo();
			break;
		case "field":
			ME.pg = "events";
		case "events":
			ME.fname="fieldtrips.htm";
			ME.page="fieldtrip";
			ME.getXMLInfo();
			break;
		case "birdButt":
			ME.pg = "locations";
		case "locations":
			ME.fname=ME.docDir+"whereToBird.xml";
			ME.fsname="BirdingUlster.htm";
			ME.page="where";
			ME.bb.src = "";
			ME.bb.className = "hidn";
			ME.getXMLInfo();
			break;
		case "mem2":
		case "mem3":
		case "members":
			ME.pg = "member";
		case "member":
			ME.fsname = ME.docDir+"jbnhsMembership.htm";
			ME.getInfo("membership.txt");
			break;
		case "links":
			ME.fname=ME.docDir+"jbnhs_links.xml";
			ME.page="links";
			ME.getXMLInfo();
			break;
		case "contact": 
		case "contact2":
			ME.getInfo("contact.txt");
			ME.fname="contactForm.php";
			ME.page="contact";
			ME.getXMLInfo();
			break;

		}
// 	}	
	
}



ME.showForm = function() {
	window.open("./docs/"+ME.fsname);	
}


//-------------------------------------------------------------------------------------//
// AJAX functions & helper functions

ME.getInfo = function(fname) {
	
   var cbObj = {
    success: ME.onGetInfo,
    failure: ME.onGetInfoNOK
  };

  YAHOO.util.Connect.asyncRequest("GET", "./php/getFile.php?inFile="+ME.docDir+fname, cbObj, null);
	
}


ME.onGetInfo = function(rsp) {
	var textSpot = YAHOO.util.Dom.get("textBody");
	 if (rsp.responseText!=null) {
    	 ME.mkNode(textSpot,"span",rsp.responseText,"inf");
		 ME.mkNode(ME.textArea,"br"," ","");
	 	 switch(ME.pg) {
			case "about":
				ME.mkNode(ME.textArea, "img", "./images/jbnhs.jpg");
				break;
			case "member":
				ME.mkNode(ME.textArea,"br","","inb");
				ME.mkNode(ME.textArea,"span","Word Document format JBNHS Membership Form ...","inb",ME.showForm);
				break;
		}
	}
}

ME.onGetInfoNOK = function(rsp) {
	alert("Unable to load file " +ME.fname);
}

//-------------------------------------------------------------------------------------//
// DOM manipulation functions

ME.headerNode = function(ptr,str) {
	var n = document.createElement("h4");
	ptr.appendChild(n);
	n.appendchild(document.createTextNode(str));
	return ptr;
}

ME.mkNode = function(ptr,ntype,txt,cls,fn) {
	switch(ntype){
		case "br":
			var n = document.createElement(ntype);
			ptr.appendChild(n);	
		case "h3":
		case "h4":
		case "h5":
			var n = document.createElement(ntype);
			var t = document.createTextNode(txt);
  		  //n.align="center";
			try {n.appendChild(t);}
			catch (e) { "";}
			try {ptr.insertBefore(n,ptr.childNodes[0]);}
			catch (e) { ptr.appendChild(n);}
	//		n.className = cls;
			break;
		case "img":
			var n = document.createElement(ntype);
			n.src=txt;
			n.align="center";
			ptr.appendChild(n);							  
	//		n.className = cls;
			break;
		default:
			var n = document.createElement(ntype);
			var t = document.createTextNode(txt);
			try {n.appendChild(t);}
			catch (e) { "";}

			ptr.appendChild(n);							  
			n.className = cls;
			break;
	}
	if (typeof(fn) != "undefined") { n.onclick = fn; }	
	return ptr;
}

ME.mkRule = function(ptr,cls) {
	var n = document.createElement("hr");
	ptr.appendChild(n);							  
	n.className = cls;
	return ptr;
}


ME.mkHref = function(ptr,title,cls,refStr,imgnm) {
	var n = document.createElement("a");
	n.appendChild(document.createTextNode(title+"  "));
	
	if (imgnm != "") {
		var m = document.createElement("img");
		n.appendChild(m);
		m.src = imgnm;
		m.border="0";
	}
	ptr.appendChild(n);							  
	n.href = refStr;
	n.target = "_blank";
	n.className = cls;
	return ptr;
}

ME.mkTable = function(ptr,tid) {
	var n = document.createElement("table");
	n.appendChild(document.createElement("tbody"));
	n.appendChild(document.createElement("tr"));										 
	ptr.appendChild(n);							  
	var m = document.createElement("td");
	n.appendChild(m);
	m.id = tid+"1";
	var mw = document.createElement("td");
	n.appendChild(mw);
	m.id = tid+"2";

}


//
// AJAX Function & helpers

ME.getXMLInfo = function() {
   var cbObj = {
    success: ME.onGetXInfoOK,
    failure: ME.onGetXInfoNOK
  };

  YAHOO.util.Connect.asyncRequest("GET", "./php/getXMLFile.php?inFile="+ME.fname, cbObj, null);
	
}

ME.showEntry = function(evt) {
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	if (evt) {
    	var elem = (evt.target) ? evt.target: evt.srcElement;
		var tlink = elem.childNodes[0].nodeValue;	
		
		switch (ME.page) {
			case "where":
				ME.whereMapHash[tlink].show();
				break;
			case "events":
				ME.evtMapHash[tlink].show();
				break;
		}
	}
	
	
}

ME.mkLink = function(fromWhere,what,whereTo,indx) {
	
	var n = document.createElement("span");
	if (typeof(indx) == "string") {
		var n2 = document.createElement("span");
		n2.appendChild(document.createTextNode(indx));
		fromWhere.appendChild(n2);
		n2.className = "inb";
		//n2.onclick = ME.showEntry;
	}
	n.appendChild(document.createTextNode(what));
	n.appendChild(document.createElement("br"));

	fromWhere.appendChild(n);
	n.onclick = ME.showEntry;
	n.className = "inb";
	
}

ME.evtMapHash = {};

ME.evtMap = function(ww,de,di,li) {
	this.whenwhere = ww;
	this.description = de;
	this.directions = di;
	this.dirLink = li;
	ME.evtCount = ME.evtCount*1 + 1;
	return this;
}

ME.evtMap.prototype = {
	show: function() {
		ME.clearTextArea(ME.ta1,0);
		ME.clearTextArea(ME.tb2,0);
		ME.mkNode(ME.tb2,"h5",this.whenwhere,"inf");
 		ME.mkNode(ME.tb2,"span",this.description,"inf");
		if (this.directions != "") {
			ME.mkHref(ME.ta1,"Directions","inb",this.dirLink,"");
			ME.mkNode(ME.ta1,"p",this.directions,"inf");
		}
	}
}


 
ME.evtTableMade = 0;
ME.evtCount = 0;

ME.whereMapHash = {};

ME.whereMap = function(sn,ti,de,se,di,li) {
	this.sNum = sn;
	this.title = ti;
	this.description = de;
	this.seasons = se;
	this.directions = di;
	this.dirLink = li; 
	
	ME.whereCount = ME.whereCount*1 + 1;
	return this;
}

ME.whereMap.prototype = {
	show: function() {
		ME.clearTextArea(ME.tb2,0);
		ME.clearTextArea(ME.ta1,0);
		var t = this.sNum +". "+ this.title;
		ME.mkNode(ME.tb2,"p",t,"emphasis");
 		ME.mkNode(ME.tb2,"p",this.description,"inf");
		ME.mkNode(ME.tb2,"p","Best Seasons: "+this.seasons,"emphasis");
		ME.mkHref(ME.ta1,"Directions","inb",this.dirLink,"./images/maps_results_logo.gif"  );
	//	ME.mkNode(ME.ta1,"img","./images/maps_results_logo.gif");
		ME.mkNode(ME.ta1,"p",this.directions,"inf");
	}
}

ME.whereTableMade = 0;
ME.whereCount = 0;

ME.onGetXInfoOK = function(rsp2) {
	// Unfortunately, firefox handles XML easily, IE doesn't appear to so
	// the text response has to be processed. :-(
	// ie strips off the main document of XML?
	var doc;
	var d1 = document.createElement('div');
	d1.className = "inf";
	var stuff = rsp2.responseText;
	stuff = stuff.replace(/\r|\n|\t/g,"");
	
	// Pull out any headers
	if (stuff.match("<headers>")){
		// split off the header section first
		var arr = stuff.split("</headers>");
		stuff = arr[1];

		if (arr[0].match("<title>")) {
			var g = arr[0].split("</title>");
			var h = g[0].split("<title>");
			ME.mkNode(ME.textArea,"h4",h[1],"inb");
		}
		
		var b = arr[0].split("<header>");
		for (var i=1; i<b.length; ++i) {
			b[i]= b[i].replace("<\/header>","");
			ME.mkNode(ME.textArea,"p",b[i],"inf");
		}
	}

	var a, b, c, d;
	switch (ME.page) {
		case "where":
			ME.mkNode(ME.textArea, "span", "Get the full list ...", "inb", ME.showForm);
	
			if (!ME.whereTableMade) {
				ME.whereTableMade = 1;
				
				// Idea is to add the titles into a list with references,
				// that when clicked will bring up the description in
				// a right hand pane
				// Have a separate link to display the whole list in a word-doc
				// format so it can be printed
				ME.mkRule(ME.textArea,"");	
				var arr = stuff.split("<site><siteNum>");
				var tempa = [];
				for (var i=1; i<arr.length; i++) {

					a = arr[i].split("</siteNum><location>");
					b = a[1].split("</location><desc>");
					
					c = b[1].split("</desc><season>");
					d = c[1].split("</season><dirs>");
					e = d[1].split("</dirs>");
					
					// Data for each node needs to be stored in a run-time structure
					var maploc = ME.googleMaps[b[0]];
					ME.whereMapHash[b[0]] = new ME.whereMap(a[0],b[0],c[0],d[0],e[0],maploc);
		
				}
			}
			var mid = ME.whereCount*1/2;
			var i=0;
			for (key in ME.whereMapHash) {
				if (i*1 < mid*1) { ME.mkLink(ME.td1,key,"",ME.whereMapHash[key].sNum+". ");}
				else { ME.mkLink(ME.td2,key,"",ME.whereMapHash[key].sNum+". "); }
				i = i*1 + 1;
			}
		
			break;

		case "links":
			var arr = stuff.split("<link><text>");
			for (var i=1; i<arr.length; i++) {
				ME.mkRule(ME.textArea,"");	
				a = arr[i].split("</text><linkface>");
				b = a[1].split("</linkface>");
				b[0] = b[0].replace(/\s*/g,"")
				ME.mkNode(ME.textArea,"a",a[0]+" ","inf");
				ME.mkHref(ME.textArea,b[0],"inb","http://"+b[0],"");
			}
			ME.mkRule(ME.textArea,"");	
			break;
		case "fieldtrip":
			d1.innerHTML = stuff; // This gets a stream of HTML
			ME.textArea.appendChild(d1);
			ME.fname=ME.docDir+"fieldtrips.xml";
			ME.page="events";
			ME.getXMLInfo();
			break;
		case "events":

			if (!ME.evtTableMade) {
				ME.evtTableMade = 1;
				ME.mkRule(ME.textArea,"");	
				var whwh;
				var desc;
				var cf;
				var ct = [];
				var arr = stuff.split("<trip><whenwhere>");
				for (var i=1; i<arr.length; i++) {

					a = arr[i].split("</whenwhere><desc>");
					whwh = a[0];

					if (a[1].match("<contact>")) {
						b = a[1].split("</desc><contact>");
						desc = b[0]

						c = b[1].split("</contact></trip>");
						cf = c[0];
					
					}
					else {
						b = a[1].split("</desc></trip>");
						desc = b[0];
						cf = "";	

					}
				ME.evtMapHash[whwh] = new ME.evtMap(whwh,desc,cf,ct);
				}
			} 
			
			var mid = ME.evtCount*1/2;
			var i=0;
			for (key in ME.evtMapHash) {
				if (i*1 < mid*1) { ME.mkLink(ME.td1,key);}
				else { ME.mkLink(ME.td2,key); }
				i = i*1 + 1;
			}

			break;
			
		case "contact":
			d1.innerHTML = stuff; // This gets a stream of HTML
			ME.textArea.appendChild(d1);
			ME.cform = YAHOO.util.Dom.get("contactForm");
			break;
		case "about":
			d1.innerHTML = stuff; // This gets a stream of HTML
			ME.textArea.appendChild(d1);
			YAHOO.util.Dom.get("mem3").onclick=ME.loadPage;
			break;
	}
	
}


ME.onGetXInfoNOK = function(rsp) {
	alert("Unable to open file "+ME.fname);

}


ME.who = "";

ME.makeEmailMsg = function(FormName) {
ME.cform = YAHOO.util.Dom.get("emailForm");
formEls = ME.cform.getElementsByTagName("input");
var emailMsg = "";
for(i=0; i<formEls.length; i++)
{
		var temp = formEls[i].id;
		
		switch(formEls[i].type) {
			case "text":
		if (temp != "") {
			if (temp == "email") { ME.who = formEls[i].value; }
			var currentLine = formEls[i].id + ":   " +formEls[i].value + "\n";
			emailMsg = emailMsg + currentLine;
			
		}
			break;
			case "radio":
				if (formEls[i].checked) {
					emailMsg = emailMsg + formEls[i].name + ":   " + formEls[i].value + "\n";
				}
			break;
		}
		
}
var mssg = YAHOO.util.Dom.get("Message").value;

emailMsg = emailMsg + "Message: " + mssg;

ME.emailMsg = emailMsg;
//alert(ME.emailMsg);
ME.sendEmail();
return true;
}


ME.sendEmail = function() {
   var cbObj = {
    success: ME.onEmailOK,
    failure: ME.onEmailNOK
  };
  
  ME.emailMsg = encodeURIComponent(ME.emailMsg);
  ME.who = encodeURIComponent(ME.who);

  YAHOO.util.Connect.asyncRequest("GET", "./php/sendMail.php?msg="+ME.emailMsg+"&who="+ME.who, cbObj, null);
	
}

ME.onEmailOK = function(rsp) {
	ME.getInfo("emailDone.txt");
}

ME.onEmailNOK = function(rsp) {
	alert("Unable to send email at this time. Please try again later");

}

ME.toolTips = {};
ME.setToolTips = function(tipID, tipText) {

  ME.toolTips[tipID] = new YAHOO.widget.Tooltip(tipID+"tt", { 
      context:tipID,
      text:tipText, 
      showdelay: 500, 
      autodismissdelay: 60000});


}


//
// Array of Google map links
//

/*	"The Great Vly": "http://maps.google.com/maps?f=q&hl=en&geocode=&q=west+camp+road,+malden,+ny&sll=42.148133,-73.935242&sspn=0.174616,0.457993&ie=UTF8&ll=42.146605,-73.941936&spn=0.043655,0.114498&z=13&iwloc=addr&om=1",

"Shawangunk Grasslands NWR": "http://maps.google.com/maps?f=q&hl=en&geocode=&q=long+lane,+bruynswick,+ny&sll=41.637897,-74.223633&sspn=0.053241,0.12291&ie=UTF8&ll=41.639694,-74.216938&spn=0.02662,0.061455&z=14&om=1",
*/
ME.googleMaps = {

"The Great Vly":"http://maps.google.com/maps?f=q&hl=en&geocode=&q=west+camp+road,+malden,+ny&sll=42.148133,-73.935242&sspn=0.174616,0.457993&ie=UTF8&ll=42.146605,-73.941936&spn=0.043655,0.114498&z=13&iwloc=addr&om=1",
"Bristol Beach State Park":
 "http://maps.google.com/?ie=UTF8&ll=42.112869,-73.926744&spn=0.024195,0.053215&z=14&om=1",
"Saugerties Lighthouse Trail":
 "http://maps.google.com/?ie=UTF8&ll=42.072201,-73.936315&spn=0.012105,0.026608&z=15&om=1",
"Esopus Bend Nature Preserve":
 "http://maps.google.com/?ie=UTF8&ll=42.065479,-73.960927&spn=0.006053,0.013304&z=16&om=1",
"Kingston Point":
 "http://maps.google.com/?ie=UTF8&ll=41.929549,-73.964767&spn=0.012132,0.026608&z=15&om=1",
"HasbroucK Park":
 "http://maps.google.com/?ie=UTF8&ll=41.922892,-73.979101&spn=0.012134,0.026608&z=15&om=1",
"Sleightsburg Spit":
 "http://maps.google.com/?ie=UTF8&ll=41.917974,-73.978168&spn=0.006067,0.013304&z=16&om=1",
"Esopus Meadows":
 "http://maps.google.com/?ie=UTF8&ll=41.868538,-73.951206&spn=0.048576,0.10643&z=13&om=1",
"Shaupeneak Ridge Cooperative Recreation Area":
 "http://maps.google.com/?ie=UTF8&ll=41.837531,-73.99292&spn=0.0243,0.053215&z=14&om=1",
"Burroughs Sanctuary":
 "http://maps.google.com/?ie=UTF8&ll=41.799791,-73.971634&spn=0.024314,0.053215&z=14&om=1",
"Ashokan Reservoir":
 "http://maps.google.com/?ie=UTF8&ll=41.946724,-74.18561&spn=0.048517,0.10643&z=13&om=1",
"Overlook Mountain Wild Forest":
 "http://maps.google.com/?ie=UTF8&ll=42.071723,-74.122353&spn=0.024211,0.053215&z=14&om=1",
"Slide Mountain":
 "http://maps.google.com/?ie=UTF8&ll=42.022773,-74.403534&spn=0.193836,0.42572&z=11&om=1",
"Neversink East":
 "http://maps.google.com/?ie=UTF8&ll=41.940595,-74.508247&spn=0.097043,0.21286&z=12&om=1",
"Peekamoose Road":
 "http://maps.google.com/?ie=UTF8&ll=42.022773,-74.403534&spn=0.193836,0.42572&z=11&om=1",
"Vernooy Kill Falls Trail":
 "http://maps.google.com/?ie=UTF8&ll=41.861251,-74.351692&spn=0.048582,0.10643&z=13&om=1",
"Balsam Lake Mountain":
 "http://maps.google.com/?ie=UTF8&ll=42.079623,-74.583092&spn=0.048416,0.10643&z=13&om=1",
"Minnewasks State Park Preserve":
 "http://maps.google.com/?ie=UTF8&ll=41.741859,-74.227409&spn=0.097345,0.21286&z=12&om=1",
"Mohonk Preserve":
 "http://maps.google.com/?ie=UTF8&ll=41.734429,-74.187756&spn=0.048678,0.10643&z=13&om=1",
"Harcourt Wildlife Sanctuary":
 "http://maps.google.com/?ie=UTF8&ll=41.75124,-74.089136&spn=0.012166,0.026608&z=15&om=1",
"Shawangunk Grasslands":
 "http://maps.google.com/?ie=UTF8&ll=41.660858,-74.217796&spn=0.097468,0.21286&z=12&om=1"


	
}
