var PrNe;
if (!PrNe) PrNe = {};

PrNe.Functions = {
    addEv: function(element, type, handler) {
        if (!element) {
            return false;
        }
        
        if (element.addEvListener) {
            element.addEvListener(type, handler, false);
        } else {
            if (!handler.$$guid) handler.$$guid = this.eGuid++;
            
            if (!element.events) element.events = {};
            
            var handlers = element.events[type];
            
            if (!handlers) {
                handlers = element.events[type] = {};
                
                if (element['on' + type]) {
                    handlers[0] = element['on' + type];
                }
            }
            
            handlers[handler.$$guid] = handler;
            element['on' + type] = this.handleEvent;
        }
    },
    
    removeEv: function(element, type, handler) {
        if (element.removeEvListener) {
            element.removeEvListener(type, handler, false);
        } else {
            if (element.events && element.events[type]) {
                delete element.events[type][handler.$$guid];
            }
        }
    },
    
    handleEvent: function(event) {
        var returnValue = true;
        event = event || PrNe.Functions.fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
        var handlers = this.events[event.type];
        
        for (var i in handlers) {
            this.$$handleEvent = handlers[i];
            if (this.$$handleEvent(event) === false) {
                returnValue = false;
            }
        }
        
        return returnValue;
    },
    
    fixEvent: function(event) {
        event.preventDefault = PrNe.Functions.preventDefault;
        event.stopPropagation = PrNe.Functions.stopPropagation;
        
        return event;
    },
    
    preventDefault: function() {
        this.returnValue = false;
    },
    
    stopPropagation: function() {
        this.cancelBubble = true;
    }
}
