WindowNameSpecChars = "*+-./_@";

function Repl(Str, What, ByWhat) {
  var found = Str.indexOf(What);
  var retVal= "";
  var start = 0;

  while(found != -1){
    retVal = retVal + Str.substring(start, found) + ByWhat;
    start = found + What.length;
    found = Str.indexOf(What, start);
  }
  retVal = retVal + Str.substring(start, Str.length);
  return retVal;
}

function WindowNameEncode(pInitiator, pStr) {
  var lStr = escape(pInitiator+pStr);
  for(var i=0; i<WindowNameSpecChars.length; i++) 
    lStr = Repl(lStr, WindowNameSpecChars.charAt(i), "%X"+i);
  lStr = Repl(lStr, "%", "_");
  return lStr;
} // WindowNameEncode()

function WindowNameDecode(pInitiator, pStr) {
  var lStr = "" + pStr;

  lStr = Repl(lStr, "_", "%");
  for(var i=0; i<WindowNameSpecChars.length; i++) 
    lStr = Repl(lStr, "%X"+i, WindowNameSpecChars.charAt(i));
  lStr = unescape(lStr);
  if (lStr.indexOf(pInitiator)<0)
     return "";
  window.name = lStr.substring(0,lStr.lastIndexOf(pInitiator));
  lStr = lStr.substring(lStr.lastIndexOf(pInitiator)+pInitiator.length);
  return lStr;
} // WindowNameDecode()



function WindowNamePush(pInitiator, pStr) {
  window.name = window.name + WindowNameEncode(pInitiator, pStr);
}

function WindowNamePop(pInitiator) {
  return WindowNameDecode(pInitiator, window.name);
}
