/* ClassName */

function ClassName(element) {
    this.element = element;
}

ClassName.prototype.ClassSeperator = " ";

ClassName.prototype.addClass = function(name) {
    var classNames = this.getNames();
    if (!classNames.contains(name)) {
        classNames.add(name);
        this.setNames(classNames)
    }
}

ClassName.prototype.removeClass = function(name) {
    var classNames = this.getNames();
    classNames.remove(name);
    this.setNames(classNames)
}

ClassName.prototype.contains = function(name) {
    return this.getNames().contains(name);
}

ClassName.prototype.getNames = function() {
    if (this.element.className) {
        return this.element.className.split(this.ClassSeperator);
    }
    return [];
}

ClassName.prototype.setNames = function(classNames) {
    this.element.className = classNames.join(this.ClassSeperator)
}

/* Elements */

function Elements() {
}

Elements.getElementById = function(id) {
    var element = document.getElementById(id);
    return Elements.fix(element);
}

Elements.fix = function(element) {
    if (element == null) {
        return element;
    }
    if (typeof(element.addEventListener) != "function") {
        element.addEventListener = function(type, listener, useCapture) {
            element.attachEvent("on" + type, function() {
                if (element.tagName && element.tagName.toLowerCase() == "iframe") {
                    element = Frames.fix(element);
                }
                var wrapper = {preventDefault : function() {
                    window.event.returnValue = false;
                }}
                listener(wrapper);
            });
        }
    }
    return element;
}
