/* PTPortletServices.js */

function PTPortletServices()
{
	this.regEvents = new Array();
	if (!window.navigator['PTPCCState']) { window.navigator['PTPCCState'] = new Array(); }
}

PTPortletServices.prototype.WindowEventURN = 'urn:schemas.microsoft.com:dhtml';
PTPortletServices.prototype.RaiseEvent = function(sNamespaceURN, sEventName, objEventArgs)
{
	var arrEvents = this.regEvents[sNamespaceURN];
	if (arrEvents && arrEvents[sEventName])
	{		
		var arrFunctionsForEvent = arrEvents[sEventName];
		var bHaveArguments = (objEventArgs);
		for (var lIndex = 0; lIndex < arrFunctionsForEvent.length; ++lIndex)
		{
			var itemFunction = arrFunctionsForEvent[lIndex];
			var sFunctionType = typeof(itemFunction);
			if (sFunctionType == 'string')
			{
				if (bHaveArguments)	{ eval(itemFunction + '(arguments[2])'); }
				else				{ eval(itemFunction + '()'); }
			}
			else if (sFunctionType == 'function')
			{
				if (bHaveArguments)	{ itemFunction(arguments[2]); }
				else				{ itemFunction(); }
			}
		}
	}
}

PTPortletServices.prototype.RaiseWindowEvent = function(objEventArgs)
{
	if (this && this.RaiseEvent)
	{
		this.RaiseEvent(this.WindowEventURN, 'on' + arguments[0].type, arguments[0]);
	}
	else if (document.PCC && document.PCC.RaiseEvent)
	{
		document.PCC.RaiseEvent(document.PCC.WindowEventURN, 'on' + arguments[0].type, arguments[0]);
	}
}

PTPortletServices.prototype.RegisterForEvent = function(sNamespaceURN, sEventName, sFunction)
{
	var arrEvents = new Array();
	if (this.regEvents[sNamespaceURN])	{ arrEvents = this.regEvents[sNamespaceURN]; }
	else								{ this.regEvents[sNamespaceURN] = arrEvents; }
	var arrFunctions = new Array();
	if (arrEvents[sEventName])	{ arrFunctions = arrEvents[sEventName]; }
	else						{ arrEvents[sEventName] = arrFunctions; }
	arrFunctions[arrFunctions.length] = sFunction;
}

PTPortletServices.prototype.RegisterForWindowEvent = function(sEventName, sFunction)
{
	this.RegisterForEvent(this.WindowEventURN, sEventName, sFunction);
}

PTPortletServices.prototype.PutSessionState = function(sNamespaceURN, sName, objValue)
{
	var arrNames = new Array();
	if (window.navigator['PTPCCState'][sNamespaceURN])    { arrNames = window.navigator['PTPCCState'][sNamespaceURN]; }
	else												{ window.navigator['PTPCCState'][sNamespaceURN] = arrNames; }
	arrNames[sName] = objValue;
}

PTPortletServices.prototype.GetSessionState = function(sNamespaceURN, sName)
{
	if (window.navigator['PTPCCState'][sNamespaceURN] && window.navigator['PTPCCState'][sNamespaceURN][sName])
	{
		return window.navigator['PTPCCState'][sNamespaceURN][sName];
	}
	else { return null; }
}

PTPortletServices.prototype.ClearSessionState = function(sNamespaceURN, sName)
{
	if (window.navigator['PTPCCState'][sNamespaceURN]) { window.navigator['PTPCCState'][sNamespaceURN][sName] = null; }
}

function InitializeEvents()
{
	if (PTPortletServices.initialized) { return; }
	PTPortletServices.initialized = true;
	var arrHTMLEvents = new Array(
		'blur',
		'click',
		'dblclick',
		'focus',
		'keydown',
		'keyup',
		'mousedown',
		'mousemove',
		'mouseout',
		'mouseover',
		'mouseup',
		'resize'
	);
	var arrWindowEvents = new Array(
		'abort',
		'beforeunload',
		'change',
		'close',
		'contextmenu',
		'copy',
		'cut',
		'error',
		'keypress',
		'load',
		'mouseenter',
		'mouseleave',
		'paste',
		'readystatechange',
		'selectStart',
		'scroll',
		'select',
		'submit',
		'unload'
	);
	for (var i = 0; i < arrHTMLEvents.length; i++)
	{	
		CheckAndRegisterEvent('window', arrHTMLEvents[i]);	
		CheckAndRegisterEvent('document', arrHTMLEvents[i]);
	}
	for (var j = 0; j < arrWindowEvents.length; j++)
	{	
		CheckAndRegisterEvent('window', arrWindowEvents[j]);
	}
}

PTPortletServices.prototype.InitializeEvents = InitializeEvents;
function CheckAndRegisterEvent(obj, eventName)
{
	var eventHandle = obj + '.on' + eventName;
	var evt = eval(eventHandle);
	var eventExistsButIsNotPCC = (evt && ((new String(evt)).indexOf('PCC') == -1));
	var eventDoesNotExist = (!evt);
	if (eventExistsButIsNotPCC)
	{		document.PCC.RegisterForWindowEvent('on' + eventName, evt);
	}
	if (eventDoesNotExist || eventExistsButIsNotPCC)
	{		if (document.all) {
			eval(eventHandle + ' = new Function(\'document.PCC.RaiseWindowEvent(window.event)\')');	
		} else {
			eval(eventHandle + ' = function (e) { document.PCC.RaiseWindowEvent(e); }');
		}
	}
}

if (!document.PCC)
{
	var PCC = new PTPortletServices();
	document.PCC = PCC;
	var GCC = PCC;
	document.GCC = GCC;
	var DDSC = GCC;
	document.DDSC = GCC;
}
