﻿var ce;

// CEEvents
ce = {};

ce.events = {
    isIE6: false,
    deferred: [],
    postTimer: null,

    add: function(element, type, obj, method) {
        var n = "ceon" + type;

        if (!element[n]) {
            element[n] = [];
            element["on" + type] = ce.events.eventRespond;
        }

        element[n].push({ o: obj, m: method });
    },

    remove: function(element, type, obj, method) {
        var n, i, observers;

        n = "ceon" + type;
        if (!element[n]) { return; }

        observers = element[n];
        for (i = 0; i < observers.length; i++) {
            if ((observers[i].o === obj) && (observers[i].m === method)) {
                observers.splice(i, 1);
                break;
            }
        }

        if (observers.length === 0) {
            element[n] = null;
            element["on" + type] = null;
        }
    },

    respond: function(el, e) {
        var n, observers, i;

        n = "ceon" + e.type;
        observers = el[n];

        for (i = 0; i < observers.length; i++) {
            observers[i].m.call(observers[i].o, el, e);
        }

        return !e.cancelBubble;
    },

    trigger: function(element, type, e) {
        var n, observers, i;

        n = "ceon" + type;

        if (!element[n]) { return; }

        observers = element[n];

        for (i = 0; i < observers.length; i++) {
            observers[i].m.call(observers[i].o, element, e);
        }
    },

    post: function(element, type, e) {
        this.deferred.push({ element: element, type: type, e: e });

        if (this.postTimer === null) {
            this.postTimer = window.setTimeout(ce.events.eventTimer, 1);
        }
    },

    doPost: function() {
        var list, i, postedEvent;

        this.postTimer = null;

        list = this.deferred;
        this.deferred = [];

        for (i = 0; i < list.length; i++) {
            postedEvent = list[i];
            this.trigger(postedEvent.element, postedEvent.type, postedEvent.e);
        }
    },

    startTrackMouse: function(obj, method, e) {
        this.endTrackMouse();

        this.trackObj = obj;
        this.trackMethod = method;

        if (this.trackMethod) {
            this.add(window.document, "mousemove", events, events.trackMouseMove);
            this.add(window.document, "mouseup", events, events.trackMouseUp);
            this.trackMethod.call(this.trackObj, 0, e);
        }
        e.cancelBubble = true;
    },

    endTrackMouse: function() {
        if (this.trackMethod) {
            this.remove(window.document, "mousemove", events, events.trackMouseMove);
            this.remove(window.document, "mouseup", events, events.trackMouseUp);
            this.trackMethod.call(this.trackObj, 3, null);
            this.trackMethod = null;
            this.trackObj = null;
        }
    },

    trackMouseMove: function(el, e) {
        if (this.trackMethod) {
            this.trackMethod.call(this.trackObj, 1, e);
        }
        e.cancelBubble = true;
    },

    trackMouseUp: function(el, e) {
        if (this.trackMethod) {
            this.trackMethod.call(this.trackObj, 2, e);
        }

        this.endTrackMouse();

        e.cancelBubble = true;
    },

    startTimer: function(obj, method, delay) {
        return window.setInterval(function() { method.call(obj); }, delay);
    },

    stopTimer: function(id) {
        window.clearInterval(id);
    },

    eventRespond: function(e) {
        return ce.events.respond(this, e ? e : window.event);
    },

    eventTimer: function() {
        ce.events.doPost();
    },

    eventIgnore: function(e) {
        if (!e) e = window.event;
        e.cancelBubble = true;
        if (e.stopPropogation) {
            e.stopPropogation();
        }
        return false;
    }
};

ce.website = {
    start: function() {
        var divs, i, div, s;
        if (ce.isIE6) {
            divs = window.document.getElementsByTagName("DIV");
            for (i = 0; i < divs.length; i++) {
                div = divs[i];
                if (div.className.indexOf("menu0") >= 0) {
                    ce.events.add(div, "mouseover", ce.website, ce.website.menu0MouseOver);
                    ce.events.add(div, "mouseout", ce.website, ce.website.menu0MouseOut);
                }
            }
        }
    },

    menu0MouseOver: function(el, e) {
        el.className += " menu0_hover";
    },

    menu0MouseOut: function(el, e) {
        el.className = el.className.replace(/ menu0_hover/g, "");
    },

    mysubmit: function(obj) {
        var form, field, key;
        form = window.document.forms[0];
        for (key in obj) {
            if (!obj.hasOwnProperty(key)) { continue; }
            field = window.document.createElement("input");
            field.type = "hidden";
            field.name = key;
            field.value = obj[key];
            form.appendChild(field);
        }
        form.submit();
    },

    getRadioValue: function(name) {
        var els, i;
        els = window.document.getElementsByName(name);
        for (i = 0; i < els.length; i++) {
            if (els[i].checked)
                return els[i].value;
        }
        return null;
    }
};

// Main

ce.events.add(window, "load", ce.website, ce.website.start);

