/*
 * amTools
 *
 * !!! Uses MooTools !!!
 *
 * Functions:
 * 
 * menuFadeEffect (fades menu-items, with timeout)
 * trackTrail (creates breadcrumbs and bold menu-items from the filename)
 * imageOverlay
 */

var amTools = {
	menuFadeEffect: function (root, hoverElement, fadeElement, timeout, fadetime) {
		// Keep track of menu hoverstate
		var rootHovered = false;
		$(root).addEvent('mouseenter', function () {
			rootHovered = true;
		});
		$(root).addEvent('mouseleave', function () {
			rootHovered = false;
		});
	
		// Loop through all menuitems
		var navElements = $(root).getElements(hoverElement);
		for (var i = 0; i < navElements.length; i++) {
			// Check for submenu
			var childElement = navElements[i].getElement(fadeElement);
			if (childElement) {
				// Set opacity of submenu to 0 and create a timeout placeholder
				childElement.setOpacity(0);
				childElement.delayTimerId = -1;
			} else {
				// No submenu found, so no further actions required
				continue;
			}
	
			// Add fade-in event
			navElements[i].addEvent('mouseenter', function () {
				var childElement = this.getElement(fadeElement);
				$clear(childElement.delayTimerId);
				childElement.effect('opacity', {duration: fadetime}).start(1);
			});
			
			// Add fade-out event
			navElements[i].addEvent('mouseleave', function () {
				var childElement = this.getElement(fadeElement);
				
				// Prepare fade function
				var fadeFunction = function () {
					childElement.effect('opacity', {duration: fadetime}).start(0);
				};
	
				// Prepare function to run after menu hoverstate is set (hence the 1ms delay) 
				var afterRoot = function () {
					if (rootHovered == true) {
						fadeFunction();
					} else {
						childElement.delayTimerId = fadeFunction.delay(timeout);
					}
				};
				afterRoot.delay(1);
			});
		}
	},
	
	trackTrail: function (documentTitle, navId, breadcrumbId) {
		var generatedPageArray  = this._getPageArray();
		for(var i = 0; i < generatedPageArray.length; i++) {
			documentTitle += " - " + generatedPageArray[i];
		}
		document.title = documentTitle;	

		this._trackTrail(generatedPageArray, $(navId), $(breadcrumbId));
	},
	
	createRollOvers: function (containerElementId)	{

		var preload_image_object = new Image();
		var selector = containerElementId + " img"; 
		var images = $$("#menu img");		

		for(var i = 0; i < images.length; i++)
		{
			image = images[i];
			if(image.attributes['src'].value.indexOf('-active') < 0)
			{
				// Preload the hover image
				preload_image_object.src = image.attributes['src'].value.replace("-off","-hover");   																			
				image.addEvent('mouseenter', function() { this.src = this.src.replace("-off","-hover");} );
				image.addEvent('mouseleave', function() { this.src = this.src.replace("-hover","-off");} );
			}				
		}

	},
	
	imageOverlay: function (overlayImage, rolloverImage) {
		var images = document.getElements("img");
		for (var i = 0; i < images.length; i++) {
			var img = images[i];
			if (img.hasClass("overlay")) {
				var bgSrc = img.src;
				img.setStyle("background", "url(" + bgSrc + ")");
				img.src = overlayImage;
			}
			if (img.hasClass("rollover") && rolloverImage != null) {
				img.addEvent("mouseover", function () {
					this.src = rolloverImage;															
				});
				img.addEvent("mouseout", function () {
					this.src = overlayImage;															
				});
			}
		}
	},
	
	// Private functions
	_trackTrail: function (pageArray, navList, breadcrumbList) {
		var currentPage = pageArray.shift();
		
		var navListElements = navList.getChildren();	
		for (var i = 0; i < navListElements.length; i++) {
			if (navListElements[i].innerHTML == null) {
				continue;
			}
			var navListPageName = navListElements[i].getElement("a").innerHTML;
			if (navListPageName == currentPage) {
				navListElements[i].getElement("a").className += " active";
				if (pageArray.length == 0) {
						breadcrumbList.innerHTML += '<li><a href="' + navListElements[i].getElement("a").href + '">' + currentPage + '</a></li>';
				} else {
					breadcrumbList.innerHTML += '<li><a href="' + navListElements[i].getElement("a").href + '">' + currentPage + '</a><ul></ul></li>';
				}
			}
			
			var nextBreadcrumbList = breadcrumbList.getElement("ul");
			var nextNavList = navListElements[i].getElement("ul");

			if (nextNavList != null && nextBreadcrumbList != null) {
				this._trackTrail(pageArray, nextNavList, nextBreadcrumbList);
			}
		}
	},

	_getPageArray: function () {
		var pageName = location.href.substring(location.href.lastIndexOf('/') + 1);
		pageName = this._urlDecode(pageName);
		pageName = pageName.replace(".html", "");
		pageName = pageName.replace(".htm", "");		
		pageName = pageName.replace(".aspx", "");				
		
		pageName = pageName.replace(/\---/g, " / ");
		
		var questionMark = pageName.indexOf("?");
		if (questionMark > 0) {
			pageName = pageName.substring(0, questionMark);
		}
		
		var pageArray = pageName.split("--");
		for (var i = 0; i < pageArray.length; i++) {
			pageArray[i] = pageArray[i].replace(/\-/g, " ");
		}
		return pageArray;
	},
	
	_urlDecode: function (str) {
		var ret = str;
		ret = ret.replace(/\+/g, '%20');
		ret = decodeURIComponent(ret);
		ret = ret.toString();
		return ret;
	}
};
