//
// /tj/2004-02/ SAPGUI for HTML ITSSM Frameset Management
//


/*****************************************
 *  Helper functions
 */

function appendGetParameter ( inout_url, in_parm, in_value, in_encode, in_duplicate)
{
  var sep = "?";

  if (inout_url && in_parm) {
    if (inout_url.indexOf( "?") != -1) sep = "&";
    if (inout_url.toLowerCase().indexOf( in_parm.toLowerCase() + "=") == -1 || in_duplicate)
      inout_url = inout_url + sep + in_parm + (in_value ? "=" + (in_encode ? encodeURIComponent( in_value) : in_value) : "");
  }
  return inout_url;
} // appendGetParameter()


/*
 * isFrameTag() returns either "F", "I" or false (boolean), either
 *   if in_tag is <frame>, <iframe> or anything else
 */
function isFrameTag( in_tag)
{
  var rv = false;
  if (in_tag && in_tag.tagName) // is tag?
  {
    var tagname = in_tag.tagName.toUpperCase();
    rv = (tagname == "FRAME") ? "F" : (tagname == "IFRAME" ? "I" : false);
  }
  return rv;
} // isFrameTag()


function getFrameDocumentByFrame( in_frameobj)
{
  rv = false;

  if (in_frameobj)
  {
    try
    // it might happen that a redirect URL is accessed on exit
    // but we don't get any chance to know about it :(
    {
      if (typeof( in_frameobj.contentDocument) == "undefined")
        rv = in_frameobj.contentWindow.document;  // IE
      else
        rv = in_frameobj.contentDocument;         // Mozilla
    } catch(err) {}  // what shall we do?!? :(
  }
  return rv;
}

function getFrameDocumentByFrameNo( in_framesetobj, in_frameno )
{
  var rv = null;
  var frame;
  var i;

  if (in_framesetobj) {
    // search for correct frame
    for (i = in_framesetobj.childNodes.length-1; i >= 0; --i) {
      frame = in_framesetobj.childNodes[ i];
      if (frame && isFrameTag( frame) && i == in_frameno) {
        rv = frame;
        break;
      }
    }
    // determine frame's document
    rv = getFrameDocumentByFrame( rv);
  }
  return rv;
} // getFrameDocumentByFrameNo()



/*****************************************
 *  Session management
 */

function wguSessionDoNothing() {}

function wguSessionTerminate ( in_event, in_sessionInfo )
{
  var rc = false;
  var ev;
  var termurl;
  var w, f = self.frames[ 3]; // Termination frame : index 3!)

  if (in_event != null) ev = in_event; else ev = window.event;
  if (ev) ev.cancelBubble = true;

  if (in_sessionInfo && in_sessionInfo._url) {
    termurl = appendGetParameter( in_sessionInfo._url, in_sessionInfo._termParm)
            + "&~session=" + encodeURIComponent( in_sessionInfo._session)
            + "&~closewindow=1&~exiturl=" + in_sessionInfo._exiturl;
    if (f == null || (typeof its_boDisconnectSlow != "undefined" && its_boDisconnectSlow)) {
      new Image().src = termurl;
      if (w = window.open( termurl, "ITSCloseSess", "height=20,width=20,top=4095,left=4095,location=no,dependent=no"))
        ;//w.close();
    }
    else if (f)
      f.location.href = termurl;
    rc = true;
  }

  return rc;
} // wguSessionTerminate()


/* Call on SRV_CLOSE to redirect to ~exitURL
 */
function wguSessionRedirect ( in_sessionInfo )
{
  if (in_sessionInfo._exiturl != "") {
    window.self.location.replace( in_sessionInfo._exiturl);
  }
} // wguSessionRedirect()


/*****************************************
 *  Frame management
 */

function wguObjFrameMgr( in_numFrames, in_framesetid )
{
  var retval = null;
  if (in_framesetid && in_numFrames > 0) {
    var fset   = self.document.getElementById( in_framesetid);
    this._framesetid      = in_framesetid;
    this._noframes        = in_numFrames;
    this._currframe       = null;
    this._visframe        = null;
    this._width           = fset ? fset.offsetWidth : null;
    this._height          = fset ? fset.offsetHeight : null;
    this._aFrameObj       = new Array( in_numFrames);
    this._aFrame          = new Array( in_numFrames);
    this._aFrameType      = new Array( in_numFrames);       // "F", "I" for "Frame" or "IFrame"
    this._aFrameDocument  = new Array( in_numFrames);
    this._aRelFrameset    = new Array();                    // embedding Frameset
    this._aRelFramesetIdx = new Array( in_numFrames);
    this._aId             = new Array( in_numFrames);
    this._aName           = new Array( in_numFrames);
    this._aTitle          = new Array( in_numFrames);
    this._aURL            = new Array( in_numFrames);
    this._aAccessible     = new Array( in_numFrames);

    for (var i = 0; i < in_numFrames; i++) {
      this._aFrameObj[ i]       = null;
      this._aFrame[ i]          = null;
      this._aFrameType[ i]      = "";
      this._aFrameDocument[ i]  = null;
      this._aRelFramesetIdx[ i] = -1;
      this._aId[ i]             = null;
      this._aName[ i]           = null;
      this._aTitle[ i]          = null;
      this._aURL[ i]            = null;
      this._aAccessible[ i]     = null;
    }

    retval = this;
  }
  return retval;
} // wguObjFrameMgr()


wguObjFrameMgr.prototype._Set = function ( in_fno, in_id, in_obj )
{
  var retval = null;
  var obj = in_obj ? in_obj : this;
  var id;
  var f, p, el;

  if (in_fno != null) {
    // if in_id != null we take this for first initialization
    if (in_id != null) {
      obj._aId[ in_fno]           = in_id;
      obj._aFrameObj[ in_fno] = f = document.getElementById( in_id);
      obj._aFrameType[ in_fno]    = isFrameTag( f);
      obj._aName[ in_fno]         = f.name;
    }

    f = obj._aFrameObj[ in_fno];
    if (f != null) {

      if (obj._aFrame[ in_fno] == null)
        obj._aFrame[ in_fno] = f.contentWindow;

      if (obj._aFrameType[ in_fno] == "F" && ((el = obj._aRelFramesetIdx[ in_fno]) == -1 || el != -1 && obj._aRelFrameset[ el] == null)) {
        p = f.parentElement;

        if (!p) {
          p = document.getElementsByTagName("frameset");
          if (p) {
            for (var i = p.length-1; i >= 0; --i) {
              if (p[ i].getAttribute("id") == obj._framesetid)
              { p = p[ i]; i = -1; break; }
            }
            if (i != -1)
              p = null;
          }
        }

        if (p) {
          for (var j = 0; j < obj._aRelFrameset.length; j++) {
            if (p == obj._aRelFrameset[ j])
              break;
          }
          obj._aRelFramesetIdx[ in_fno] = j;
          obj._aRelFrameset[ j]         = p;
        }
      }

      if (typeof( f.contentDocument) == "undefined" && obj._aFrame[ in_fno] != null) {
        // IE
        try {
          if (obj._aFrame[ in_fno].window && typeof obj._aFrame[ in_fno].window.document != "unknown")
            obj._aFrameDocument[ in_fno] = obj._aFrame[ in_fno].window.document;
         } catch (err) { obj._aFrameDocument[ in_fno] = null; }
      }
      else {
        // Mozilla
        obj._aFrameDocument[ in_fno] = f.contentDocument;
      }

      if (obj.IsFrameAccessible( in_fno) == true) {
        obj._aTitle[ in_fno] = obj._aFrameDocument[ in_fno].title;
        obj._aURL[ in_fno]   = obj._aFrame[ in_fno].location ? obj._aFrame[ in_fno].location.href : obj._aFrame[ in_fno].src;
      }

      obj._aName[ in_fno]  = f.name;
    }
    else {
      with (this) {
        _aTitle[ in_fno]          =
        _aURL[ in_fno]            = null;
        _aRelFramesetIdx[ in_fno] = -1;
        _aAccessible              = false;
      }
    }

    retval = obj;
  }

  // frame independend
  if ((f = obj.GetCurrFrame()) >= 0) {
    if ((f = obj.GetFrame( f)) != null) // use f as temporary container for several objects
      if ((f = f.document) != null)
        if ((f = f.getElementsByTagName("body")[0]) != null) {
          obj._height = f.offsetHeight;
          obj._width = f.offsetWidth;
        }
  }

  f = self;
  do {
    if ((el = f.document.getElementById( obj._framesetid)) != null)
      break;
    f = f.parent;
  } while (f != parent);

  if (el) {
    if (obj._height < 16)
      obj._height = el.offsetHeight;
    if (obj._width < 8)
      obj._width = el.offsetWidth;
  }

  return retval;
} // wguObjFrameMgr._Set()


wguObjFrameMgr.prototype.Init = function ( in_id1 ) // ... and further frame ids
{
//alert("wguObjFrameMgr.Init( " + this.Init.arguments + " )");
  var argv = this.Init.arguments;
  var argc = argv.length;

  if ( this._noframes < argc)
    argc = this._noframes;

  for (var i = 0; i < argc; i++) {
    this._Set( i, argv[ i], this);
  }
  return this;
} // wguObjFrameMgr.Init()


wguObjFrameMgr.prototype.Actualize = function ( in_fno, in_obj )
{
//alert("wguObjFrameMgr.Actualize( " + in_fno + ")");
  var obj = (in_obj == null) ? this : in_obj;

  return obj._Set( in_fno, null, obj);
} // wguObjFrameMgr.Actualize()


wguObjFrameMgr.prototype.Activate = function ( in_fno, in_obj )
{
  var rows = "";
  var sep  = "";
  var obj = (in_obj == null) ? this : in_obj;
  var aRelObjIdx;
  var i, j;

//alert("wguObjFrameMgr.Activate( " + in_fno + ")");

  if (obj && obj._aFrameType[ in_fno] == "F") { // it's a frame
    aRelObjIdx = obj._aRelFramesetIdx;
    j = aRelObjIdx[ in_fno];

    if (j != -1 && obj._aRelFrameset[ j] != null) {
      for (i = 0; i < obj._noframes; i++, sep = ",") {
        if ( aRelObjIdx[ i] == j) {
          if ( i == in_fno) {
            rows = rows + sep + "*";
            obj._visframe = i;
          }
          else {
            rows = rows + sep + "0";
          }
        }
     } // for
     obj._aRelFrameset[ j].setAttribute( "rows", rows);
//      if (obj._aFrame[ in_fno].webguiSetFocus)
//        try { obj._aFrame[ in_fno].webguiSetFocus(); } catch ( err) {}
//      else
//        obj._aFrame[ in_fno].focus();
    }
  }
  else {  // it's an iframe
    for (i = obj._aFrameObj.length-1; i >= 0; --i) {
      obj._aFrameObj[ in_fno].style.setAttribute( "display", "block");
      obj._aFrameObj[ in_fno].style.setAttribute( "visibility", "visible");
//    obj._aFrameObj[ in_fno].focus();
//      try { if (obj._aFrame[ in_fno].webguiSetFocus) obj._aFrame[ in_fno].webguiSetFocus(); } catch ( err) {}
      if (i != in_fno) {
        obj._aFrameObj[ i].blur();
        obj._aFrameObj[ i].style.setAttribute( "display", "none");
        obj._aFrameObj[ i].style.setAttribute( "visibility", "hidden");
//alert("Hide frame " + i + " (" + obj._aFrame[ i].name + ")");
      }
    }
  } // if (frameType) else

  obj._currframe = in_fno;

  return this;
} // wguObjFrameMgr.Activate()


wguObjFrameMgr.prototype.CleanDocument = function ( in_fno, in_obj )
{
//alert("wguObjFrameMgr.CleanDocument( " + in_fno + ")");
  var obj = (in_obj == null) ? this : in_obj;
  var el;

  if (obj.IsFrameAccessible( in_fno) == true)
  {
    if (el = obj._aFrameDocument[ in_fno].getElementsByTagName("body")[0])
    {
      if (el.innerHTML != null)
      {
        el.innerHTML = "";
      }
      else
      {
        while (el.childNodes.length > 0)
        {
          //alert( "wguObjFrameMgr.CleanDocument( " + in_fno + " [" + obj._aFrame[ in_fno].name + "]" + ")\nRemove child: '" + el.firstChild.nodeName + "'");
          el.removeChild( el.firstChild);
        } // while
      }
    }
    if (el = obj._aFrameDocument[ in_fno].getElementsByTagName("html")[0])
    {
      while (el.childNodes.length > 0)
      {
        el.removeChild( el.firstChild);
      }
    }
  }
} // wguObjFrameMgr.CleanDocument()


wguObjFrameMgr.prototype.IsValidFrameIdx = function ( in_fno )
{
  var rc = false;
  if ( !isNaN( in_fno) && 0 <= in_fno && in_fno < this._noframes)
    rc = true;
  return rc;
} // wguObjFrameMgr.IsValidFrameIdx()


wguObjFrameMgr.prototype.GetFrameObject = function ( in_fno )
{
  var rv = null;
  var i  = parseInt( in_fno);
  var f;

  if (this.IsValidFrameIdx( in_fno)) {
    rv = this._aFrameObj[ i];
  }
  return rv;
} // wguObjFrameMgr.GetFrameObject()

wguObjFrameMgr.prototype.GetFrame = function ( in_fno )
{
  var rv = null;
  var i  = parseInt( in_fno);
  var f;

  if (this.IsValidFrameIdx( in_fno)) {
    rv = this._aFrame[ i];
  }
  return rv;
} // wguObjFrameMgr.GetFrame()

wguObjFrameMgr.prototype.getFrameDocumentByFrameNo = function ( in_fno )
{
  var rv = null;
  var i  = parseInt( in_fno);
  var f;

  if (this.IsValidFrameIdx( in_fno)) {
    rv = this._aFrameDocument[ i];
  }
  return rv;
} // wguObjFrameMgr.GetFrame()

wguObjFrameMgr.prototype.GetFrameName = function ( in_fno )
{
  var rv = null;
  var i  = parseInt( in_fno);
  var f;

  if (this.IsValidFrameIdx( in_fno)) {
    rv = this._aName[ i];
  }
  return rv;
} // wguObjFrameMgr.GetFrame()

wguObjFrameMgr.prototype.IsFrameAccessible = function ( in_fno )
{
  var rv = false;

  if (in_fno != null) {
    var d = this.getFrameDocumentByFrameNo( in_fno);
    if (d && (typeof d.body == "object" || typeof d.frameset == "object") )
      rv = this._aAccessible[ in_fno] = true;
    else
      rv = this._aAccessible[ in_fno] = false;
  }
  return rv;
} // wguObjFrameMgr.IsFrameAccessible()


wguObjFrameMgr.prototype.GetFrameByName = function ( in_name )
{
  var rv = null;
  var arr = this._aName;
  for (var i in arr) {
    if (arr[ i] == in_name) {
      rv = i;
      break;
    }
  }
  return rv;
}

wguObjFrameMgr.prototype.GetCurrFrame = function ()
{
  return this._currframe;
}

wguObjFrameMgr.prototype.GetNextRelFrame = function ()
{
  return (this._currframe + 1) % this._noframes;
}

wguObjFrameMgr.prototype.GetDimension = function ( out_width, out_height )
{
  var rc = false;

  if ((out_width = this._width) && (out_height = this._height))
    rc = true;

  return rc;
}




/*****************************************
 *  Frame manager
 */

function toggleFMgrFrame ()
{
  var fs = document.getElementById( "ITSFRAMESET0");

  if (toggleFMgrFrame.iswguFmgrOpen) {         // frame manager frame closed
    fs.rows = "5,*";
    toggleFMgrFrame.iswguFmgrOpen = false;
  }
  else {
    fs.rows = "23,*";
    toggleFMgrFrame.iswguFmgrOpen = true;
  }
} // toggleFMgrFrame()
toggleFMgrFrame.iswguFmgrOpen = false;



/*****************************************
 * Runtime functions and Event handler
 */


function setTitleFromCurrentDynpro( in_fmgrinfo, in_fno )
{
  var rc = null;
  var title;
  if (in_fno != null && in_fno >= 0) {
    if ((title = in_fmgrinfo.GetFrameTitle( in_fno)) != null)
      self.document.title = title;
      rc = 1;
  }
  return rc;
}  // setTitleFromCurrentDynpro()



/*****************************************
 * Interface function for SAP GUI for HTML and IACs
 */

function ITS_Frameset( in_action, inout_parm1, inout_parm2 ) // inout_parm3, ...
{
  var rv = null;    // return value
  var argl = arguments.length;
  var i, j;

  //--------

  function __rootwindow () {  // returns reference to root window or null
    var rv = null;
    var f  = self;
    var bo;
    do {
      try {
        bo = f && f.its_root_frameset
      } catch( err) { break;}
      if (bo)
        break;
      else
        f = f.parent;
    } while (f != f.parent);

      try {
        bo = f && f.its_root_frameset
      } catch( err) { bo = false; }
      if (bo)
        rv = f;

    return rv;
  }

  //--------

  function __selfframe_no ( in_f ) {  // returns fno of self or -1
    var rv = -1;
    var w = self, f;
    var i, j, l;

    if (in_f == null)
      in_f = __rootwindow();

    if (in_f) {
      var fs = in_f.document.getElementsByName("ITSFrameset")[0];
      if (fs) {
        // is it a popup?
        while (w.parent != in_f && w != w.parent) {
          w = w.parent;
        }
        // Firefox 1.5 interprets also "\n" as children
        for (i = j = 0, l = fs.childNodes.length; i < l; i++)
        {
          if (f = fs.childNodes[ i].contentWindow)
          {
            if (isFrameTag( fs.childNodes[ i]) && f == w)
            {
              rv = j;
              break;
            }
            j++;
          } // if (contentWindow)
        } // for
      } // if (fs)
    } // if (in_f)

    return rv;
  }

  //--------

  function __otherframe_no ( in_f, in_fno ) {  // returns fno of self or -1
    var rv = -1;
    var i;
    var w = self;

    if (in_f == null)
      in_f = __rootwindow();

    if (in_f) {
      if (in_fno != null) rv = (in_fno+1) % 2;
      else {
        var fs = in_f.document.getElementsByName("ITSFrameset")[0];
        if (fs) {
          // is it a popup?
          while (w.parent != in_f && w != w.parent) {
            w = w.parent;
          }
          for (i = fs.childNodes.length-1; i >= 0; --i) {
            if (isFrameTag( fs.childNodes[ i]) && fs.childNodes[ i].contentWindow != w) {
              rv = i;
              break;
            }
          } // for
        } // if (fs)
      }
    } // if (in_f)

    return rv;
  }

  //========

  function _frameset () {
    var _rv = null;
    if (ITS_Frameset.itsframeset != null) {
      _rv = ITS_Frameset.itsframeset;
    }
    else {
      var f = __rootwindow();

      if (f && f.its_root_frameset) {
        ITS_Frameset.itsrootwin = f;
        ITS_Frameset.itsframemgr = f.myFrames;

        if (f.document.getElementsByName("ITSFrameset").length > 0)
          _rv = f.document.getElementsByName("ITSFrameset")[0];
      }
    }
    ITS_Frameset.itsframeset = _rv;
    return _rv;
  }

  //--------

  function _is_active () {
    return (_frameset() != null);
  }

  //--------

  function _active_frameno ( in_frameset ) {
    var rv = null;
    if (in_frameset) {
      if (in_frameset.getAttribute("rows") == "*,0")
        rv = 0;
      else
        rv = 1;
    }
    return rv;
  }

  //--------

  function _active_frame () {
    var rv = null;
    var fs = _frameset();
    if (fs) {
      rv = fs.childNodes[ _active_frameno( fs)].contentWindow;
    }
    else
      rv = self;
    return rv;
  }

  //--------

  function _other_frame () {
    var rv = null;
    var fs = _frameset();
    if (fs) {
      rv = fs.childNodes[ __otherframe_no()].contentWindow;
    }
    else
      rv = self;
    return rv;
  }

  //--------

  function _active_frame_document () {
    var rv = null;
    var fs = _frameset();
    if (fs) {
      rv = getFrameDocumentByFrameNo( fs, _active_frameno( fs) );
    }
    return rv;
  }

  //--------

  function _show_frame () { // bring self to front
    var rc  = false;
    var bo  = false;
    var fs  = _frameset();
    var row = "",
        sep = "";

    if (fs) {
      for (var i = fs.childNodes.length-1; i >= 0; --i) {
        if (isFrameTag( fs.childNodes[ i]) && fs.childNodes[ i].contentWindow == self) {
          bo = true; break;
        }
      }
      if (bo) {
        for (var j = 0; j < i; j++, sep = ",")
          row += sep + "0";
        row += sep + "*";
        j++;
        for (; j < fs.childNodes.length; j++)
          row += ",0";
        fs.setAttribute("rows", row);
        rc = true;
      }
    }
    return rc;
  } // _show_frame()

  //--------

  function _activate_frame ( in_fno ) { // activate self
    var rc = false;
    var f  = __rootwindow();
    var el, boStay = false;

    if (f) {
      if (in_fno == null) in_fno = __selfframe_no( f);
      if (f.myFrames && (el = f.myFrames._aFrame))
      {
//alert("el[in_fno].webguiSmartView_stay = '" + el[in_fno].webguiSmartView_stay + "'");
        if (!(el[in_fno] && el[in_fno].webguiSmartView_stay == true))
        {
//alert("Switch frames");
          f.myFrames.Actualize( in_fno, f.myFrames);
          f.myFrames.Activate( in_fno, f.myFrames);
//        f.mySessionInfo.RegisterFrame( "ITSFRAME" + (in_fno + 1));
          f.myFrames.CleanDocument( __otherframe_no( f, in_fno), f.myFrames);
        }
//else alert("Current frame stay");
      }
      rc = true;
    }

    return rc;
  }

  //--------

  function _getDimension ( out_width, out_height ) {
    var rc = false;
    var fs = _frameset();

    if (ITS_Frameset.itsframemgr) {
      rc = ITS_Frameset.itsframemgr.GetDimension( out_width, out_height);
    }
    else {
      out_width = out_height = 0;
    }
    return rc;
  } // _getDimension()

  //--------

  if (ITS_Frameset.itsrootwin == null)
    _frameset();

  if (ITS_Frameset.itsrootwin != null) {
    var myfno;
    var myframe;
    var myfocuswin;

    switch (in_action) {
      case "ROOT" :
      case "BASE" :
        rv = ITS_Frameset.itsrootwin;
        break;

      case "IS_ACTIVE" :
        rv = _is_active();
        break;

      case "FRAMESET" :
        rv = _frameset();
        break;

      case "FRAME" :
        rv = _active_frame();
        break;

      case "FRAMENO" :
        rv = _active_frameno( ITS_Frameset.itsframeset);
        break;

      case "FRAME_OTHER" :
        rv = _other_frame();
        break;

      case "FRAMENO_OTHER" :
        rv = __otherframe_no();
        break;

      case "FRAMEDOCUMENT" :
        rv = _active_frame_document();
        break;

      case "SHOWFRAME" :
        rv = _show_frame();
        break;

      case "ACTIVATEFRAME" :
        /*
          inout_parm1 contains frame no
          inout_parm2 ist true, when called from frameset
        */
        myfno = (inout_parm1 != null) ? inout_parm1 : __selfframe_no( ITS_Frameset.itsrootwin);
        if (ITS_Frameset.itsrootwin != self) {  // inside a frame
          rv = ITS_Frameset.itsrootwin.ITS_Frameset( "ACTIVATEFRAME", myfno, (inout_parm2 == true));
          break;
        }
        else {                                // inside frameset
          if (!inout_parm2) {                   // called from frame
            ITS_Frameset.activated = true;
            rv = _activate_frame( myfno);
            break;
          }
          else {                                // called from frameset
            if (!ITS_Frameset.activated) {
              rv = _activate_frame( myfno);
            }
            ITS_Frameset.activated = false;

            if (!inout_parm2) {
              rv = true;
              break;
            }
          }
        }
        // here no break but continue with FOCUS
      case "FOCUS" :
        myfno = (inout_parm1 != null) ? inout_parm1 : __selfframe_no( ITS_Frameset.itsrootwin);
        myframe = ITS_Frameset.itsrootwin.myFrames._aFrame[ myfno];
        mydoc   = ITS_Frameset.itsrootwin.myFrames._aFrameDocument[ myfno];
        if (myframe != null)                                       // new window opened?
          myfocuswin = myframe.webguiFocusWin;
        if (myframe != null && myframe.webguiHasPopup && mydoc) {  // dynpro has popups
          if (null != (myframe = mydoc.getElementsByName("webguiPopupWindow"+myframe.webguiHasPopup)[0])) {
            mydoc = getFrameDocumentByFrame( myframe);
            myframe = myframe.contentWindow;
          }
          else
            myframe = ITS_Frameset.itsrootwin.myFrames._aFrame[ myfno];    // ooups ?!?
        }
        if (myframe != null && myframe.ITS_Frameset && myframe.ITS_Frameset.dont_focus == false)
        {
          try {     // we need domain relaxation ...
            if (mydoc) {
              var atag     = mydoc.getElementsByTagName("a")[0];
              var inputtag = mydoc.getElementsByTagName("input");
              j = inputtag.length;
              if (j > 0) {
                for (i = 0; i < j; i++) {
                  if (inputtag[i].type != "hidden") {
                    inputtag[i].focus();
                    j = -1;
                    break;
                  }
                }
              }
              if (j >= 0 && atag)
              {
                atag.focus();
              }
            }

            if (myframe.webguiSetFocus)
              myframe.webguiSetFocus();
          } catch ( err) {}
        }
        if (myfocuswin)
          myfocuswin.focus();
        rv = true;
        break;

      // we don't want the ITS_Frameset("FOCUS") to be done
      case "DONT_FOCUS" :
          ITS_Frameset.dont_focus = true;
        break;

      case "DIMENSION" :
        rv = _getDimension( inout_parm1, inout_parm2);
        break;

      case "SET_TITLE" :
       /*
          Sets the base ITS frameset's title (for showing it in the browser title)
          inout_parm1 contains title to be set
        */
       if (inout_parm1 != null) {
         ITS_Frameset.itsrootwin.document.title = inout_parm1;
         rv = true;
       }
       break;

      case "CALL_ON" :
        /*
          inout_parm1 contains event, when the function will be called
                      valid events are ( "load" )
          inout_parm2 contains reference to user function to be called

          following parameters will be forwarded to the callback function (only up to three allowed!)
          ----
          use myCallbackHdl of ITS frameset
        */

        if (inout_parm1 && inout_parm2) {
          var arrparm = new Array( 3);
          for (i = 3, j = 0; i < argl; i++, j++) {
            if (j < 3)    // max. three parameters
              arrparm[ j] = arguments[ i];
          }
          if (self == ITS_Frameset.itsrootwin) {  // call from ITS frameset
            self.myCallbackHdl.RegisterHandler( inout_parm1, "callback", 1, inout_parm2, arrparm[0], arrparm[1], arrparm[2]);
          }
          else {                                  // call from dynpro page
            ITS_Frameset.itsrootwin.ITS_Frameset( "CALL_ON", inout_parm1, inout_parm2, arrparm[0], arrparm[1], arrparm[2]);
          }
        }

       break;

    } // switch

  } // if (ITS_Frameset.itsrootwin  == null)

  return rv;
}
ITS_Frameset.itsrootwin  = null;    // internal var: root window of ITS session
ITS_Frameset.itsframeset = null;    // internal var: reference to ITS frameset
ITS_Frameset.itsframemgr = null;
ITS_Frameset.activated   = false;   // internal var: used by ACTIVATEFRAME
ITS_Frameset.dont_focus  = false;   // internal var: used by DONT_FOCUS

