var Events = function () {
    this.initialize();
};

Events.prototype = {
    focusColor: "#ffffcc",
    initialize: function () {
        this._addEventHighlight(document.getElementsByTagName("input"));
        this._addEventHighlight(document.getElementsByTagName("textarea"));
        this._addEventTextarea(document.getElementsByTagName("textarea"));
        this._addEventSwapimage(document.getElementsByTagName("input"));
        this._addEventSwapimage(document.getElementsByTagName("img"));
        this._addEventPopup(document.getElementsByTagName("a"));
    },
    _addEventHighlight: function (element) {
        for (var i = 0; i < element.length; i++) {
            element[i].onfocus = this._focus(element[i], this.focusColor);
            element[i].onblur  = this._blur(element[i]);
        }
    },
    _focus: function (element, color) {
        return function () {
            element.style.backgroundColor = color;
        };
    },
    _blur: function (element) {
        return function () {
            element.style.backgroundColor = "";
        };
    },
    _addEventTextarea: function (element) {
        for (var i = 0; i < element.length; i++) {
            this.rows = (element[i].getAttribute("rows") === null) ? 2 : element[i].getAttribute("rows");
            element[i].onkeyup = this._resize(element[i]);
        }
    },
    _resize: function (element) {
        var rows = this.rows;

        return function () {
            var line = 1;

            for (var i = 0; i < element.value.length; i++) {
                if (element.value.charAt(i) === "\n") {
                    line++;
                }
            }

            line = (line > rows) ? line : rows;
            element.setAttribute('rows', line);
        };
    },
    _addEventSwapimage: function (element) {
        for (var i = 0; i < element.length; i++) {
            if (element[i].getAttribute("src")) {
                if (element[i].getAttribute("src").match("_out")) {
                    element[i].onmouseout  = this._swap(element[i]);
                    element[i].onmouseover = this._swap(element[i]);

                    if (element[i].getAttribute("type") === "image") {
                        element[i].onclick = "void(this.form.submit()); return false";
                    }
                }
            }
        }
    },
    _swap: function (element) {
        return function () {
            (element.getAttribute("src").match("_out")) ?
                element.setAttribute("src", element.getAttribute("src").replace("_out", "_over")) :
                element.setAttribute("src", element.getAttribute("src").replace("_over", "_out"));
        };
    },
    _addEventPopup: function (element) {
        for (var i = 0; i < element.length; i++) {
            (element[i].getAttribute('rel') === 'events') ? element[i].onclick = this._windowOpen(element[i]) : null;
        }
    },
    _windowOpen: function (element) {
        return function () {
            window.open(element.getAttribute('href'));
            return false;
        }
    }
};
