var WORKFLOW_LOGIN_PORT_AND_PATH = "/Sequence/";
var QLIKVIEW_LOGIN_PORT_AND_PATH = "/qlikview/plugin/plugin_alldocs.asp";
var ACT_PARAM_SESSION_ID = 'SES';
var ACT_PARAM_LANGUAGE = 'LAN';
var ACT_PARAM_FORMAT = 'FMT';
var ACT_PARAM_FLAGS = 'FLG';
var ACT_PARAM_ASSOCIATION_ID = "AID";
var ACT_PARAM_ATTACHMENT_ID = "ATTID";
var ACT_PARAM_ATTACHMENT_IDS = "ATTIDS";
var ACT_PARAM_ASSOCIATION_EXTERNAL_OBJECT_ID = "AEOID";
var ACT_PARAM_ASSOCIATION_PARENT_ID = "PAID";
var ACT_PARAM_ASSOCIATION_PARENT_EXTERNAL_OBJECT_ID = "PEOID";
var ACT_PARAM_ASSOCIATION_TYPE = "ATY";
var ACT_PARAM_REPLY_TYPE = "AREPT";
var ASSOCIATION_EDITOR_VIEW_NAME = "AssociationEditor";
var ACT_PARAM_STATE = "STATE";
var ACT_PARAM_TYPE = "TYP";
var ACT_PARAM_NAM = "NAM";
var ACT_PARAM_TEMPLATE = 'TPL';
// UserSelectionView (USV)
var ACT_PARAM_SELECTION = 'SEL';
var ACT_PARAM_FORCED_SELECTION = 'FORCE';
var ACT_PARAM_CALLBACK = 'CALLBACK';
var ACT_PARAM_CALLBACK_TYPE = 'CALLBACK_TYPE';
var ACT_PARAM_TYPE = 'TYP';
var ACT_PARAM_INITIAL_SELECTION_FUNC = 'INITSELFUNC';
var ACT_PARAM_VIEWTYPE = 'VIEWTYPE';
var ACT_PARAM_VIEWTYPE_BOTH = '1';
var ACT_PARAM_VIEWTYPE_ONLYUSERS = '2';
var ACT_PARAM_VIEWTYPE_ONLYGROUPS = '3';
var ACT_PARAM_DEFAULTSEARCHTYPE = 'DEFSRCHTYPE';
var ACT_PARAM_DEFAULTSEARCHTYPE_BOTH = '1';
var ACT_PARAM_DEFAULTSEARCHTYPE_ONLYUSERS = '2';
var ACT_PARAM_DEFAULTSEARCHTYPE_ONLYGROUPS = '3';
var ACT_PARAM_MULTISELECT = 'MULTISELECT';
var ACT_PARAM_MULTISELECT_ALLOW = 'true';
var ACT_PARAM_MULTISELECT_DENY = 'false';
var ACT_PARAM_CALLBACK_TYPE_STRING = '0';
var ACT_PARAM_CALLBACK_TYPE_ARRAY = '1';
var ACT_PARAM_READONLYMODE = 'READONLYMODE';
var ACT_PARAM_READONLYMODE_YES = 'true';
var ACT_PARAM_READONLYMODE_NO = 'false';
var ACT_PARAM_USV_GETTYPE = 'GETTYPE';
var ACT_PARAM_USV_GETTYPE_INIT = '1';
var ACT_PARAM_USV_GETTYPE_SEARCH = '2';
var ACT_PARAM_USV_FIRSTITEMINDEX = 'FIRST_ITEM';
var ACT_PARAM_USV_ITEMSCOUNT = 'ITEMS';
var ACT_PARAM_USV_SEARCHGROUP = 'SRCHGROUPS';
var ACT_PARAM_USV_SEARCHTEXT = 'SRCHTEXT';
var ACT_PARAM_USV_SEARCHTYPE = 'SRCHTYPE';
var ACT_PARAM_USV_SEARCHTYPE_BOTH = '1';
var ACT_PARAM_USV_SEARCHTYPE_ONLYUSERS = '2';
var ACT_PARAM_USV_SEARCHTYPE_ONLYGROUPS = '3';
var ACT_PARAM_USV_PRODUCT_TYPE = 'PRODUCT_TYPE';
var ACT_PARAM_MAX_NUM_SELECTED_USERS = 'MXNUSRS';
var ACT_PARAM_MAX_ROWS = 'MAXCOUNT';
var ACT_PARAM_FIRST_INDEX = 'FIRST';
var ACT_PARAM_QUERY_WHERE = 'WHERE';
var ACT_PARAM_QUERY_FILTERS = 'FILTERS';
var ACT_PARAM_QUERY_FIELDS = 'FIELDS';
var ACT_PARAM_QUERY_SORT_BY = 'SORT';
var ACT_PARAM_HIERARCHY_DYNAMIC = 'DYNAMIC';
var ACT_PARAM_INSERT_EMPTY_ROWS = 'INSERTEMPTYROWS';
var ACT_PARAM_QUERY_ROOT = 'ROOT';
var ACT_PARAM_QUERY_CONFIGURATION_FILE = 'CONFIGURATION';
var ACT_PARAM_QUERY_HIERARCHY_ROOT_TAG = 'ROOTTAG';
var ACT_PARAM_QUERY_TEMPLATE = 'TEMPLATE';
var ACT_PARAM_QUERY_ATTRIBUTE = 'ATTRIBUTE';
var ACT_PARAM_QUERY_HIERARCHY = 'HIERARCHY';
var ACT_PARAM_FORCE_QUERY_PARAMS = 'FORCEQUERYPARAMETERS';
var ACT_PARAM_QUERY_OUTPUT_HIERARCHY_HEADER_AND_FOOTER = 'HEADER';
var ACT_PARAM_QUERY_JAVASCRIPT_ROWS = 'JAVASCRIPTROWS';
var ACT_PARAM_QUERY_ONLY_OBJECTS_USER_IS_RESPONSIBLE = 'USRRS';
var ACT_PARAM_IGNORE_ACCESS = 'IGNOREACCESS';
var ACT_PARAM_HIERARCHY_EXPAND_LEVELS = 'EXPANDLEVELS';
var ACT_PARAM_HIERARCHY_EXPAND_ALL = 'EXPANDALL';
var ACT_PARAM_EDIT = 'EDIT';
var ACT_PARAM_SUBMITTED_VALUES = '_SUBM';
var ACT_PARAM_EXPAND_EXTERNAL = 'EXPANDEXTERNAL';
var ACT_PARAM_DISCARD_EMPTY_EXTERNALS = 'DISCARDEMPTYEXTERNALS';
var ACT_PARAM_RECURSIVE = 'RECURSIVE';
var ACT_PARAM_MODEL_VERSIONS = 'MODVERSIONS';
var ACT_PARAM_EXPANDED_NODES = 'EXPANDED';
var ACT_PARAM_BOOKMARK_TYPE = 'BTYP';
var ACT_PARAM_URL = 'URL';
var ACT_PARAM_MODEL = 'MOD';
var ACT_PARAM_SUB_ACTION = 'ACT';
var ACT_PARAM_BOOKMARK_PUBLISH_TYPE = 'BPTYP';
var ACT_PARAM_PLUGIN = 'PLUGIN';
var ACT_PARAM_BOOKMARK_EXTRA_PARAMS = 'EXT';
var ACT_PARAM_AT_EARLIEST = 'AEAR';
var ACT_PARAM_AT_LATEST = 'ALAT';
var ACT_PARAM_ELEMENT_HIERARCHY_ID = 'EHID';
var ACT_PARAM_USER_ID_AND_PASSWORD = 'UIP';

// Short query URL parameter aliases
var ACT_PARAM_QUERY_HIERARCHY_SHORT = 'H';
var ACT_PARAM_QUERY_ROOT_SHORT = 'R';
var ACT_PARAM_QUERY_FILTERS_SHORT = 'FL';
var ACT_PARAM_QUERY_FIELDS_SHORT = 'FE';
var ACT_PARAM_QUERY_SORT_BY_SHORT = 'S';
var ACT_PARAM_QUERY_ATTRIBUTE_SHORT = 'A';

var ACT_POR_ASSOCIATION_EMBEDDED_ATTACHMENT = 'prasea';

var ACT_COM_TABLE_VIEW = 'putab';
var ACT_COM_HIERARCHY = 'puhier';
var ACT_POR_ADD_BOOKMARK = 'puabm';
var ACT_POR_BOOKMARK_EDITOR_VIEW = 'prbme';
var ACT_POR_ASSOCIATION_DETAILS_VIEW = 'prasid';

var ASSOCIATION_EDITOR_VIEW_WIDTH = 800;
var ASSOCIATION_EDITOR_VIEW_HEIGHT = 900;
var ASSOCIATION_DETAILS_VIEW_WIDTH = 650;
var ASSOCIATION_DETAILS_VIEW_HEIGHT = 600;
var PERIODSELECTIONVIEW_WIDTH = 400;
var PERIODSELECTIONVIEW_HEIGHT = 500;
var PR_ANY = 0;
var PR_SC = 1;
var PR_CC = 2;
var PR_PG = 3;
var PR_PORTAL = 4;
var PR_USER_MGMT = 5;
var NO_ID = 0;
// ...

var _sUserAgent = navigator.userAgent;
var WIN = _sUserAgent.indexOf("Win") != -1;
var MAC = _sUserAgent.indexOf("Mac") != -1;
var LIN = _sUserAgent.indexOf("Lin") != -1;

var M2   = (_sUserAgent.indexOf("Mozilla/2") != -1);
var M3   = (_sUserAgent.indexOf("Mozilla/3") != -1);
var M4   = (_sUserAgent.indexOf("Mozilla/4") != -1);
var M5   = (_sUserAgent.indexOf("Mozilla/5") != -1);

var OP   = (_sUserAgent.indexOf("Opera") != -1);
var OP3  = (_sUserAgent.indexOf("Opera/3") != -1) && M3;
var OP35 = (_sUserAgent.indexOf("Opera/3") != -1) && M4;
var OP36 = (_sUserAgent.indexOf("Opera 3") != -1) && M4;
var OP4  = (_sUserAgent.indexOf("Opera 4") != -1) || 
(_sUserAgent.indexOf("Opera/4") != -1);
var OP5  = (_sUserAgent.indexOf("Opera 5") != -1) || 
(_sUserAgent.indexOf("Opera/5") != -1);
var OP6  = (_sUserAgent.indexOf("Opera 6") != -1) || 
(_sUserAgent.indexOf("Opera/6") != -1);
var OP7  = (_sUserAgent.indexOf("Opera 7") != -1) || 
(_sUserAgent.indexOf("Opera/7") != -1);

var IEANY= (_sUserAgent.indexOf("MSIE") != -1) && !OP;
var IE3  = (_sUserAgent.indexOf("MSIE 3") != -1);
var IE4  = (_sUserAgent.indexOf("MSIE 4") != -1);
var IE50 = (_sUserAgent.indexOf("MSIE 5.0") != -1) && !OP;
var IE55 = (_sUserAgent.indexOf("MSIE 5.5") != -1) && !OP;
var IE60 = (_sUserAgent.indexOf("MSIE 6.0") != -1) && !OP;

var NNANY= (navigator.appName == "Netscape") && !OP;
var NN2  = (navigator.appName == "Netscape") && M2 && !OP;
var NN3  = (navigator.appName == "Netscape") && M3 && !OP;
var NN4  = (navigator.appName == "Netscape") && M4 && !OP;
var NN6  = (_sUserAgent.indexOf("Netscape6") != -1) && M5 && !OP;
var NN7  = (_sUserAgent.indexOf("Netscape/7") != -1) && M5 && !OP;

var ACT_PARAM_BOOKMARK_LIST_TYPE = "BLTYP";
var BOOKMARK_LIST_TYPE_COOKIE = "PUBBKMRKTYPE";
var MINIMUM_FRAME_SIZE = IEANY ? 0 : 1;

var _slAutoFilterParametersFromDocumentLocation = new Array();
var _sDocumentLocation;

// Initialize variable used for caching document location
function InitializeDocumentLocation()
{
  _sDocumentLocation = document.location.href;
  if (_sDocumentLocation.charAt(_sDocumentLocation.length - 1) == "#")
    _sDocumentLocation = _sDocumentLocation.slice(0, _sDocumentLocation.length - 1);
}

InitializeDocumentLocation();


// fix array functions for IE 5.0 (http://www.webreference.com/dhtml/column33/10.html) ------->
if (Array.prototype.push && ([0].push(true)==true))
  Array.prototype.push = null;

if (Array.prototype.splice && typeof([0].splice(0))=="number")
  Array.prototype.splice = null;

if (!Array.prototype.pop) {
  function array_pop()
  {
    var tmp = this[this.length - 1];
    this.length -= 1;
    return tmp;
  }

  Array.prototype.pop = array_pop;
}

if (!Array.prototype.push) {
  function array_push() {
    for(var i=0;i<arguments.length;i++){
      this[this.length]=arguments[i]
    };
    return this.length;
  }

  Array.prototype.push = array_push;
}

if (!Array.prototype.splice) {
  function array_splice(ind,cnt){
    if(arguments.length == 0) return ind;
    if(typeof ind != "number") ind = 0;
    if(ind < 0) ind = Math.max(0,this.length + ind);
    if(ind > this.length) {
      if(arguments.length > 2) ind = this.length;
      else return [];
    }
    if(arguments.length < 2) cnt = this.length-ind;
    cnt = (typeof cnt == "number") ? Math.max(0,cnt) : 0;
    removeArray = this.slice(ind,ind+cnt);
    endArray = this.slice(ind+cnt);
    this.length = ind;
    for(var i=2;i<arguments.length;i++){
      this.push(arguments[i]);
    }
    for(var i=0;i<endArray.length;i++){
      this.push(endArray[i]);
    }
    return removeArray;
  }

  Array.prototype.splice = array_splice;
}
// <------------------- End of array function fix for IE 5.0 



// Start of Popup Resize Fix
function InitializeResizeHandlerForPopup(voWindow, vCustomHandler)
{
  AddResizeHandlingFunction(ShowScrollbarsIfNeeded);
  if (vCustomHandler)
    AddResizeHandlingFunction(vCustomHandler);
  InitializeWindowResizeHandler(voWindow, onResizeStackHandler);
}

function HideScrollbar()
{
   document.body.style.overflow='hidden';
}
function ShowScrollbar()
{
  document.body.style.overflow='auto';
}

function ShowScrollbarsIfNeeded()
{
  if (document.body){  
   if (!IEANY)//This is Firefox
      ShowScrollbar();
   else //This is IE
    if (((document.body.clientHeight == document.body.scrollHeight) && (document.body.clientWidth == document.body.scrollWidth)) ||
    (((document.body.clientHeight + 20) < document.body.scrollHeight) || ((document.body.clientWidth + 21) < document.body.scrollWidth)))
      ShowScrollbar();
    else
      HideScrollbar();

  }
}


function InitializeWindowResizeHandler(window, fListenerFunction)
{
  if (window.document.layers) 
  {
    window.captureEvents(Event.RESIZE) ;
    window.onresize = fListenerFunction;
  }
  else if (window.document.all) 
    window.onresize = fListenerFunction;
  else if (window.addEventListener) 
    window.addEventListener("resize" , fListenerFunction , false);
}

var _olResizeHandlerArray = new Array();

function AddResizeHandlingFunction(fListenerFunction)
{
  if (_olResizeHandlerArray)
    _olResizeHandlerArray.push(fListenerFunction);
  fListenerFunction();
}

function onResizeStackHandler()
{
  if (_olResizeHandlerArray) {
    for (var i = 0; i < _olResizeHandlerArray.length; ++i)
      _olResizeHandlerArray[i]();
  }
}

  // End of popup resize Fix


/* ---------------- */
/*      COOKIES     */
/* ---------------- */
function WriteCookie(sName, sValue, sExpires, sPath, sDomain) {
  var sCookie = '';

  sCookie = escape(sName) + '=' + escape(sValue);
  if (sExpires != null) sCookie += '; expires=' + sExpires;
  if (sPath != null) sCookie += '; path=' + sPath;
  if (sDomain != null) sCookie += '; domain=' + sDomain;
  
  document.cookie = sCookie;
  return;
}
function ReadCookie(sName, sDefaultValue) {
  var sAllCookies = document.cookie;
  var iBegin = sAllCookies.indexOf(sName + "=");
  
  if (iBegin == -1)
    return sDefaultValue;
  
  iBegin = sAllCookies.indexOf("=", iBegin) + 1;
  var iEnd = sAllCookies.indexOf(";", iBegin);

  if (iEnd == -1)
    iEnd = sAllCookies.length;
  
  return unescape(sAllCookies.substring(iBegin, iEnd));
}


// QPR UserNet -link
var sUserNetCookieStr = 'QPRUSERNETURL';
var sDefaultUserNetUrl = 'http://usernet.qpr.com';
function WriteCookieQPRUserNetLink(sLink) {
  WriteCookie(sUserNetCookieStr, sLink, null, '/', null);
  return;
}
function ReadCookieQPRUserNetLink() {

  return ReadCookie(sUserNetCookieStr, sDefaultUserNetUrl);
}
function OpenQPRUserNetWindow()
{
  var sUrl = ReadCookieQPRUserNetLink();
  var w = window.open(sUrl, "QPRUserNetWindow"); // open a new window with standard features
  w.focus(); return;
}


var _sPrevSelHeaderItemId;

function SetHighlightForHeaderItem(vsHeaderItemId, vsClassSuffix) {
  if (!vsClassSuffix)
    vsClassSuffix = "";
    
  for( var i=0; i<document.links.length; i++) {
    if(document.links[i].name == vsHeaderItemId) {
      if (document.links[i].className == "notSelectedHeaderItem" + vsClassSuffix)
        document.links[i].className = "SelectedHeaderItem" + vsClassSuffix;
    }
    else {
      if(document.links[i].className == "SelectedHeaderItem" + vsClassSuffix)
        document.links[i].className = "notSelectedHeaderItem" + vsClassSuffix;
    }
  }

  if(!document.getElementById)
    return;

  var oElem = document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_left");
  if (oElem) {
    if (oElem.className == "SelectedHeaderItemLeftColumn" + vsClassSuffix)
      oElem.className = "notSelectedHeaderItemLeftColumn" + vsClassSuffix;
    else
      oElem.className = "notSelectedHeaderItemLeft2Column" + vsClassSuffix;
  }
  oElem = document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_mid");
  if (oElem)
    oElem.className = "notSelectedHeaderItemMidColumn" + vsClassSuffix;
  oElem = document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_right");

  if (oElem) {
    if (oElem.className == "SelectedHeaderItemRightColumn" + vsClassSuffix)
      oElem.className = "notSelectedHeaderItemRightColumn" + vsClassSuffix;
    else
      oElem.className = "notSelectedHeaderItemRight2Column" + vsClassSuffix;
  }

  _sPrevSelHeaderItemId = vsHeaderItemId;

  oElem = document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_left");
  if (oElem) {
    if (oElem.className == "notSelectedHeaderItemLeftColumn" + vsClassSuffix)
      oElem.className = "SelectedHeaderItemLeftColumn" + vsClassSuffix;
    else
      oElem.className = "SelectedHeaderItemLeft2Column" + vsClassSuffix;
  }
  oElem= document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_mid");
  if (oElem) 
    oElem.className = "SelectedHeaderItemMidColumn" + vsClassSuffix;
  oElem= document.getElementById("headerview_col_" + _sPrevSelHeaderItemId + "_right");
  if (oElem) {
    if (oElem.className == "notSelectedHeaderItemRightColumn" + vsClassSuffix)
      oElem.className = "SelectedHeaderItemRightColumn" + vsClassSuffix;
    else
      oElem.className = "SelectedHeaderItemRight2Column" + vsClassSuffix;
  }
}

function SetHighlightForSubHeaderItem(vsSubHeaderItemId, vsClassSuffix) {
  if (!vsClassSuffix)
    vsClassSuffix = "";

  for( var i=0; i<document.links.length; i++) {
    if(document.links[i].name == vsSubHeaderItemId) {
      if (document.links[i].className == "notSelectedSubHeaderItemB" + vsClassSuffix)
        document.links[i].className = "SelectedSubHeaderItemB" + vsClassSuffix;
    }
    else {
      if(document.links[i].className == "SelectedSubHeaderItemB" + vsClassSuffix)
        document.links[i].className = "notSelectedSubHeaderItemB" + vsClassSuffix;
    }
  }
}

function oGetHeaderView()
{
  return oGetMainView();
}

function SetHeaderVisibility(vsSubHeaderItemId, viVisible) 
{
  var oHeaderView = oGetHeaderView();
  if (typeof oHeaderView != 'undefined')
    oHeaderView.SetHeaderVisibility(vsSubHeaderItemId, viVisible == 1);
}
  
function sGetHomeViewParams()
{
  return "HOMEHDR=mycontents&HOMESUBHDR=home";
}

function OpenLinkedAttachment(vsUrl)
{
  OpenBrowser(vsUrl, "_blank", 640, 480); 
}

function OpenEmbeddedAttachment(vsUrl)
{
  document.location = vsUrl;
}


// Functions that can be used outside of QPR Portal ----------------------------------
var OTHER = 0;
var IE = 1;
var NN = 2;

function UpdateInformationViewToolbarsFromInformationView(vbUnload)
{ 
  try {
    var undefined;
    if ((parent) && (parent.UpdateInformationViewToolbars))
      parent.UpdateInformationViewToolbars(vbUnload);
  }
  catch (e) {
  }
  
  if (document.getElementById("PropertyListWrapper"))
    RemoveEmptyTableHeaders(document);
}

function sGetSetAsDefaultViewParameters(vbForBookmarkURL)
{
  var undefined, sResult = '';
  
  if ((parent != null) && (self != parent) && (parent.sGetSetAsDefaultViewParameters != null) && (parent.sGetSetAsDefaultViewParameters != undefined)) {
    sResult = parent.sGetSetAsDefaultViewParameters(vbForBookmarkURL);
  }
  
  return sResult;
}

function CheckNavigator() 
{
  var sNavName = navigator.appName;
  var sNavVersion = navigator.appVersion;
 
  if ((parseInt(navigator.appVersion.charAt(0)) >= 5) && (sNavName.indexOf("Netscape") != -1))
   return NN;
  else if (parseInt(navigator.appVersion.charAt(0)) >= 4  && (sNavName.indexOf("Microsoft") != -1))
   return IE;
  return OTHER;
}

function OpenHeaderPage(vsPage)
{
  var oHeaderView = oGetHeaderView();
  if (typeof oHeaderView != 'undefined')
    oHeaderView.OpenSubHeaderView(vsPage);
}

function OpenHeaderTab(vsTab)
{
  var oHeaderView = oGetHeaderView();
  if (typeof oHeaderView != 'undefined')
    oHeaderView.ShowSubHeader(vsTab);
}

function OpenWindow2(vsURL, vsName, viWidth, viHeight, vbScroll, vbPreventCaching, vX, vY) 
{
  var _X = screen.width / 2 - viWidth / 2;
  var _Y = screen.height / 2 - viHeight / 2;
  var sScroll = 'yes';
  var bMaximized = false;

  if (vX && vY) {
    if ((vX <= 0) && (vY <= 0)) bMaximized = true;
    _X = vX < 0 ? 0 : vX;
    _Y = vY < 0 ? 0 : vY;    
  }

  if (vbScroll && ((vbScroll == true) || (vbScroll == 1))) sScroll = 'yes';
  if (vbScroll && ((vbScroll == false) || (vbScroll == 0))) sScroll = 'no';

  if (vbPreventCaching)
    vsURL += '&FOO=' + (new Date().getTime());
  var w = window.open(vsURL, vsName, 'screenX='+_X+',screenY='+_Y+',left='+_X+',top='+_Y+',width='+viWidth+',height='+viHeight+',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars='+sScroll+',copyhistory=no,resizable=yes');
  if (bMaximized && w) w.moveTo(0,0);

//  w.creator = self;
  if (w)
    w.focus(); 
  return w;
}

// Check whether given Url is long enough to exceed the maximum Url length supported by certain web browsers.
function bIsLongUrl(vsUrl, vbIgnoreBrowser)
{
  return ((vbIgnoreBrowser || IEANY) && (vsUrl.length > 2000));
}

// Open given Url in given window possibly using post-method if the Url length exceeds limits set by certain web browsers.
function OpenWindow(vsURL, vsTarget, viWidth, viHeight, vbScroll, vbPreventCaching, vX, vY)
{
  if (bIsLongUrl(vsURL)) 
    SubmitLongUrl(vsURL, vsTarget, '', true, viWidth, viHeight, vbScroll, vX, vY);
  else
    OpenWindow2(vsURL, vsTarget, viWidth, viHeight, vbScroll, vbPreventCaching, vX, vY);
}

/* OpenBrowser */
function OpenBrowser(vsURL, vsName, viWidth, viHeight, vsParameters, vbPreventCaching) 
{
  var _X = screen.width / 2 - viWidth / 2;
  var _Y = screen.height / 2 - viHeight / 2;
  var _sParameters = 'screenX='+_X+',screenY='+_Y+',left='+_X+',top='+_Y+',width='+viWidth+',height='+viHeight+',toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,copyhistory=no,resizable=yes';
  if (vsParameters) {
    if (vsParameters != '')
      vsParameters = ',' + vsParameters;
  }
  else
    vsParameters = '';

  if (vbPreventCaching)
    vsURL += '&FOO=' + (new Date().getTime());

  var w = window.open(vsURL, vsName, _sParameters + vsParameters);
//  w.creator = self;
  w.focus(); 
  return;
}

function OpenHelpWindow(vsHelpUrl)
{
  OpenWindow(vsHelpUrl, 'HelpWindow', 800, 600, 1);
}

var sSubmitURLviaForm_DefaultTarget = '';
var sSubmitURLviaForm_DefaultBodyID = 'body';   // <body id="body"> -tag should be added into template!!
var sSubmitURLviaForm_DefaultFormID = 'submiturlform';
function SubmitURLviaFormOnDoc(voDocument, vsUrl, vsTarget, vsBodyID, vsFormID, vsParams) {
  var bObjectCreated=false;
  
  // BODY-object
  var oBody;
  if (vsBodyID)
    oBody = voDocument.getElementById(vsBodyID);
  if (!oBody)
    oBody = document.getElementsByTagName('body')[0];
  if (!oBody)
    oBody = voDocument.getElementById(sSubmitURLviaForm_DefaultBodyID);
  if (!oBody)
    return false;

  // FORM-object
  var oFrm = voDocument.getElementById(vsFormID);
  if (!oFrm) {
	  oFrm = voDocument.getElementById(sSubmitURLviaForm_DefaultFormID);
	if (!oFrm) {
	  oFrm = voDocument.createElement('FORM');
	  vsFormID = sSubmitURLviaForm_DefaultFormID;
	  bObjectCreated = true;
	}
  }
  oFrm.action = vsUrl;
  oFrm.method = 'POST';
  oFrm.id = vsFormID;
  oFrm.target = vsTarget;
  if (bObjectCreated) oBody.appendChild(oFrm);
  
  // INPUT-objects
  var arAddedChildren = new Array();

  if (vsParams) {
    var oInput, slParam;
    var slParams = vsParams.split('&');
    for (var i=0; i < slParams.length; i++) {
      slParam = slParams[i].split('=');
    	bObjectCreated = false;
      oInput = voDocument.getElementById(slParam[0]);
      if (oInput)
        oInput.value = slParam[1];
      else {
        oInput = voDocument.createElement('INPUT');
        bObjectCreated = true;
        oInput.type = 'HIDDEN';
        oInput.name = slParam[0];
        oInput.id = slParam[0];
        oInput.value = slParam[1];
        oFrm.appendChild(oInput);
        arAddedChildren[arAddedChildren.length] = oInput;
      } 
    }
  }

  // submit
  oFrm.submit();
  
  for (var i = 0; i < arAddedChildren.length; ++i)
    oFrm.removeChild(arAddedChildren[i]);
  return true;
}

function SubmitURLviaForm(vsUrl, vsTarget, vsBodyID, vsFormID, vsParams) {
  return SubmitURLviaFormOnDoc(document, vsUrl, vsTarget, vsBodyID, vsFormID, vsParams);
}

// Submit given Url to given target. Move most of the Url parameters from Url's query to content.
function SubmitLongUrl(vsUrl, vsTarget, vsBodyId, vbOpenWindow, viWidth, viHeight, vbScroll, vX, vY)
{
  var oMainView = oGetMainView();
  if (!oMainView) {
    if (vbOpenWindow)
      OpenWindow2(vsUrl, vsTarget, viWidth, viHeight, vbScroll, false, vX, vY)
    else
      document.location = vsUrl;
    return;
  }

  if (vbOpenWindow && ((vsTarget !== "_top") || (vsTarget !== "_self") || (vsTarget !== "_parent"))) {
    if (vsTarget === "_blank")
      vsTarget = "QPR" + vsTarget;
    OpenWindow2("about:blank", vsTarget, viWidth, viHeight, vbScroll, false, vX, vY);
  }
  var slUrl = vsUrl.match(/([^?]*\?[^&]*&*[^&]*)&(.*)/i);
  var sBase = slUrl[1], sParams = slUrl[2];
  var sTmp = sGetParameter(ACT_PARAM_SESSION_ID, sParams);  
  sParams = sRemoveParameter(ACT_PARAM_SESSION_ID, sParams);  
  sBase = sSetParameter(ACT_PARAM_SESSION_ID, sTmp, sBase);
  sTmp = sGetParameter(ACT_PARAM_USER_ID_AND_PASSWORD, sParams);  
  sParams = sRemoveParameter(ACT_PARAM_USER_ID_AND_PASSWORD, sParams);  
  sBase = sSetParameter(ACT_PARAM_USER_ID_AND_PASSWORD, sTmp, sBase);
  sTmp = sGetParameter(ACT_PARAM_FORMAT, sParams);  
  sParams = sRemoveParameter(ACT_PARAM_FORMAT, sParams);  
  sBase = sSetParameter(ACT_PARAM_FORMAT, sTmp, sBase);
  sTmp = sGetParameter(ACT_PARAM_LANGUAGE, sParams);  
  sParams = sRemoveParameter(ACT_PARAM_LANGUAGE, sParams);  
  sBase = sSetParameter(ACT_PARAM_LANGUAGE, sTmp, sBase);
  
  if (vsBodyId)
    SubmitURLviaForm(sBase, vsTarget, vsBodyId, '', sParams);
  else
    oMainView.SubmitURL(sBase, sParams, vsTarget);
}

var sUserSelectionWindow_DefaultName = 'UserSelectionWindow';
function OpenUserSelectionWindow(vsUrl, vsWindowName)
{
  if (vsWindowName.length == 0) vsWindowName = sUserSelectionWindow_DefaultName;
  OpenWindow(vsUrl, vsWindowName, 640, 450, 0);
}

function OpenUserSelectionWindow_viaForm(vsUrl, vsWindowName, vsBodyID, vsFormID, vsParams)
{
  if (vsWindowName.length == 0) vsWindowName = sUserSelectionWindow_DefaultName;

  var w = OpenWindow2('', vsWindowName, 650, 450, 0);
  var bOK = SubmitURLviaForm(vsUrl, vsWindowName, vsBodyID, vsFormID, vsParams);
  if (!bOK) w.close();
}

function _OpenInformationView(vsUrl, vsObjectId)
{
  try {
    if (parent && (parent != window) && parent.OpenInformationView)
      parent.OpenInformationView(vsUrl, vsObjectId);
    else if (bHasValidOpener(window)) {
      if (window.opener.parent && window.opener.parent.OpenInformationView)
        window.opener.parent.OpenInformationView(vsUrl, vsObjectId);
      else
        OpenView(vsUrl);
    }
    else
      OpenView(vsUrl);
  }
  catch (e) {
    OpenView(vsUrl);
  }
}

// Open view in information frame possibly using submit if the Url length exceeds limits set by certain web browsers.
function OpenInformationView(vsURL, vsObjectId)
{
  _OpenInformationView(vsURL, vsObjectId);
}

// Open view into given target frame (identified by name) possibly using submit if the Url length exceeds limits set by certain web browsers.
function OpenView(vsUrl, vsTarget, vsBodyId, vbReplace)
{
  if (bIsLongUrl(vsUrl))
    SubmitLongUrl(vsUrl, vsTarget ? vsTarget : "_self", vsBodyId, false);
  else {
    if (vsTarget === "_self")
      vsTarget = "";
    var oLocation;
    if (vsTarget) {
      var oView = oGetTopmostPortalDomainView();
      var oFrame = oView.oGetNamedFrame(vsTarget);
      if (!oFrame) {
        oView = oGetMainView();
        oFrame = (oView ? oView : self).oGetNamedFrame(vsTarget);
      }
      oLocation = oFrame.location;
    }
    else
      oLocation = document.location;
    if (vbReplace)
      oLocation.replace(vsUrl);
    else
      oLocation.href = vsUrl;
  }
}

// Open view into current frame possibly using submit if the Url length exceeds limits set by certain web browsers.
function OpenViewIntoCurrentFrame(vsUrl, vsBodyId, vbReplace)
{
  OpenView(vsUrl, window.name, vsBodyId, vbReplace);
}

// Recursively search & return frame with given name.
function oGetNamedFrame(vsName)
{
  for (var i = 0; i < frames.length; ++i) {
    var oFrame = frames[i];
    try {
      if (oFrame.name === vsName)
        return oFrame;
      if (typeof(oFrame.oGetNamedFrame) === "function") {
        oFrame = oFrame.oGetNamedFrame(vsName);
        if (oFrame)
          return oFrame;
      }
    }
    catch (e) { ; }
  }
  return eval("self." + vsName);
}

function ClearStatus() 
{ 
  window.status=" "; 
  return; 
}

function ShowStatus(text) 
{ 
  window.status=text; 
  return; 
}

function sGetParameter(vsParamName, vsParams)
{
  var iPos = vsParams.indexOf(vsParamName + '=');
  if ((iPos == 0) || ((iPos != -1) && (vsParams.charAt(iPos - 1) == '&'))) {
    var iPosEnd = vsParams.indexOf('&', iPos + vsParamName.length + 2);
    if (iPosEnd != -1)
      return vsParams.slice(iPos + vsParamName.length + 1, iPosEnd);
    return vsParams.slice(iPos + vsParamName.length + 1);
  }
  else if (iPos != -1)
    return sGetParameter(vsParamName, vsParams.slice(iPos + vsParamName.length + 1));
  else
    return '';
}

function sGetParameterWithAlias(vsParamName, vsParamAlias, vsParams)
{
  var sResult = sGetParameter(vsParamAlias, vsParams);
  if ((!sResult) || (sResult == ''))
    sResult = sGetParameter(vsParamName, vsParams);
  return sResult;
}

function sRemoveParameter(vsParamName, vsURL)
{
  if (!vsURL) 
    vsURL = "";

  var iPos = vsURL.indexOf("&" + vsParamName + "=");
  if (iPos == -1)
    iPos = vsURL.indexOf(vsParamName + "=");
  else
    iPos = iPos + 1;

  var iLen = vsParamName.length + 1;
  
  if (iPos > 0) {
    if (vsURL.charAt(iPos - 1) == "&") {
      --iPos;
      ++iLen;
    }
    else
      return vsURL;
  }

  if ((iPos != -1)) {
    var iPosEnd = vsURL.indexOf('&', iPos + iLen);

    if (iPosEnd != -1) {
      if (iPos == 0) 
        ++iPosEnd;
      vsURL = vsURL.slice(0, iPos) + vsURL.slice(iPosEnd);
    }
    else
      vsURL = vsURL.slice(0, iPos);
  }
  return vsURL;
}

function sSetParameter(vsParamName, vsValue, vsURL, vbAllowEmptyValues)
{
  if ((!vbAllowEmptyValues) && ((vsValue != "0") && ((!vsValue) || (vsValue == "")))) 
    return sRemoveParameter(vsParamName, vsURL);
   
  if (!vsURL) 
    vsURL = "";

  var iPos = vsURL.indexOf("&" + vsParamName + "=");
  if (iPos == -1)
    iPos = vsURL.indexOf(vsParamName + "=");
  else
    iPos = iPos + 1;

  if ((iPos != -1) && ((iPos == 0) || (vsURL.charAt(iPos - 1) == "&")))  {
    var iPosEnd = vsURL.indexOf("&", iPos + vsParamName.length + 1);

    if (iPosEnd != -1)
      vsURL = vsURL.slice(0, iPos) + vsParamName + "=" + vsValue + vsURL.slice(iPosEnd);
    else
      vsURL = vsURL.slice(0, iPos) + vsParamName + "=" + vsValue;
  }
  else {
    if (vsURL.length > 0)
      vsURL += "&";
    vsURL += vsParamName + "=" + vsValue;
  }
  return vsURL;
}

function sGetEncryptedParameter(vsURL)
{
  var iPos = vsURL.indexOf('&FMT=c&');
  if (iPos != -1)
    return vsURL.slice(iPos + 7);
  else
    return '';
}

function sConvertEncryptedParameterToMixed(vsURL)
{
  var sEncrypted = sGetEncryptedParameter(vsURL);
  if (sEncrypted != '')
  {
    vsURL = sRemoveEncryptedParameter(vsURL);
    vsURL += '&FMT=m&CRP=' + sEncrypted;
  }
  return vsURL;
}

function sRemoveEncryptedParameter(vsURL)
{
  var iPos = vsURL.indexOf('&FMT=c&');
  if (iPos != -1)
    vsURL = vsURL.slice(0, iPos);
  return vsURL;
}

function sGetStaticURL(vsURL)
{
  var iPos = vsURL.indexOf('?');
  if (iPos != -1) {
    vsURL = vsURL.slice(iPos + 1);
    vsURL = sRemoveParameter('SES', vsURL);
    vsURL = sRemoveParameter('LAN', vsURL);
  }

  return vsURL;
}

function SkipWhitespace()
{
  while ((_sActionData.charAt(_iIndex) == " ") || (_sActionData.charAt(_iIndex) == "\t"))
  _iIndex++;
}

function ReadSeparator()
{
  SkipWhitespace();
  if (_sActionData.charAt(_iIndex) == "\r")
    _iIndex++;
  if (_sActionData.charAt(_iIndex) == "\n")
     _iIndex++;
}

function sReadText()
{
  SkipWhitespace();

  var sStr = "";
  var sChar = _sActionData.charAt(_iIndex);
  var iLen = _sActionData.length;
 
  if (sChar == "'")
  {
    ++_iIndex;
    var iStart = _iIndex;
          
    while (_iIndex < iLen) {
      sChar = _sActionData.charAt(_iIndex);

      if (sChar == "'") break;

      if (sChar == "\\") {
        sStr += _sActionData.slice(iStart, _iIndex);
        ++_iIndex;
        iStart = _iIndex;
      }

      ++_iIndex;
    }

    sStr += _sActionData.slice(iStart, _iIndex);
    ++_iIndex;

    if (_iIndex == iLen)
      return "-ERRORR-";
  }
  else if ((sChar != "\r") && (sChar != "\n")) {
    var iStart = _iIndex;

	while (_iIndex < iLen) {
      sChar = _sActionData.charAt(_iIndex);
      if ((sChar == "\r") || (sChar == "\n") || (sChar == " ")) break;
      ++_iIndex;
    }

    if (_iIndex == iLen) return "-ERRORR-";
    sStr = _sActionData.slice(iStart, _iIndex);
  }
  else
    return "-ERRORR-";

  return sStr;
}

function bCheckVersion()
{
  if (sReadText() == "1.0")
    return true;
  else
    return false;
}

function sEncode(vsStr)
{
  return (escape(vsStr).replace(/\+/g, "%2B")).replace(/%A0/g, "%20");   
}

function sDecodeEscapedString(vsStr) 
{
  if (vsStr == "") 
    return "";

  if (!NN7)
    return unescape(vsStr);

  var seq = "";
  var abc = "";
  var uni = "";

  var buf = vsStr.split("%u");
  if (buf.length == 1) return (vsStr);

  seq = buf[0];
  for (var i=1 ; i<buf.length; i++ )
  {
    if (buf[i].length > 4) abc = buf[i].substr(4,buf[i].length-4);
    else abc = "";

    uni = buf[i].substr(0,4);
    seq += String.fromCharCode(parseInt(uni,16)) + abc;
  }

  if (NN7) {
    // simulate correctly working unescape-behavior (it seems to be somewhat broken in NN7 (SC11560B)
    var buf = seq.split("%");
    if (buf.length == 1) return seq;
    seq = buf[0];
    for (var i=1 ; i<buf.length; i++ )
    {
      if (buf[i].length > 2) abc = buf[i].substr(2,buf[i].length-2);
      else abc = "";

      uni = buf[i].substr(0,2);
      seq += String.fromCharCode(parseInt(uni,16)) + abc;
    }
  }
  return seq;
}

function sDecodeCharacterEntityReferences(vsStr) 
{
  if (vsStr == "") return "";
  vsStr = unescape(vsStr);

  var seq = "";
  var abc = "";
  var uni = "";

  var buf = vsStr.split("&#x");
  if (buf.length == 1) return (vsStr);

  seq = buf[0];
  for (var i=1 ; i < buf.length; i++ )
  {
    if (buf[i].length > 5) 
      abc = buf[i].substr(5, buf[i].length-5);
    else 
      abc = "";

    uni = buf[i].substr(0, 4);
    seq += String.fromCharCode(parseInt(uni,16)) + abc;
  }
  return seq;
}

function sSetParametersIntoTranslatedStr(vsTranslateStr, vsSymbol, vslParams) 
{
  if (!vslParams || vslParams.length == 0) 
    return vsTranslateStr;
  
  if (!vsSymbol || (vsSymbol.length == 0)) vsSymbol = '$';

  for (var i = 0; i < vslParams.length; ++i) {
    vsTranslateStr = vsTranslateStr.replace(vsSymbol + i, vslParams[i]);
    if (vsSymbol == '$')
      vsTranslateStr = vsTranslateStr.replace('\\' + vsSymbol + i, vslParams[i]);
  }

  return vsTranslateStr;
}

var oDynParamsValue = new Array();
function SetDynamicParamsValue(vsKey,vsValue)
{
  oDynParamsValue[vsKey] = vsValue;
}
function GetDynamicParamsValue(vsKey)
{
  if( oDynParamsValue[vsKey] != "undefined" ){
    return(oDynParamsValue[vsKey]);
  }
  return "";
}
function ClearDynamicParams()
{
  oDynParamsValue = new Array();
}

function sParseDomain(vsUrl)
{
  var ipos = vsUrl.indexOf('://');
  var sDomain = "";

  if (ipos != -1) {
    sDomain = vsUrl.substring(ipos+3);

    var iposPort = sDomain.indexOf(':');
    var iposSlash = sDomain.indexOf('/');

    if ((iposPort < iposSlash) && (iposPort != -1)) {
      ipos = iposPort;
    }
    else {
      ipos = iposSlash;
    }

    if(ipos !=-1) {
      sDomain = sDomain.substring(0,ipos);
    }
  }
  sDomain=sDomain.toLowerCase();
  return (sDomain);
}

function sFuncName(f) 
{
 var s = f.toString().match(/function (\w*)/)[1];
 if ((s == null) || (s.length==0)) return "anonymous";
 return s;
}

function sGetStackTrace() 
{
 var s = "";
 for (var a = arguments.caller; a != null; a = a.caller) {
   s += "->" + sFuncName(a.callee) + "\n";
   if (a.caller == a) { 
     s += "*"; break; 
   }
 }
 return s;
}

function sCutString(vsInput,viSize,vbjsmode)
{
  var vsInput = sDecodeCharacterEntityReferences(vsInput);
  var vsOutput = vsInput;
  if (vsInput.length > viSize) {
   if (viSize > 3)
     viSize = viSize - 3;
   if (vbjsmode) 
     vsOutput = vsInput.substring(0,viSize) + '...';
   else
     vsOutput = '<label title="'+vsInput+'">' + vsInput.substring(0,viSize-3) + '...' + '</label>';
  }
  return vsOutput;
}

function sAutoCutString(vsInput,viSize,vbjsmode)
{
  var undefined; 
  if ( viSize == undefined ) viSize = 32;
  if ( vbjsmode == undefined ) vbjsmode = false;
  return sCutString(vsInput,viSize,vbjsmode);
}

function SetCursorWaitState(voDocument,vbState)
{
  if (vbState)
  {
    voDocument.body.style.cursor = "wait";
    return;
  }
  voDocument.body.style.cursor = "default";
}

function trim(s) {
  var iPos, iLen;

  iLen = s.length;
  while (s.charAt(0) == ' ') {
  s = s.substring(1, iLen);
  }

  iLen = s.length - 1;
  while (s.charAt(iLen) == ' ') {
  s = s.substring(0, iLen);
  iLen = s.length - 1;
  }
  return s;
}

function sEscapeToHtml(vsInput)
{
  //vsInput = escape(unescape(vsInput));
  var sOutput = "";
  var cChar="";
  for(var i=0; i<vsInput.length; i++)
  {
    cChar = vsInput.charAt(i);
    if(cChar=="%") {
    if(vsInput.charAt(i+1).toLowerCase()=='u') {
      sOutput += '&#x' + vsInput.substring(i+2,i+6) + ";";
      i += 5;
    }
    else {
      sOutput += '&#x' + vsInput.substring(i+1,i+3) + ";";
      i += 2;
    }
  }
  else { sOutput += cChar; }
  }
  return sOutput;
}

function bIsHTMLSpace(vsChar, vbOnlyBreakingSpaces)
{
  BREAKING_SPACES = "\u0009\u000B\u000C\u001F\u0020\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u2028\u202F\u3000";

  if (vsChar.length > 1) {
    vsChar = vsChar.toLowerCase();
    var iCode;

    if ((vsChar.length > 4) && (vsChar.substring(0, 3) == "&#x")) {
      var sTmp = vsChar.substring(3);
      iCode = parseInt("0x" + sTmp);
    }
    else if ((vsChar.length > 3) && (vsChar.substring(0, 2) == "&#")) {
      var sTmp = vsChar.substring(2);
      iCode = parseInt(sTmp);
    }
    else if (vbOnlyBreakingSpaces)
      return false;
    else
      return (vsChar == "&nbsp;");
    return bIsHTMLSpace(String.fromCharCode(iCode), vbOnlyBreakingSpaces);
  }
  else {
    if (vbOnlyBreakingSpaces) 
      return (BREAKING_SPACES.indexOf(vsChar) != -1);
    else
      return ((BREAKING_SPACES.indexOf(vsChar) != -1) || (vsChar == "\u00a0"));
  }
}

function sReadHTMLChar(vsString)
{
  if (vsString.charAt(0) == "&") {
    var iPos = vsString.indexOf(";", 1);
    if (iPos < 0)
      return vsString;
    else
      return vsString.substring(0, iPos + 1);
  }
  else
    return vsString.charAt(0);
}

function sInsertZeroWidthSpaces(vsString)
{
  var i = 0, sString = vsString, sResult = "", sChar;

  if (IEANY || !WIN) {
    var MAX_WORD_LENGTH = 40;
    var WORD_SPLITTER = " ";

    while (sString.length > 0) {
      sChar = sReadHTMLChar(sString);     
      sString = sString.substring(sChar.length);
      if (bIsHTMLSpace(sChar, true))
        i = 0;
      else
        ++i;
      sResult += sChar;
      if (i > MAX_WORD_LENGTH) {
        sResult += WORD_SPLITTER;
        i = 0;
      }
    }
  }
  else {
    var ZERO_WIDTH_SPACE_INTERVAL = 5;
    var ZERO_WIDTH_SPACE = "&#8203;";
   
    while (sString.length > 0) {
      sChar = sReadHTMLChar(sString);
      sResult += sChar;
      sString = sString.substring(sChar.length);
      if (++i >= ZERO_WIDTH_SPACE_INTERVAL) {
        sResult += ZERO_WIDTH_SPACE;
        i = 0;
      }
    }
  }
  return sResult;
}

// Using the following function corresponds using sStringToHTML with vbConvertSpacesAndNls set to true.
function sConvertSpacesAndNewLinesToHTML(vsString)
{
  vsString = vsString.replace(/(&#x000A;)|(&#10;)/gi, "<br>");
  return vsString.replace(/(&#x0020;)|(&#32;)/gi, "&nbsp;");
}

function bExists(voObject)
{
  var sType = typeof(voObject);
  return ((sType != "unknown") && (sType != "undefined") && voObject);
}

function oGetMainView(voParent)
{
  try {
    if (!voParent)
      voParent = self;
    if (bExists(voParent.bIsPortalMainView))
      return voParent;
    if (bExists(voParent.parent) && (voParent.parent != voParent))
      return oGetMainView(voParent.parent);
    if (bHasValidOpener(voParent))
      return oGetMainView(voParent.opener);
  }
  catch(e) {
    return;
  }
}

function oGetTopmostPortalDomainView(voParent)
{
  try {
    if (!voParent)
      voParent = self;

    if (bExists(voParent.parent) && (voParent.parent != voParent)) {
      bExists(voParent.parent.bIsPortalMainView); // this line is here just to throw exception if parent is outside portal domain
      return oGetTopmostPortalDomainView(voParent.parent);
    }
  }
  catch(e) {
    ;
  }
  return voParent;
}

function sGetHierarchyName()
{
  var oMainView = oGetMainView();
  if (oMainView)
    return oMainView.sGetHierarchyName();
}

function oGetInformationView(voParent)
{
  var oMainView = oGetMainView(voParent);
  if (oMainView && bExists(oMainView.InformationView))
    return oMainView.InformationView;
}

function oGetHierarchyView(voParent)
{
  var oMainView = oGetMainView(voParent);
  if (oMainView && bExists(oMainView.MenuView))
    return oMainView.MenuView;
}

function oGetInformationViewFrame(voParent)
{
  var oInformationView = oGetInformationView(voParent);
  return ((oInformationView && typeof(oInformationView.oGetUserFrame) != "undefined")) ? oInformationView.oGetUserFrame() : oInformationView;;
}

function oGetHierarchyTreeView(voParent)
{
  return oGetHierarchyView(voParent);
}

function bIsSameURLs(vsURL1, vsURL2)
{
  if (!vsURL1 || !vsURL2) {
    return false;
  }

  if (vsURL1 == vsURL2) {
    return true;
  }

  if (vsURL1.length == vsURL2.length) {
    // Perhaps domain part of the URLs were in different case, try to circumvent that
  
    var sSplittedURL1 = vsURL1.split("/", 3);
    var sSplittedURL2 = vsURL2.split("/", 3);
 
    if (sSplittedURL1.length == sSplittedURL2.length && sSplittedURL1.length >= 3) {
      if (sSplittedURL1[2].toLowerCase() == sSplittedURL2[2].toLowerCase()) {
        var sDomainReplacedURL1 = vsURL1.replace(sSplittedURL1[2], sSplittedURL2[2]);
        if (sDomainReplacedURL1 != vsURL2) {
          // Check whether the difference was caused by inconsistent casing used in URL encoded characters
          var sDecoded1 = sDecodeEscapedString(sDecodeEscapedString(sDecodeEscapedString(sDomainReplacedURL1)));
          var sDecoded2 = sDecodeEscapedString(sDecodeEscapedString(sDecodeEscapedString(vsURL2)));
          return ((sDecoded1 === sDecoded2) && (sDomainReplacedURL1.toLowerCase() === vsURL2.toLowerCase()));
        }
      }
    }
  }
  return false;
}

function bIsOpenedFromHierarchyView()
{
  var oHierarchyTreeView = oGetHierarchyTreeView();
  return (oHierarchyTreeView && 
      oHierarchyTreeView.sGetPreviousOpenedInformationView && 
      (bIsSameURLs(oHierarchyTreeView.sGetPreviousOpenedInformationView(), sGetDocumentLocation())))
}

function MakeActionCall(vsURL, vCallbackFunc)
{
  var oMainView = oGetMainView();
  if (oMainView)
    oMainView.callFunction(vsURL, vCallbackFunc);
}

function sGetModelId(vsTabName, vsModelIdParameter)
{
  if (!oGetHeaderView() || !oGetHeaderView().sGetHierarchyViewParameter)
    return "";
  var undefined;
  var sModelId;
  sModelId = oGetHeaderView().sGetHierarchyViewParameter(vsTabName, vsModelIdParameter);
  if ((sModelId == undefined) || (sModelId == 'undefined')) {
    sModelId = "";
  }
  return sModelId;
}

function sGetButtonHTML(vsLabel, vsLinkURL, vsStyle, vsTarget)
{
  if (!vsStyle)
    vsStyle = "Button";
  if (!vsLabel)
    vsLabel = "&nbsp;";
  var sLink;
  if (vsLinkURL && (vsLinkURL.length > 0))
    sLink = " href='" + vsLinkURL + "'";
  else
    sLink = "";
  if (vsTarget)
    sLink += " target='" + vsTarget + "'";
  return "<a" + sLink + " class='" + vsStyle + "'>[&nbsp;" + vsLabel + "&nbsp;]</a>&nbsp;";
}

function WriteButtonHTML(vsLabel, vsLinkURL, vsStyle, vsTarget)
{
  document.write(sGetButtonHTML(vsLabel, vsLinkURL, vsStyle, vsTarget));
}

function sGetToolbarButtonHTML(vsLabel, vsLinkURL, vsCSSClass, vsTarget)
{
  return sGetToolbarIconButtonHTML(vsLabel, vsLinkURL, "", vsCSSClass, vsTarget);
}

function sGetToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, vsTarget)
{
  return "<li>" + sGetCaptionToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, vsTarget) + "</li>";
}

function sGetToolbarIconButtonHTMLForOpenInformationView(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, viObjectId, vsTarget)
{
  if (vsLinkURL)
    return sGetToolbarIconButtonHTML(vsLabel, "javascript:OpenInformationView(\"" + vsLinkURL+ "\", " + viObjectId + ");", vsIconURL, vsCSSClass, vsTarget);
  else
    return sGetToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, vsTarget);
}

function sGetToolbarIconButtonHTMLForSimplePopup(vsLabel, vsLinkURL, vsIconURL, vsCSSClass)
{
  return sGetToolbarIconButtonHTMLForSizedPopup(vsLabel, vsLinkURL, 250, 200, vsIconURL, vsCSSClass)
}

function sGetToolbarIconButtonHTMLForSizedPopup(vsLabel, vsLinkURL, viWidth, viHeight, vsIconURL, vsCSSClass)
{
  if (vsLinkURL)
    return sGetToolbarIconButtonHTML(vsLabel, "javascript:OpenWindow(\"" + vsLinkURL+ "\",\"_blank\"," + viWidth +"," + viHeight + ",true)", vsIconURL, vsCSSClass);
  else
    return sGetToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass);
}

function sGetCaptionToolbarIconButtonHTMLForOpenInformationView(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, viObjectId)
{
  if (vsLinkURL)
    return sGetCaptionToolbarIconButtonHTML(vsLabel, "javascript:OpenInformationView(\"" + vsLinkURL+ "\", " + viObjectId + ");", vsIconURL, vsCSSClass);
  else
    return sGetCaptionToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass);
}

function sGetCaptionToolbarIconButtonHTMLForSimplePopup(vsLabel, vsLinkURL, vsIconURL, vsCSSClass)
{
  return sGetCaptionToolbarIconButtonHTMLForSizedPopup(vsLabel, vsLinkURL, 250, 250, vsIconURL, vsCSSClass)
}

function sGetCaptionToolbarIconButtonHTMLForSizedPopup(vsLabel, vsLinkURL, viWidth, viHeight, vsIconURL, vsCSSClass)
{
  if (vsLinkURL)
    return sGetCaptionToolbarIconButtonHTML(vsLabel, "javascript:OpenWindow(\"" + vsLinkURL+ "\",\"_blank\"," + viWidth +"," + viHeight + ",true)", vsIconURL, vsCSSClass);
  else
    return sGetCaptionToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass);
}

function sGetCaptionToolbarIconButtonHTML(vsLabel, vsLinkURL, vsIconURL, vsCSSClass, vsTarget)
{
  if (!vsCSSClass)
    vsCSSClass = "ToolbarIconButton";
  if (!vsLabel)
    vsLabel = "&nbsp;";
  var sLink;
  if (vsLinkURL)
    sLink = " href='" + vsLinkURL + "'";
  else
    sLink = "";
  if (vsTarget)
    sLink += " target='" + vsTarget + "'";
  if (vsCSSClass)
    vsCSSClass = " class='" + vsCSSClass + "'";
  else
    vsCSSClass = "";
  if (vsIconURL)
    vsIconURL = " style='background: url(\"" + vsIconURL + "\") no-repeat left center;'";
  else
    vsIconURL = "";
  return '<a ' + sLink + vsCSSClass + vsIconURL + '>' + vsLabel + '</a>';
}

function WriteToolbarButtonHTML(vsLabel, vsLinkURL, vsStyle, vsTarget)
{
  document.write(sGetToolbarButtonHTML(vsLabel, vsLinkURL, vsStyle, vsTarget));
}

function sGetToolbarButtonGroupSeparatorHTML()
{
  return "<td style='white-space: nowrap; width: 100%'>&nbsp;</td>";
}

function WriteToolbarButtonGroupSeparatorHTML()
{
  document.write(sGetToolbarButtonGroupSeparatorHTML());
}

function sGetButtonLinkHTML(vsLabel, vsLinkURL, vsStyle)
{
  if (!vsStyle)
    vsStyle = "Button";
  var sLink;
  if (vsLinkURL && (vsLinkURL.length > 0))
    sLink = " href='" + vsLinkURL + "'";
  else
    sLink = "";
  return "<a" + sLink + " class='" + vsStyle + "'>" + vsLabel + "</a>";
}

function sCreateExternalObjectId(viProductId, viModelId, vsObjectId)
{
  
  return (viProductId + "_0_" + viModelId + (vsObjectId ? ("_" + vsObjectId) : ""));
}

function iExtractProductId(vsObjectId)
{
  return parseInt(vsObjectId.split("_")[0]);
}

function iExtractModelId(vsObjectId)
{
  return parseInt(vsObjectId.split("_")[2]);
}

function sExtractModelIds(vsObjectId)
{
  return vsObjectId.split("_")[2];
}

function sExtractObjectId(vsObjectId)
{
  if (bIsFullObjectId(vsObjectId))
    return (vsObjectId.split("_")).slice(3).join("_");
  return vsObjectId;
}

function iExtractObjectId(vsObjectId)
{
  if (bIsFullObjectId(vsObjectId))
    return parseInt(vsObjectId.split("_")[3]);
  return parseInt(vsObjectId);
}

function sSetAction(vsURL, vsAction)
{
  return vsURL.replace(/&\*[^&]*/i, "&*" + vsAction);
}

function bIsFullObjectId(vsId)
{
  return (vsId.indexOf("_") >= 0);
}

function sGetPlugin()
{
  var slPlugin = sGetDocumentLocation().match(/\?[^&]*/i);
  var sPlugin = slPlugin[0];
  return sPlugin.slice(1, sPlugin.length);
}

function sGetAction()
{
  var slAction = sGetDocumentLocation().match(/&\*([^&]*)/i);
  if (slAction && (slAction.length > 1))
    return slAction[1];
}

function sGetURLParameters(vsUrl)
{
  var slPlugin = vsUrl.match(/\?[^&]*&*[^&]*&(.*)/i);
  return slPlugin[1];
}

function sSetPlugin(vsURL, vsPlugin)
{
  return vsURL.replace(/\?[^&]*/i, "?" + vsPlugin);
}

function sGetDocumentLocation()
{
  sResult = _sDocumentLocation;
  if (_slAutoFilterParametersFromDocumentLocation && _slAutoFilterParametersFromDocumentLocation.length > 0)
    sResult = sFilterParameters(_slAutoFilterParametersFromDocumentLocation, sResult, true);

  return sResult;  
}

// Add parameters sent via post-method to end of document location (usually retrieved using <#PostedParameters>-tag in the actual view template).
function SetPostedParameters(vsParams)
{
  _sDocumentLocation = sSetParameters(vsParams, _sDocumentLocation);
}

function AddAutoFilterParameter(vsParameterName)
{
  _slAutoFilterParametersFromDocumentLocation[_slAutoFilterParametersFromDocumentLocation.length] = vsParameterName;
}

function sGetBaseURL(vsPlugin, vsAction)
{
  var sResult = sGetDocumentLocation();
  var sSessionId = sGetParameter(ACT_PARAM_SESSION_ID, sResult);
  var sLanguage = sGetParameter(ACT_PARAM_LANGUAGE, sResult);
  var iPos = sResult.indexOf("?");
  return sResult.slice(0, iPos + 1) + vsPlugin + "&*" + vsAction + "&" + ACT_PARAM_SESSION_ID + "=" + sSessionId + "&" + ACT_PARAM_FORMAT + "=p&" + ACT_PARAM_LANGUAGE + "=" + sLanguage;
}

function RefreshToolbar(vbUnload)
{
  var oInformationView = oGetInformationView();
  if (oInformationView)
    oInformationView.UpdateInformationViewToolbarsFromInformationView(vbUnload);
}

function sImportParams(vsFrom, vsTo)
{
  var slFrom = vsFrom.split("&");
  for (var i = 0; i < slFrom.length; ++i) {
    var sFrom = slFrom[i];
    var iPos = sFrom.indexOf("=");
    if (iPos >= 0) {
      var sName = sFrom.slice(0, iPos);
      if (sGetParameter(sName, vsTo) == "") {
        if (vsTo.length > 0)
          vsTo += "&";
        vsTo += sFrom;
      }
    }
  }
  return vsTo;
}

function sFilterParameters(vslFilteredParameters, vsParameters, vbFilterOut)
{
  var sResult = vbFilterOut ? vsParameters : "";
  if (vslFilteredParameters) {
    for (var i = 0; i < vslFilteredParameters.length; ++i) {
      var sParam = vslFilteredParameters[i];
      if (vbFilterOut)
        sResult = sRemoveParameter(sParam, sResult);
      else {
        var sValue = sGetParameter(sParam, vsParameters);
        if (sValue)
          sResult = sSetParameter(sParam, sValue, sResult);
      }
    }
  }
  return sResult;
}

function sSetParameters(vsParameters, vsURL)
{
  var sResult = vsURL;
  var arParams = vsParameters.split("&");

  for (var i = 0; i < arParams.length; ++i) {
    var sParam = arParams[i];
    var iPos = sParam.indexOf("=");
    if (iPos >= 0)
      sResult = sSetParameter(sParam.slice(0, iPos), sParam.slice(iPos + 1), sResult);
  }
  return sResult;
}

function iGetProcessorProductId()
{
  var sPlugin = sGetParameter(ACT_PARAM_PLUGIN, sGetDocumentLocation());
  if (!sPlugin)
    sPlugin = sGetPlugin();
  if (sPlugin == "QPRPORTAL")
    return PR_PORTAL;
  else if (sPlugin == "PGPLUGIN")
    return PR_PG;
  else if (sPlugin == "SCPLUGIN")
    return PR_SC;
  else if (sPlugin == "QPRWAS")
    return PR_USER_MGMT;
}

function SafeParseInt(vsValue, viDefault)
{
  var iResult = parseInt(vsValue);
  if (isNaN(iResult))
    return (viDefault ? viDefault : 0);
  return iResult;
}


function SafeParseFloat(vsValue, vdDefault)
{
  var dResult = parseFloat(vsValue);
  if (isNaN(dResult))
    return (vdDefault ? vdDefault : 0);
  return dResult;
}

function URLEscapeToHTMLEscape(vsString)
{
  vsString = vsString.replace(/%u(....)/g, "&#x$1;");
  return vsString.replace(/%(..)/g, "&#x$1;");
}

function HTMLEscapeToURLEscape(vsString)
{
  var sResult;
  var arBuf = vsString.split("&#");

  if (arBuf.length > 1) {
    sResult = arBuf[0];

    for (var i = 1 ; i < arBuf.length; ++i)
    {
      var sChunk = arBuf[i];
      var iCode;
      if (sChunk.length > 1) {
        var iBase;
        if (sChunk.charAt(0) == 'x') {
          sChunk = sChunk.substr(1);
          iBase = 16;
        }
        else
          iBase = 10;
        var iPos = sChunk.indexOf(";");
        if (iPos > 0) {
          var sValue = parseInt(sChunk, iBase).toString(16);
          switch (sValue.length) {
            case 1: sResult += "%0" + sValue; break;
            case 2: sResult += "%" + sValue; break;
            case 3: sResult += "%u0" + sValue; break;
            case 4: sResult += "%u" + sValue; break;
          }
          sResult += sChunk.substr(iPos + 1);
        }
      }
    }
  }
  else {
    sResult = vsString;
  }

  sResult = sResult.replace(/&nbsp;/g, "%20");
  return sResult;
}

function oGetParentMainView()
{
  var oView = self;
  while (oView && (oView != oView.parent)) {


    if (oView.bIsPortalMainView && oView.bIsPortalMainView())
      return oView;
    oView = oView.parent;
  }
  if (oView.bIsPortalMainView && oView.bIsPortalMainView())
    return oView;

}

function Alert(vsMsg)
{
  if (M5) {
    var sMsg = "";
    while (vsMsg.length > 0) {
      var iLen = Math.min(70, vsMsg.length);
      sMsg += vsMsg.substring(0, iLen) + "\n";
      vsMsg = vsMsg.substring(iLen);
    }
    alert(sMsg);
  }
  else
    alert(vsMsg);
}

function bIsInPrintFrame()
{
  try {
    var oTemp = self;
    while (oTemp)
    {
      if (bExists(oTemp.ThisIsAPrintFrame))
        return true;
  
      if (oTemp == oTemp.parent)
        break;
  
      oTemp = oTemp.parent;
    }
    return false;
  }
  catch (e) {
    return false;
  }
}

function bInPortal() 
{
  try {
    if ((parent != self) && parent.bIsActionCallView) {
      return parent.bInPortal();
    } else {
      if ((parent != null) && (parent.bIsPortalMainView)) {
        return true;
      } else {
        return false;
      }
    }
  }
  catch (e) {
    return false;
  }
}

function sGetBookmarkURL(vsURL)
{
  var sURL = vsURL;
  var sParams = '';
   
  if (bInPortal()) {
    if ((parent) && (parent.sGetSetAsDefaultViewParameters)) {
      sParams = parent.sGetSetAsDefaultViewParameters(true);
    }      
    if (sParams) {
      if (sParams.length > 0) {
        sURL = sURL + '&' + sParams;
      }
    }
  }

  if (typeof(sAddDynamicStateToBookmarkURL) != "undefined")
    sURL = sAddDynamicStateToBookmarkURL(sURL);
  return sURL;
}  

function bHasValidOpener(voWindow)
{
  if (IEANY) {
    try {
      return (voWindow.opener && (!voWindow.opener.closed) && (voWindow.opener.location != ""));
    }
    catch(e) {
      // Circumvent bug in IE6 caused by patch # 918899
      // Ignore possible IE security exception when opener is refreshed and cannot be accessed, see CP23739B
      return false;
    }
  }
  else {
    return (voWindow.opener && !voWindow.opener.closed);
  }
}

function OnBookmarkChanged(vsHeader, vsSubHeader, vsParams)
{
  if (bHasValidOpener(window) && (bExists(window.opener.refreshBookmarks)))
    window.opener.refreshBookmarks(vsHeader, vsSubHeader, vsParams);
  window.close();
}

function ExternalWrite(vsHTML)
{
  document.write(vsHTML);
}

var _sLog = "";
function WriteLogEntry(vsEntry)
{
  _sLog += vsEntry + "\r\n";
}

function sGetLog()
{
  return _sLog;
}

function ShowLog(vbClear)
{
  alert(_sLog);
  if (vbClear)
    ClearLog();
}

function ClearLog()
{
  _sLog = "";
}

function CommaStringToArray(vsString)
{
  var sString = vsString.toString();
  return sString ? sString.split(",") : new Array();
}

// Convert %u00xx where xx is smaller or equal to 7f into less lengthy %xx
function sOptimizeURLEncoding(vsUrl)
{
  return vsUrl.replace(/%u00([0-7][0-9a-f])/gi, "%$1");
}

function bIsPortalUrl(vsUrl)
{
  var sBase = vsUrl.toLowerCase();
  var iPos = sBase.indexOf("?");
  if (iPos >= 0)
    sBase = sBase.slice(0, iPos + 1);
 
  var sPortalBase = sGetDocumentLocation().toLowerCase();
  iPos = sPortalBase.indexOf("?");
  if (iPos >= 0)
    sPortalBase = sPortalBase.slice(0, iPos + 1);
  return (sBase === sPortalBase);
}

function sAddSessionIfNeeded(vsUrl)
{
  var sSES = sGetParameter(ACT_PARAM_SESSION_ID, sGetDocumentLocation());
  var sUIP = sGetParameter(ACT_PARAM_USER_ID_AND_PASSWORD, vsUrl);
  if (sSES && !sUIP && bIsPortalUrl(vsUrl))
    return sSetParameter(ACT_PARAM_SESSION_ID, sSES, vsUrl);
  return vsUrl;
}

var _CallbackResultHandler;
var _OrigCallResultFunc;
var _oHiddenWorkerFrame;

function CallServerFunction(vsURL, vCallbackFunc)
{
  // This function only works if the current document has a body-element
  var oBody = document.getElementsByTagName('body')[0];
  if (!bExists(oBody)) 
    return;

  // Ignore further calls until the result for the previous call is received
  if (_CallbackResultHandler)
    return;
  // Make the call
  _CallbackResultHandler = vCallbackFunc;

  // Backup original action call result handler
  if (typeof callResult !== "undefined") 
    _OrigCallResultFunc = callResult;
  callResult = CallServerFunctionResult;
 
  // Create hidden worker frame if not already created
  if (!bExists(_oHiddenWorkerFrame)) {
    _oHiddenWorkerFrame = document.createElement('iframe');
    _oHiddenWorkerFrame.name = "_WorkerFrame";
    _oHiddenWorkerFrame.style.display = 'none';
    oBody.appendChild(_oHiddenWorkerFrame);
  }
  
  // Send server action call request
  _oHiddenWorkerFrame.src = vsURL;
}

function CallServerFunctionResult(vsResult, vsData)
{
  // Call the client specified result handler function
  // Set the result handler to null so that the callback function can send another request right away
  var Callback = _CallbackResultHandler;
  _CallbackResultHandler = null;
  
  // Restore backed up callback result handler
  callResult = _OrigCallResultFunc;

  // Callback may not be defined if user returns to this view using the back button
  if (Callback)
    Callback(vsResult, vsData);
}

function RemoveEmptyTableHeaders(voDocument)
{
  jQuery(voDocument).find("tbody").each(function(){
    var oCells = jQuery(this).children("tr").children("td");
    var oHeaders = jQuery(this).children("tr").children("th");
    
    if (oCells.length == 0)
      oHeaders.parents("tr").css("display", "none");
  });
}

function sGetFontSize(vsElementId) 
{
  var oElement = document.getElementById(vsElementId); 
  var sFontSize = '8px';
  
  if (oElement && oElement.currentStyle) {
    sFontSize = document.body.currentStyle['fontSize'];
  } else if (window.getComputedStyle)	{   
    sFontSize = document.defaultView.getComputedStyle(oElement, null).getPropertyValue('font-size');  
  }  
  
  if (sFontSize.indexOf('px') < 0)
    sFontSize = '8px';

  return sFontSize; 
}

