function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}


function handleCSS(action, object, class1, class2)
{
    switch (action) {
        case "swap":
            object.className=!handleCSS("check",object,class1)?object.className.replace(class2,class1):
            object.className.replace(class1,class2);
            break;
        case "add":
            if(!handleCSS("check",object,class1)){object.className+=object.className?' '+class1:class1;}
            break;
        case "remove":
            var rep=object.className.match(" "+class1)?" "+class1:class1;
            object.className=object.className.replace(rep,"");
            break;
        case "check":
            return new RegExp("\\b"+class1+"\\b").test(object.className);
            break;
    }
}

function ascendDOM(e, target) {
    while (e.nodeName.toLowerCase() != target && e.nodeName.toLowerCase() != 'html')
        e = e.parentNode;
    return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

function nextElement(obj) {
    var obj = obj.nextSibling;
    while (obj.nodeType != 1)
        obj = obj.nextSibling;
    return obj;
}

function getTarget(e)
{
    if (e.srcElement) {
        return e.srcElement;
    } else {
        return e.target;
    }
}

function stopEvent(e)
{
    if (e && e.stopPropagation && e.preventDefault) {
        e.stopPropagation();
        e.preventDefault();
    }
    if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
        return false;
    }
}
function initializeTabs()
{
	var containers = document.getElementsByTagName("div");
	for (var i = 0; i < containers.length; i++)
	{
		if (handleCSS("check", containers[i], "tabcontainer")) {
			Tabs.initialize(containers[i]);
		}
	}
}

var Tabs = {
	initialize: function(elem){
		var container = elem;
		var tabs = Tabs.getTabs(container);
		var console = Tabs.createConsole(container);
		// highlight first tab
		console.innerHTML = tabs[0].getElementsByTagName("div")[0].innerHTML;
		handleCSS("add", tabs[0].getElementsByTagName("h2")[0], "selected");
		// add events
		for (var i=0; i < tabs.length; i++)
		{
			var tab = tabs[i].getElementsByTagName("h2")[0];
			addEvent(tab, "click", function(e){Tabs.toggle(e, tabs, console);}, false);
		}
	},
	toggle: function(e, tabs, console)
	{
		var elem = getTarget(e);
		Tabs.clearTabs(tabs);
		handleCSS("add", elem, "selected");
		var current_content = ascendDOM(elem, "div").getElementsByTagName("div")[0].cloneNode(true);
		console.innerHTML = current_content.innerHTML;
	},
	clearTabs: function(tabs)
	{
		for (var i=0; i < tabs.length; i++)
		{
			handleCSS("remove", tabs[i].getElementsByTagName("h2")[0], "selected");
		}
	},
	createConsole: function(elem) {
		var console = document.createElement("div");
		handleCSS("add", console, "console");
		elem.appendChild(console);
		return console;
	},
	getTabs: function(elem) {
		var _tabs 	 = elem.getElementsByTagName("div");
		var _alltabs = new Array();
		for (var i = 0; i < _tabs.length; i++)
		{
			if (handleCSS("check", _tabs[i], "tab")) {
				_alltabs.push(_tabs[i]);
			}
		}
		return _alltabs;
	}
}

addEvent(window, "load", initializeTabs, false);

