/**
 * BlackLight - A server side webpage framework
 *
 * @package BlackLight
 * @author Icewind <icewind (at) derideal (dot) com>
 * @copyright 2009
 * @license http://www.gnu.org/licenses/gpl.html GNU Public License
 * @url http://blacklight.metalwarp.com
 * @version 0.1
 */

//event handler function


eventHandler=function(){
	this.holders=Array();
}

eventHandler.prototype={
	addListner:function(element,func,type,obj){
		var holder=this.getHolderByElement(element);
		holder.addListner(func,type,obj);
	},
	getHolderByElement:function(element){
		var holder=false;
		for (var i=0;i<this.holders.length;i++){
			if (this.holders[i].getElement()==element){
				var holder=this.holders[i];
			}
		}
		if (!holder){
			var holder=new eventHolder(element);
			this.holders[this.holders.length]=holder;
		}
		return holder;
	},
	triggerEvent:function(element,type,event){
		var holder=this.getHolderByElement(element);
		holder.trigerEvent.call(holder,type,event);
	}
}

mainEventHandler=new eventHandler();
document.eventHandler=mainEventHandler;

eventHolder=function(element){
	this.element=element;
	this.listners=Array();
}

eventHolder.prototype={
	addListner:function(func,type,obj){
		if (type && this.element){
			if (!this.listners[type]){
				this.listners[type]=Array();
				eval("callback=function(event){holder.trigerEvent.call(holder,'"+type+"',event)}");
				if (this.element.tagName){//do we have a element (not an named event)
					var holder=this;
					//IE doesn't let you set the onload event the regulair way
					if (type=="onload" && this.element.addEventListener && window.ActiveXObject){
						this.element.addEventListener(type, callback, false);
					}else if (type=="onload" && this.element.attachEvent && window.ActiveXObject){
						this.element.attachEvent(type, callback);
					}else{
						eval("this.element."+type+"=function(event){holder.trigerEvent.call(holder,'"+type+"',event)}");
					}
				}else{
					eval("this.element."+type+"=function(event){holder.trigerEvent.call(holder,'"+type+"',event)}");
				}
			}
			var i=this.listners[type].length
			this.listners[type][i]=Array();
			this.listners[type][i]['function']=func;
			this.listners[type][i]['object']=obj;
		}else{
			var i=this.listners.length
			this.listners[i]=Array();
			this.listners[i]['function']=func;
			this.listners[i]['object']=obj;
		}
	},
	trigerEvent:function(type,event){
		if (type && this.element && this.listners[type]){
			for (var i=0;i<this.listners[type].length;i++){
				var obj=this.listners[type][i]['object'];
				if (obj){
					this.listners[type][i]['function'].call(obj);
				}else{
					this.listners[type][i]['function'].call();
				}
			}
		}else{
			for (var i=0;i<this.listners.length;i++){
				var obj=this.listners[i]['object'];
				if (obj){
					this.listners[i]['function'].call(obj,event);
				}else{
					this.listners[i]['function'](event);
				}
			}
		}
	},
	getElement:function(){
		return this.element;
	}
}
test1=function(){
	this.text="t";
}
test1.prototype={
	init:function(){
		this.text="lol";
		element=document.getElementById('test');
		mainEventHandler.addListner(element,this.test,'onclick',this);
	},
	test:function(){
		new SLNotification(this.text);
	}
}

testObj=new test1
mainLoadStack.append(testObj.init,testObj)