var EventManager = {
	eventNameRoot : 'com.cobaltgroup.ws.view',
	pageViewToken : 'page',
	conversionToken : 'conversion',
	//
	subscribe : function(paramOb) {
		var eventName = paramOb.eventName;
		var callback = paramOb.callback;
		var scope = (!paramOb.scope) ? null : paramOb.scope;
		var subscriberData = (!paramOb.subscriberData) ? null : paramOb.subscriberData;
		var filter = (!paramOb.filter) ? null : paramOb.filter;
		//
		OpenAjax.hub.subscribe(eventName, callback, scope, subscriberData, filter);
	},
	publish : function(paramOb) {
		var eventName = paramOb.eventName;
		var publisherData = (!paramOb.publisherData) ? null : paramOb.publisherData;
		//
		OpenAjax.hub.publish(eventName, publisherData);
	},
	bindEvent : function(eventOb) {
		jQuery(eventOb.elementSelector).bind(eventOb.eventType, function(e){
			EventManager.publish({
				eventName : eventOb.eventName,
				publisherData : e
			});
		});
	},
	/**
	* Set the EventManager to wait until the doc is ready before registering handlers.
	*
	* @param handlerArray	An array of handler objects
	*/
	addHandlers : function(handlerArray) {
		jQuery(document).ready(function() {
			EventManager.registerHandlers(handlerArray);
			EventManager.init();
		});
	},
	/**
	* Register an array of handler objects to the event hub.
	*
	* @param handlerArray	An array of handler objects
	*/
	registerHandlers : function(handlerArray) {
		var i;
		var len = handlerArray.length;
		var newHandler;
		for (i=0; i < len; i++) {
			newHandler = EventManager.getEventHandlerInstance(handlerArray[i].source, handlerArray[i].handler);
			//
			EventManager.subscribe({
				eventName : handlerArray[i].eventName,
				callback : 'execute',
				scope : newHandler
			});
		}
	},
	/**
	* Create a new instance of EventHandler
	*/
	getEventHandlerInstance : function(source, handler) {
	    if (!EventHandler) {return;}

		var i = new EventHandler(source);
		// override doHandler
		i.doHandler = handler;
		return i;
	},
	/**
	* Publish the pageView or conversion event
	*/
	init : function() {
	    var pageLayout = (ContextManager && ContextManager.pageLayout) ? ContextManager.pageLayout : "";
		var token = (pageLayout.indexOf('ThankYou') != -1) ? EventManager.conversionToken : EventManager.pageViewToken;
		var eventName = EventManager.eventNameRoot + "." + token;
		EventManager.publish({
			eventName : eventName
		});
	}
};
