/**Photography Javascript a-z list Display is controlled via javascript. XML loading and sorting logic is controlled via flash.Paul Hannan, Tom Cheney3.25.08*/javascriptAZ = new function(){		/*******VARIABLES*****/	var azFlashEngine;// swf which controls xml loading functionality	var imagePath;//path to images	var xmlFile;	var categoryType;		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 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.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.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*******/			// safe way to add additional event handlers to an object	 	function addevent(oTarget, sType, fpDest) {	  var oOldEvent = oTarget[sType];	  if (typeof oOldEvent != "function") {		oTarget[sType] = fpDest;	  } else {		oTarget[sType] = function(e) {		  oOldEvent(e);		  fpDest(e);		}	  }	}				/* 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 {			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];	}			/* 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";		photo.style.left = (position[0] + 170) + "px";		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";			}*/	}		/* 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){			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 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 += "</div>";		}				scrollArea.innerHTML = formatedXML;			scrollArea.scrollTop = 0;				//azModule.style.display="block";			}					// sort functions	function sortByLetter(i){		removeClass(azNav, "navSelect")		i.className = "navSelect";		thisMovie('flashAZ').searchandDisplaySingle(i.firstChild.data);	}			/* auto scroller	*******************************************************************/			var IE = document.all?true:false		// If NS -- that is, !IE -- then set up for mouse capture	if (!IE) document.captureEvents(Event.MOUSEMOVE)		// Set-up to use getMouseXY function onMouseMove	addevent(document, "onmousemove", getMouseXY);//document.onmousemove = getMouseXY;			// Temporary variables to hold mouse x-y pos.s	var tempX = 0;	var tempY = 0;	// 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"><a target="_blank" href="http://www.nationalgeographic.com/download/flash">This presentation requires flash. Please click here to download the free flash player.</a></div>');		// swfOBject		var so = new SWFObject(azFlashEngine, "flashAZ", "0", "0", "8.0.0.0", "#262626");		so.addParam("allowScriptAccess", "always");		//if (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";				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).style.background = "#211b33";	document.getElementById(idmem).style.color = "#ffffff";}function memReset(event) {	memResetPhoto();	hidePhoto(event);}// Set hover statefunction memResetPhoto() {	document.getElementById(idmem).style.background = "transparent";	document.getElementById(idmem).style.color = "#ffffff";}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";		}	}	}};