var JsEventListener = function ( obj, _debug )
{

	var cur_id = 0;
	var eventsArray = new Array();	// 0-id, 1-event, 2-func
	var fake = false;
	var eobject = obj;		// объект слушающий события
	var debug = _debug;
	var disabled = false;

	this.listEvent = function ()
	{
//		var t = new Array ();
//		for ( i = 0; i < eventsArray.length; i++ )
//			t.push ( new Array( eventsArray[1], eventsArray[2].tagName ));

		alert ( eventsArray );
	}

	this.Init = function ( obj )
	{
		if ( obj ) eobject = obj;

		attach_event ( eobject, 'click', 	this.eventOnmouseclick );
		attach_event ( eobject, 'mouseover', 	this.eventOnmouseover );
		attach_event ( eobject, 'mouseout', 	this.eventOnmouseout );
		attach_event ( eobject, 'mousedown', 	this.eventOnmousedown );
		attach_event ( eobject, 'mouseup', 	this.eventOnmouseup );
	}
	this.setDisabled = function ( str ) 
	{
		disabled = str;	
	}
	this.setDisabledToggle = function () 
	{
		disabled = !disabled;	
	}

	this.setObject = function ( obj )
	{
		eobject = obj;
	}

	this.appendEvent = function ( event, func )
	{
		// получить следующий для события идентификатор
		var id = this.getNextEventId ( event );

		// добавить в массив событие
		eventsArray.push (new Array(id, event, func));
	}
	this.removeEventFunc = function ( event, func )
	{
		for ( var i=0; i < eventsArray.length; i++ )
		{
			if ( eventsArray[i][1] == event && eventsArray[i][2] == func )
				eventsArray.splice(i);
		}
	}
	
	this.removeEvent = function ( event )
	{
		for ( var i=0; i < eventsArray.length; i++ )
		{
			if ( eventsArray[i][1] == event )
			{
				eventsArray.splice(i);
			}
		}
	}

	this.getNextEventId = function ( event )
	{
		var id = -1;
		for ( i=0; i < eventsArray.length; i++ )
		{
			if ( eventsArray[i][1] == event ) id++;
		}
		id++;
		return id;
	}

	var callEvents = function ( ev, event )
	{
		if ( !disabled )
		{
			for ( i=0; i < eventsArray.length; i++ )
			{
//				if ( eventsArray[i][1] == event ) { alert(i); };//eventsArray[i][2]() };
				if ( eventsArray[i][1] == event ) { eventsArray[i][2](ev) };
			}
			return false;
			
		}

		return true;
	}

		var attach_event = function (sender, event, func)
		{
		        if (sender.addEventListener)
		                return sender.addEventListener(event, func, false);
		        else
				return sender.attachEvent('on'+event, func);
		}

		var detach_event = function (sender, event, func)
		{
		        if (sender.addEventListener)
		                return sender.removeEventListener(event, func, false);
		        else
		                return sender.detachEvent('on'+event, func);
		}

		this.eventOnmouseover = function ( ev )	
		{
			return callEvents ( ev, 'mouseover' );
		}
		this.eventOnmouseout  = function ( ev )
		{
			return callEvents ( ev, 'mouseout' );
		}
		this.eventOnmouseclick = function ( ev )
		{
			return callEvents ( ev, 'click' );
		}
		this.eventOnmousedown = function ( ev )
		{
			return callEvents ( ev, 'mousedown' );
		}
		this.eventOnmouseup = function ( ev )
		{
			return callEvents ( ev, 'mouseup' );
		}
}
