Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

function getElementsByClassName(className, nodeName, root) {
    if (!nodeName) { nodeName = 'div'; }
    if (!root)     { root     = document; }
    var els    = root.getElementsByTagName(nodeName);
    var re     = new RegExp('(^|\\s)'+className+'(\\s|$)', 'g');
    var result = [];
    for (var i=0; i<els.length; i++) {
        if (re.test(els[i].className)) {
            result.push(els[i]);
        }
    }
    return result;
}

function hasClass(className, el) {
    var classes = el.className.split(/\s+/);
    for (var i=0; i<classes.length; i++) {
        if (classes[i] === className) { return true; }
    }
    return false;
}

function removeClasses(classes, el) {
    var re = new RegExp('(^|\\s)'+classes.join('|')+'(\\s|$)', 'g');
    el.className = el.className.replace(re, ' ');
}

function addAndCombineClasses(className, el) {
    el.className += ' '+className;
    if (hasClass('first', el)) { el.className += ' first-'+className; }
    if (hasClass('last',  el)) { el.className += ' last-'+className; }
}

function stopEventPropagation(e) {
    if (e && e.stopPropagation) {
        e.stopPropagation();
    } else if (window.event) {
        window.event.cancelBubble = true;
    }
}

window.onload = (function(o) { return function() {
    if (o) { o(); }
    var els = getElementsByClassName('multicontent');
    //alert(els.length);
    for (var i=0; i<els.length; i++) {
        var el = els[i];
        el.tabs  = el.getElementsByTagName('ul')[0].getElementsByTagName('li');
        el.parts = getElementsByClassName('multicontent-part', 'div', el);
        //alert(el.tabs.length+"\n"+el.parts.length);
        if (el.tabs.length != el.parts.length) { continue; }
        for (var j=0; j<el.tabs.length; j++) {
            var tab = el.tabs[j];
            tab.multicontentIndex = j;
            tab.multicontentRoot  = el;
            tab.contentContainer  = el.parts[j];
            tab.onclick = function(e) {
                if (!e) { e = window.event; }
                removeClasses(['on', 'first-on', 'last-on'], this.multicontentRoot.activeTab);
                removeClasses(['on', 'first-on', 'last-on'], this.multicontentRoot.activeTab.contentContainer);
                addAndCombineClasses('on', this);
                addAndCombineClasses('on', this.contentContainer);
                this.multicontentRoot.activeTab = this;
                var link = this.getElementsByTagName('a');
                if (link && link[0] && link[0].blur) { link[0].blur(); }
                stopEventPropagation(e);
                return false;
            }.bind(tab);
        }
        if (!el.activeTab) { el.activeTab = el.tabs[0]; }
    }
}})(window.onload);

