// ***** FrameworkSupport API *******
var frameworkSupport = {
	isAnonymous : false,
	frameworkPhase : "none"
};

frameworkSupport.init = function(obj)
{
	frameworkSupport.isAnonymous 		= obj.anonymous;
	frameworkSupport.frameworkPhase		= obj.phase;
	frameworkSupport.portalURL			= obj.portalURL;
	frameworkSupport.quickLink			= obj.quickLink;
}

frameworkSupport.init2 = function(obj)
{
	frameworkSupport.contentAreaURL 	= obj.contentAreaURL;
	frameworkSupport.innerPage			= obj.innerPage;	
	frameworkSupport.innerPageFrameURL	= obj.innerPageFrameURL;
	frameworkSupport.tlnComp			= obj.tlnComp;
	frameworkSupport.serverPath			= obj.serverPath;
	frameworkSupport.portalURL			= obj.portalURL;
	frameworkSupport.ObjBasedNavigationURL	= obj.ObjBasedNavigationURL;
	frameworkSupport.usedConnectors			= obj.usedConnectors;
}

frameworkSupport.onPersonalizePortalLoad = function()
{
	try
	{
		window.frames[document.getElementById("isolatedWorkArea").name].document.body.tabIndex = -1;
	}
	catch(e)
	{
	}
	setTimeout("EPCM.raiseEvent(\"urn:com.sap.portal.navigation\" , \"DtnFocus\" , null)",500);	
	setTimeout("EPCM.raiseEvent(\"urn:com.sap.portal.navigation\" , \"DtnFocus\" , null)",1000);	
}

//*** Refresh portal funcitons ***

frameworkSupport.refreshPortal = function()
{
	try
	{
		if(! frameworkSupport.isAnonymous)
		{
			// html form is created to pass the context and the navigation target as POST parameters
			var ctxt;
			var str = EPCM._private.uipPortalPath;
			var navTarget = EPCM.getSAPTop().gHistoryFrameworkObj.GetActiveTrackingEntryValue().getUrl();
			
			var frm = document.createElement("<FORM METHOD=POST ACTION=\""+str+"\"> </FORM>");
			
			var target = document.createElement("<INPUT TYPE=\"hidden\" NAME=\"NavigationTarget\" value=\""+navTarget+"\">");
			frm.appendChild(target);
			
			var context = EPCM.getSAPTop().gHistoryFrameworkObj.GetActiveTrackingEntryValue().context;
		 	if (context != null && context.length > 0){
			 		ctxt = document.createElement("<INPUT TYPE=\"hidden\" NAME=\"NavigationContext\" value=\""+context+"\">");
			 		frm.appendChild(ctxt);
			}
			
			document.body.insertBefore(frm);
			frm.submit();
						
		}
	}
	catch(e){}
}

frameworkSupport.refreshContentArea = function()
{
    EPCM.raiseEvent('urn:com.sapportals:navigation','historyNavigate', 0);
}

frameworkSupport.refreshPersonalizePortal = function()
{
	EPCM.raiseEvent('urn:com.sapportals:navigation','historyNavigate', 0);
 	if (typeof window.opener.frameworkSupport != "undefined")
 	{
 		window.opener.frameworkSupport.refreshPortal();
 	}
 	else
 	{
 		window.opener.location.reload();
 	}
}


EPCM.subscribeEvent("urn:com.sapportals:navigation", "RefreshPortal", frameworkSupport.refreshPortal);
EPCM.subscribeEvent("urn:com.sapportals:navigation", "RefreshPersonalizePortal", frameworkSupport.refreshPersonalizePortal);
EPCM.subscribeEvent("urn:com.sapportals:navigation", "RefreshContentArea", frameworkSupport.refreshContentArea);






function favoritesFinished()
{
	EPCM.raiseEvent("urn:con.sap.portal.navigation" , "newFavoriteItem" , null);
}

function AddToPortalFavorites(target , title, mode)
{
	try
	{
		
		var obj = EPCM.getSAPTop().gHistoryFrameworkObj.GetActiveTrackingEntryValue();
		var context = obj.context;
		if(! target)
		{
			target = obj.getUrl();
			title = GetUnescapedTitle(obj.title);
		}
		var url = "/irj/servlet/prt/portal/prtroot/com.sap.km.cm.remote?ServiceType=PortalFavorites&";
		url += ("NavigationTarget=" + escape(target));
		url += ("&Title=" + encodeURIComponent(title));
		url += ("&Mode=" + mode);
		if (context != null && context.length > 0)
  			url = url + "&Context="+encodeURI(context);
		var favIFrame = document.getElementById("favoritesIframe");
		if(! favIFrame)
		{
			var favIFrame = document.createElement("IFRAME");
	    	favIFrame.style.visibility = "hidden";
	    	favIFrame.width=0;
	    	favIFrame.height=0;
	    	favIFrame.id = "favoritesIframe";
	    	if(EPCM.getUAType() == EPCM.MSIE)//using IE event model
	    		favIFrame.attachEvent("onload" , favoritesFinished);
	    	else// using W3C DOM:
	    		favIFrame.onload = favoritesFinished;
			favIFrame.src=url;
	    	favIFrame = document.body.appendChild(favIFrame);
	    }
	    favIFrame.src = url;
	}
	catch(e){}
}

function CollaborateThisPage(url)
{
	try
	{
		var obj = EPCM.getSAPTop().gHistoryFrameworkObj.GetActiveTrackingEntryValue();
		var target=obj.getFullURL();
		
		if(target.indexOf('&') > 0)
			target = target.substring('0',target.indexOf('&'));
		var title = GetUnescapedTitle(obj.title);
//		var url = "pcd:portal_content/every_user/collaboration_portal/iviews/application_embedding?"
		url += ("PAGE_TITLE=" + escape(title));
		url += ("&PAGE_ID=" + escape(target));
		EPCM.doNavigate(url,"3","location=no,status=no,toolbar=no,menu=no",null,null,null,null,null);
	}	
	catch(e){}
}

function getSessionTerminationKeys()
{
	var frame = pageSupport._getContentWindow(pageSupport.getIvuFrameObj(frameworkSupport.innerPage));
	//fix - use new handshake mechansm for the DSM - keep backup of keys and send them until we get
	//confirmation, when the EPCM.getSAPTop().termDataBackup is empty.
	//we clear EPCM.getSAPTop().termDataBackup in the WorkArea.js when the content is retrived.
	var innerPageData = frame.EPCM.DSM.getTerminationData( true );
	var termDataBackup = EPCM.getSAPTop().termDataBackup;
	var data = frame.EPCM.DSM.mergeTerminationData(termDataBackup, innerPageData);
	EPCM.getSAPTop().termDataBackup = data;
	var str = "";
	for (var i in data)
	{
		var key = i; 
		var value = data[i];
		str += "<input type=hidden name='"+key+"' id='"+key+"' value='"+value+"'></input>\n";
	}

	// If there are session keys add a unique parameter to identify it for later use.
	if(str != "")
	{
		str += "<input type=hidden name='SessionKeysAvailable' id='SessionKeysAvailable' value='true'></input>"
	}
	return str;
}
function clearBackupSessionTerminationKeys()
{
	EPCM.getSAPTop().termDataBackup = null; 
}

EPCM.subscribeEvent("urn:com.sapportals:navigation", "clearDSMKeys", clearBackupSessionTerminationKeys);

function nav_skip(sId,oEvt) 
{
	var sCt=nav_getControlType(sId);
	if(sCt=="AX" || sCt=="AP" || sCt=="IF" || sCt=="T" )
		sId+="-r";
	var oR=nav_get(sId);
	var oN=null;
	var oF=null;
	
	
	if( (oEvt.shiftKey && oEvt.ctrlKey && oEvt.keyCode==9) || (oEvt.shiftKey && oEvt.altKey && oEvt.keyCode==90) )
	{
		while(oR!=null && oF==null){
			while(oR!=null && oR.previousSibling==null)
				oR=oR.parentNode;
			if(oR==null)
				break;
			oN=oR.previousSibling;
			while(oN!=null && oF==null){
				oF=nav_findFirstFocus(oN,true);
				if(oF==null)
					oN=oN.previousSibling;
			}
			if(oF==null)
				oR=oR.parentNode;
			else
				break;
		}
	}	 
	
	else if( (oEvt.ctrlKey && oEvt.keyCode==9) || (oEvt.altKey && oEvt.keyCode==90) ){
		while(oR!=null && oF==null){
			while(oR!=null && oR.nextSibling==null)
				oR=oR.parentNode;
			if(oR==null)
				break;				
			oN=oR.nextSibling;
			while(oN!=null && oF==null){
				oF=nav_findFirstFocus(oN);
				if(oF==null)
					oN=oN.nextSibling;
			}
			if(oF==null)
				oR=oR.parentNode;
			else
				break;
		}
	}
	else if( (oEvt.altKey && oEvt.keyCode==98) || (oEvt.altKey && oEvt.keyCode==66) ){
		if(oR != null)
			oF = oR;
	}
	if(oF!=null)
	{
		try {oF.focus();} 
			catch (ex){}
	}	
}

function nav_getControlType(sId) {
	try {
	  aId=sId.split("-");
	  var sCt=nav_get(aId[0]).getAttribute("ct");
	  if(sCt==null) sCt=nav_get(aId[0]+"-r").getAttribute("ct");
	  return sCt;
	} catch (ex) {return ""};
}

function nav_get(sId) {
  if(sId!="") return document.getElementById(sId);
}
function nav_findFirstFocus(o,bLast) {
  var oChild=o;
  if (o==null) return null;
  if (nav_Focus_canFocus(o)) {
		return o;
  }
  
  if (ur_system.direction=="rtl" || bLast) {
   	for (var i=oChild.childNodes.length-1;i>=0;i--) {
      var oTmp=oChild.childNodes.item(i);
	  if (nav_Focus_canFocus(oTmp)) {
	    return oTmp;
      }
      var oTmp=nav_findFirstFocus(oTmp);
      if (oTmp!=null) {
        return oTmp;
      }
    }  
  } else {    
    for (var i=0;i<oChild.childNodes.length;i++) {
      var oTmp=oChild.childNodes.item(i);
	  if (nav_Focus_canFocus(oTmp)) {
	    return oTmp;
      }
      var oTmp=nav_findFirstFocus(oTmp);
      if (oTmp!=null) {
        return oTmp;
      }
    }  
  }
  return null;
}
function nav_Focus_canFocus(o) {
	if (o==null) return;
	if (!o.tagName) return;
	var tag=","+o.tagName+",";
  
	if((tag==",INPUT,")&&(o.type=="hidden"||o.disabled)){ 
		return false;
	}
	var search=",A,BODY,BUTTON,FRAME,IFRAME,INPUT,ISINDEX,OBJECT,SELECT,TEXTAREA,";
	if (search.indexOf(tag)>-1) return (o.tabIndex>=0);
	if (!o.getAttribute) return;
	if (o.getAttribute("ti")!=null) return (parseInt(o.getAttribute("ti"))>=0);
}


//Since all titles are double encoded before getting placed in the history we need to decode them.
//The following method is used to un-escape the titles. 
function GetUnescapedTitle(oldTitle)
{	
	var newTitle = oldTitle.replace(/\\\'/g,"'");
	newTitle = newTitle.replace(/\\u003e/g,">");
	newTitle = newTitle.replace(/\\u003c/g,"<");
	newTitle = newTitle.replace(/%20/g," ");
	return newTitle;
}


/** 
 * ESCAPE_TO_HTML
 * Returns an encoded form of the given string. This is used for eliminating security hazards
 * @param str The string to encode
 * @return The endcoded string
 */	 
function ESCAPE_TO_HTML(str) {
	if (str === undefined || str === null) return '';
	return (str+'').replace(/([\"\&\<\>\'])/g, ESCAPE_TO_HTML.rep);
}
ESCAPE_TO_HTML.map = {'"':'&quot;', '&':'&amp;', '<':'&lt;', '>':'&gt;', '\'':'&#39;'}
ESCAPE_TO_HTML.rep = function(a,b) { return ESCAPE_TO_HTML.map[b]||b; }
