/*
cbb function by Roger Johansson, http://www.456bereastreet.com/
note: this script has been modified by Labs2 to support optional root elements
rootElementIds is an array with element id:s
*/
var cbb = {
    init: function(rootElementIds) {
        // Check that the browser supports the DOM methods used
        if (!document.getElementById || !document.createElement || !document.appendChild) return false;

        if (rootElementIds == undefined) {
            var arrElements = document.getElementsByTagName('*');
            cbb.buildBoxes(arrElements);
        } else {
            // root elements has been defined apply to all children
            for (var i = 0; i < rootElementIds.length; i++) {
                var id = rootElementIds[i];
                var parent = document.getElementById(id);
                if (parent != null) {
                    var children = parent.getElementsByTagName('*');
                    cbb.buildBoxes(children);
                }
            }
        }
    },
    insertTop: function(obj) {
        var oOuter, oInner;
        // Create the two div elements needed for the top of the box
        oOuter = document.createElement("div");
        oOuter.className = "bt"; // The outer div needs a class name
        oInner = document.createElement("div");
        oOuter.appendChild(oInner);
        obj.insertBefore(oOuter, obj.firstChild);
    },
    insertBottom: function(obj) {
        var oOuter, oInner;
        // Create the two div elements needed for the bottom of the box
        oOuter = document.createElement("div");
        oOuter.className = "bb"; // The outer div needs a class name
        oInner = document.createElement("div");
        oOuter.appendChild(oInner);
        obj.appendChild(oOuter);
    },
    // addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
    addEvent: function(obj, type, fn, rootElementIds) {
        if (obj.addEventListener)
            obj.addEventListener(type, function() { fn(rootElementIds) }, false);
        else if (obj.attachEvent) {
            obj["e" + type + fn(rootElementIds)] = fn(rootElementIds);
            obj[type + fn(rootElementIds)] = function() { obj["e" + type + fn(rootElementIds)](window.event); }
            obj.attachEvent("on" + type, obj[type + fn(rootElementIds)]);
        }
    },
    buildBoxes: function(arrElements) {
        var oElement, oOuter, oI1, oI2, tempId;
        // Find all elements with a class name of cbb
        var oRegExp = new RegExp("(^|\\s)cbb(\\s|$)");
        for (var i = 0; i < arrElements.length; i++) {
            // Save the original outer element for later
            oElement = arrElements[i];
            if (oRegExp.test(oElement.className)) {
                // 	Create a new element and give it the original element's class name(s) while replacing 'cbb' with 'cb'
                oOuter = document.createElement('div');
                oOuter.className = oElement.className.replace(oRegExp, '$1cb$2');
                // Give the new div the original element's id if it has one
                if (oElement.getAttribute("id")) {
                    tempId = oElement.id;
                    oElement.removeAttribute('id');
                    oOuter.setAttribute('id', '');
                    oOuter.id = tempId;
                }
                // Change the original element's class name and replace it with the new div
                oElement.className = 'i3';
                oElement.parentNode.replaceChild(oOuter, oElement);
                // Create two new div elements and insert them into the outermost div
                oI1 = document.createElement('div');
                oI1.className = 'i1';
                oOuter.appendChild(oI1);
                oI2 = document.createElement('div');
                oI2.className = 'i2';
                oI1.appendChild(oI2);
                // Insert the original element
                oI2.appendChild(oElement);
                // Insert the top and bottom divs
                cbb.insertTop(oOuter);
                cbb.insertBottom(oOuter);
            }
        }
    }
};

//cbb.addEvent(window, 'load', cbb.init, ['main', 'sub']);
//cbb.addEvent(window, 'load', cbb.init);
// Use jquery document ready instead to init
