/**
 * This file contains proprietary information of Cardiff Software.
 * Copying or reproduction without prior written approval is prohibited.
 * Copyright (c) 1999-2004 Cardiff Software, Inc. All rights reserved.
 *
 * This file contains Global JavaScript functions.
 *
 * @author Igor Shulika
 * @version 3.0
 * @since LiquidOffice 2.0
 */

/**
 * Global variables:
 */
var menuFlag       = null;
var menuPrefix     = "menu_";
var helpPath       = null;
var servletPath    = null;
var contextPath    = null;
var keyPress       = null;
var app_window     = null;
var bJScript       = true;
var selectID       = null;
var selectedRowCSS = null;
var g_sAlphaSet    = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕØÙÚÛÝÞàáâãåæçèéêëìíîïðñòóôõøùúûýþ";
var g_LocalSet     = "ÄÖÜäöüß";
var g_sNumSet      = "0123456789";
var g_sRealSet     = "_-.,:/";
var g_sSpace       = " ";
var g_cNumeric     = 1; // binary = 0001
var g_cAlpha       = 2; // binary = 0010
var g_cReal        = 4; // binary = 0100
var g_cSpace       = 8; // binary = 1000

/**
 * The onkeypress event occurs when a key 'Enter' is pressed and released over an element.
 * @param  frmRecords ( Object )
 * @param  frmNavigator ( Object )
 * @return true or false, to submit Tag's HTML form by press key 'Enter'
 */
function onKeyPressEnter( frmRecords, frmNavigator ){

  var bReturn = false;

  if( keyPress != null ){
    // SEARCH
    if ( keyPress == "search" ){
      bReturn = submitSearch( frmRecords );
    }
    // NAVIGATOR
    if ( keyPress == "navigator" ){
      bReturn = onCSJumpToPage( frmRecords, frmNavigator, null );
    }
    // VALIDATE EMAIL
    if ( keyPress == "validatemail" ){
      bReturn = exeAction( frmRecords, "OK" );
    }
  }

  return bReturn;
}

/**
 * validates that a form field contains only the approprite character types:
 * Alpha, Numeric, or AlphaNumeric
 * @param  checkStr ( STRING ) a value from Form field.
 * @param  checkSet ( Integer )
 * @return boolean
 */
function validateChrSet( checkStr , checkSet ) {
  var bValid=true;
  for(var i = 0; i < checkStr.length; i++){
    var ch=checkStr.charAt(i);
    var itemOf=0;
    var j=0;
    if(itemOf==0){
      for(j = 0; j < g_sNumSet.length; j++){
        if(ch == g_sNumSet.charAt(j)){
          itemOf = g_cNumeric;  // 0001
          break;
        }
      }
    }
    if(itemOf == 0){
      for(j = 0; j < g_sAlphaSet.length; j++){
        if(ch == g_sAlphaSet.charAt(j)){
          itemOf = g_cAlpha;    // 0010
          break;
        }
      }
    }
    if(itemOf == 0){
      for(j = 0; j < g_sRealSet.length; j++){
        if(ch == g_sRealSet.charAt(j)){
          itemOf = g_cReal;     // 0100
          break;
        }
      }
    }
    if(itemOf == 0){
      for(j = 0; j < g_sSpace.length; j++){
        if(ch == g_sSpace.charAt(j)){
          itemOf = g_cSpace;     // 1000
          break;
        }
      }
    }
    if(!(itemOf & checkSet)){
      bValid = false;
      break;
    }
  }
  return(bValid);
}

/**
 * Validates an Email address.
 * @param  email ( STRING ) a value from HTML form's field.
 * @return boolean
 */
function validateEmail( email ) {
  invalidChars = "";

  if (email == "") { return false; }

  for (i=0; i < invalidChars.length; i++) {	// does it contain any invalid characters?
    badChar = invalidChars.charAt(i);
    if (email.indexOf(badChar,0) > -1) { return false; }
  }

  atPos = email.indexOf("@",1);	    // there must be one "@" symbol
  if (atPos == -1) { return false; }

  if (email.indexOf("@",atPos+1) != -1) { return false;}
  periodPos = email.indexOf(".",atPos);

  if (periodPos == -1) { return false; }
  if (periodPos+3 > email.length){ return false; }

  return true;
}

/**
 * Downloads and installs the Java Runtime Environment.
 * @return false
 */
function installWebStart(){

  detectBrowser();

  if ( navigator.OS.indexOf('win') != -1 ) {
    window.location.href = "../install/jre/windows/j2re-1_4_2_03-windows-i586-p.exe";
    if ( navigator.org.indexOf('microsoft') != -1 ) {
      window.setTimeout( "window.close();", 2000 );
    }
  } else {
    window.location.href = "http://www.cardiff.com/products/extensions/getjaws";
  }
  return false;
}

/**
 * Gets time zone.
 * @return ( int ) Time Zone
 */
function getTimeZone() {
  var newDate = new Date();
  var sTz = 0 - (newDate.getTimezoneOffset() / 60);
  return sTz;
}

/**
 * Toggle Checkbox Group
 * Toggle the state of the form's checkboxes with the given name
 * to the given value
 */
function ToggleCheckboxGroup(frm, boxName, value){
  for (var i=0; i < frm.elements.length; i++) {
    var e = frm.elements[i];
    if (e.name == boxName){
      e.checked = value;
    }
  }
}

/**
 * Removes a preview HTML object.
 * @param id ( String ) the value of object ID.
 */
function removePreview( id ) {
  if (id != null && 0 < id.length){
    var elem = null;
    elem = document.getElementById( id );
    if (elem != null){
      elem.style.display = "none";
    }
  }
}

/**
 * Displays a preview HTML object.
 * @param id ( String ) the value of object ID.
 */
function displayPreview( id ) {
  if (id != null && 0 < id.length){
    var elem = null;
    elem = document.getElementById( id );
    if (elem != null){
      elem.style.display = "";
    }
  }
}

/**
 * Removes CSS style 'fontWeight' from HTML table row in the Inbox.
 * @param  id ( String ) the value of row ID.
 */
function removePreviewNote( id ) {
  if (id != null && 0 < id.length){
    var elem = null;
    elem = document.getElementById( id );
    if (elem != null){
      elem.style.fontWeight = "normal";
      removePreview(id + "_note");
    }
  }
}

/**
 * Exchanges a column in records table.
 * @param frm - HTML Object Form
 * @param columnName - String
 * @return false, to prevent the calling ahref
 */
function exchangeColumn( frm, columnName ){
  if ( columnName=="subject" ){
    if ("undefined" != typeof(frm) && frm.DFS__UseSubject ) {
      frm.DFS__UseSubject.value = frm.DFS__UseSubject.value=="0" ? "1" : "0";
    }
    frm.submit();
  }
  return false;
}


//
//    SORT BY  FUNCTIONS  ****************************************************************************************
//


/**
 * Validates all HTML form's object(s) before submit HTML form.
 * @param  frm ( HTML Object )
 */
function checkBeforeSubmitSortBy( frm ){
  return true;
}

/**
 * Sorts by receive parameter
 * @param frm Object Form
 * @param value String
 * @return return false, to prevent the calling ahref
 */
function SortBy( frm, value ) {
  if ( value == frm.DFS__OrderBy.value ){
    if (frm.DFS__OrderAscending.value == 0){
      frm.DFS__OrderAscending.value = 1;
    }else{
      frm.DFS__OrderAscending.value = 0;
    }
  }else{
    frm.DFS__OrderBy.value = value;
    frm.DFS__OrderAscending.value = 1;
  }
  if(frm.DFS__OrderBy.value==""){
    frm.DFS__OrderAscending.value = "";
  }
  if ( checkBeforeSubmitSortBy( frm ) ){
    frm.submit();
  }
  return false;
}



//
//    SELECT ITEM  FUNCTIONS  ****************************************************************************************
//



/**
 * Selects an item.
 * @param  id ( String ) the value of row ID.
 */
function selectItem( id ) {
  if (id != null && 0 < id.length){
    var elem = null;
    elem = document.getElementById( id );
    if (elem != null){
      unselectItem();
      elem.className = selectedRowCSS;
      selectID = id;

      var refreshElem = null;
      refreshElem = document.getElementById( "refreshiconcell" );
      if (refreshElem != null){
        refreshElem.className = "bold_refreshicon_buttonpanel";
      }

    }
  }
}

/**
 * Unselects a selected item.
 */
function unselectItem() {
  if ( selectID != null ) {
    if ( fArray && fArray!=null ){
      for (var j=0; j < fArray.length; j++) {
        if (fArray[j][0] == selectID  ) {
          elem = document.getElementById( selectID );
          if (elem != null){
            var n = fArray[j].length - 1;
            elem.className = fArray[j][n];
          }
        }
      }
    }
  }
}






//
//    OPEN  WINDOW  FUNCTIONS ****************************************************************************************
//


/**
 * Checks app_window variable before using method window.open().
 */
function beforeWindowOpen(){
  if ( (app_window != null) && !app_window.closed ){
    app_window.close();
    app_window = null;
  }
}

/**
 * Checks app_window variable after using method window.open().
 */
function afterWindowOpen(){
  if ( (app_window != null) && !app_window.closed ){
    if (app_window.opener == null){
      app_window.opener = self;
    }
    app_window.focus();
  }
}

/**
 * Closes current window.
 */
function Close_window() {
  if ( (app_window != null) && !app_window.closed ){
    app_window.close();
    app_window = null;
  }
}

/**
 * Opens a new window.
 * @param   url
 * @return  app_window
 */
function IntermediateWindow( url , width , height , scrollbars , resizable ) {
  beforeWindowOpen();
  var x = screen.availWidth/2 - 150;
  var y = screen.availHeight/2 - 150;
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=' + scrollbars + ',resizable=' + resizable + ',left=' + x + ',top=' + y + ',height=' + height + ',width=' + width ;
  app_window = window.open( url, "Intermediate", _info );
  afterWindowOpen();
  return app_window;
}

/**
 * Opens new window showing info about Cardiff LiquidOffice.
 * @return false, to prevent the calling ahref
 */
function openAbout(){
  beforeWindowOpen();
  var width = 380;
  var height = 410;
  var url = contextPath + "jsp/" + "about.jsp";
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openAbout', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing Add Email view.
 * @param mode ( String )
 * @return false, to prevent the calling ahref
 */
function openAddEmail( mode ){
  beforeWindowOpen();
  var width = 350;
  var height = 140;
  var url = contextPath + "jsp/addemail.jsp?DFS__Callback=setUserInfo&DFS__Mode=" + mode;
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openAddEmail', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens a attach item from the list of attachments for a choosing form.
 * @param isHtml ( boolean ) True if attachment is html link to some web sites.
 * @param htmlURL ( String ) value of html url for current attachment.
 * @param eventID ( String ) value of event ID for current form.
 * @param attachID ( String ) value of attach ID for current attachment.
 * @return false, to prevent the calling ahref
 */
function openAttachItem( isHtml, htmlURL, eventID, attachID ){
  if ( isHtml ){
    URL = htmlURL;
  } else {
    URL = servletPath + "?DFS__Action=RouteViewAttachments&DFS__EventID=" + eventID + "&DFS__AttachID=" + attachID;
  }
  window.open( URL, 'Attachment', "" );
  return false;
}

 /**
 * Opens calendar.
 * @param nMonth ( Integer )
 * @param nDay ( Integer )
 * @param nYear ( Integer )
 * @return false, to prevent the calling ahref
 */
function openCalendar( nMonth, nDay, nYear ){
  beforeWindowOpen();
  var width = 250;
  var height = 215;
  var url = contextPath + "jsp/calendar.jsp?month=" + nMonth + "&day=" + nDay + "&year=" + nYear;
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,height=' + height + ',width=' + width;
  app_window = window.open( url, "calendar", _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing info about Cardiff LiquidOffice.
 * @return false, to prevent the calling ahref
 */
function openHelp( url ){
  beforeWindowOpen();
  var width = 600;
  var height = 600;
  var x = screen.availWidth/width;
  var y = screen.availHeight/height;
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,left=' + x + ',top=' + y + ',height=' + height + ',width=' + width;
  app_window = window.open( url, 'openHelp', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing all info events for particular Event ID
 * @param formGUID ( String )
 * @return false, to prevent the calling ahref
 */
function openFormInfo( formGUID ){
  beforeWindowOpen();
  var width = 460;
  var height = 285;
  var url = servletPath + "?DFS__Action=GetFormInfo" + "&DFS__FormGUID=" + formGUID + "&DFS__Client=JSP";
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openInfo', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing all notes for particular Event ID.
 * @param frm ( HTML Object - Form )
 * @param trackName ( String )
 * @param trackId ( String )
 * @return false, to prevent the calling ahref.
 */
function openNote( frm, trackName, trackId ){
  beforeWindowOpen();
  var width = 305;
  var height = 300;
  var x = screen.availWidth/width;
  var y = screen.availHeight/height;
  var url = servletPath + "?DFS__Action=RouteGetNotes" + "&" + trackName + "=" + trackId + "&DFS__DisplaySize=0&DFS__Client=JSP";
  if ( "undefined" != typeof(frm) && frm.DFS__UseSubject ){
    url += "&DFS__UseSubject=" + frm.DFS__UseSubject.value;
  }
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,left=' + x + ',top=' + y + ',height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openNote', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing list of all attachments for particular Event ID.
 * @param frm ( HTML Object - Form )
 * @param eventID ( String )
 * @return false, to prevent the calling ahref.
 */
function openListAttachments( frm, eventID ){
  beforeWindowOpen();
  var width = 663;
  var height = 335;
  var url = servletPath + "?DFS__Action=RouteListAttachments" + "&DFS__EventID=" + eventID + "&DFS__Client=JSP";
  if ( "undefined" != typeof(frm) && frm.DFS__UseSubject ){
    url += "&DFS__UseSubject=" + frm.DFS__UseSubject.value;
  }
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openAttachmentsList', _info );
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing list of all attachments for particular Event ID.
 * @param frm ( HTML Object - Form )
 * @param eventID ( String )
 * @return false, to prevent the calling ahref.
 */
function checkListAttachments( frm, eventID ){
  beforeWindowOpen();
  var width = 720;
  var height = 485;
  var url = servletPath + "?DFS__Action=RouteCheckListAttachments&DFS__EventID=" + eventID + "&DFS__FromFolders=1" + "&DFS__Client=JSP";
  if ( "undefined" != typeof(frm) && frm.DFS__UseSubject ){
    url += "&DFS__UseSubject=" + frm.DFS__UseSubject.value;
  }
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openAttachmentsList', _info );
  afterWindowOpen();
  return false;
}

/**
 * Opens a new window for searching users.
 * @param url ( String )
 * @return app_window
 */
function browseUsers( url ) {
  beforeWindowOpen();
  var width = 720;
  var height = 380;
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width ;
  app_window = window.open( url , "Browse", _info );
  afterWindowOpen();
  return app_window;
}

/**
 * Opens new window showing all trace events for particular Event ID
 * @param frm ( HTML Object - Form )
 * @param eventID ( String )
 * @return false, to prevent the calling ahref
 */
function openTrace( frm, eventID ){
  beforeWindowOpen();
  var width = 600;
  var height = 340;
  var url = servletPath + "?DFS__Action=RouteTraceEvent&DFS__EventID=" + eventID + "&DFS__Client=JSP";
  if ( "undefined" != typeof(frm) && frm.DFS__UseSubject ){
    url += "&DFS__UseSubject=" + frm.DFS__UseSubject.value;
  }
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openTrace', _info);
  afterWindowOpen();
  return false;
}

/**
 * Opens new window showing the progress map page for workflow tasks for particular Event ID.
 * @param trackName ( String )
 * @param trackId ( String )
 * @param taskId ( String )
 * @return false, to prevent the calling ahref
 */
function openProgressMap( trackName, trackId, taskId ){
  beforeWindowOpen();
  var width = 600;
  var height = 450;
  var x = screen.availWidth/2 - 150;
  var y = screen.availHeight/2 - 150;
  var url = contextPath + "jsp/" + "progressmap.jsp" + "?" + trackName + "=" + trackId;
  if ( taskId!=null && 0<taskId.length ){
    url += "&DFS__TaskID=" + taskId;
  }
  var _info = 'modal=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,left=' + x + ',top=' + y + ',height=' + height + ',width=' + width ;
  app_window = window.open( url, 'openProgressMap', _info);
  afterWindowOpen();
  return false;
}





//
//    MENU FUNCTIONS   ***********************************************************************************************
//



/**
 * Swaps a menu item.
 * @param key ( String )
 * @return false, to prevent the calling ahref.
 */
function swapMenu( key ) {
  if ( menuFlag == null ){
    setMenu();
  }
  if (document.images){
    if ( key != null && key != "" && key.indexOf( menuPrefix )>=0 ) {
      if ( document.images[key] ){
        document.images[key].src = contextPath + "images/subcat_on.gif";
      }
    }
  }
  return false;
}

/**
 * Sets first time menuFlag.
 */
function setMenu(){
  if (document.images){
    for (var i = 0; i < document.images.length; i++) {
      if ( 0<=document.images[i].src.indexOf("subcat_on.gif") ){
        menuFlag = document.images[i].name;
        break;
      }
    } // end for
  }
}

/**
 * Restores all menu item(s).
 * @param key ( String )
 * @return false, to prevent the calling ahref.
 */
function restoreMenu( key ) {
  if (document.images) {
    if ( key != null && key != "" ) {
      for (var i = 0; i < document.images.length; i++) {
        var name = document.images[i].name;
        if( name != menuFlag && name != null && name != "" && name.indexOf( menuPrefix )>=0 ) {
          if ( document.images[i] ){
            document.images[i].src = contextPath + "images/subcat_off.gif";
          }
        }
      } // end for
    }
  }
  return false;
}

/**
 * Changes a location.
 * @param key ( String )
 * @param action ( String )
 * @return false, to prevent the calling ahref.
 */
function openMenu( key, action ){
  do {
    // HOME PAGE
    if ( key=="homepage" ){
      window.location.href = contextPath + "index.jsp";
      break;
    }

    // FORMS
    if ( key=="menu_forms" ){
      window.location.href = servletPath + "?DFS__Action=FormsListFolders&DFS__Client=JSP";
      break;
    }

    // INBOX
    if ( key=="menu_inbox" ){
      window.location.href = servletPath + "?DFS__Action=ContainerGetContent&DFS__ContainerID=1&DFS__Client=JSP";
      break;
    }

    // SENT ITEMS
    if ( key=="menu_sentitems" ){
      window.location.href = servletPath + "?DFS__Action=ContainerGetContent&DFS__ContainerID=2&DFS__Client=JSP";
      break;
    }

    // ARCHIVE
    if ( key=="menu_archive" ){
      window.location.href = servletPath + "?DFS__Action=ContainerGetContent&DFS__ContainerID=4&DFS__Client=JSP";
      break;
    }

    // RECYCLE BIN
    if ( key=="menu_recyclebin" ){
      window.location.href = servletPath + "?DFS__Action=ContainerGetContent&DFS__ContainerID=5&DFS__Client=JSP";
      break;
    }

    // PAPER DOC
    if ( key=="menu_paperdocs" ){
      window.location.href = servletPath + "?DFS__Action=PaperDocsGetUser&DFS__Client=JSP";
      break;
    }

    // WORK QUEUES
    if ( key=="menu_workqueues" ){
      window.location.href = servletPath + "?DFS__Action=ContainerListUserFavorites&DFS__Client=JSP";
      break;
    }

    // MY PROFILE
    if ( key=="menu_myprofile" ){
      window.location.href = servletPath + "?DFS__Action=UserGetCurrentStatus&DFS__Client=JSP";
      break;
    }

    // MY DATA
    if ( key=="menu_mydata" ){
      window.location.href = servletPath + "?DFS__Action=DataGetStatus&DFS__Client=JSP&DFS__OnlyMe=0";
      break;
    }

    // ADMIN TOOLS
    if ( key=="menu_administration" ){
      detectBrowser();
      if ( navigator.OS.indexOf('mac') != -1 || ( navigator.org=="netscape" && navigator.version<1 ) || javawsInstalled ) {
        window.location.href = contextPath + "lomc";
      } else {
        beforeWindowOpen();
        var _info = 'toolbar=no,location=no,directories=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes';
        app_window = window.open( contextPath + "jsp/" + "webstartinstall.jsp", 'webstartinstall', _info);
        afterWindowOpen();
      }
      break;
    }

    // SIGN IN
    if ( key=="menu_signin" ){
      window.location.href = servletPath + "?DFS__Action=Login&DFS_Client=JSP";
      break;
    }

    // SIGN OFF
    if ( key=="menu_signoff" ){
      window.location.href = servletPath + "?DFS__Action=Logout&DFS__Client=JSP&DFS__NoRedirect=1";
      break;
    }

    // HELP
    if ( key=="menu_help" ){
      if ( helpPath!=null ){
        openHelp( helpPath );
      }
      break;
    }

    // ABOUT
    if ( key=="menu_about" ){
      openAbout();
      break;
    }

    // CUSTOM PAGE
    if ( key=="menu_custompage" ){
      if ( action!=null && 0<action.length ){
        window.location.href = action;
      }else{
        window.location.href = contextPath + "jsp/" + "custompage.jsp";
      }
      break;
    }
  } while(false);
  return false;
}


//
//    NAVIGATOR FUNCTIONS    *****************************************************************************************
//

/**
 * Updates properties of navigator HTML form's object(s).
 * @param  frmRecords ( Object )
 */
function updateNavigator( frmRecords ){
  if (frmRecords.navTextBox){
    frmRecords.navTextBox.value = page + " " + local_Of + " " + pages;
    frmRecords.navTextBox.disabled = bPrev && bNext;
  }
}

/**
 * Gets numeric page number from text object.
 * @param  frmRecords ( Object )
 * @return pageNumber
 */
function getNumericFromTextValue(frmRecords){
  var txtValue = frmRecords.navTextBox.value;
  var pageNumber = "";
  for(var i = 0; i < txtValue.length; i++){
    var ch=txtValue.charAt(i);
    var itemOf=0;
    var j=0;
    for(j = 0; j < g_sNumSet.length; j++){
      if(ch == g_sNumSet.charAt(j)){
        itemOf = g_cNumeric;
        break;
      }
    }
    if(!(itemOf & 1)){
      bValid = false;
      break;
    }
    pageNumber += ch;
  }
  return pageNumber;
}

/**
 * Jumps to another( previous ) page by onClick Event.
 * @param  frmRecords ( Object )
 * @param  frmNavigator ( Object )
 * @param  action ( String )
 */
function onCSJumpToPage( frmRecords, frmNavigator, action ){
  if ( keyPress == "navigator" ){

    var position = null;
    var numOfpage = getNumericFromTextValue(frmRecords);

    if( numOfpage > page || numOfpage < page ){
      if ( numOfpage < 1 ){
        position = 1;
      }else if ( numOfpage > pages ){
        frmNavigator.DFS__Position.value = (pages * displaysize) - (displaysize - 1);
      }else{
        position = (numOfpage * displaysize) - (displaysize - 1);
      }
    } else if ( numOfpage == page ){
      if ( action=="First" && 1 < page ){
        position = 1;
      } else if ( action=="Next" && page < pages ){
        numOfpage = page + 1;
        position = (numOfpage * displaysize)-(displaysize-1);
      } else if ( action=="Previous" && 1 < page ){
        numOfpage = page - 1;
        position = (numOfpage * displaysize)-(displaysize-1);
      } else if ( action=="Last" && page < pages ){
        position = (pages * displaysize) - (displaysize - 1);
      }
    }
    if ( position!=null ){
      frmNavigator.DFS__Position.value = position;
      return submitNavigator(frmRecords, frmNavigator);
    }else{
      return false;
    }
  }else if ( keyPress == "search" ){
    return submitSearch( frmRecords );
  }
}

/**
 * Validates all HTML form's object(s) before submit navigator HTML form.
 * @param  frmRecords ( HTML Object )
 * @param  frmNavigator ( HTML Object )
 */
function checkBeforeSubmitNavigator( frmRecords, frmNavigator ){
  return true;
}

/**
 * Submits navigator HTML form.
 * @param  frmRecords ( HTML Object )
 * @param  frmNavigator ( HTML Object )
 */
function submitNavigator( frmRecords, frmNavigator ){
  if ( "navigator"==keyPress ){
    keyPress = null;
  }
  if ( checkBeforeSubmitNavigator( frmRecords, frmNavigator ) ){
    frmNavigator.submit();
    return false;
  }
}




//
//    SEARCH FUNCTIONS  **********************************************************************************************
//


var isSearch = null;

/**
 * Toggles the visibility of a search panel.
 * @param frmRecords ( HTML Object )
 * @param openStr ( String ) the resource string - Open search window.
 * @param closeStr ( String ) the resource string - Close search window.
 * @return false, to prevent the calling ahref.
 */
function toggleSearchPanel( frm, openStr, closeStr ) {

  var id = "getsearch";
  var imgSquare = eval("window.document.square");
  var imgSearch = eval("window.document.search");

  if (isSearch == null) isSearch = frm.DFS__UseSearch.value;

  if ( isSearch == "true" ) {
    isSearch = "false";
    displayPreview(id);
    frm.DFS__UseSearch.value = "true";
    if (imgSquare != null) imgSquare.src = contextPath + "images/ko.gif";
    if (imgSquare != null && closeStr != null) imgSquare.alt = closeStr;
    if (imgSearch != null) imgSearch.src = contextPath + "images/found.gif";
    if (imgSearch != null && closeStr != null) imgSearch.alt = closeStr;
  }else{
    isSearch = "true";
    removePreview(id);
    frm.DFS__UseSearch.value = "false";
    if (imgSquare != null) imgSquare.src = contextPath + "images/square.gif";
    if (imgSquare != null && openStr != null) imgSquare.alt = openStr;
    if (imgSearch != null) imgSearch.src = contextPath + "images/search_off.gif";
    if (imgSearch != null && openStr != null) imgSearch.alt = openStr;
  }
  return false;
}

/**
 * Submits alpha search for all users starting with letter 'x'
 * @param frm ( HTML Object )
 * @param x ( String ) the search value.
 * @return false, to prevent the calling ahref.
 */
function AlphaSearchPanel( frm, x ) {
  frm.DFS__Value.value = x;
  if ( frm.DFS__SearchFilter && frm.DFS__selSearchFilter ) {
    for(var i = 0; i < frm.DFS__selSearchFilter.options.length; i++) {
      if (frm.DFS__selSearchFilter.options[i] != null) {
        if ("StartsWith" == frm.DFS__selSearchFilter.options[i].value) {
          frm.DFS__selSearchFilter.selectedIndex = i;
          break;
        }
      }
    }
  }
  submitSearch( frm );
  return false;
}

/**
 * Submits search for Recently Used user(s)
 * @param frm ( HTML Object )
 * @return false, to prevent the calling ahref.
 */
function getRecentlyUsed( frm ) {
  frm.DFS__Value.value = "";
  frm.DFS__Action.value = "RouteListFavoriteTargets";
  frm.DFS__Mode.value = "1";
  frm.submit();
  return false;
}

/**
 * Disables the ExactMatch button if LDAP is installed and UserID is selected.
 * @param frm ( HTML Object )
 */
function toggleExactMatch( frm ) {
  if ( frm.DFS__SearchBy && frm.DFS__selSearchBy ) {
    frm.DFS__SearchBy.value = frm.DFS__selSearchBy.options[frm.DFS__selSearchBy.selectedIndex].value;
  }
}

/**
 * Sets final search options before submiting the search.
 * @param frm ( HTML Object )
 * @return true or false, to submit Tag's HTML form by press key 'Enter'
 */
function checkBeforeSubmitSearch( frm ) {
  return true;
}

/**
 * Updates properties of HTML form's objects before submiting the search.
 * @param frm ( HTML Object )
 * @return true or false, to submit Tag's HTML form by press key 'Enter'
 */
function updateSearchOptions( frm ) {

  if ( !frm.DFS__Value ){
    return false;
  }
  if ( 0 == frm.DFS__Value.value.length ){
    alert( searchAlertBox );
    return false;
  }

  if ( frm.DFS__Action ) frm.DFS__Action.value = searchCommand;

  if ( frm.DFS__Position ) frm.DFS__Position.value = "";

  if ( frm.DFS__SearchBy && frm.DFS__selSearchBy ) {
    frm.DFS__SearchBy.value = frm.DFS__selSearchBy.options[frm.DFS__selSearchBy.selectedIndex].value;
  }

  if ( frm.DFS__SearchFilter && frm.DFS__selSearchFilter ) {
    frm.DFS__SearchFilter.value = frm.DFS__selSearchFilter.options[frm.DFS__selSearchFilter.selectedIndex].value;
  }

  if ( frm.DFS__Value.value == "*" ){
    frm.DFS__Value.value = "";
    if ( frm.DFS__SearchBy ) frm.DFS__SearchBy.value = "";
  }

  if ( frm.DFS__Mode && "1"==frm.DFS__Mode.value ) frm.DFS__Mode.value="2";

  return checkBeforeSubmitSearch( frm );
}

/**
 * Submits HTML form to make a search.
 * @param  frm ( HTML Object )
 */
function submitSearch( frm ){
  if ( "search"==keyPress ){
    keyPress = null;
  }

  if ( updateSearchOptions( frm ) ){
    frm.submit();
  } else {
    return false;
  }
}




//
//    Constants for character filter. **********************************************************************************
//


//
//    Normal variants
//
var   CST_UPPER_EXT       = "\u00C0-\u00D6\u00D8-\u00DD";   // Extended Latin uppercase chars
var   CST_LOWER_EXT       = "\u00E0-\u00F6\u00D8-\u00FD";   // Extended Latin lowercase chars
var   CST_UPPER           = "A-Z" + CST_UPPER_EXT;
var   CST_LOWER           = "a-z" + CST_LOWER_EXT;
var   CST_DIGIT           = "0-9";
var   CST_KATAKANA        = "\u3041-\u309E";
var   CST_HIRAGANA        = "\u30A1-\u30FE";

var   CST_KANJI           = "\u4E00-\u9FA5";
var   CST_IDEOSPACE       = "\u3000";
var   CST_IDEOPUNCT       = "\u3001-\u3037";

//
//    Symbols
//
var   CST_YEN             = "\u00A5";
var   CST_EURO            = "\u20AC";
var   CST_POUND           = "\u00A3";


//
//    Full-block variants
//
var   CST_FB_UPPER        = "\uFF21-\uFF3A";
var   CST_FB_LOWER        = "\uFF41-\uFF5A";
var   CST_FB_DIGIT        = "\uFF10-\uFF19";
var   CST_FB_KATAKANA     = "\uFF66-\uFF9D";
var   CST_FB_EXCL         = "\uFF01";	// !
var   CST_FB_QUOTE        = "\uFF02";	// "
var   CST_FB_APOS         = "\uFF07";	// '
var   CST_FB_DASH         = "\uFF0D";	// -
var   CST_FB_PERIOD       = "\uFF0E";	// .
var   CST_FB_SLASH        = "\uFF0F";	// /
var   CST_FB_COLON        = "\uFF1A";	// :
var   CST_FB_SEMICOLON    = "\uFF1B";   // ;
var   CST_FB_QUESTION     = "\uFF1F";   // ?
var   CST_FB_ATSIGN       = "\uFF20";   // @
var   CST_FB_OPEN_BRACKET = "\uFF3B";   // [
var   CST_FB_BACKSLASH    = "\uFF3C";   // \
var   CST_FB_GRAVE        = "\uFF40";   // `
var   CST_FB_OPEN_BRACE   = "\uFF5B";   // {
var   CST_FB_TILDE        = "\uFF5E";   // ~

var   CST_FB_DOLLAR       = "\uFF04";
var   CST_FB_POUND        = "\uFFE1";
var   CST_FB_YEN          = "\uFFE5";

var   CST_FB_ALPHASPL     = CST_FB_EXCL + "-" + CST_FB_SLASH + CST_FB_COLON + "-" + CST_FB_ATSIGN + CST_FB_OPEN_BRACKET + "-" + CST_FB_GRAVE + CST_FB_OPEN_BRACE + "-" + CST_FB_TILDE;

var   CST_FB_PUNC         = CST_FB_PERIOD + CST_FB_QUESTION + CST_FB_EXCL + CST_FB_DASH + CST_FB_SLASH + CST_FB_BACKSLASH + CST_FB_QUOTE + CST_FB_APOS + CST_FB_GRAVE + CST_FB_COLON + CST_FB_SEMICOLON + CST_IDEOSPACE;

var   CST_CURRENCY        = CST_EURO + CST_POUND + CST_YEN + CST_FB_DOLLAR + CST_FB_POUND + CST_FB_YEN;

var   CS_TEXT_UPPER       = CST_UPPER + CST_FB_UPPER;
var   CS_TEXT_LOWER       = CST_LOWER + CST_FB_LOWER;
var   CS_TEXT_ALPHA       = CS_TEXT_UPPER + CS_TEXT_LOWER + CST_KATAKANA + CST_HIRAGANA + CST_KANJI;
var   CS_TEXT_NUM         = CST_DIGIT + CST_FB_DIGIT;
var   CS_TEXT_ALNUM       = CS_TEXT_ALPHA + CS_TEXT_NUM;

var   CS_TEXT_SPACE       = " " + CST_IDEOSPACE;
var   CS_TEXT_ALPHASPL    = "!-\\/:-@\\[-`\\{-~" + CST_CURRENCY + CST_IDEOPUNCT + CST_FB_ALPHASPL;
var   CS_TEXT_NUMSPL      = CS_TEXT_ALPHASPL;
var   CS_TEXT_PUNC        = "\\.\\?\\!\\-\\/\\\\\\\"\\\'\\`\\:\\;\\ " + "\u00A1-\u00BF" + CST_IDEOPUNCT + CST_FB_PUNC;
var   CS_TEXT_RETURN      = "\\r\\n";

/**
 * validates that a HTML form field contains only the approprite character types.
 * @param  value ( STRING ) a value from Form field.
 * @param  filter ( STRING )
 * @return boolean
 */
function charFilter( value, filter ) {

  if (filter == null) {
    return true;
  }

  var t = "[^" + filter + "]";

  var pattern = new RegExp( t );

  return !pattern.test( value );
}





//
//    WEBSTART  DETECTION. **********************************************************************************
//

var javawsInstalled = 0;

isIE = "false";

if (navigator.mimeTypes && navigator.mimeTypes.length) {
  x = navigator.mimeTypes['application/x-java-jnlp-file'];
  if (x) {
    javawsInstalled = 1;
  }
} else {
  isIE = "true";
}


//
//    BROWSER  DETECTION. **********************************************************************************
//

function detectBrowser(){

  var oldOnError = window.onerror;
  var element = null;

  window.onerror = null;

  // work around bug in xpcdom Mozilla 0.9.1
  window.saveNavigator = window.navigator;

  navigator.OS    = '';
  navigator.version  = parseFloat(navigator.appVersion);
  navigator.org    = '';
  navigator.family  = '';

  var platform;
  if (typeof(window.navigator.platform) != 'undefined')
  {
    platform = window.navigator.platform.toLowerCase();
    if (platform.indexOf('win') != -1)
      navigator.OS = 'win';
    else if (platform.indexOf('mac') != -1)
      navigator.OS = 'mac';
    else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1)
      navigator.OS = 'nix';
  }

  var i = 0;
  var ua = window.navigator.userAgent.toLowerCase();

  if (ua.indexOf('opera') != -1)
  {
    i = ua.indexOf('opera');
    navigator.family  = 'opera';
    navigator.org    = 'opera';
    navigator.version  = parseFloat('0' + ua.substr(i+6), 10);
  }
  else if ((i = ua.indexOf('msie')) != -1)
  {
    navigator.org    = 'microsoft';
    navigator.version  = parseFloat('0' + ua.substr(i+5), 10);

    if (navigator.version < 4)
      navigator.family = 'ie3';
    else
      navigator.family = 'ie4'
  }
  else if (ua.indexOf('gecko') != -1)
  {
    navigator.family = 'gecko';
    var rvStart = ua.indexOf('rv:');
    var rvEnd   = ua.indexOf(')', rvStart);
    var rv      = ua.substring(rvStart+3, rvEnd);
    var rvParts = rv.split('.');
    var rvValue = 0;
    var exp     = 1;

    for (var i = 0; i < rvParts.length; i++)
    {
      var val = parseInt(rvParts[i]);
      rvValue += val / exp;
      exp *= 100;
    }
    navigator.version = rvValue;

    if (ua.indexOf('netscape') != -1)
      navigator.org = 'netscape';
    else if (ua.indexOf('compuserve') != -1)
      navigator.org = 'compuserve';
    else
      navigator.org = 'mozilla';
  }
  else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1))
  {
    var is_major = parseFloat(navigator.appVersion);

    if (is_major < 4)
      navigator.version = is_major;
    else
    {
      i = ua.lastIndexOf('/')
      navigator.version = parseFloat('0' + ua.substr(i+1), 10);
    }
    navigator.org = 'netscape';
    navigator.family = 'nn' + parseInt(navigator.appVersion);
  }
  else if ((i = ua.indexOf('aol')) != -1 )
  {
    // aol
    navigator.family  = 'aol';
    navigator.org    = 'aol';
    navigator.version  = parseFloat('0' + ua.substr(i+4), 10);
  }
  else if ((i = ua.indexOf('hotjava')) != -1 )
  {
    // hotjava
    navigator.family  = 'hotjava';
    navigator.org    = 'sun';
    navigator.version  = parseFloat(navigator.appVersion);
  }

  window.onerror = oldOnError;
}


/*
 *  end cslo.js file
 */
