
cUtils = function () { };
cUtils.prototype = {

    // returns postions and size of element
    getBounds: function (element) {
        var left = element.offsetLeft;
        var top = element.offsetTop;
        for (var parent = element.offsetParent; parent; parent = parent.offsetParent) {
            left += parent.offsetLeft - parent.scrollLeft;
            top += parent.offsetTop - parent.scrollTop;
        }
        return { left: left, top: top, width: element.offsetWidth, height: element.offsetHeight };
    },

    Events: {
        // attach event handler to the element
        addHandler: function (object, event, handler) {
            if (typeof object.addEventListener != 'undefined')
                object.addEventListener(event, handler, false);
            else if (typeof object.attachEvent != 'undefined')
                object.attachEvent('on' + event, handler);
            else
                throw "Incompatible browser";
        },

        // remove event handler from the element
        removeHandler: function (object, event, handler) {
            if (typeof object.removeEventListener != 'undefined')
                object.removeEventListener(event, handler, false);
            else if (typeof object.detachEvent != 'undefined')
                object.detachEvent('on' + event, handler);
            else
                throw "Incompatible browser";
        }
    }

};

// create utils instance    
Utils = new cUtils();

/**
*   @desc: searches elements by their class name
*   @className: class name to search for
*   @tag: [optional] tag name for elements to search class name in
*   @elm: [optional] entry point to start search (default value is document)
*/
document.getElementsByClassName = function (className, tag, elm) {
    var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
    var tag = tag || "*";
    var elm = elm || document;
    var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
    var returnElements = [];
    var current;
    var length = elements.length;
    for (var i = 0; i < length; i++) {
        current = elements[i];
        if (testClass.test(current.className)) {
            returnElements.push(current);
        }
    }
    return returnElements;
}
