/*
 * EventLogger class. Uses ajax to log an event.  logEvent.jsp will automatically check for the accountID or use 0 if one is not available.
 * EXAMPLE:
				// Set onclick event

				new EventLogger({
					triggerElemId : 	'msgCenterShowAllCurrent',
					triggerEventType :	'click',
					eventTypeID : 		54,
					subEventTypeID : 	1,
					eventDetail1 : 		this.collegeID
				});

				// Or fire a one-time event log

				new EventLogger({
					eventTypeID : 		54,
					subEventTypeID : 	1,
					eventDetail1 : 		this.collegeID
				}).logEvent();

 */
var EventLogger = new Class({

	Implements: Options,

	options: {
		onPassRedirect:	  null,
		onFailRedirect:   null,
		triggerElemId:	  null,
		triggerEventType: null,
		eventTypeID: 	  null,
		subEventTypeID:   null,
		eventDetail1:	  null,
		eventDetail2:     null,
		eventDetail3:     null,
		eventDetail4:     null
	},
	/*
	 * Constructor, automatically called on instantiation (like all mootools Classes). Everything is required except the eventDetails (accountID is logged automatically).
	 */
	initialize : function (options) {

		var elogger = this;

		this.setOptions(options);
		this.options.ajax = new AjaxCpx({
			url: "/e_l",
			noCache: true,
			onSuccess: function() {
				global.trace(EventLogger, "el success");
				if (elogger.options.onPassRedirect != null) {
					global.trace(EventLogger, "el url = " + elogger.options.onPassRedirect);
					window.location = elogger.options.onPassRedirect;
				}
			},
			onFailure: function() {
				global.warn("el fail");
//				global.warn(EventLogger, "el fail");
				if (elogger.options.onFailRedirect != null) {
					global.warn("el url = " + elogger.options.onFailRedirect);
					global.warn(EventLogger, "el url = " + elogger.options.onFailRedirect);
					window.location = elogger.options.onFailRedirect;
				}
			}
		});

		// if a triggerElemID and triggerEventType has been specified, add an event.  Otherwise, do nothing (logEvent can still be called manually).
		window.addEvent('domready', function () {
			// check to be sure there is a trigger element first, in order to fail gracefully if this element does not exist.
			if ($(this.options.triggerElemId) && $defined(this.options.triggerEventType)) {
				$(this.options.triggerElemId).addEvent(this.options.triggerEventType, this.logEvent.bind(this));
			} else if (this.options.triggerElemId != false && this.options.triggerElemId != '') {
				// TODOKH: add ability to write a message to the Tomcat log via ajax. Do that in production.
				global.trace(EventLogger, 'System message: Attempt to set EventLogger.js listener on a non-existing element. This may be a manual event log. ID: ' + this.options.triggerElemId);
			}
		}.bind(this));
	},

	/*
	 * Fires off the ajax request.
	 */
	logEvent : function () { /* changed method from request to send for Mootools 1.2 */
		var data = "eventTypeID=" + this.options.eventTypeID;
		if(this.options.subEventTypeID != null) {
			data += "&subEventTypeID=" + this.options.subEventTypeID;
		}
		if(this.options.eventDetail1 != null) {
			data += "&eventDetail1=" + this.options.eventDetail1;
		}
		if(this.options.eventDetail2 != null) {
			data += "&eventDetail2=" + this.options.eventDetail2;
		}
		if(this.options.eventDetail3 != null) {
			data += "&eventDetail3=" + this.options.eventDetail3;
		}
		if(this.options.eventDetail4 != null) {
			data += "&eventDetail4=" + this.options.eventDetail4;
		}

		this.options.ajax.send(data);
	}
});

EventLogger.DEBUG_LEVEL = 3;
EventLogger.CLASS_NAME = EventLogger;


