
//  red.event.add(element,'click',function(){alert('stefan')});
//  red.event.remove(element,'click');

red.prototype.event = {
	
	dom_events: ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover',
				'mousemove', 'mouseout', 'keypress', 'keydown', 'keyup',
				'load', 'unload', 'abort', 'error', 'resize', 'scroll',
				'select', 'change', 'submit', 'reset', 'focus', 'blur'],
		
	add : function ( element, type, handler ) {
		if (!handler.$$guid) {
			handler.$$guid = red.prototype.event.add.guid++;
		}
		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] = red.prototype.event.handle;
	},

	"add.guid" : 1,

	remove : function (element, type, handler) {
		if (element.events && element.events[type]) {
			if(handler != null){
				delete element.events[type][handler.$$guid];
			}
			else{
				delete element.events[type];
			}
		}
	},

	handle : function ( ev ) {
		var returnValue = true;
		ev = ev || red.prototype.event.fix(window.event);
		var handlers = this.events[ev.type];
		for (var i in handlers) {
			this.$$handle = handlers[i];
			if (this.$$handle(ev) === false) {
				returnValue = false;
			}
		}
		return returnValue;
	},

	fix : function ( event ) {
		event.preventDefault = red.prototype.event.fix.preventDefault;
		event.stopPropagation = red.prototype.event.fix.stopPropagation;
		return event;
	},
	"fix.preventDefault" : function() {
		red.prototype.event.returnValue = false;
	},
	"fix.stopPropagation" : function() {
		red.prototype.event.cancelBubble = true;
	}
	

};