/* some basic wob functions

	most - if not all - of them require prototype
*/
/**
 * Greps all <a> tags with attribute rel="external" and
 * inserts a target="_blank" into the DOM tree.
 */
function externalLinks() {
	var anchors = $$('a[rel="external"]');
	for (var i=0; i<anchors.length; i++) {
		anchor = anchors[i];
		anchor.target = "_blank";
	}
}
document.observe("dom:loaded",externalLinks);
/**
 * add event listener to download links for Google Analytics tracking
 */
function observeDownloadLinks() {
	// fetch all a tags within div#content
	var links = $$('div[id="content"] a');
	if (links.length == 0) return;
	for (var i=0; i<links.length; i++) {
		if (links[i].href.length == 0) continue; // empty link ?
		var link_path = links[i].pathname;
		if (location.host == links[i].hostname) {
			if (link_path.match(/\.(doc|pdf|xls|ppt|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3)$/)) {
				// open PDF, DOC,... in a new Window
				if (link_path.match(/\.(pdf|doc|xls|ppt|js|css)$/)) links[i].target = "_blank";
				// observe the onclick event for google analytics
				links[i].observe('click', function(event) {
					evElement = Event.element(event);
					if (typeof(pageTracker) == 'object')
						pageTracker._trackPageview(evElement.pathname);
				})
			}
		}
	}
}
document.observe("dom:loaded",observeDownloadLinks);
/**
 * Handle Main Navigation:
 * - image preloading
 * - Swapon/off Effects
 */
function mainNavHandler() {
	var altNavImgs = new Array;
	var navImgs = $$('div[id="leftnav"] a img');
	for (var i=0; i<navImgs.length; i++) {
		if ( navImgs[i].src.match(/_inaktiv\.gif$/) ) {
			/*
			  ALT-Image Preloading:
			  clone image and assign a new src attribute
			*/
			altNavImgs[i] = $(navImgs[i].cloneNode(true)); 
			altNavImgs[i].src = navImgs[i].src.replace(/inaktiv\.gif/,"aktiv.gif");
			// observe 'mouseover' event on li-anchestor
			navImgs[i].observe('mouseover', function(e) {
				// swap Image
				var image = Event.element(e);
				if (image.src.match(/_inaktiv\.gif$/) ) {
					image.src = image.src.replace(/inaktiv\.gif/,"aktiv.gif");
				}
				// check, if we are within the list
				var container = image.up('li');
				if ("object" == typeof container) {
					var flyout = container.down('div.subnavlayer');
					if ("object" == typeof flyout) flyout.style.display = "block";
					// observe mouseout event on container
					container.observe('mouseout', function(e) {
						var elt = e.element();
						var image = container.down('a img');
						var flyout = container.down('div.subnavlayer');
						if ( 'img' == elt.tagName.toLowerCase()) { // mouse moved out of image
							// if we have a flyout and user moved into it: do nothing
							if ( ("object" == typeof flyout)
									&& Position.within(flyout, Event.pointerX(e),Event.pointerY(e)) ) {
								return false; // cancel event bubbling
							}
						} else if ( 'a' == elt.tagName.toLowerCase() ) { // mouse moved out of 'a' in flyout nav
							if (Position.within(flyout, Event.pointerX(e),Event.pointerY(e)
										|| !Position.within(container, Event.pointerX(e),Event.pointerY(e)) ) ) { // user still in flyout nav or container
								return false; // cancel event bubbling
							}
						}
						image.src = image.src.replace(/aktiv\.gif/,"inaktiv.gif");
						if ("object" == typeof flyout) flyout.style.display = "none";
						container.stopObserving('mouseout');
						return false;
					})
				} else { // we are outside of the list, but still need image swapping
					image.observe('mouseout', function(e) {
						var image = e.element();
						image.src = image.src.replace(/aktiv\.gif/,"inaktiv.gif");
						image.stopObserving('mouseout');
						return false;
					})
				}
				return false;
			})
		}
	}
}
document.observe("dom:loaded",mainNavHandler);
