function getFileName(fileName) {
	var url = (fileName ? fileName : document.URL);	
	return url.substring(url.lastIndexOf('\/') + 1, (url.indexOf('.aspx', url.lastIndexOf('\/') + 1) + 5));
}

function loadJSFile(filename) {
	var scriptTag = document.createElement('script');
	
	scriptTag.setAttribute('type', 'text/javascript');
	scriptTag.setAttribute('src', filename);
	document.getElementsByTagName('head')[0].appendChild(scriptTag);
}

function isIE() {
	return /MSIE (\d+\.\d+);/.test(navigator.userAgent);
}

// JavaScript language improvements
String.prototype.trim = function () {
// trim whitespace off both ends of string
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

Array.prototype.inArray = function (value) {
// determine if an array contains a value
	var i;
	
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	
	return false;
}

// create Event classes (used for element event handling)
var Events = {
	setEventHandler : function(target, eventType, eventHandler) {	
		if (window.addEventListener) {
			target.addEventListener(eventType, eventHandler, false);
		}
		else {
			target.attachEvent('on' + eventType, eventHandler);
		}
	},
	
	setObjectEventHandler : function(target, eventType, object, methodName) {	
		if (window.addEventListener) {
			target.addEventListener(eventType, function(event) { object.handleEvent(event, methodName); }, false);
		}
		else {
			target.attachEvent('on' + eventType, function(event) { object.handleEvent(event, methodName); });
		}
	},
	
	simulateEvent : function(target, eventType) {
		if (!document.createEvent) {
			var e = document.createEventObject();         
			target.fireEvent('on' + eventType, e);
		}
		else {
			switch (eventType) {             
				case 'abort':
				case 'blur':
				case 'change':
				case 'error':
				case 'focus':
				case 'load':
				case 'reset':
				case 'resize':
				case 'scroll':
				case 'select':
				case 'submit':
				case 'unload':
					e = document.createEvent('HTMLEvents');
					e.initEvent(eventType, true, true);
					break;
				case 'click':
				case 'mousedown':
				case 'mousemove':
				case 'mouseout':
				case 'mouseover':
				case 'mouseup':
					e = document.createEvent('MouseEvents');
					e.initMouseEvent(eventType, true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
					break;
				}
				
				target.dispatchEvent(e);
		}
	}
}

function Event(e) {
	this.event = (e || window.event);
	this.target = (this.event.target ? this.event.target : this.event.srcElement);
	this.keyASCII = (window.event ? this.event.keyCode : this.event.which);	
}

// <prototype functions>
Event.prototype.preventDefault = function() {
	(this.event.preventDefault ? this.event.preventDefault() : this.event.returnValue = false);
}
