/**Javascript a-z list for Science and SpaceDisplay is controlled via javascript. XML loading and sorting logic is controlled via flash.Paul Hannan, Tom Cheney10.11.07*/javascriptAZ = new function(){		/*******VARIABLES*****/	var azFlashEngine;// swf which controls xml loading functionality	var imagePath;//path to images	var xmlFile;	var categoryType;		var IE = document.all?true:false		var tempX = 0;	var tempY = 0;		var scrollSpeed; // scroll up and down speed			var so; //swf object	var scrolldelay;	var searchDelayInterval; // setinterval for searching	var searchDelay; // delay time for searching interval	var photo; 	var scrollArea;	var azNav;	var dbuger;	var scrollInProgress = false;		var azModule;	var linkClick = false;	var posx;	var posy;	var adjustmentX;	var adjustmentY;	var appVer;	var iePos;	var is_minor;	var is_major;	var testX;	var testY;	var testX2;	var testY2;	/*******PUBLIC METHODS*****/	this.activeLetters = activeLetters;	this.setType = setType;	this.setSWF = setSWF;	this.setXML = setXML;	this.setImagePath = setImagePath;	this.init = init; // start javascript az	this.sortByLetter = sortByLetter; // returns a list based on one letter	this.az_textsearch = az_textsearch; // searches the list for keywords	this.formatText = formatText; // displays the list for drawing (flash controlled)	this.displayPhoto = displayPhoto; // displays photo on mouseover of list item	this.findPicture = findPicture; // quereys flash for photo information.	this.hidePhoto = hidePhoto; // hides photo on mouse out	this.linkClicked = linkClicked;//for telling the flash to stop looking for new photos when a link is clicked	this.keepState = keepState; // store current rollover id	this.memState = memState; // list rollover state	this.memReset = memReset; // reset list rollover state	this.memResetPhoto = memResetPhoto; // reset list rollover state	this.clearScript = clearScript; // prevent js error in Firefox after clicking on a link//	this.doSomething = doSomething; // hide photo on mouse out		/*******SETTER METHODS*******/	function setType(x){		categoryType = x;	}	function setSWF(x){		azFlashEngine = x;	}	function setImagePath(x){		imagePath = x;	}	function setXML(x){		xmlFile = x;	}		/*******METHODS*******/				/* top a-z nav items	*******************************************************************/	function activeLetters(activeLetters){		var letterArray = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S" , "T", "U", "V", "W", "X", "Y", "Z");		var formatedXML ="";		for (var i=0; i < letterArray.length;i++){			for (var i2 = 0; i2 < activeLetters.length; i2++){				if (activeLetters[i2] == letterArray[i]){										formatedXML += "<a href='javascript:click()' onclick=\"javascriptAZ.sortByLetter(this)\" >"+ letterArray[i] +"</a>";							activeLetters.shift();					break;				} else {					formatedXML += "<span class=\"inactive\">"+ letterArray[i] +"</span>";							activeLetters.shift();					break;				}									}		}		azNav.innerHTML = formatedXML;		}			/* MISC 	*******************************************************************/		// macromedia's code for accessing plugin	function thisMovie(movieName) {		if (navigator.appName.indexOf("Microsoft") != -1) {			return window[movieName];			}		else {			if(document[movieName].length != undefined){				return document[movieName][1];			}			return document[movieName];		}	}			// remove css class from an object	function removeClass(object, theClass) { 		var pageTags = new Array(); 				var pageTags=object.getElementsByTagName("*"); 				for (i=0; i < pageTags.length; i++) { 					if (pageTags[i].className==theClass) { 						pageTags[i].className = null; 			} 		} 	} 			// find x/y position of object	function findPos(obj) {		var curleft = curtop = 0;		if (obj.offsetParent) {			curleft = obj.offsetLeft			curtop = obj.offsetTop			while (obj = obj.offsetParent) {				curleft += obj.offsetLeft				curtop += obj.offsetTop			}		}		return [curleft,curtop];	}			function getStyle(el,styleProp)	{		var x = el;		if (x.currentStyle)			var y = x.currentStyle[styleProp];		else if (window.getComputedStyle)			var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);		return y;	}			/* Photo functions	*******************************************************************/		// position photo at highlighted list item	function findPicture(image, target){		keepState(image);		//target.className='listMouseOver';		var position = findPos(target);		photo.style.top = ((position[1] - scrollArea.scrollTop) - 20 ) + "px";				//var photoAdjustX = getStyle(document.getElementById("a-z-list"), "width");		var photoAdjustX = document.getElementById("a-z-list").offsetWidth;		//alert("test = " + photoAdjustX);				photo.style.left = (position[0] + photoAdjustX - 110) + "px";				//alert(azNav.style.height);		if (!linkClick){			thisMovie('flashAZ').getPhoto(image);		}	}	// flash calls this	function displayPhoto(image,link){		//		document.getElementById("dbugarea").innerHTML = image + " - " + link;					if (image != undefined && image != null){			photo.style.display = "block";				if (link != undefined && link != "") {				photo.innerHTML = '<a href="' + link + '" onmouseover="javascriptAZ.memState()" onmouseout="javascriptAZ.memResetPhoto(event)"><img src="' + imagePath+image+'" border="0"></a>';			} else {				photo.innerHTML = '<a onmouseover="javascriptAZ.memState()" onmouseout="javascriptAZ.memResetPhoto(event)"><img src="' + imagePath+image+'" border="0"></a>';			}		} else {			photo.style.display = "none";			}	}		function linkClicked(){		linkClick = true;			}			/* form field searching	*******************************************************************/	function az_textsearch(text){		//document.getElementById("dbugarea").innerHTML = text;			removeClass(azNav, "navSelect")		clearInterval(searchDelayInterval);		searchDelayInterval = setInterval(function(){			clearInterval(searchDelayInterval);			thisMovie('flashAZ').searchText(text);				}, searchDelay);// delay to prevent hang ups			}		// prevent enter key from working 	function stopRKey(evt) { 	  var evt = (evt) ? evt : ((event) ? event : null); 	  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 	  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 	} 	 			/* main list display	*******************************************************************/	function formatText(object){					azModule.style.display = "block";			var formatedXML ="";		for (i=0;i<object.length;i++){			formatedXML += "<div class=\"item\">";//			formatedXML += "<a href='" +  object[i].l_link + "' onMouseOut=\"javascriptAZ.hidePhoto(this)\" onMouseOver=\"javascriptAZ.findPicture('" +  object[i].ref + "', this)\"   >" +  object[i].name + "</a>";//			formatedXML += "<a onclick=\"javascriptAZ.linkClicked()\" id='" +  object[i].ref + "'href='" +  object[i].l_link + "' onmouseout=\"javascriptAZ.memReset(event);\" onMouseOver=\"javascriptAZ.findPicture('" +  object[i].ref + "', this);javascriptAZ.memState();\"   >" +  object[i].name + "</a>";			formatedXML += "<a onclick=\"javascriptAZ.linkClicked()\" id='" +  object[i].ref + "'href='" +  object[i].l_link + "' onmouseout=\"javascriptAZ.memReset(event);\" onMouseOver=\"javascriptAZ.findPicture('" +  object[i].ref + "', this);javascriptAZ.memState();\" onclick=\"javascriptAZ.clearScript();\"  >" +  object[i].name + "</a>";			formatedXML += "</div>";		}				scrollArea.innerHTML = formatedXML;			scrollArea.scrollTop = 0;				//azModule.style.display="block";			}		function clearScript() {		if (navigator.userAgent.indexOf("Firefox") != -1) {			scrollArea.innerHTML = "Loading";			}	}		// sort functions	function sortByLetter(i){		removeClass(azNav, "navSelect")		i.className = "navSelect";		thisMovie('flashAZ').searchandDisplaySingle(i.firstChild.data);	}			/* auto scroller	*******************************************************************/				// Main function to retrieve mouse x-y pos.s		function getMouseXY(e) {		if (IE) { // grab the x-y pos.s if browser is IE			tempX = event.clientX + document.documentElement.scrollLeft;			tempY = event.clientY + document.documentElement.scrollTop;		} else {  // grab the x-y pos.s if browser is NS			tempX = e.pageX;			tempY = e.pageY;		}  		// catch possible negative values in NS4		if (tempX < 0){tempX = 0}		if (tempY < 0){tempY = 0}  						var listHeight = 139;		var listWidth = 258;		var divPos = findPos(scrollArea)		var relativeX = tempX - divPos[0];		var relativeY = tempY - divPos[1];		var inX;		var inY;		// see if mouse Y is inside box		if (relativeY < 0 || relativeY > listHeight ) {			inY = false;		} else {			inY = true;		}				// see if mouse X is inside box		if (relativeX < 0 || relativeX > listWidth ) {			inX = false;		} else {			inX = true		}//		document.getElementById("dbugarea").innerHTML = tempX + " - " + tempY + " :: " + relativeX + " - " + listWidth + " :: " + relativeY + " - " + listHeight + " :: " + inX + " - " + inY; 			// check to see if both X and Y mouse positions are true		if (inY && inX){			if (relativeY < 30){				scrollUp();			} else if (relativeY > 120){				scrollDown();			} else {				scrollOff();			}		} else {			scrollOff();		}				return true	}		function scrollDown(){			if (!scrollInProgress){			scrollInProgress = true;			scrollDelay = setInterval(function(){				document.getElementById("az-scrollArea").scrollTop = document.getElementById("az-scrollArea").scrollTop + scrollSpeed;	   			 }, 10);		}	}	function scrollUp(){			if (!scrollInProgress){			scrollInProgress = true;			scrollDelay = setInterval(function(){				document.getElementById("az-scrollArea").scrollTop = document.getElementById("az-scrollArea").scrollTop - scrollSpeed;	  			 }, 10);		}	}	function scrollOff(){		scrollInProgress = false;		clearInterval(scrollDelay);	}		/* swfOBject embed	*******************************************************************/	function setupElements(){			// create divs		document.write('<div id="azWidget"></div>');		// swfOBject		var so = new SWFObject(azFlashEngine, "flashAZ", "0", "0", "8.0.0.0", "#FFFFFF");		so.addParam("allowScriptAccess", "always");		if (categoryType != null && categoryType != undefined){						so.addVariable("categoryType", categoryType);		}		so.addVariable("xmlfile", xmlFile);		so.write("azWidget");	}			/* START WIDGET	*******************************************************************/	function init(){				photo = document.getElementById("az-photo");		scrollArea = document.getElementById("az-scrollArea");		azNav = document.getElementById("az-nav");		//dbuger = document.getElementById("dbugarea");				azModule = document.getElementById("a-z-module");		//azModule.style.display="none";					// If NS -- that is, !IE -- then set up for mouse capture		if (!IE) document.captureEvents(Event.MOUSEMOVE)			// Set-up to use getMouseXY function onMouseMove		document.onmousemove = getMouseXY;			// Temporary variables to hold mouse x-y pos.s				scrollSpeed = 1;			searchDelay = 500;				scrollDelay = setInterval(function(){clearInterval(scrollDelay)}, 1);// initialize scrollDelay					setupElements(); // create divs, insert a-z flash engine//		document.onkeypress = stopRKey;	// disable enter key	}		function keepState(obj) {		idmem = obj;	}		// Set hover state	function memState() {		document.getElementById(idmem).className = "itemOver";		}		function memReset(event) {		memResetPhoto();		hidePhoto(event);	}		// Set hover state	function memResetPhoto(opt) {		document.getElementById(idmem).className = null;		}			function hidePhoto(e) {		var posx = 0;		var posy = 0;		if (!e) var e = window.event;		if (e.pageX || e.pageY) 	{			posx = e.pageX;			posy = e.pageY;		}		else if (e.clientX || e.clientY) 	{			posx = e.clientX;			posy = e.clientY;		}			var adjustmentX = 7;		var adjustmentY = 7;			var appVer = navigator.appVersion.toLowerCase();		var iePos = appVer.indexOf('msie');		if (iePos !=-1) {			is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))			is_major = parseInt(is_minor);		}		var is_ie = ((iePos!=-1));		ieXAdjustment = 0;		if ( is_ie ) { 			adjustmentX = adjustmentX + 338;			adjustmentY = adjustmentY + 9;			ieXAdjustment = 318;		}			testX = posx - scrollArea.offsetLeft-adjustmentX;		testY = posy - scrollArea.offsetTop-adjustmentY;		testX2 = scrollArea.offsetWidth-24;		testY2 = scrollArea.offsetHeight-8;		testX3 = photo.offsetLeft-37-ieXAdjustment;		testX4 = photo.offsetLeft+40-ieXAdjustment;		if (testX < 1 || testY < 1 || testX > testX2 || testY > testY2) {	//		document.getElementById("dbugarea").innerHTML = testX + " - " + testX2 + " - " + testX3 + " - " + testX4 + " - " + iePos + " - " + ieXAdjustment; 			if (testX < testX3 || testX > testX4) {				photo.style.display = "none";			}		}			}};