/**
 * Object PageObject
 *
 * The Super Class PageObject is a DOM element wrapper
 *
 * License:
 * Coalmarch Productions, LLC
 * All rights to source code and implementation files reserved.
 * http://www.coalmarch.com | info@coalmarch.com
 * (919) 481-2895
 *
 */
var pgObjEvtHnd = {};
PageObject.prototype.setEventHandler = function(eventType, eventAction)
{
	if( typeof( eventAction ) == "undefined" )
	{
		alert("Error in PageObject.setEventHandler\n"+
			  "An event handler assignment was attempted, however no event action was specified. Please report this to the system administrator. Thank you.\n"+
			  "Event Type: " + eventType + "\n" +
			  "Event Action: " + eventAction + "\n" + 
			  "Source Element: " + this.srcElement.id);
		return false;
	}
	//alert("Creating event handler for "+this.srcElement.id+" on "+eventType+" using "+eventAction);
	if( eventType.indexOf(":") > -1 )
	{
		eventArray = eventType.split(":");
		handled = false;
		evtString = eventAction.replace("();",'');
		switch( eventArray[0] )
		{
			case "timeout":
				setTimeout( eventAction, eventArray[1] );
				handled = true;
				break;
			case "interval":
				setInterval( eventAction.replace("();",''), eventArray[1] );
				handled = true;
				break;
			default:
		}
		
		if( handled == true )
		{
			return;
		}
	}
	if (typeof(pgObjEvtHnd[this.srcElement.id]) == "undefined")
	{
		pgObjEvtHnd[this.srcElement.id] = {};
	}
	pgObjEvtHnd[this.srcElement.id][eventType] = eventAction;
	
	
	//alert(this.srcElement.addEventListener);
	if (typeof(this.srcElement.addEventListener) == "function")
	{
		//eventAction = eventAction.substring(0,-3);
		//window.prompt("test",name);
		//window.prompt("test 2",document.getElementById("toggle_unknownFiles_55612ccec8a45fa1c5cbb8baf7e942e1"));
		//window.alert("1. adding event listener for '"+eventType+"' to "+this.srcElement.id+" ("+this.srcElement+") with "+eventAction);
		//window.prompt("action",eventAction);
		//document.addEventListener(eventType,this.handleEvent,false)
		this.srcElement.addEventListener(eventType,this.handleEvent,false);
	}
	else
	{
		//window.alert("2. attaching event listener for "+eventType+" to "+this.srcElement.id+" ("+this.srcElement+") with "+eventAction);
		//document.attachEvent('on'+eventType,this.handleEvent);
		this.srcElement.attachEvent('on'+eventType,this.handleEvent);
	}
}
PageObject.prototype.handleEvent = function(evt)
{
	var evt = (evt) ? evt : ((window.event) ? window.event : "");
	var target = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : "");
	
	//alert("Received event "+evt.type+" on "+target.id+", executing "+pgObjEvtHnd[target.id][evt.type]);
	//if(evt.type == "click")
	//{
		//alert("Received event "+evt.type+" on "+target.id+", executing "+pgObjEvtHnd[target.id][evt.type]);
	//}
	
	if ((typeof(pgObjEvtHnd[target.id]) != "undefined") && (typeof(pgObjEvtHnd[target.id][evt.type]) != "undefined"))
	{
		eval(pgObjEvtHnd[target.id][evt.type]);
	}
	else
	{
		if(target.tagName.toLowerCase() != "div" && target.tagName.toLowerCase() != "a")
		{
			if(target.parentNode.tagName.toLowerCase() == "div" || target.parentNode.tagName.toLowerCase() == "a")
			{
				eval(pgObjEvtHnd[target.parentNode.id][evt.type]);
			}
		}
	}
	evt.cancelBubble = true;
	//if (evt.stopPropagation) evt.stopPropagation();
	evt.returnValue = false
	return false;
}
/**
 * PageObject visibility controls
 */
PageObject.prototype.hide = function()
{
	if (this.srcElement)
	{
		this.srcElement.style.display = "none";
	}
}
PageObject.prototype.show = function()
{
	if (this.srcElement)
	{
		this.srcElement.style.display = "block";
	}
}
PageObject.prototype.toggleVisibility = function()
{
	if (this.srcElement.style.display == "none")
	{
			this.show();
	}
	else
	{
		this.hide();
	}
}
PageObject.prototype.isA = function( objectType )
{
	return (this.dataType.indexOf(objectType) > -1);
}
function PageObject( src )
{
	this.srcElement = src;
	this.dataType = "PageObject";
}
