function Tabbox(node) {
    var CLASS_TAB = 'tab';
    var CLASS_ACTIVE = 'active';
    var CLASS_INTERACTIVE = 'box-tab-active';
    var CLASS_TAB_COLUMN_PREFIX = "tab-";

    var TAB_MAX_COLUMN = 3;



    function _addEventListener(node, event, fn) {
        if (node.addEventListener) node.addEventListener(event, fn, false);
        else node.attachEvent("on" + event, fn);
    }

    function _addClass(node, token) {
		if (!token || _hasClass(node, token)) return;
		if (!node.className) {
			node.className = token;
			return;
		};
		node.className += " " + token;
	}

	function _removeClass(node, token) {node.className = node.className.replace(new RegExp("\\s?\\b" + token + "\\b"), "")};

	function _hasClass(node, token) {
		if (node.className.search(new RegExp("\\b" + token + "\\b")) != -1) return true;
		return false;
	}

    function _getEventTarget(e) {
        if (e.target) return e.target;
        else return e.srcElement;
    }

    function _preventEventDefault(e) {
        if (e.preventDefault) e.preventDefault();
        return false;
    }



    var _self = node;
    var _tab = [];



    function _onClick(e) {
        var target = _getEventTarget(e);
        var parent = target.parentNode;
        if (_hasClass(parent, CLASS_ACTIVE)) return _preventEventDefault(e);

        for (var i = 0, item = _tab[0]; item; item = _tab[++i]) {
            if (item == parent) _addClass(item, CLASS_ACTIVE);
            else _removeClass(item, CLASS_ACTIVE);
        }

        return _preventEventDefault(e);
    }



    (function() {
        var active = false;
        var index = 0;

        for (var i = 0, item = _self.childNodes[0]; item; item = _self.childNodes[++i]) {
            if (item.nodeType != 1 || !_hasClass(item, CLASS_TAB)) continue;

            var title = item.getElementsByTagName('h3')[0];
            if (!title) continue;

            _addClass(item, CLASS_TAB_COLUMN_PREFIX + ++index);
            _addEventListener(title, 'click', _onClick);

            if (_hasClass(item, CLASS_ACTIVE)) {
                if (!active) active = true;
                else _removeClass(item, CLASS_ACTIVE)
            }

            _tab.push(item);
        }

        if (!_tab.length || _tab.length > TAB_MAX_COLUMN) return;
        if (!active) _addClass(_tab[0], CLASS_ACTIVE);
        _addClass(_self, CLASS_INTERACTIVE);
    })();



    return _self;
}



function onTabLoad() {
    if (window.removeEventListener) {
        window.removeEventListener('DOMContentLoaded', onTabLoad, false);
        window.removeEventListener('load', onTabLoad, false);
    } else window.detachEvent('onload', onTabLoad);

    var div = document.getElementsByTagName('div');
    for (var i = 0, item = div[0]; item; item = div[++i]) {
        if (item.className.search(/box-tab/) == -1) continue;
        new Tabbox(item);
    }
}

if (window.addEventListener) {
    window.addEventListener('DOMContentLoaded', onTabLoad, false);
    window.addEventListener('load', onTabLoad, false);
} else if (window.attachEvent) window.attachEvent('onload', onTabLoad);
