/*
 * EventManager Object
 * by Keith Gaughan <http://talideon.com/about/contact/>
 *
 * This allows event handlers to be registered unobtrusively, and cleans
 * them up on unload to prevent memory leaks.
 *
 * Copyright (c) Keith Gaughan, 2005.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * (CPL) which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/cpl.php
 *
 * This software is covered by a modified version of the Common Public License
 * (CPL), where Keith Gaughan is the Agreement Steward, and the licensing
 * agreement is covered by the laws of the Republic of Ireland.
 */
var EventManager = {
	_registry: null,
	Initialize: function() {
		if (this._registry === null) {
			this._registry = [];
			// Register the cleanup handler on page unload.
			EventManager.Add(window, "unload", this.CleanUp);
		}
	},
	/**
	* Registers an event and handler with the manager.
	*
	* @param  obj         Object handler will be attached to.
	* @param  type        Name of event handler responds to.
	* @param  fn          Handler function.
	* @param  useCapture  Use event capture. False by default. If you don't understand this, ignore it.
	*
	* @return True if handler registered, else false.
	*/
	Add: function(obj, type, fn, useCapture) {
		this.Initialize();
		/* If a string was passed in, it's an id. */
		if (typeof obj == "string") { obj = document.getElementById(obj); }
		if (obj == null || fn == null) { return false; }
		/* Mozilla/W3C listeners? */
		useCapture = (useCapture===true);
		if (obj.addEventListener) {
			obj.addEventListener(type, fn, useCapture);
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: useCapture});
			return true;
		}
		/* IE-style listeners? */
		if (obj.attachEvent && obj.attachEvent("on" + type, fn)) {
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: false});
			return true;
		}
		return false;
	},
	/* Cleans up all the registered event handlers. */
	CleanUp: function() {
		for (var i = 0; i < EventManager._registry.length; i++) {
			with (EventManager._registry[i]) {
				// Mozilla/W3C listeners?
				if (obj.removeEventListener) {
					obj.removeEventListener(type, fn, useCapture);
				}
				// IE-style listeners?
				else if (obj.detachEvent) {
					obj.detachEvent("on" + type, fn);
				}
			}
		}
		// Kill off the registry itself to get rid of the last remaining references.
		EventManager._registry = null;
	}
};

function cancelEvent(e,ethis) {
	var e = e || window.event;
	e.cancelBubble = true; // for IE
	if (e.stopPropagation) {
		e.stopPropagation();
	}
	e.returnValue = false; // for IE
	if (e.preventDefault) {
		e.preventDefault();
	}
}

function activateImageSelectors() {
	if(document.getElementById && document.getElementById("wp_nav")) {
		var thumbholder = document.getElementById("wp_nav");
		var thumbs = thumbholder.getElementsByTagName("a");
		for(var i=0; i<thumbs.length; i++) {
			if(is_Safari) {thumbs[i].onclick = null;}
			EventManager.Add(thumbs[i],"click",mediaSelect);
		}
	}
}

function getThumbnailAnchorByHref(href) {
	if(document.getElementById && document.getElementById("wp_nav")) {
		var thumbholder = document.getElementById("wp_nav");
		var thumbs = thumbholder.getElementsByTagName("a");
		for(var i=0; i<thumbs.length; i++) {
			if(thumbs[i].href == href) {
				return i;
			}
		}
	}
}

function mediaSelect(e) {
	cancelEvent(e);
	obj = (e.srcElement) ? e.srcElement : e.currentTarget;
	var src = (obj.parentNode.href) ? obj.parentNode.href : obj.href;
	//alert(obj.href);
	var img = document.getElementById("detail_img");
	if (src != "") {
		img.setAttribute("src",src);
		img.setAttribute("alt",cap);
	} else {
		img.setAttribute("src","../images/spacer.gif");
		img.setAttribute("alt",cap+1);
	}
	if(obj.getAttribute) {
		var cap = obj.getAttribute("title");
		var thumbholder = document.getElementById("wp_nav");
		var thumbs = thumbholder.getElementsByTagName("a");
		if(cap == "" || cap==null) {
			cap = thumbs[getThumbnailAnchorByHref(src)].getAttribute("title");
		}
		changeImgCaption(cap);
	}
	return false;
}

function setImage(src,cap) {
	var img = document.getElementById("detail_img");
	img.setAttribute("src",src);
	img.setAttribute("alt",cap);
	changeImgCaption(cap);
}

function cyclePhotos(dir) {
	var inc = (dir == "prev") ? -1 : 1;
	var thumbholder = document.getElementById("wp_nav");
	var thumbs = thumbholder.getElementsByTagName("a");
	var img = document.getElementById("detail_img");
	var currimg = getThumbnailAnchorByHref(img.src);
	if(currimg == 0 && inc == -1) {
		currimg = thumbs.length;
	} else if (currimg==thumbs.length-1 && inc == 1) {
		currimg = -1;
	}
	var newimg = thumbs[currimg+inc];
	var cap = newimg.getAttribute("title");
	setImage(newimg.href, newimg.getAttribute("title"));
}

function prevPhoto() {
	cyclePhotos("prev");
}

function nextPhoto() {
	cyclePhotos("next");
}

function changeImgCaption(txt) {
	var div = document.getElementById("prop_caption");
	div.innerHTML = "&nbsp;"+txt+"&nbsp;";
};

function stripWhiteSpace(str) {
	to_strip = ["\n","\r","\t","\v"];
	for(var i=0; i<to_strip.length; i++) {
		str.split(to_strip[i]).join('');
	}
	return str;
}
function fltrace(txt) {
	document.getElementById('debug').innerHTML += '<br/>'+txt;
}

var is_Safari = navigator.vendor && navigator.vendor.indexOf('Apple') != -1;

window.onload = function () {
	if(document.getElementById('headergraphic')) {
		var so = new SWFObject("/test.swf", "flbanner", "517", "104", "6", "#ffffff");
		so.addParam("wmode", "transparent");
		so.write("headergraphic");
	}
	activateImageSelectors();
}
