function WfUI() {
}

WfUI.prototype.InitWfUI = function() {
	// Register the unload event so that we unregister
	// all events when the user leaves the site
	// (for memory leaks)
	this.addEvent(window, 'unload', this.Unload);
}

WfUI.prototype.allListeners = null;

// Unload handler.  Used by derived classes to 
// handle the unloading of the object
WfUI.prototype.OnUnload = null;

// Unload handler.  Unregisters all events to prevent memory leaks.
WfUI.prototype.Unload = function() {

	// Loop through all the event listeners and unregister them
	// Dosen''t matter if the event is already registered
	for (var i = 0; i < this.allListeners.length; i++) {
		this.removeEvent(this.allListeners[i][0], this.allListeners[i][1], this.allListeners[i][2]);
	}

	// call the OnUnload handler if there is one registered
	if (this.OnUnload) {
		this.OnUnload();
	}
}

// Event function closure
WfUI.prototype.Event = function(obj, funct) {
	return function (e) { return obj[funct](e || window.event); };
}

// Adds an event listener to an element
// The event listener must be a member of the class 
WfUI.prototype.addEvent = function(element, eventName, handler) {
	var __this = this;
	var listener = function(e) { handler.call(__this, e || window.event);  };

	this.SaveListener(Array(element, eventName, listener));

	if (element.addEventListener) {
		element.addEventListener(eventName, listener, false);
	} else {
		element.attachEvent("on"+eventName, listener);
	}
}

// Removes an event listener from a DOM element
WfUI.prototype.removeEvent = function(element, eventName, listener) {
	if (element.removeEventListener) {
		element.removeEventListener(eventName, listener, false);
	} else {
		element.detachEvent("on"+eventName, listener);
	}
}

WfUI.prototype.SaveListener = function(objListener) {
	if (this.allListeners == null)
		this.allListeners = new Array();

	this.allListeners.push(objListener);
}

WfUI.prototype.SetTimeout = function(handler, timeout) {
	var __this = this;
	var listener = function() { handler.call(__this); };
	setTimeout(listener, timeout);
}


