window.jsx.events = {};
////////////////////////////////////////////////////////////////////////////////

// Cria addEventListener no IE para padronizar com o FireFox
if (!window.addEventListener) {
    window.addEventListener = function (type, listener, useCapture) {
           attachEvent("on" + type, function() { listener(event) });
    };
}

window.jsx.events.addListener = function(obj, type, listener) {
    
    // TODO validar parametros
    
    // Se ja tiver eventos registrados por este modulo
    if (obj["on" + type] && obj["on" + type].jsx) {
    
        obj["on" + type].listeners[obj["on" + type].listeners.length] = listener;
        
    }
        
    else {

        // TODO Fix, pq gera closure
        var _event = function(e) {
            
            var i;
                        
            for (i = 0; i < arguments.callee.listeners.length; i++) {
                if (e) { //firefox
                    arguments.callee.listeners[i].apply(obj, [e]);
                }
                else { //ie
                    arguments.callee.listeners[i].apply(obj, [event]);
                }
            }

        };

        _event.jsx = true;
        _event.listeners = [];
    
        // Se ja tiver um listener no modelo padrão, insere-o na lista
        if (obj["on" + type]) {
            _event.listeners[0] = obj["on" + type];
        }
        
        _event.listeners[_event.listeners.length] = listener;
        
        obj["on" + type] = _event;
        
    }
    
    // Retorna índice da funcao na fila
    return obj["on" + type].listeners.length;

};

window.jsx.events.removeListener = function(obj, type, listenerId) {

    //TODO

};
