var
  WEBGUI_RESIZE_TIMEOUT = 250,
  WEBGUI_DISABLE_TIMEOUT = 500; //navigator.appVersion.indexOf("MSIE 6.0") > -1 ? 10 : 500; // abp 4-12-2002 hangs on some roundtrips with MSIE 6.0
var
  WEBGUI_DISABLE_CHECK = 10,
  WEBGUI_BUSY_PAGE = false,
  WEBGUI_RESIZE_WIDTH = 25;

var
  webguiSetBusyPage = WEBGUI_BUSY_PAGE,
  webguiIsBusy = false,
  webguiRefreshPage = true,
  webguiMessageLine = null,
  webguiNewWindowUrl = null,
  webguiNewWindowName = null,
  webguiUserArea = null,
  webguiDynpro = null,
  webguiFontWidth = 0,
  webguiFontHeight = 0,
  webguiLanguage = "",
  webguiTableLayout = false,
  webguiTimeoutId = 0,
  webguiStartDate = new Date(),
  webguiPerfOn = false,
  webguiPerfObjects = null,
  webguiTheme,
  webguiIsPopup,
  webguiFullScreenPopup,
  webguiModalNo,
  webguiLeanAndMean,
  webguiIsInactive,
  webguiOldSearchHelp,
  webguiIsResizable,
  webguiMenusl,

  webguiSelectedElementOld = null,
  webguiSearchhelpButton = null,
  webguiComboBox = null,
  webguiTSPulldownMenu = null,
  webguiStartupBanner = null,
  webguiStartupBannerText = null,
  shResultFieldRowIdx = null;

/*****************************************************************/
/** RTL stuff                                           quetzo ***/
/*****************************************************************/
var
 	RTLwebguiDynproBorder = null;


/*****************************************************************/
/** see NOTE below before adding a new input form element here ***/
/*****************************************************************/
var
  formMenuItemIdx= 0,
  formFocusfieldIdx = 1,
  formOkCodeIdx = 2,
  formFKeyIdx = 3,
  formSearchHelpIdx = 4,
  formControlIdx = 5,
  formEventIdx = 6,
  formEventPrmIdx = 7,
  formWebguiUserAreaHeight = 8,
  formWebguiUserAreaWidth = 9,
  formWebguiRenderTime = 10,
  formWebguiRequestTime = 11,
  formWebguiStartRequestTime = 12,
  /* 13 is left out for printing */
  formWebguiModalLeft = 14,
  formWebguiModalTop = 15,
  formDynproTypeIdx = 16,
  formWebguiModalWindow = 17,
  formWebguiCursorObj = 18,
  formWebguiCursorCol = 19;


/***
 *** NOTE:
 *** for netscape6 the input fields are often out of order, so this
 *** static indexing will not work.  These indices are set dynamically
 *** in the onload (in d_generator.js) for netscape in the function:
 *** webguiSetBaseInputIndices().  Please if you are adding any indices
 *** here, add them also to this function.  Thanks.
 ***/

// ============================================================================
// Utilities
// ============================================================================

function webguiSetDocumentName()
{
  CFWExeconFinalSizeHandlers();
  if (!window.name || window.name == "")
    window.name = "WebGuiDoc" ;
  return window.name;
}

function webguiGetDocumentName()
{
  return window.name;
}

//used by HTML Viewer to retrieve webgui document name
function webguiGetRootDocumentName ()
{
  var rootdocname = null;
  var parentframe = self;

  /* traverse back to root and determine first SAPGUI for HTML frame
   */

  // first, find previous SAPGUI for HTML frame
  while( parentframe != parentframe.parent && parentframe.parent.webguiGetRootDocumentName == null )
    parentframe = parentframe.parent;
  // and traverse back again
  if( parentframe != parentframe.parent && parentframe.parent.webguiGetRootDocumentName )
    rootdocname = parentframe.parent.webguiGetRootDocumentName();

  if (!rootdocname) {
    // if window is SAPGUI for HTML base window
    if( self.document.body.id.search(/^webguiBody\d?$/) != -1 && self.webguiGetDocumentName)
      rootdocname = webguiGetDocumentName();
  }
  return rootdocname;   // either null or name of root SAPGUI for HTML window
}

function webguiIsIE4()
{
  if (navigator.appVersion.indexOf("MSIE 4.0") != -1)
    return true;

  return false;
}

function webguiRedrawOnIE4(element)
{
    if (element && webguiIsIE4())
        element.insertAdjacentHTML("afterEnd", "");
}

function webguiNoting()
{
}

function webguiInitMenu()
{
  if (window.isMenu)
    startIt();
}

function getMainWindow()
{
  return self;
}

function webguiGetComboHTML(selectedItem,ds_name,special,sel_key,sel_value)
{
  var html = "" ;
  var ds_array ;
  var display_key = "";

  ds_array = eval(ds_name) ;
  if (ds_array==null)
    return("") ;

  if (webguicomboboxsortbykeys)
  {
    var add_empty = false;
    var preselected = false;
    var add_empty_value = "", add_empty_key = "";

    if (ds_array.length > 0)
    {
      // according to fewdropdown.cpp
      // do not sort with empty line, add at the end afterwards
      if (ds_array[ds_array.length-1][0] == "")
      {
        add_empty_key = ds_array[ds_array.length-1][0];
        add_empty_value = ds_array[ds_array.length-1][1];
        ds_array.length -= 1;
        add_empty = true;
      }
      ds_array.sort();
    }

    for ( i=0; i<ds_array.length; i++ )
    {
      if (webguicomboboxwkeys && ds_array[i][0])
        display_key = ds_array[i][0] + "&nbsp;&nbsp;";
      else
        display_key = ""

      if ((ds_array[i][0] == sel_key) && (ds_array[i][1] == sel_value))
      {
        preselected = true;
        html = html + "<option value=\"" + ds_array[i][0] + "\"" + " selected " + ">" + display_key + ds_array[i][1];
      }
      else
        html = html + "<option value=\"" + ds_array[i][0] + "\">" + display_key + ds_array[i][1];
    }

    if (add_empty)
    {
      ds_array.length += 1;
      ds_array[ds_array.length-1] = new Array(add_empty_key,add_empty_value);
      html = html + "<option ";
      if (!preselected)
        html = html + "selected ";
      html = html + "value=\"\">" + add_empty_value;
    }

    if (special == "X")
      html = html + "<option selected>" + selectedItem;

    return(html) ;
  }
  else
  {
    for ( i=0,count=0; i<ds_array.length; i+=2,count++ )
    {
      if (webguicomboboxwkeys && ds_array[i])
        display_key = ds_array[i] + "&nbsp;&nbsp;";
      else
        display_key = ""

      if ( count == selectedItem )
        html = html + "<option value=\"" + ds_array[i] + "\"" + " selected " + ">" + display_key + ds_array[i+1];
      else
        html = html + "<option value=\"" + ds_array[i] + "\">" + display_key + ds_array[i+1];
    }

    if (special == "X")
        html = html + "<option selected>" + selectedItem;

    return(html) ;
  }
}


// ============================================================================
// Perfomance Counters
// ============================================================================

function webguiPerfStart(objectName, objectClass)
{
  if (webguiPerfOn)
  {
    var
      o,
      now = new Date();

    if (webguiPerfObjects == null)
      webguiPerfObjects = new Array();

    o = new Object();
    o.objectName = objectName;
    o.objectClass = objectClass;
    o.startTime = now.valueOf();
    webguiPerfObjects[webguiPerfObjects.length] = o;
  }
}

function webguiPerfStop(objectName)
{
  if (webguiPerfOn)
  {
    var
      i,
      o = null,
      now = new Date();

    if (webguiPerfObjects != null)
    {
      for (i = 0; i < webguiPerfObjects.length; i++)
      {
        o = webguiPerfObjects[i];
        if (o.objectName == objectName)
        {
          o.endTime = now.valueOf();
          break;
        }
      }
    }
  }
}

function webguiPerfGetObjectHTML(idx)
{
  if (webguiPerfOn)
  {
    var
      o = null;

    if (webguiPerfObjects != null && idx < webguiPerfObjects.length)
    {
      o = webguiPerfObjects[idx];

      return "Class [" +
        o.objectClass + "] Instance [" +
        o.objectName +"] Rendering Time = " +
        (o.endTime - o.startTime);
    }
  }

  return "";
}

function webguiPerfGetHTML()
{
  var
    result = "";

  if (webguiPerfOn && webguiPerfObjects != null)
  {
    for (i = 0; i < webguiPerfObjects.length; i++)
    {
      result += webguiPerfGetObjectHTML(i);
      result += "<br>";
    }
  }

  return result;
}

function webguiPerfDisplay()
{
  if (webguiPerfOn && webguiPerfObjects != null)
  {
    document.body.innerHTML = webguiPerfGetHTML();
  }
}

function webguiPerfGetData()
{
  // Collect performance data
  if (document.webguiform)
  {
    var
      now = new Date();

    if (document.webguiform.elements[formWebguiRenderTime] &&
      document.webguiform.elements[formWebguiRenderTime].name.indexOf("~webgui")==0)
    {
      document.webguiform.elements[formWebguiRenderTime].value =
        now.valueOf() - webguiStartDate.valueOf();

      // window.status = "t(render) = " + document.webguiform.elements[formWebguiRenderTime].value;
    }

    if (document.webguiform.elements[formWebguiRequestTime] &&
      document.webguiform.elements[formWebguiRequestTime].name.indexOf("~webgui")==0)
    {
      if (document.webguiform.elements[formWebguiStartRequestTime] &&
        document.webguiform.elements[formWebguiStartRequestTime].name.indexOf("~webgui")==0)
      {
        if (document.webguiform.elements[formWebguiStartRequestTime].value > 0)
        {
          document.webguiform.elements[formWebguiRequestTime].value =
            now.valueOf() - document.webguiform.elements[formWebguiStartRequestTime].value;

          // window.status += " t(request) = " + document.webguiform.elements[formWebguiRequestTime].value;
        }
      }
    }
  }
}



// ============================================================================
// Events to ITS
// ============================================================================


//tj/2004-08-24/ overlay dynpro with transparent layer
function webguiCreateBusyDiv ( in_zindex )
{
  var bodytag  = document.getElementsByTagName("body");
  if (bodytag == null)
    bodytag = document.getElementsByTagName("frameset");   // hrmpf - some IACs just use framesets
  if (bodytag != null && (bodytag = bodytag[0]) != null) {
    var stopdiv  = document.createElement("div");
    stopdiv.setAttribute( "id", "ITSBusyDiv");
    if (in_zindex > 0)
      stopdiv.style.zIndex = in_zindex;
    bodytag.insertBefore( stopdiv, bodytag.firstChild);
  }
} // webguiCreateBusyDiv()


function webguiSetBusy()
{
  webguiIsBusy = true;

  if (!webguiSetBusyPage)
  {
    if (webguiRefreshPage)
    {
      var
        now = new Date(),
        startTime,
        count = 0;

      // Avoid submitting the request twice ("nervous finger")
      //tj/2004-08-24
      webguiCreateBusyDiv();

      /*/tj/2002-12-17/ busy with HCM menu2002 */
      toolbarLogo = document.getElementById("webguiWaitForResponse");
      if (toolbarLogo) {
        toolbarLogo.style.visibility = "visible";
      }

      toolbarLogo = document.getElementById("webguiToolbarLogo");
      if (toolbarLogo)
      {
        toolbarLogo.className = "WebguiBusyHeaderLogo";
      }

      startTime = now.valueOf();
      var is_ie60 = (navigator.appVersion.indexOf("MSIE 6.0") > -1);
      for (f = 0; f < document.forms.length; f++)
      { var form = document.forms[f];
        for (e = 0; e < form.elements.length; e++)
        { var elem = form.elements[e];
          if (is_ie60)
            elem.ContentEditable = false;
          else
            elem.disabled = true;
          count++;

          // If the form contains many elements disabling them
          // may take to much time. We stop disabling them
          // after a certain threshold.
          if ((count % WEBGUI_DISABLE_CHECK) == 0)
          { var diff;

            now = new Date();
            diff = now.valueOf() - startTime;

            if (diff > WEBGUI_DISABLE_TIMEOUT || diff < 0)
              break;
          }
        } // for (e)
      } // for (f)
    }

    return;
  }

  if (document.activeElement && document.activeElement != null && document.activeElement.blur)
  {
    if (document.activeElement.className && document.activeElement.className != "ListItem")
      document.activeElement.blur();
  }

  if (document.getElementById("webguiPage") != null )
    document.getElementById("webguiPage").style.visibility = "hidden" ;

  if ( webguiStartupBanner != null && webguiStartupBannerText != null )
  {
    webguiStartupBanner.innerHTML = webguiStartupBannerText  ;
    webguiStartupBanner.style.visibility = "visible" ;
  }

  if ( webguiSearchhelpButton != null )
    webguiSearchhelpButton.style.visibility = "hidden" ;
  if ( webguiComboBox != null )
    webguiComboBox.style.visibility = "hidden" ;
}

function webguiIsActive()
{
  return !webguiIsBusy && !webguiIsInactive;
}

function webguiResetForm()
{
  targetObject = eval('document.webguiform');

  if (targetObject)
  {
    targetObject.elements[formOkCodeIdx].value = "";
    targetObject.elements[formFocusfieldIdx].value = "";
    targetObject.elements[formFKeyIdx].value = "";
    targetObject.elements[formSearchHelpIdx].value = "";
    targetObject.elements[formMenuItemIdx].value = "";
    targetObject.elements[formControlIdx].value = "";
    targetObject.elements[formEventIdx].value = "";
    targetObject.elements[formEventPrmIdx].value = "";
    if (targetObject.elements[formWebguiUserAreaHeight] &&
      targetObject.elements[formWebguiUserAreaHeight].name.indexOf("~webgui")==0)
      targetObject.elements[formWebguiUserAreaHeight].value = "";
    if (targetObject.elements[formWebguiUserAreaWidth] &&
      targetObject.elements[formWebguiUserAreaWidth].name.indexOf("~webgui")==0)
      targetObject.elements[formWebguiUserAreaWidth].value = "";
    targetObject.elements[formDynproTypeIdx].value = "";
    targetObject.elements[formWebguiModalWindow].value = "";

    if(webguiModalNo>0 && !webguiFullScreenPopup)
      targetObject.target = "_parent";
    else
      targetObject.target = "_self";

    webguiSetBusyPage = WEBGUI_BUSY_PAGE;
    webguiIsBusy = false;
    webguiRefreshPage = true;
  }
}

function submitForm(params)
{
  var i, j, el, arr, par;
  var p, s; // parent, self/string

  if (!webguiIsActive())
    return;

  // INFOCTRL - is the timer set? We don't need it anymore.
  if (window.timerctrl_timer)
  {
    clearTimeout(window.timerctrl_timer);
  }

  targetObject = eval('document.webguiform');

  if (webguiDynpro && !webguiIsPopup)
    webguiGetDynproScrollPos();

  if ( targetObject.elements[formOkCodeIdx].value == "" )
  {
    if (document.toolbarform && document.toolbarform.elements["~ToolbarOkCode"])
    {
      targetObject.elements[formOkCodeIdx].value =
        document.toolbarform.elements["~ToolbarOkCode"].value;
    }

    if (targetObject.elements[formOkCodeIdx].value == "")
      targetObject.elements[formOkCodeIdx].value = "/0" ;
  }

  if (params)
  {
    if (targetObject.saveAction)
      targetObject.action = targetObject.saveAction;
    else
      targetObject.saveAction = targetObject.action;

    targetObject.action += "?";
    targetObject.action += params;
  }

  // Update performance data
  if (document.webguiform)
  {
    if (document.webguiform.elements[formWebguiStartRequestTime] &&
      document.webguiform.elements[formWebguiStartRequestTime].name.indexOf("~webgui")==0)
    {
      var
        now = new Date();

      document.webguiform.elements[formWebguiStartRequestTime].value = now.valueOf();
    }
  }

  /* Set positions of all modal windows
   */

  if ( targetObject)
  {
    par = self;
    while (par.webguiIsPopup != false && par != par.parent)
    {
      par = par.parent;
    }
    if (par.webguiIsPopup == false && typeof par.webguiOnLoad != "undefined" && (arr = par.webguiOnLoad.a_popups) != null)
    {
      for (i in arr)
      {
        if (arr[ i].popupdocument != null)
        {
          if (arr[ i].webguiModalNo != webguiModalNo)
          {
            el = targetObject.elements[ formWebguiModalLeft].cloneNode( true);
            el.name  = "~webguiModalPixelLeft[" + arr[ i].webguiModalNo + "]";
            try {
              el.value = arr[ i].popupdocument.webguiform.elements[ formWebguiModalLeft].value;
              targetObject.appendChild( el);
            }
            catch (err)
            {
              el = null;
            }
            el = targetObject.elements[ formWebguiModalTop].cloneNode( true);
            el.name  = "~webguiModalPixelTop[" + arr[ i].webguiModalNo + "]";
            try {
              el.value = arr[ i].popupdocument.webguiform.elements[ formWebguiModalTop].value;
              targetObject.appendChild( el);
            }
            catch (err)
            {
              el = null;
            }
          }
        }
      }
    } // if (par.webguiIsPopup == false ...)
  }   // if (document.webguiform) // set position of modal windows

  // set position for editing (step loop) - determine caret position
  if (document.webguiform)
  {
    var el = window.event ? window.event.srcElement : null;
    var l = 999;
    if (el == null)
    {
      el = document.webguiform.elements[formFocusfieldIdx].value;
      if (el)
        (el = document.getElementById(el)) || (el = document.getElementsByName(el)[0]);
    }
    if (el)
    {
      /*  determine cursor position
       */

      // Mozilla Firefox
      s = el.getAttribute("type");
      if (s && (s == "TEXT" || s == "TEXTAREA"))
      {
        if (el.selectionEnd)
          l = el.selectionEnd;
        else if (el.selectionStart)
          l = el.selectionStart;
      }

      // IE
      // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dhtmltechcol/cols/dnwebteam/webteam12032001.asp
      if (el.isTextEdit && ("input" == (s = el.tagName.toLowerCase()) || "textarea" == s))
      {
        var caretPos = document.selection.createRange();

        if (caretPos)
        {
          var mark = "~ITS~";
          var orig = el.value;
          var origMaxLength = el.maxLength;
          el.maxLength = el.maxLength + 5;
          caretPos.text = mark;
          l = el.value.search(mark);
          el.value = orig;
          el.maxLength = origMaxLength;
          if (l < 0)
            l = 0;
        }
      }

      if ( l != 999
         || ( ((l = el.getAttribute("value")) && (l = l.length))
            || (l = el.getAttribute("maxlength")) )
      )
      {
        document.webguiform.elements[formWebguiCursorCol].value = l;
        document.webguiform.elements[formWebguiCursorObj].value = document.webguiform.elements[formFocusfieldIdx].value;
      }
    }
  } // if (document.webguiform) -- determine caret position in input field


  //tj/ ~flickerfree
  if (self != parent && (!(webguiIsPopup && parent.parent == parent) || webguiFullScreenPopup)
    && self.webguiSmartView != null && self.webguiSmartView == true
    && (targetObject.target == null || targetObject.target == ""
      || targetObject.target == "_self" || targetObject.target == "WebGuiDoc"
      || (targetObject.target == "_parent" && webguiIsPopup)
       )
     )
  {

    if (webguiIsPopup && !webguiFullScreenPopup && targetObject.target != "_self") {
      p = parent.parent;
      s = parent;
    }
    else {
      p = parent;
      s = self;
    }

    if (p != null && p != s) {
                var f = p.myFrames;
                if (f != null && s.name.match(/^itsframe[0-9]_/)) {
                  var t = f.GetFrameName( f.GetNextRelFrame());
                  if (t) {
                    targetObject.target = t;
                    document.body.style.cursor = "wait";
                  }
                  else
                    targetObject.target = "_self";
                }
    }
  }
  //tj

  targetObject.submit();

  if (document.body && webguiDynpro && targetObject.target == "_self")
    document.body.style.cursor = "wait";

  webguiSetBusy();
}

function webguiRaiseOkCodeField()
{
  setOkCode(document.toolbarform.elements["~ToolbarOkCode"].value,'');
}

function setOkCode(FCode,FieldName,params)
{
  targetObject = eval('document.webguiform');
  targetObject.elements[formOkCodeIdx].value = FCode;
  if ( FieldName && FieldName != "" )
    targetObject.elements[formFocusfieldIdx].value = FieldName ;
  submitForm(params);
}

function webguiRaiseFKey(keyid)
{
  targetObject = eval('document.webguiform');

  // Special case for FKey 0 (Enter):
  // Send an OkCode-Event if the OkCode field is not empty
  if (keyid == 0)
  {
    if (document.toolbarform && document.toolbarform.elements["~ToolbarOkCode"])
    {
      if (document.toolbarform.elements["~ToolbarOkCode"].value != "")
        return webguiRaiseOkCodeField();
    }

  }

  targetObject.elements[formFKeyIdx].value = keyid ;

  submitForm();
}

function webguiRaiseSearchhelp(Field)
{
  if (webguiOldSearchHelp)
  {
    targetObject = eval('document.webguiform');
    targetObject.elements[formSearchHelpIdx].value = Field;

    submitForm();
  }
  else {
    webguiRaiseFKey(4);
  }
}

function raiseEvent(control, event, params)
{
  targetObject = eval('document.webguiform');
  targetObject.elements[formControlIdx].value = control ;
  targetObject.elements[formEventIdx].value = event;
  submitForm(params);
}

function webguiRaiseEvent(control, event, params, target)
{
  targetObject = eval('document.webguiform');
  if (targetObject)
    targetObject.target = target ;

  raiseEvent(control, event, params);
}

function webguiRaiseDataEvent(control, event, params, target)
{
  var
    oldTarget,
    oldRefreshPage,
    oldSetBusyPage;

  targetObject = eval('document.webguiform');
  targetObject.elements[formControlIdx].value = control ;
  targetObject.elements[formEventIdx].value = event;

  // Save old settings
  oldTarget = targetObject.target;
  oldSetBusyPage = webguiSetBusyPage;
  oldRefreshPage = webguiRefreshPage;

  if (target)
    targetObject.target = target;
  webguiSetBusyPage = false;
  webguiRefreshPage = false;

  submitForm(params);

  webguiRefreshPage = oldRefreshPage;
  webguiSetBusyPage = oldSetBusyPage;
  targetObject.target = oldTarget;
}

function webguiRaiseDynproDataEvent(control, dynproControlName, event, okcode, dynproControlType, target, params)
{
  if (!webguiIsActive())
    return;

  targetObject = eval('document.webguiform');
  targetObject.elements[formOkCodeIdx].value = okcode;
  targetObject.elements[formDynproTypeIdx].value = dynproControlType;

  if(params=="")
    params = "~webgui_name_dynprodata=" + dynproControlName;
  else
    params = "~webgui_name_dynprodata=" + dynproControlName + "&" + params;

  webguiRaiseDataEvent(control, event, params, target);
}

function webguiRaiseSelectTabStrip(Control, TabName, FCode, localTS, dynproControlName)
{
  if(localTS=="X")
  {
    if (!tsDataIFRAMEcreated)
      controlCreateDataIFRAME("tsData","display:none;","tabstrip","");

    webguiRaiseDynproDataEvent(Control, dynproControlName, "TabSelect", FCode, "TS", "tsData", "TabName=" + TabName);
    return;
  }

  targetObject = eval('document.webguiform');
  targetObject.elements[formOkCodeIdx].value = FCode;
  targetObject.elements[formControlIdx].value = Control ;
  targetObject.elements[formEventIdx].value = "TabSelect" ;

  // changing name of hidden values alters form elements collection
  // in NS61.  Add param to URL as workaround.
  //targetObject.elements[formEventPrmIdx].name = "TabName" ;
  //targetObject.elements[formEventPrmIdx].value = TabName ;

  submitForm("TabName="+TabName);
}

function webguiRaiseSelectTabStripFromMenu(Control, TabName, FCode, localTS, dynproControlName)
{
  if(localTS=="X")
  {
    if (!tsDataIFRAMEcreated)
      controlCreateDataIFRAME("tsData","display:none;","tabstrip","");

    webguiRaiseDynproDataEvent(Control, dynproControlName, "TabSelectFromMenu", FCode, "TS", "tsData", "TabName=" + TabName);
    return;
  }

  targetObject = eval('document.webguiform');
  targetObject.elements[formOkCodeIdx].value = FCode;
  targetObject.elements[formControlIdx].value = Control ;
  targetObject.elements[formEventIdx].value = "TabSelectFromMenu" ;
  // changing name of hidden values alters form elements collection
  // in NS61.  Add param to URL as workaround.
  //targetObject.elements[formEventPrmIdx].name = "TabName" ;
  //targetObject.elements[formEventPrmIdx].value = TabName ;

  submitForm("TabName="+TabName);
}

function webguiRaiseSelectMenuItem(menuitem)
{
  targetObject = eval('document.webguiform');
  targetObject.elements[formMenuItemIdx].value = menuitem;
  submitForm() ;
}

// ==========================================================
// Searchhelp Button
// ==========================================================

function webguiToggleVisibility (b,c,onoff)
{
  if ( b != null && c != null )
  {
    if ( onoff )
    {
      b.style.visibility = "visible" ;
      c.style.zIndex = 1 ;
    }
    else
    {
      b.style.visibility = "hidden" ;
      c.style.zIndex = 0 ;
    }
  }
}

// ==========================================================
// Event Handlers
// ==========================================================

function webguiIsFocusElement(element)
{
  if (!element)
    return false;

  if (element.tagName &&
      (element.tagName == "INPUT" || element.tagName == "SELECT") &&
      element.type.toUpperCase() != "HIDDEN")
    return true;

  if ( element.className &&
  (element.className == "label"
      || element.className == "labelHighlighted"
      || element.className == "labelSelected"
      || element.className == "labelHighlightedSelected"
      || element.className == "labelTable"
      || element.className == "labelTableSelected"
      || element.className == "labelTableHighlighted"
      || element.className == "labelTableHighlightedSelected"
      || element.className == "labelTableComboCtrl"
      || element.className == "noneditinput"
      || element.className == "noneditinputSelected"
      || element.className == "noneditinputHighlighted"
      || element.className == "noneditinputHighlightedSelected"))
  return true;
    return false;
}

// ==========================================================
// Event Handlers
// ==========================================================

function webguiDoScroll ()
{
}

function webguiDoKeyDown(evt)
{
  var e = null;

  if (evt || event)
  {
    e = new its_event(((evt != null)? evt : event));

    if (navigator.appVersion.indexOf("MSIE") != -1)  // only for MSIE
    {
      // remap function keys to prevent browser activity
      var kc = Number(e.keyCode);
      if (kc > 111 && kc < 124)   // pressed a function key?
      {
        kc += 400;
        e.event.keyCode = kc;
        e.cancel();
      } // if (kc)
    } // if (MSIE)
  }

  if (webguiIsActive() && e)
  {
    if (e.keyCode == "13")
    {
      // cancel default submit
      e.cancel();

      // Searchhelp result can be selected by
      // pressing "Enter"
      if (shResultFieldRowIdx)
        shResultTableSelect(true);
      else
        submitForm();
      return;
    }

    /* sk/20060711/suppress backspace on none editable elements to prevent
       unwanted server roundtrip and page has expired error
    */
    if (e.keyCode == "8")
    {
      if (e.target)
      {
        var type = e.target.type;
        if (!(e.target.nodeName == "INPUT" && type && (type == "text" || type == "password") ||
            e.target.nodeName == "TEXTAREA"))
        {
          e.cancel();
        }
      }
    }

    if (webguiIsKeyDisabled(e.event))
    {
      //window.status = "browser shortcut key disabled";
      e.cancel();
      return;
    }

    var vfcode = webguiKey2vfcode(e.event);
    if (vfcode != "")
    {
      if (vfcode == 4)
      {
        if (null != e.target)
        {
          e. cancel();
          if (e.target.tagName != "SELECT" && e.target.tagName != "DIV")
          {
            setOkCode("/"+vfcode, e.target.name);
          }
        }
      }
      else if (webguiIsActiveFCode("F"+vfcode))
      {
        e. cancel();
        if (e.target && e.target.name)
        {
          if (e.target.type != "radio")
          {
            setOkCode("/"+vfcode, e.target.name);
          }
          else
          {
            setOkCode("/"+vfcode, e.target.id);
          }
        }
        else
        {
          setOkCode("/"+vfcode);
        }
      }
      else if( vfcode == 10) // F10 -> menu
      {
        var menu = document.getElementById("NewMenuslBar");
        if (menu)
        {
          try {
  /* abp - don't open it right away, just put focus there.
            var firstChild = menu.firstChild;
            var e = document.createEventObject();
            e.setAttribute("keyCode", 40);
            firstChild.fireEvent("onKeyDown", e);
  */
            menu.firstChild.focus();
          } catch(exception) { status= exception.message ; }
        }
      }
      else if (vfcode == 22) // shift + F10
      {
        webguiDoContextMenu ();
      }
      else if (vfcode == 12 && webguiIsDialogboxPopup) {
        var closebut = document.getElementById("WebguiModalTitleBarClose");
        if (closebut)
          closebut.click();
      }
    }
  }
}

function webguiListDoHotSpotClick(e)
{
  if (!webguiIsActive())
    return;

  webguiDoClick(e, true);
  webguiListDoDblClick(e);
}

function rollOver(iconName)
{
  var
    iconStyle = eval("document.getElementById('" + iconName + "').style");

  iconStyle.borderTopColor = "#F7F9FB"; /*"#B8C1CC"; org. frog */
  iconStyle.borderRightColor = "#4B8BC7";
  iconStyle.borderBottomColor = "#4B8BC7";
  iconStyle.borderLeftColor = "#F7F9FB";
  /*iconStyle.background = "#BFBFBF";
  iconStyle.borderTopColor = "#D9D9D9";
  iconStyle.borderRightColor = "#A6A6A6";
  iconStyle.borderBottomColor = "#A6A6A6";
  iconStyle.borderLeftColor = "#D9D9D9";
  iconStyle.background = "#BFBFBF";*/   /* frog2002 */
}

function down(iconName)
{
  var
    iconStyle = eval("document.getElementById('" + iconName + "').style");

  iconStyle.borderTopColor = "#4B8BC7";
  iconStyle.borderRightColor = "#F7F9FB";
  iconStyle.borderBottomColor = "#F7F9FB";
  iconStyle.borderLeftColor = "#4B8BC7";
  /*iconStyle.borderTopColor = "#A6A6A6";
  iconStyle.borderRightColor = "#D9D9D9";
  iconStyle.borderBottomColor = "#D9D9D9";
  iconStyle.borderLeftColor = "#A6A6A6";
  iconStyle.background = "#B5B5B5";*/ /* frog2002 */
}

function up(iconName)
{
  var
    iconStyle = eval("document.getElementById('" + iconName + "').style");

  iconStyle.borderTopColor = "#B8C1CC";
  iconStyle.borderRightColor = "black";
  iconStyle.borderBottomColor = "black";
  iconStyle.borderLeftColor = "#B8C1CC";
  /*iconStyle.borderTopColor = "#D9D9D9";
  iconStyle.borderRightColor = "#A6A6A6";
  iconStyle.borderBottomColor = "#A6A6A6";
  iconStyle.borderLeftColor = "#D9D9D9";
  iconStyle.background = "#BFBFBF";*/ /* frog2002 */
}

function rollOff(iconName)
{
  var
    iconStyle = eval("document.getElementById('" + iconName + "').style");

  iconStyle.borderWidth = "1px";            /* frog2002 */
  iconStyle.borderColor = iconStyle.backgroundColor;  /* frog2002 */
  /*iconStyle.borderTopColor = "#BFBFBF";
  iconStyle.borderRightColor = "#BFBFBF";
  iconStyle.borderBottomColor = "#BFBFBF";
  iconStyle.borderLeftColor = "#BFBFBF";
  iconStyle.background = "#BFBFBF";*/ /* frog2002 */
}

function WebguiDynproCheckBox(checkbox)
{
  var
    checked = checkbox.getAttribute("checked");
  if (checked==1)
  {
    checkbox.src = WebguiDynproCheckBoxUnSel;
    checkbox.setAttribute("checked", 0);
  }
  else
  {
    checkbox.src = WebguiDynproCheckBoxSel;
    checkbox.setAttribute("checked", 1);
  }
}

function RaiseTCJumpRowEvent(pTableName,event)
{
  if (event.keyCode == 13)
  {
    // cancel default submit
    event.cancelBubble = true;
    event.returnValue = false;

    raiseEvent(pTableName,'JumpRow');
  }
}

function RaiseSHJumpRowEvent(fieldname, controlid)
{
  var ifield,ifieldvalue, param;

  ifield = document.getElementById(fieldname);
  if (ifield)
  {
    ifieldvalue = ifield.value;
    param = "jumprow=" + ifieldvalue;
    window.raiseEvent(controlid, 'JumpRow', param);
  }
}

function setOptionSelected(element)
{
  if (element && element.options && element.selectedIndex >=0)
  {
    if (element.options[element.selectedIndex].specialItem)
    {
      if (!element.clicked)
      {
        //element.options[0].selected = true;
        element.clicked = true;
		//element.onchange();
      }
    }
  }

  if (accessibility)
    webguiDoFocus(element);
}

function webguiIsKeyDisabled(event)
{
  // list of disabled keyboard shortcuts
  //
  // alt  + left arrow(37),right arrow(39),Home(36)
  // ctrl + I(73),W(87),E(69),D(68),H(72),N(78)

  var keyDisabled = false;

  if (event.altKey)
  {
    if ( event.keyCode == "37" ||
         event.keyCode == "39" ||
         event.keyCode == "36" )
      keyDisabled = true;
  }
  else if (event.ctrlKey)
  {
    if ( event.keyCode == "73" ||
         event.keyCode == "87" ||
         event.keyCode == "69" ||
         event.keyCode == "68" ||
         event.keyCode == "72" ||
         event.keyCode == "78" )
      keyDisabled = true;
  }

  return keyDisabled;
}

function webguiKey2vfcode(event)
{
  var vfcode = "";

  // Only mapping virtual function code 1-69
  // (shift and/or ctrl) + F1(112)-F12(123)
  //
  //
  // Special: ESC(27)
  //      ctrl + S(83)
  //      ctrl + shift + 0(48)

//status = "vfcode = " + vfcode + "\nevent.keyCode = " + event.keyCode;

  if ( !( (event.keyCode >= "112" && event.keyCode <= "123")
      || (event.keyCode >= "512" && event.keyCode <= "523")
      ||  event.keyCode == "83"
      ||  event.keyCode == "48"
      ||  event.keyCode == "27"
      )
    )
    return;

  var kc = Number( event.keyCode);
  if (!(event.altKey && event.ctrlKey))
  {
    if (event.shiftKey && event.ctrlKey)
    {
      if (kc >= 512 && kc <= 523)
        vfcode = "" + (kc - 475);
      else if (kc >= 112 && kc <= 123)
        vfcode = "" + (kc - 75);
      else if (kc == 48)
        vfcode = "22";
    }
    else if (event.ctrlKey)
    {
      if (kc >= 512 && kc <= 523)
        vfcode = "" + (kc - 487);
      else if (kc >= 112 && kc <= 123)
        vfcode = "" + (kc - 87);
      else if (kc == 83)
        vfcode = "11";
    }
    else if (event.shiftKey)
    {
      if (kc >= 512 && kc <= 523)
        vfcode = "" + (kc - 499);
      else if (kc >= 112 && kc <= 123)
        vfcode = "" + (kc - 99);
    }
    else
    {
      if (kc >= 512 && kc <= 523)
        vfcode = "" + (kc - 511);
      else if (kc >= 112 && kc <= 123)
        vfcode = "" + (kc - 111);
      else if (kc == 27)
        vfcode = "12";
    }
  }
  return vfcode;
}

function webguivfcode2key(vfcode)
{
  var key;

  if (!vfcode) return;

  vfcode = parseInt(vfcode);
  if ((vfcode >= 37 && vfcode <= 48) || vfcode == 22)
  {
    if (vfcode == 37)
      key = "F1";
    else if (vfcode == 38)
      key = "F2";
    else if (vfcode == 39)
      key = "F3";
    else if (vfcode == 40)
      key = "F4";
    else if (vfcode == 41)
      key = "F5";
    else if (vfcode == 42)
      key = "F6";
    else if (vfcode == 43)
      key = "F7";
    else if (vfcode == 44)
      key = "F8";
    else if (vfcode == 45)
      key = "F9";
    else if (vfcode == 46)
      key = "F10";
    else if (vfcode == 47)
      key = "F11";
    else if (vfcode == 48)
      key = "F12";
    else if (vfcode == 22)
      key = "0"

    return "Ctrl+Shift+" + key;
  }
  else if (vfcode >= 25 && vfcode <= 36)
  {
    if (vfcode == 25)
      key = "F1";
    else if (vfcode == 26)
      key = "F2";
    else if (vfcode == 27)
      key = "F3";
    else if (vfcode == 28)
      key = "F4";
    else if (vfcode == 29)
      key = "F5";
    else if (vfcode == 30)
      key = "F6";
    else if (vfcode == 31)
      key = "F7";
    else if (vfcode == 32)
      key = "F8";
    else if (vfcode == 33)
      key = "F9";
    else if (vfcode == 34)
      key = "F10";
    else if (vfcode == 35)
      key = "F11";
    else if (vfcode == 36)
      key = "F12";

    return "Ctrl+" + key;
  }
  else if (vfcode >= 13 && vfcode <= 24)
  {
    if (vfcode == 13)
      key = "F1";
    else if (vfcode == 14)
      key = "F2";
    else if (vfcode == 15)
      key = "F3";
    else if (vfcode == 16)
      key = "F4";
    else if (vfcode == 17)
      key = "F5";
    else if (vfcode == 18)
      key = "F6";
    else if (vfcode == 19)
      key = "F7";
    else if (vfcode == 20)
      key = "F8";
    else if (vfcode == 21)
      key = "F9";
    else if (vfcode == 23)
      key = "F11";
    else if (vfcode == 24)
      key = "F12";

    return "Shift+" + key;
  }
  else
  {
    if (vfcode == 11)
      return "Ctrl+S";
    else if (vfcode == 0)
      return "Enter";
    else if (vfcode > 0 && vfcode < 13)
      return "F" + vfcode;
    else
      return "";
  }
}

function webguiIsActiveFCode(vfcode)
{
  var i;

  //tj/2002-11-26/ enable searchhelp in popups
  if (vfcode == "F4")
    return true;

  if (vfcode && arrMenu_FM)
  {
    for (i=5; i<arrMenu_FM.length;i+=6)
    {
      if (arrMenu_FM[i] == vfcode)
        return true;
    }
    return false;
  }
}

function webguiAnnounceError( iframeName, errorHTML )
{
  if(!iframeName || iframeName=="")
    return;

  errorIFrame = document.getElementById(iframeName);

  if(!errorIFrame)
    return;

  if(errorIFrame.style.display!="none")
    return;

  webguiIsBusy = false;
  webguiRaiseOkCodeField();
}


//<!-- Javascript event subscription /tj/2002-01-03 ---------------- -->

// Constructors
//

function webguiJSEv()
{ this.ar_eventlist       = new Array();
  // functions
  this.getEvObjIdx      = webguiJSEv_getEvObjIdx;
  this.getEvObj       = webguiJSEv_getEvObj;
  this.getEventCallbackFuncs  = webguiJSEv_getEventCallbackFuncs;
  return;
} // webguiJSEv()

function webguiJSEv_EvObj( i_jsevent, i_callbackfunc )
{ this.jsevent      = i_jsevent.toLowerCase();
  this.ar_callbackfuncs = new Array();
  if (i_callbackfunc)
    this.ar_callbackfuncs[0] = i_callbackfunc;
  return;
} // webguiJSEv_EvObj()

// Public Interface Functions
//
function webguiJSEv_DoOnEvent( i_jsevent )
{ var rc = true,
    rc_tmp;
  var ar_callbackfuncs = this.getEventCallbackFuncs( i_jsevent.toLowerCase());
  if (ar_callbackfuncs) {
    var l = this.ar_eventlist.length;
    for (i = 0; i < l; i++) {
      if (ar_callbackfuncs[ i] != null)
        rc_tmp = eval( ar_callbackfuncs[ i]);
      if (rc_tmp == false) rc = false;
    }
  } // if (ar_event)
  return rc;
} // webguiJSEv_DoOnEvent()

function webguiJSEv_Subscribe( i_jsevent, i_callbackfunc )
{ var ar_callbackfuncs = this.getEventCallbackFuncs( i_jsevent);
  if (!ar_callbackfuncs) {
    var idx = this.ar_eventlist.length;
    this.ar_eventlist[ idx] = new webguiJSEv_EvObj( i_jsevent, i_callbackfunc );
  } // if (!ar_callbackfuncs)
  else {
    var l = ar_callbackfuncs.length;
    var bo_found = false;
    for (i = 0; i < l; i++)
      if (ar_callbackfuncs[ i] == i_callbackfunc) {
        bo_found = true;
        break;
      }
    if (!bo_found)
      ar_callbackfuncs[ i] = i_callbackfunc;
  } // else (ar_callbackfuncs)
} // webguiJSEv_Subscribe()

function webguiJSEv_Unsubscribe( i_jsevent, i_callbackfunc )
{ var ar_callbackfuncs = this.getEventCallbackFuncs( i_jsevent);
  if (ar_callbackfuncs) {
    var l = this.ar_eventlist.length;
    for (i = 0; i < l; i++)
      if (ar_callbackfuncs[ i] == i_callbackfunc)
        ar_callbackfuncs[ i] = null;
  } // if (ar_event)

} // webguiJSEv_Unsubscribe()

function webguiJSEv_ClearEvent( i_jsevent )
{ var evObjIdx = this.getEvObjIdx( i_jsevent);
  if (evObjIdx != -1) {
    this.ar_eventlist[evObjIdx] = null;
  } // if (ar_event)

} // webguiJSEv_ClearEvent()

// Internal Functions
//
function webguiJSEv_getEvObjIdx( i_jsevent )
{ var bo_found = false;
  var l = this.ar_eventlist.length;
  for (i = 0; i < l; i++)
    if (this.ar_eventlist[i] != null && this.ar_eventlist[i].jsevent == i_jsevent) {
      bo_found = true;
      break;
    }
  if (bo_found)
    return( i);
  else
    return( -1);
} // webguiJSEv_getEvObjIdx()

function webguiJSEv_getEvObj( i_jsevent )
{ var evObjIdx = this.getEvObjIdx( i_jsevent);
  if (evObjIdx != -1)
    return( this.ar_eventlist[evObjIdx]);
  else
    return( false);
} // webguiJSEv_getEvObj()

function webguiJSEv_getEventCallbackFuncs( i_jsevent )
{ var evObj = this.getEvObj( i_jsevent );
  if (evObj)
    return( evObj.ar_callbackfuncs);
  else
    return( false);
} // webguiJSEv_getEventCallbackFuncs()

webguiJSEv.prototype.Subscribe    = webguiJSEv_Subscribe;
webguiJSEv.prototype.Unsubscribe  = webguiJSEv_Unsubscribe;
webguiJSEv.prototype.ClearEvent   = webguiJSEv_ClearEvent;
webguiJSEv.prototype.DoOnEvent    = webguiJSEv_DoOnEvent;

var webguiJSEvent = new webguiJSEv();


//<!-- Javascript event subscription /tj/2002-01-03 ---------------- -->

//sw/2002-8-13/icon for input required field
function input_icon( in_id, in_action )
{
 var field = document.getElementById(in_id);
 if (field.value == "") {
    if (in_action == "1")
    {
        field.style.backgroundImage  = "";
    }
    else {
        field.style.backgroundImage  = "url(" + webguiMimeURL + "/webgui/"+webguiTheme+"/images/checkbox/edit_input_field.gif)";
    }
 }
 return true;
}

// abp 07.08.2003
var GAR_depth = 0;
var GAR_startTime;
function getAttributeRecursive(obj, attrib)
{
  if (obj.getAttribute(attrib))
  {
    GAR_depth = 0;
    return obj;
  }
  else if (obj.children.length > 0)
  {
    if (GAR_depth == 0) {
      GAR_startTime = new Date(); // first time in... set time
    }
    else if ((new Date()) - GAR_startTime > 7000) {
      GAR_depth = 0;
      return null;
    }
    var temp;
    for (i = 0; i < obj.children.length; i++)
    {
      GAR_depth++;
      temp = getAttributeRecursive(obj.children[i], attrib);
      if (temp)
      {
        GAR_depth = 0;
        return temp;
      }
    }
  }
  else
    return null;
}

function skipToolbar()
{
  var toolbar = document.getElementById("menuslToolbarEnd");
  if (toolbar)
    toolbar.focus();
}

// -----------------------------------------------------------------------------
// check for negative values as some style attributes (e. g. height) could not
// become negative
// -----------------------------------------------------------------------------
function checkNotNegative(val)
{
    if (val < 0)
        return 0;
    return val;
}

function checkbox_click(objectname)
{
  var o = document.getElementsByName(objectname);
  var l = o.length;
  if (l > 0)
  {
    o[l-1].click();
    try { o[l-1].focus(); } catch(e) {}
  }
}

function radiobutton_click(objectname)
{
  var o = document.getElementById(objectname);
  if (o)
  {
    o.click();

    o.checked=true;
    o.parentElement.className="labelSelected";

    try { o.focus(); } catch(e) {}
  }
}

function WebGUISetControlFocus( controlid)
{
    var cid = controlid.split("." );
    if (cid[1])
    {
        var elemns = document.getElementsByName("~controlfocusid");
        if (elemns && elemns.length > 0)
            elemns[0].value = cid[1];
    }
}
