
function NxPostAway(frm, qry)
{
	var qryString, queryStringIndicator;
	if (frm == null)
		objForm = document.forms[0];
	else
		objForm = frm;

	var formHtml = "";
	for (var i=0; i<objForm.elements.length; i++)
	{
		formHtml += objForm.elements[i].outerHTML;
	}
	//Post Back nested IFRAMES
	for (var i=0; i<NxPostAway_GetSubFramesList().length; i++)
	{
		try
		{
			var thisLoc = NxPostAway_SubFramesList[i].document.location;
			if (thisLoc.toString().indexOf(".aspx") > 0)
			{
				formHtml += "<input type='hidden' name='NxPostAway_SubFrame' value='\"" + thisLoc + "\"'>";
			}
		}
		catch(e){}
	}
	//Post Back registered POPUP WINDOWS
	var NxPostAway_SubWindowsList = "";
	for (var i=0; i<NxPostAway_PopupWindowList.length; i++)
	{
		try
		{
			NxPostAway_SubWindowsList += "<input type='hidden' name='NxPostAway_SubFrame' value='\"" + NxPostAway_PopupWindowList[i].document.location + "\"'>";
		}
		catch(e){alert("Warning: " + e)}
	}
	formHtml += NxPostAway_SubWindowsList;
	
	var formAction = objForm.document.location.toString();
	if (formAction.indexOf("?") > 0)
		queryStringIndicator = "&";
	else
		queryStringIndicator = "?";
	var postAwayQry = "NxPostAway=1";
	if (formAction.indexOf(postAwayQry) < 0) formAction += queryStringIndicator + postAwayQry;
	if (qry != null)
	{
		qryString = (qry.indexOf("&") == 0 ? "" : "&") + qry;
		formAction += qryString;
	}
	HiddenFrame.document.body.innerHTML = "<form method='post' action='" + formAction + "'></form>"
	objHiddenForm = HiddenFrame.document.forms[0]
	objHiddenForm.innerHTML = formHtml;
	objHiddenForm.submit();
}

function DeBugPostAway()
{
	if (document.getElementById("HiddenFrame").style.display = "none")
	{
		document.getElementById("HiddenFrame").style.display = "";
		document.getElementById("HiddenFrame").style.width='100%';
	}
	else
	{
		document.getElementById("HiddenFrame").style.display = "none";
	}
}

var NxPostAway_SubFramesList;
var NxPostAway_PopupWindowList = new Array();

function NxPostAway_GetSubFramesList(domain, isClientEvent)
{
	NxPostAway_SubFramesList = new Array();
	NxPostAway_FindSubFrames(window, domain, isClientEvent);
	return NxPostAway_SubFramesList;
}

function NxPostAway_FindSubFrames(objWindow, domain, isClientEvent)
{
	if (objWindow != window)
	{
		if (domain != null)
		{
			if (objWindow.NxEventController)
			{
				var cancelEvent = true;
				var eventDomains = objWindow.NxEventDomains
				for (var i=0; i<eventDomains.length; i++)
				{
					if (eventDomains[i] == "*" || eventDomains[i].toUpperCase() != eventDomain.toUpperCase())
						cancelEvent = false;
				}
				//cancel the event here - this is an event controller
				if (cancelEvent) return;
			}
		}
		NxPostAway_AddSubFrame(objWindow, isClientEvent);
	}
	for (var i=0; i<objWindow.frames.length; i++)
	{
		try
		{
			if (objWindow.frames[i].name != "HiddenFrame")
			{
					NxPostAway_FindSubFrames(objWindow.frames[i], null, isClientEvent);
			}
		}
		catch(e)
		{}
	}
}

function NxPostAway_AddSubFrame(objWindow, isClientEvent)
{
	//alert("Add Sub Frame: \n" + objWindow.location + "\n" + objWindow.NxClientEventSubscriber)
	if (isClientEvent && (!(objWindow.NxClientEventSubscriber))) return;
	if (!isClientEvent && (!(objWindow.NxEventSubscriber))) return;
	
	var l = NxPostAway_SubFramesList.length;
	NxPostAway_SubFramesList.length += 1;
	NxPostAway_SubFramesList[l] = objWindow;
}

function NxUtils_FindEventTargetWindow(strLocation)
{
	var thisLoc = NxUtils_RemoveQueryString(strLocation);
	for (var i=0; i<NxPostAway_PopupWindowList.length; i++)
	{
		var compareLoc = NxUtils_RemoveQueryString(NxPostAway_PopupWindowList[i].document.location);
		if (compareLoc == thisLoc)
		{
			return NxPostAway_PopupWindowList[i];
		}
	}
}

function NxUtils_RegisterEventWindow(objWindow)
{
	NxPostAway_PopupWindowList.length ++;
	NxPostAway_PopupWindowList[NxPostAway_PopupWindowList.length - 1] = objWindow;
}

function NxEvent_FireClientEvent(sender, eventArgs)
{
	if (typeof(eventArgs) == "string") eventArgs = new Array(eventArgs);
	try{ProcessNxEvent(sender, eventArgs);}
	catch(e){};
	
	var subFramesList = "";
	for (var i=0; i<NxPostAway_GetSubFramesList(null, true).length; i++)
	{
		try{NxPostAway_SubFramesList[i].ProcessNxEvent(sender, eventArgs);}
		catch(e){};
	}
}