var LGEPageEventRegistry = new LGEPageEventReg(); 

function LGEPageEventReg() {
	this.eventMap = new Object();
}

LGEPageEventReg.prototype.constructor = LGEPageEventReg;
LGEPageEventReg.prototype.addListener = LGEPageEventregistry_addListener;
LGEPageEventReg.prototype.existListener = LGEPageEventregistry_existListener;
LGEPageEventReg.prototype.removeListener = LGEPageEventregistry_removeListener;
LGEPageEventReg.prototype.removeAllListeners = LGEPageEventregistry_removeAllListeners;
LGEPageEventReg.prototype.fireEvent = LGEPageEventregistry_fireEvent;


function LGEPageEventregistry_addListener(event, listener )
{
    var eventMap = this.eventMap;
    var eventList = eventMap[event];
    if ( !eventList )
    {
        eventList = new Array();
        eventMap[event] = eventList;
    }
    eventList[eventList.length] = listener;
}


function LGEPageEventregistry_existListener(event, listener)
{

	var eventMap = this.eventMap;
	var eventList = eventMap[event];
	if (!eventList)
		return false;
	else
		for (var i=0; i<eventList.length; i++)
			if (eventList[i] == listener)
				return true;

	return false;

}


function LGEPageEventregistry_removeListener( event, listener )
{
    var eventMap = this.eventMap;
    var eventList = eventMap[event];
    if ( !eventList )
    {
        return;
    }
    var length = eventList.length;
    for ( var i = 0; i < length; i++ )
    {
        var func = eventList[i];
        if ( func == listener )
        {
            //Remove this function from the list.
            var firstPart = eventList.slice(0, i );
            var secondPart = eventList.slice( i + 1 );
            eventMap[event] = firstPart.concat( secondPart );
            return;
        }
    }
}

function LGEPageEventregistry_removeAllListeners( event )
{
    this.eventMap[event] = null;
}


function LGEPageEventregistry_fireEvent( event )
{
    var eventList = this.eventMap[event];
    if ( !eventList )
    {
        return;
    }
    var argStr = "";

    for ( var j = 1; j < arguments.length - 1; j++ )
    {
        argStr += "arguments[" + j + "],";
    }
    if ( arguments.length > 1 )
    {
        argStr += "arguments[" + j + "]";
    }

    for ( var i = 0; i < eventList.length; i++ )
    {
        var func = eventList[i];
        eval ( "func(" + argStr + ")" );
    }
}

