/**
 * @author jgiotta
 */
if (typeof(mediageneral) == "undefined") var mediageneral = {};
mediageneral.TabBoxes = function (container) {
	this.container = document.getElementById(container);
	this.container.className = "tabBox";
	this.active_element = null;
	this._tabCollection = [];
	var tabListIndex = 0;
	var href = null;
	var tab, elem;
	var tabLIArray = this.container.getElementsByTagName('li');
	for (tabListIndex; tabListIndex<tabLIArray.length; tabListIndex++) {
		tab = tabLIArray[tabListIndex].getElementsByTagName('a').item(0);
		if (this.getLength() == 0) {
			tab.parentNode.className = "active";
		}
		elem = this.addTabElement(this.obtainHash(tab));
		this.addEvent(tab, 'click', this.delegate(this, this.activateNewTab));
	}
};
mediageneral.TabBoxes.prototype = {
	addTabElement: function (elementId) {
		var tabDOM = (typeof(elementId) == "string") ? document.getElementById(elementId) : elementId;
		if (tabDOM == null) throw new Error('Element does not exist');
		tabDOM.className = "tab";
		var newIndexLen = this._tabCollection.push(tabDOM);
		if (newIndexLen == 1) {
			tabDOM.style.display = "block";
		}
		return tabDOM;
	},
	activateNewTab: function (event) {
		this.stopEvent(event);
		var tabListIndex = 0;
		var target = (event.target || event.srcElement)
		var tabLIArray = this.container.getElementsByTagName('li');
		for (tabListIndex; tabListIndex<tabLIArray.length; tabListIndex++) {
			tabLIArray[tabListIndex].className = "";
		}
		target.parentNode.className = "active";
		var tabToActivate = document.getElementById(this.obtainHash(target));
		var i = 0;
		var tabItem;
		for (i; i<this.getLength(); i++) {
			tabItem = this._tabCollection[i];
			if (tabItem == tabToActivate) {
				this.showTab(tabItem);
			} else {
				this.hideTab(tabItem);
			}
		}
	},
	delegate: function(obj, func) {
		var f = function () {
			var target = arguments.callee.target;
			var func0 = arguments.callee.func;
			return func0.apply(target, arguments);
		};
		f.target = obj;
		f.func = func;
		
		return f;
	},
	 stopEvent: function(event) {
		if (event.preventDefault) {
			event.preventDefault();
			event.stopPropagation();
		} else {
			event.returnValue = false;
			event.cancelBubble = true;
		}
    },
	addEvent: function (element, name, observer, useCapture) {
		if (element.addEventListener) {
			element.addEventListener(name, observer, useCapture);
		} else if (element.attachEvent) {
			element.attachEvent('on' + name, observer);
		}
	},
	obtainHash: function (tab) {
		var href;
		href = tab.getAttribute('href').split("#");
		return href[1];
	},
	getLength: function () {
		return this._tabCollection.length;
	},
	hideTab: function (item) {
		item.style.display = "none";
	},
	showTab: function (item) {
		item.style.display = "block";
	}
}
