function getPosition(theElement)
	{
		var positionX = 0;
		var positionY = 0;
		while (theElement != null)
			{
				positionX += theElement.offsetLeft;
				positionY += theElement.offsetTop;
				theElement = theElement.offsetParent;
			}
		return [positionX, positionY];
	}
	
function addLoadEvent(fn)
	{
	if (typeof window.addEventListener != 'undefined')
		{
		window.addEventListener('load', fn, false);
		}
	else if (typeof document.addEventListener != 'undefined')
		{
		document.addEventListener('load', fn, false);
		}
	else if (typeof window.attachEvent != 'undefined')
		{
		window.attachEvent('onload', fn);
		}
	else
		{
		var oldfn = window.onload;
		if (typeof window.onload != 'function')
			{
				window.onload = fn;
			}
		else
			{
			window.onload = function()
				{
					oldfn();
					fn();
				};
			}	
		}
	}
	
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
	
	

function getElementsByClassName(oElm, strTagName, strClassName)
		{
			//popularly used function to return array of elements which have certain class 
		    var arrElements = oElm.getElementsByTagName(strTagName);		    
		    var arrReturnElements = new Array();
		    strClassName = strClassName.replace(/\-/g, "\\-");
		    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
		    var oElement;
		    for(var i=0; i<arrElements.length; i++)
		    	{
			       oElement = arrElements[i];  				
			       if(oRegExp.test(oElement.className))
			        {
			            arrReturnElements.push(oElement);
			        }   
		   		}
		    return (arrReturnElements)
		}
		

		
function addEvent(element, type, handler) {
	// assign each event handler a unique ID
	if (!handler.$$guid) handler.$$guid = addEvent.guid++;
	// create a hash table of event types for the element
	if (!element.events) element.events = {};
	// create a hash table of event handlers for each element/event pair
	var handlers = element.events[type];
	if (!handlers) {
		handlers = element.events[type] = {};
		// store the existing event handler (if there is one)
		if (element["on" + type]) {
			handlers[0] = element["on" + type];
		}
	}
	// store the event handler in the hash table
	handlers[handler.$$guid] = handler;
	// assign a global event handler to do all the work
	element["on" + type] = handleEvent;
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	// delete the event handler from the hash table
	if (element.events && element.events[type]) {
		delete element.events[type][handler.$$guid];
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(window.event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};


//internet script to get properties even if they haven't been set using javascript!!
function getStyle(el,styleProp)
	{
		var x = el;
		if (x.currentStyle)
			var y = x.currentStyle[styleProp];
		else if (window.getComputedStyle)
			var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
		return y;
	}
	
function insertAtCursor(myField, myValue) 
	{
		if (document.selection && myField.type && myField.type != "text") 
			{
				myField.focus();
				sel = document.selection.createRange();
				sel.text = myValue;
			}
		
		else if ((myField.selectionStart || myField.selectionStart == '0')) 
			{
				var startPos = myField.selectionStart;
				var endPos = myField.selectionEnd;
				myField.value = myField.value.substring(0, startPos)
								+ myValue
								+ myField.value.substring(endPos, myField.value.length);
			} 
		else 
			{
				myField.value += myValue;
			}
	}

	
function getScreenWidth()
	{
		var x;
		if (self.innerHeight) // all except Explorer
		{
			x = self.innerWidth;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			x = document.documentElement.clientWidth;
		}
		else if (document.body) // other Explorers
		{
			x = document.body.clientWidth;
		}
		
		return x;
	}	
	
function getScreenHeight()
	{
		var y;
		if (self.innerHeight) // all except Explorer
		{
			y = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			y = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			y = document.body.clientHeight;
		}

		return y;
	}	
	
function triggerEvent(fieldRef, event)
	{
		var event = "on" + event;
	 	if(fieldRef.fireEvent)
		 	{   
		 		fieldRef.fireEvent(event);
			}		
	}