File: CommonClass.js
Size: 49820
Date: Sat, 08 Dec 2007 15:37:06 +0100
Type: js
 
 
//**************************************************************************
 
//      Copyright  Sybase, Inc. 1998-1999
 
//                       All Rights reserved.
 
//
 
//  Sybase, Inc. ("Sybase") claims copyright in this
 
//  program and documentation as an unpublished work, versions of
 
//  which were first licensed on the date indicated in the foregoing
 
//  notice.  Claim of copyright does not imply waiver of Sybase's
 
//  other rights.
 
//
 
//   This code is generated by the PowerBuilder HTML DataWindow generator.
 
//   It is provided subject to the terms of the Sybase License Agreement
 
//   for use as is, without alteration or modification.  
 
//   Sybase shall have no obligation to provide support or error correction 
 
//   services with respect to any altered or modified versions of this code.  
 
//
 
//       ***********************************************************
 
//       **     DO NOT MODIFY OR ALTER THIS CODE IN ANY WAY       **
 
//       ***********************************************************
 
//
 
//       ***************************************************************
 
//       ** IMPLEMENTATION DETAILS SUBJECT TO CHANGE WITHOUT NOTICE.  **
 
//       **            DO NOT RELY ON IMPLEMENTATION!!!!              **
 
//       ***************************************************************
 
//
 
// Use the public interface only.
 
//**************************************************************************
 
 
 
// these arrays will be filled with internationalized strings based on the server
 
var DW_shortDayNames = new Array("Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat");
 
var DW_longDayNames = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
 
var DW_shortMonthNames = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
 
var DW_longMonthNames = new Array("January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
 
 
 
// this is dependent on the control panel setting on the server
 
// it indicates the order of days (this is mm/dd/yyyy)
 
var DW_PARSEDT_monseq = 0;
 
var DW_PARSEDT_dayseq = 1;
 
var DW_PARSEDT_yearseq = 2;
 
 
 
// DWItemStatus
 
var DW_ITEMSTATUS_NOCHANGE = 0;
 
var DW_ITEMSTATUS_MODIFIED = 1;
 
var DW_ITEMSTATUS_NEW = 2;
 
var DW_ITEMSTATUS_NEW_MODIFIED = 3;
 
 
 
// Added to determine if dates are being processed in client side JavaScript.
 
var bDateTimeProcessingEnabled = false;
 
 
 
var gMask = "";
 
 
 
// common utility functions
 
 
 
function escapeString( inString )
 
{
 
    var index;
 
    var outString = "";
 
    var tempChar;
 
 
 
    // force to string type or charAt will fail!
 
    if (typeof inString != "string")
 
        inString = inString.toString();
 
 
 
    var strLength = inString.length;
 
    for ( index=0; index < strLength; index++ )
 
        {
 
        tempChar = inString.charAt( index );
 
        if (tempChar == "\"" || tempChar == "'") 
 
            outString += "~" + tempChar;
 
        else if (tempChar == "\r")
 
            outString += "~r";
 
        else if (tempChar == "\n")
 
            outString += "~n";
 
        else
 
            outString += tempChar;
 
        }
 
    return outString;
 
}
 
 
 
function convertToRGB( color )
 
{
 
    var hexValue = "000000" + eval( color ).toString(16);
 
    hexValue = hexValue.substr( hexValue.length - 6, 6 );
 
    hexValue = hexValue.substr( 4, 2 ) + hexValue.substr( 2, 2 ) + hexValue.substr( 0, 2 );
 
    return hexValue;
 
}
 
 
 
// default event returns to 0
 
function _evtDefault (value)
 
{
 
    if (value + "" == "undefined")
 
        return 0;
 
    return value;
 
}
 
 
 
// need to double up because of template expander!
 
function DW_parseIsSpace(theChar)
 
{
 
    return /^\s$/.test(theChar);
 
}
 
 
 
function DW_parseIsDigit(theChar)
 
{
 
    return /^\d$/.test(theChar);
 
}
 
 
 
function DW_parseIsAlpha(theChar)
 
{
 
    return /^\w$/.test(theChar) && ! /^\d$/.test(theChar);
 
}
 
 
 
// auto binding of events expect <controlName>_<eventName>
 
function HTDW_eventImplemented(sEventName)
 
{
 
    // check if we already have one scripted
 
    if (this[sEventName] == null)
 
        {
 
        // check for function with default name
 
        var testName = this.name + '_' + sEventName;
 
        if (eval ('typeof ' + testName) == 'function')
 
            this[sEventName] = eval(testName);
 
        }
 
 
 
    return this[sEventName] != null;
 
}
 
 
 
// utility functions
 
function allowInString (inString, refString)
 
{
 
    var index, tempChar;
 
    var strLength = inString.length;
 
    for (index=0; index < strLength; index++)
 
        {
 
        tempChar= inString.charAt (index);
 
        if (refString.indexOf (tempChar)==-1)  
 
            return false;
 
        }
 
    return true;
 
}
 
 
 
function DW_Trim(inString)
 
{
 
    var indexStart, indexEnd, tempChar, outString;
 
    var strLength = inString.length;
 
    // skip leading blanks
 
    for (indexStart=0; indexStart < strLength; indexStart++)
 
        {
 
        tempChar= inString.charAt (indexStart);
 
        if (tempChar != " ")
 
            break;
 
        }
 
    if (indexStart != strLength)
 
        {
 
        // skip trailing blanks
 
        for (indexEnd=strLength-1; indexEnd > 0; indexEnd--)
 
            {
 
            tempChar= inString.charAt (indexEnd);
 
            if (tempChar != " ")
 
                break;
 
            }
 
        // get all chars in between
 
        outString = inString.substring(indexStart, indexEnd+1);
 
        }
 
    else
 
        outString = "";
 
    return outString;
 
}
 
 
 
function DW_Round(num, decPlaces)
 
{
 
    var powTen = Math.pow(10.0,decPlaces);
 
    num *= powTen;
 
    if (num >= 0)
 
        num = Math.floor(num + 0.5);
 
    else
 
        num = Math.ceil(num - 0.5);
 
 
 
    return num / powTen;
 
}
 
 
 
function DW_IsNonNegativeNumber(inString, bNilIsNull)
 
{
 
    if (arguments.length < 2)
 
            bNilIsNull = false;
 
        if (inString == "")
 
            return bNilIsNull;
 
        else
 
        {
 
            var newString = DW_Trim(inString);      
 
            if (newString == "")                                
 
                return false;                                       
 
            else                                                        
 
            {                                                       
 
                var result = new DW_NumberClass();  
 
                if(DW_parseNumberStringAgainstMask(inString, result, false))    
 
                {                                                   
 
                    if (result >= 0)                            
 
                        return true;                                
 
                }                                                   
 
 
 
                return false;                                   
 
            }                                                       
 
        }
 
}
 
 
 
function DW_IsValidDisplayOrDataValue(inString, bNilIsNull)
 
{
 
    if (arguments.length < 2)
 
        bNilIsNull = false;
 
    if (inString == "")
 
        return bNilIsNull;
 
    else
 
        {
 
        var i;
 
        for(i = 0; i < this.displayValue.length; i++)
 
            {
 
            if (inString == this.displayValue[i])
 
                return true;            
 
            if (inString == this.dataValue[i])
 
                return true;            
 
            }
 
        return false;
 
        }
 
}
 
 
 
function DW_IsNumber(inString, bNilIsNull)
 
{
 
    if (arguments.length < 2)
 
            bNilIsNull = false;
 
        if (inString == "")
 
            return bNilIsNull;
 
        else
 
        {
 
            var newString = DW_Trim(inString);      
 
            if (newString == "")        
 
                return false;       
 
            else            
 
                return DW_parseNumberStringAgainstMask(inString, null, true); 
 
        }
 
}
 
 
 
// exprContext class
 
function HTDW_exprContextClass(dataWindow)
 
{
 
    this.dw = dataWindow;
 
    this.row = -1;
 
    this.currentText = "";
 
}
 
 
 
// Col0 class
 
function HTDW_Col0Class(rowId, dwItemStatus)
 
{
 
    this.colModified = new Array();
 
    this.rowId = rowId;
 
    this.itemStatus = dwItemStatus;
 
}
 
 
 
// Row class
 
function HTDW_RowClass(rowId)
 
{
 
    var col;
 
 
 
    // column 0 holds special data
 
    this[0] = new HTDW_Col0Class(rowId, arguments[1]);
 
 
 
    // get data values
 
    for (col = 1; col < arguments.length - 1; col++)
 
        {
 
        this[0].colModified[col] = false;
 
        this[col] = arguments[col + 1];
 
        }
 
 
 
    this.numCols = arguments.length - 1;
 
}
 
 
 
function HTDW_Row_generateChange (rowNum, rowObj)
 
{
 
    var col;
 
    var result;
 
 
 
    if (rowObj[0].itemStatus == DW_ITEMSTATUS_MODIFIED ||
 
        rowObj[0].itemStatus == DW_ITEMSTATUS_NEW_MODIFIED)
 
        {
 
        result = "(ModifyRow " + rowNum + " " + rowObj[0].rowId + " (";
 
        for (col = 1; col < rowObj.numCols; col++)
 
            {
 
            if (rowObj[0].colModified[col])
 
                {
 
                if (rowObj[col] == null)
 
                    result += "(" + col + " 1)";
 
                else
 
                    result += "(" + col + " 0 '" + escapeString(rowObj[col]) + "')";
 
                }
 
            }
 
        result += "))";
 
        }
 
    else
 
        result = "";
 
 
 
    return result;
 
}
 
 
 
function HTDW_Row_dumpRow (rowNum, rowObj)
 
{
 
    var col;
 
    var result;
 
 
 
    result = "Row " + rowNum + "\n" + 
 
             "Modified:" + rowObj[0].itemStatus + "\n" +
 
             "RowId:" + rowObj[0].rowId + "\n" + 
 
             "NumCols:" + (rowObj.numCols - 1) + "\n";
 
 
 
    for (col = 1; col < rowObj.numCols; col++)
 
        {
 
        result += "   Col " + col + " modified:" + rowObj[0].colModified[col] + " '" + rowObj[col] + "'\n";
 
        }
 
 
 
    // alert (result);
 
 
 
    return result;
 
}
 
 
 
// set up class functions
 
HTDW_RowClass.generateChange = HTDW_Row_generateChange;
 
HTDW_RowClass.dumpRow = HTDW_Row_dumpRow;
 
 
 
function HTDW_ColumnGob(name, colNum, rowInDetail, region, bRequired, bNilIsNull, bFocusRect, formatFunc, getDisplayFormatFunc, getEditFormatFunc, column)
 
{
 
    this.name = name;
 
    this.colNum = colNum;
 
    this.rowInDetail = rowInDetail;
 
    this.region = region;
 
    this.bRequired = bRequired;
 
    this.bNilIsNull = bNilIsNull;
 
    this.bFocusRect = bFocusRect;
 
    this.bUseCodeTable = false;
 
 
 
    this.getDisplayFormat = getDisplayFormatFunc;
 
    this.getEditFormat = getEditFormatFunc;
 
    this.format = formatFunc;
 
    this.column = column;
 
}
 
 
 
function HTDW_ComputeGob(name, region, computeFunc, formatFunc, getDisplayFormatFunc)
 
{
 
    this.name = name;
 
    this.region = region;
 
 
 
    this.compute = computeFunc;
 
    this.getDisplayFormat = getDisplayFormatFunc;
 
    this.format = formatFunc;
 
}
 
 
 
// Depend classes common function
 
// DependCompute class
 
function HTDW_DependComputeUpdate(htmlDw, row, bSkipCurrent)
 
{
 
    var gob = this.gob;
 
    var control = htmlDw.findControl(gob.name, row, gob.region == 0);
 
 
 
    if (control != null && typeof gob.compute == "function")
 
        {
 
        // body
 
        if (gob.region == 0)
 
            row = row;
 
        // header
 
        else if (gob.region == 1)
 
            row = htmlDw.firstRow;
 
        // footer or summary
 
        else if (gob.region == 2 || gob.region == 3)
 
            row = htmlDw.lastRow;
 
 
 
        var exprCtx = htmlDw.exprCtx;
 
        exprCtx.row = row;
 
        exprCtx.currentText = "";
 
 
 
        var value = gob.compute(exprCtx);
 
 
 
        if (control.type == "hidden" || control.type == "password" || 
 
            control.type == "text" || control.type == "textarea")
 
            {
 
            var displayValue;
 
            if (gob.format != null && gob.getDisplayFormat != null)
 
                {
 
                var formatString;
 
                if (typeof gob.getDisplayFormat == "string")
 
                    formatString = gob.getDisplayFormat;
 
                else
 
                    formatString = gob.getDisplayFormat (exprCtx);
 
                displayValue = gob.format (formatString, value, control);
 
                }
 
            else if (value != null)
 
                displayValue = value.toString();
 
            else
 
                displayValue = "";
 
            control.value = displayValue;
 
            }
 
        }
 
}
 
 
 
function HTDW_DependCompute(gob)
 
{
 
    this.gob = gob;
 
 
 
    this.update = HTDW_DependComputeUpdate;
 
}
 
 
 
// DependColumn class
 
function HTDW_DependColumnUpdate(htmlDw, row, bSkipCurrent)
 
{
 
    var gob = this.gob;
 
    var control = htmlDw.findControl(gob.name, row, gob.region == 0);
 
 
 
    // don't mess with the current control if asked not to
 
    if (control != null && 
 
            ! (bSkipCurrent && control == htmlDw.currentControl))
 
        {
 
        // body
 
        if (gob.region == 0)
 
        {
 
            //row = row + gob.rowInDetail;
 
        }
 
        // header
 
        else if (gob.region == 1)
 
            row = htmlDw.firstRow;
 
        // footer or summary
 
        else if (gob.region == 2 || gob.region == 3)
 
            row = htmlDw.lastRow;
 
 
 
        var value = htmlDw.rows[row][gob.colNum];
 
 
 
        if (control.type == "hidden" || control.type == "password" || 
 
            control.type == "text" || control.type == "textarea" ||
 
            control.type == "select-one")
 
            {
 
            var displayValue;
 
            if (gob.format != null && gob.getDisplayFormat != null)
 
                {
 
                var exprCtx = htmlDw.exprCtx;
 
                exprCtx.row = row;
 
                exprCtx.currentText = "";
 
                if (typeof gob.getDisplayFormat == "string")
 
                    formatString = gob.getDisplayFormat;
 
                else
 
                    formatString = gob.getDisplayFormat (exprCtx);
 
                displayValue = gob.format (formatString, value, control);
 
                }
 
            else if (value != null)
 
                displayValue = value.toString();
 
            else
 
                displayValue = "";
 
            control.value = displayValue;
 
            }
 
       else if(control.type == "checkbox")
 
         {
 
         if (value != null)
 
             {  
 
                var displayValue;
 
                displayValue = value.toString();
 
                if ( (control.checked==true) &&  (displayValue!=control.value.toString()))
 
                        control.checked=false;
 
                else if  ((control.checked==false) && (displayValue!=control.value.toString()))
 
                        control.checked=true;
 
 
 
                control.value = displayValue;       
 
             }  
 
         }
 
 
 
      else if(control.length>1)
 
            if(control[0].type="radio")     
 
                {   
 
                var r;
 
                for (r=0;r<control.length;r++)
 
                {
 
                     displayValue = value.toString();
 
                         if(control[r].value==displayValue)
 
                        {
 
                            control[r].checked=true;
 
                        }
 
 
 
                 }
 
 
 
            }
 
 
 
 
 
       }
 
}
 
 
 
function HTDW_DependColumn(gob)
 
{
 
    this.gob = gob;
 
 
 
    this.update = HTDW_DependColumnUpdate;
 
}
 
 
 
// Column class
 
function HTDW_Column_addDepend(depend)
 
{
 
    if (this.dependents == null)
 
        this.dependents = new Array();
 
 
 
    this.dependents[this.dependents.length] = depend;
 
}
 
 
 
function HTDW_Column_updateDependents(htmlDw, row, bSkipCurrent)
 
{
 
    if (this.dependents != null)
 
        {
 
        for (var i=0; i < this.dependents.length; ++i)
 
            this.dependents[i].update (htmlDw, row, bSkipCurrent);
 
        }
 
}
 
 
 
function HTDW_ColumnClass(colId, name, convertFromStringFunc, typeValidationFunc, itemValidateFunc, validationMessageFunc, computeFunc, displayGobName)
 
{
 
    this.colId = colId;
 
    this.name = name;
 
    this.dependents = null;
 
 
 
    this.convertFromString = convertFromStringFunc;
 
    this.validateByType = typeValidationFunc;
 
    this.validateItem = itemValidateFunc;
 
    this.validationError = validationMessageFunc;
 
    this.compute = computeFunc;
 
    this.displayGobName = displayGobName;
 
 
 
    // interface functions
 
    this.addDepend = HTDW_Column_addDepend;
 
    this.updateDependents = HTDW_Column_updateDependents;
 
 
 
    this.displayValue = new Array();
 
    this.dataValue = new Array()
 
}
 
 
 
// DataWindow class
 
function HTDW_findControl(gobName, row, bInBody)
 
{
 
    var control = null;
 
    var controlExists;
 
    var controlName = gobName;
 
    var controlObject;
 
 
 
    if (bInBody)
 
        controlName += "_" + row;
 
 
 
    if (this.dataForm + "" != "undefined")
 
        {
 
        controlObject = 'this.dataForm.' + controlName;
 
        controlExists = eval('typeof ' + controlObject);
 
        if (controlExists == "object")
 
            control = eval(controlObject);
 
        }
 
    else if (this.navLayerForms[0] + "" != "undefined") // try array of Netscape layered forms
 
        {
 
        var rowObj = this.rows[row];
 
        var index = 0;
 
        if (bInBody)
 
            index = row * (rowObj.numCols - 1); // skip over for search
 
        for( ; index < this.navLayerForms.length; index++)
 
             {
 
             if (this.navLayerForms[index].elements[0].name == controlName)
 
                 {
 
                 control = this.navLayerForms[index].elements[0];
 
                 break;
 
                 }
 
             }
 
        }
 
    else
 
        control = null;
 
 
 
    return control;
 
}
 
 
 
function HTDW_itemGainFocus(newRow,newCol,control,gob)
 
{
 
    var bRowChanged = false;
 
    var bReadOnlyControl = false;
 
    var bNegativeTabIndexControl = false;
 
 
 
    // default arguments
 
    control.row = newRow;
 
    control.col = newCol;
 
    control.gob = gob;
 
 
 
    // if in the middle of trying to force focus back
 
    // to a control, ignore all other focus stuff
 
    if (this.forcingBackFocusTo != null)
 
        {
 
        // check if we have made it back yet
 
        if (this.forcingBackFocusTo == control)
 
        {
 
            this.forcingBackFocusTo = null;
 
            this.currentControl = control;
 
        }
 
        // don't do any other focus related stuff
 
        return;
 
        }
 
 
 
    // bail if we think that the current control already has focus
 
    // (Could happen if a button is pressed)
 
    if (this.currentControl == control &&
 
        !(this.currentControl.type == "hidden" || this.currentControl.type == "password" ||
 
        this.currentControl.type == "text" || this.currentControl.type == "textarea"))
 
        return;
 
 
 
    // check control attri
 
    if (control.readOnly + "" != "undefined")
 
        {
 
        bReadOnlyControl = control.readOnly;
 
        }
 
    if (control.tabIndex + "" != "undefined")
 
        {
 
        if(control.tabIndex < 0 )
 
            bNegativeTabIndexControl = true;
 
        }
 
 
 
    if (bNegativeTabIndexControl)
 
        {
 
        control.blur(); //don't allow focus.
 
        return;
 
        }
 
 
 
    if (newRow != -1)
 
        {
 
        if (newRow != this.currRow)
 
            {
 
            bRowChanged = true;
 
 
 
 
 
            // row focus changing event
 
            if (this.eventImplemented("RowFocusChanging"))
 
                {
 
                var result = _evtDefault(this.RowFocusChanging (this.currRow+1, newRow+1));
 
                // if 1 returned, don't allow focus to change (leave focus in last control to have gained focus
 
                if (result == 1)
 
                    {
 
                    this.restoreFocus();
 
                    // bail out early
 
                    return;
 
                    }
 
                }
 
 
 
            }
 
 
 
        this.currRow = newRow;
 
        }
 
    if (newCol != -1)
 
        this.currCol = newCol;
 
 
 
    this.currentControl = control;
 
 
 
    // update the displayed value to be in editible form
 
    if (newRow != -1 && newCol != -1 && 
 
        (this.currentControl.type == "hidden" || this.currentControl.type == "password" ||
 
         this.currentControl.type == "text" ||this.currentControl.type == "textarea"))
 
        {
 
        var value = this.rows[newRow][newCol];
 
        if (gob.format != null)
 
            {
 
            var displayValue;
 
 
 
            if (gob.getEditFormat != null)
 
                {
 
                var formatString;
 
                if (typeof gob.getEditFormat == "string")
 
                    formatString = gob.getEditFormat;
 
                else
 
                    {
 
                    var exprCtx = this.exprCtx;
 
                    exprCtx.row = control.row;
 
                    exprCtx.currentText = "";
 
                    formatString = gob.getEditFormat (exprCtx);
 
                    }
 
                displayValue = gob.format (formatString, value, this.currentControl);
 
                }
 
            else if (value != null)
 
                displayValue = value.toString();
 
            else
 
                displayValue = "";
 
            this.currentControl.value = displayValue;
 
            }
 
        else if ( value != null )
 
            {
 
            // Do not compare against Date/Time if no date fields have been defined
 
            if (!bDateTimeProcessingEnabled ||
 
               (value.toString != DW_DatetimeToString &&
 
                value.toString != DW_DateToString &&
 
                value.toString != DW_TimeToString))
 
                this.currentControl.value = value.toString( );
 
            }
 
        else
 
            this.currentControl.value = "";
 
        }
 
 
 
    // can only programatically change border on IE4
 
    if (control.gob.bFocusRect && HTDW_DataWindowClass.isIE4)
 
        {
 
        this.currentControlBorder = control.style.borderStyle;
 
        control.style.borderStyle = "dotted";
 
        }
 
 
 
 
 
    // row focus changed event
 
    if (bRowChanged && this.eventImplemented("RowFocusChanged"))
 
        this.RowFocusChanged (newRow+1)
 
 
 
    // item focus changed event
 
    if (newCol != -1 && this.eventImplemented("ItemFocusChanged"))
 
        this.ItemFocusChanged (newRow+1, this.cols[newCol].name)
 
 
 
}
 
 
 
function HTDW_itemLoseFocus(control)
 
{
 
    var bReadOnlyControl = false;
 
    var bNegativeTabIndexControl = false;
 
 
 
    // check control attri
 
    if (control.readOnly + "" != "undefined")
 
        {
 
        bReadOnlyControl = control.readOnly;
 
        }
 
    if (control.tabIndex + "" != "undefined")
 
        {
 
        if( control.tabIndex < 0 )
 
            bNegativeTabIndexControl = true;
 
        }
 
 
 
    if (bNegativeTabIndexControl)
 
        {
 
        return 2;
 
        }
 
 
 
    // restore border
 
    // can only programatically change border on IE4
 
    if (control.gob.bFocusRect && HTDW_DataWindowClass.isIE4 && this.currentControl == control)
 
        control.style.borderStyle = this.currentControlBorder;
 
 
 
    // don't do validation if in the middle of forcing focus
 
    // due to validation error (endless loop could happen)
 
    if (this.forcingBackFocusTo != null)
 
        return 2;
 
 
 
    if (this.currentControl != control)
 
        {
 
        alert("Focus problem! Control losing focus is not current control!");
 
        // fake it out
 
        this.currentControl = control;
 
        }
 
 
 
    var gob = control.gob;
 
    if (gob.getEditFormat != null)
 
    {
 
        if (typeof gob.getEditFormat == "string")
 
        gMask = gob.getEditFormat;
 
        else
 
        {
 
            var exprCtx = this.exprCtx;
 
            exprCtx.row = control.row;
 
            exprCtx.currentText = "";
 
            gMask = gob.getEditFormat (exprCtx);
 
        }
 
 
 
        // code table's edit format is a dummy "CodeTable" format for info.
 
        if (gob.bUseCodeTable)
 
            gMask = "";
 
    }
 
 
 
    if (!control.bChanged)  // check if Change misfired (losing focus beyond frame?)
 
        {
 
        var newValue;
 
        var row = control.row;
 
        var col = control.col;
 
        var rowObj = this.rows[row];
 
        var colObj = this.cols[col];
 
 
 
        if (control.type == "select-one")
 
            newValue = control.options[control.selectedIndex].value;
 
        else
 
            newValue = control.value;
 
 
 
        if (newValue == "")
 
            {
 
            if (control.gob.bNilIsNull)
 
                {
 
                if (rowObj[col] != null)
 
                    control.bChanged = true;
 
                }
 
            else if (rowObj[col] != null && rowObj[col] != "")  // for inserts
 
                control.bChanged = true;
 
            }
 
        else if (colObj.convertFromString != null)
 
            {
 
            var convertedValue;
 
            if (colObj.convertFromString == parseInt)
 
            {
 
                var reg = /,/g;
 
                var noComma = newValue.replace(reg, "");
 
                convertedValue = colObj.convertFromString (noComma, 10);
 
            }
 
            else
 
                convertedValue = colObj.convertFromString (newValue);
 
 
 
            if (rowObj[col] != convertedValue)
 
                control.bChanged = true;
 
            }
 
        else
 
            {
 
            if (rowObj[col] != newValue)
 
                control.bChanged = true;
 
            }
 
        }
 
 
 
    var result = this.AcceptText();
 
 
 
    gMask = "";
 
 
 
    if (result == 1)
 
        {
 
        // reformat the data
 
        var gob = control.gob;
 
        var value = this.rows[control.row][gob.colNum];
 
 
 
        if (control.type == "hidden" || control.type == "password" || 
 
            control.type == "text" || control.type == "textarea")
 
            {
 
            if (gob.format != null)
 
                {
 
                var displayValue;
 
 
 
                if (gob.getDisplayFormat != null)
 
                    {
 
                    var formatString;
 
                    if (typeof gob.getDisplayFormat == "string")
 
                        formatString = gob.getDisplayFormat;
 
                    else
 
                        {
 
                        var exprCtx = this.exprCtx;
 
                        exprCtx.row = control.row;
 
                        exprCtx.currentText = "";
 
                        formatString = gob.getDisplayFormat (exprCtx);
 
                        }
 
                    displayValue = gob.format (formatString, value, this.currentControl);
 
                    }
 
                else if (value != null)
 
                    displayValue = value.toString();
 
                else
 
                    displayValue = "";
 
                this.currentControl.value = displayValue;
 
                }
 
            else if ( value != null )
 
                {
 
                // Do not compare against Date/Time if no date fields have been defined
 
                if (!bDateTimeProcessingEnabled ||
 
                    (value.toString != DW_DatetimeToString &&
 
                     value.toString != DW_DateToString &&
 
                     value.toString != DW_TimeToString))
 
                     this.currentControl.value = value.toString( );
 
                }
 
            else
 
                this.currentControl.value = "";
 
            }
 
        }
 
 
 
    return result;
 
}
 
 
 
function HTDW_selectControlContent(control)
 
{
 
    var bNegativeTabIndexControl = false;
 
    if(control != null)
 
        {
 
        if (control.tabIndex + "" != "undefined")
 
            {
 
            if( control.tabIndex < 0 )
 
                bNegativeTabIndexControl = true;
 
            }
 
 
 
        if(!bNegativeTabIndexControl)
 
            {
 
            control.select();
 
            }
 
        }
 
}
 
 
 
function HTDW_getChanges()
 
{
 
    var changes = "";
 
    var index, rowObj;
 
    for (index=0; index < this.rows.length; ++index)
 
        {
 
        rowObj = this.rows[index];
 
        if (rowObj != null)
 
            {
 
            HTDW_RowClass.dumpRow (index, rowObj);
 
            changes += HTDW_RowClass.generateChange (index, rowObj);
 
            }
 
        }
 
    return changes;
 
}
 
 
 
function HTDW_itemError(row, col, exprCtx, bIsRequired)
 
{
 
    var colObj = this.cols[col];
 
    var result = 0;
 
 
 
 
 
    // item error event
 
    if (this.eventImplemented("ItemError"))
 
        result = _evtDefault(this.ItemError (row+1, colObj.name, exprCtx.currentText))
 
 
 
 
 
    // map unknown results to 0
 
    if (result != 1 && result != 2 && result != 3)
 
        result = 0;
 
 
 
    if (result == 0)
 
        {
 
        var sMessage;
 
        if (colObj.validationError != null)
 
            sMessage = colObj.validationError (exprCtx);
 
        else if (bIsRequired)
 
            sMessage = "Value required for item '" + colObj.name + "'.";
 
        else
 
            sMessage = "Item '" + exprCtx.currentText + "' does not pass validation test.";
 
 
 
        alert (sMessage);
 
        }
 
 
 
    return result;
 
}
 
 
 
function HTDW_restoreFocus()
 
{
 
    if (this.currentControl != null)
 
        {
 
        var bDocHasFocus = true;
 
        var bIsDefined = false;
 
 
 
        if ( (document.hasFocus + "" != "undefined") && (this.currentControl.setActive + "" != "undefined") )
 
            bIsDefined = true;
 
 
 
        if ( bIsDefined )
 
            {
 
            bDocHasFocus = document.hasFocus();
 
            }
 
 
 
        if(bDocHasFocus == false)
 
            this.currentControl.setActive(); // CR323659
 
        else
 
            this.currentControl.focus();
 
        }
 
}
 
 
 
 
 
 
 
function HTDW_setCheckboxValue(control, chkValue, unchkValue)
 
{
 
    if (control.checked)
 
        control.value = chkValue;
 
    else
 
        control.value = unchkValue;
 
}
 
 
 
function HTDW_acceptText()
 
{
 
    // nothing to do if no current control
 
    if (this.currentControl == null)
 
        return 1;
 
 
 
    var control = this.currentControl;
 
    var row = control.row;
 
    var col = control.col;
 
    var bRequired = control.gob.bRequired;
 
    var colObj = this.cols[col];
 
    var bIsValid = true;
 
    var exprCtx = this.exprCtx;
 
    var validAction = 2;  // default to accept
 
    var newValue;
 
    var oldValue=exprCtx.currentText;
 
    if (control.type == "select-one")
 
    {
 
        newValue = control.options[control.selectedIndex].value;
 
        if(oldValue==newValue)
 
            return 1;
 
    }
 
    else
 
        newValue = control.value;
 
 
 
 
 
    exprCtx.row = row;
 
    exprCtx.currentText = newValue;
 
 
 
 
 
 
 
    // check if value required
 
    if (bRequired && ! control.bChanged)
 
        {
 
        if (this.rows[row][col] == null)
 
            validAction = this.itemError (row, col, exprCtx, true);
 
        }
 
    else if (bRequired && control.gob.bNilIsNull && newValue == "")
 
        validAction = this.itemError (row, col, exprCtx, true);
 
 
 
    if (control.bChanged)
 
        {
 
        if (bIsValid && colObj.validateByType != null)
 
            bIsValid = colObj.validateByType(newValue, control.gob.bNilIsNull);
 
 
 
        if (bIsValid && colObj.validateItem != null)
 
            bIsValid = colObj.validateItem (exprCtx);
 
 
 
 
 
        // item changed event
 
        if (bIsValid && this.eventImplemented("ItemChanged"))
 
            {
 
            validAction = _evtDefault(this.ItemChanged (row+1, colObj.name, newValue));
 
            // map unknown results to 0
 
            if (validAction != 1 && validAction != 2)
 
                validAction = 0;
 
            // map itemChanged action codes to itemError action codes
 
            if (validAction == 0) // accept value
 
                validAction = 2;
 
            else
 
                {
 
                bIsValid = false;
 
                if (validAction == 1) // reject value, no focus change
 
                    validAction = 1;
 
                else // reject value, allow focus change
 
                    validAction = 3;
 
                }
 
            }
 
 
 
 
 
        if (! bIsValid)
 
            validAction = this.itemError (row, col, exprCtx, false);
 
 
 
        if (validAction == 2)
 
            {
 
            var rowObj = this.rows[row];
 
            if (control.gob.bNilIsNull && newValue == "")
 
                {
 
                if (rowObj[col] != null)
 
                    { 
 
                    rowObj[col] = null;
 
                    if (rowObj[0].itemStatus != DW_ITEMSTATUS_MODIFIED &&
 
                        rowObj[0].itemStatus != DW_ITEMSTATUS_NEW_MODIFIED)
 
                        this.modifiedCount++;
 
                    rowObj[0].colModified[col] = true;          
 
                    if (rowObj[0].itemStatus == DW_ITEMSTATUS_NOCHANGE)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_MODIFIED;
 
                    else if (rowObj[0].itemStatus == DW_ITEMSTATUS_NEW)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_NEW_MODIFIED;
 
                    }
 
                }
 
            else if (colObj.convertFromString != null)
 
                {
 
                var convertedValue;
 
                if (colObj.convertFromString == parseInt)
 
                    convertedValue = colObj.convertFromString (newValue, 10);
 
                else
 
                    convertedValue = colObj.convertFromString (newValue);
 
 
 
                if (rowObj[col] != convertedValue)
 
                    {
 
                    rowObj[col] = convertedValue;
 
                    if (rowObj[0].itemStatus != DW_ITEMSTATUS_MODIFIED &&
 
                        rowObj[0].itemStatus != DW_ITEMSTATUS_NEW_MODIFIED)
 
                        this.modifiedCount++;       
 
                    rowObj[0].colModified[col] = true;          
 
                    if (rowObj[0].itemStatus == DW_ITEMSTATUS_NOCHANGE)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_MODIFIED;
 
                    else if (rowObj[0].itemStatus == DW_ITEMSTATUS_NEW)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_NEW_MODIFIED;
 
                    }
 
                }
 
            else
 
                {
 
                if (rowObj[col] != newValue)
 
                    {
 
                    rowObj[col] = newValue;
 
                    if (rowObj[0].itemStatus != DW_ITEMSTATUS_MODIFIED &&
 
                        rowObj[0].itemStatus != DW_ITEMSTATUS_NEW_MODIFIED)
 
                        this.modifiedCount++;       
 
                    rowObj[0].colModified[col] = true;          
 
                    if (rowObj[0].itemStatus == DW_ITEMSTATUS_NOCHANGE)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_MODIFIED;
 
                    else if (rowObj[0].itemStatus == DW_ITEMSTATUS_NEW)
 
                        rowObj[0].itemStatus = DW_ITEMSTATUS_NEW_MODIFIED;
 
                    }
 
                }
 
            control.bChanged = false;
 
            // skip current control
 
            colObj.updateDependents(this, row, true);
 
            }
 
        }
 
 
 
    // force focus back if an error (focus change will happen after we return!)
 
    if (validAction < 2)
 
        {
 
 
 
        this.forcingBackFocusTo = control;
 
        control.focus();
 
        }
 
 
 
    var result = (validAction < 2) ? -1 : 1;
 
 
 
    return result;
 
    // this return will only be used if we are not an input form
 
    return 1;
 
}
 
 
 
 
 
// if false returned, don't allow focus to change or action to happen (leave focus in last control to have gained focus
 
function HTDW_itemClicked(row, col, objName)
 
{
 
    var evtResult = 0;
 
 
 
    // CR228156 - click on DDDW column fires a validation error in IE5.x - Partha
 
    if (this.currentControl != null)
 
    {
 
    if ( this.currentControl.type == "select-one" )
 
    {
 
        if ( HTDW_DataWindowClass.isIE4 
 
        && this.currentControl.gob.bRequired == true 
 
        && this.currentControl.value == "" )
 
                return false ;
 
        else 
 
        if (this.AcceptText() != 1)
 
            return false;
 
 
 
    }
 
        else if (this.currentControl.type == "checkbox" 
 
        || this.currentControl.type == "radio" 
 
        || this.currentControl.type == "select-multiple" )
 
    {
 
            if (this.AcceptText() != 1)
 
            return false;
 
    }
 
    }
 
 
 
    if (this.eventImplemented("Clicked"))
 
        evtResult = _evtDefault(this.Clicked (row+1, objName));
 
 
 
    // prevent clicked event from bubbling up in IE4 or higher
 
    if (HTDW_DataWindowClass.isIE4)
 
        window.event.cancelBubble = true;
 
 
 
    this.clickedRow = row;
 
    this.clickedCol = col;
 
 
 
    return evtResult != 1;
 
}
 
 
 
function HTDW_performAction(action)
 
{
 
    this.action = action;
 
    if (this.b4GLWeb)
 
        {
 
        // cause the surrounding page to be submitted
 
        psPage.Submit();
 
        }
 
    else // deal with it like in 7.0
 
        {
 
            var rc = 0;
 
        // OnSubmit can prevent the page from being submitted by returning 1
 
        if (this.eventImplemented("OnSubmit"))
 
            rc = _evtDefault(this.OnSubmit ());
 
        if (rc == 0)
 
            {
 
            this.actionField.value = this.action;
 
            this.contextField.value = this.GetFullContext();
 
            this.submitForm.submit();
 
            }
 
            }
 
}
 
 
 
function HTDW_GetFullContext()
 
{
 
    var     result = this.context;
 
 
 
    result += "(";
 
    result += this.getChanges();
 
    if (this.currRow != -1)
 
        result += "(row " + this.currRow + ")";
 
    if (this.sortString != null)
 
        result += "(sortString '" + escapeString (this.sortString) + "')";
 
    result += ")";
 
 
 
    return result ;
 
}
 
 
 
function HTDW_buttonPress(action, row, buttonName)
 
{
 
    var evtResult;
 
 
 
    // false from clicked will cancel processing
 
    if (!this.itemClicked(row, -1, buttonName))
 
        return;
 
 
 
    // button clicking event
 
    if (this.eventImplemented("ButtonClicking"))
 
        {
 
        evtResult = _evtDefault(this.ButtonClicking (row+1, buttonName));
 
        // non-zero return will cancel processing
 
        if (evtResult != 0)
 
            return;
 
        }
 
 
 
    // make sure all changes have been recorded
 
    if (action != "" && this.AcceptText() != 1)
 
        // cancel processing if AcceptText fails
 
        return;
 
 
 
    // update start event 
 
    if (action == "Update" && this.eventImplemented("UpdateStart"))
 
        {
 
        evtResult = _evtDefault(this.UpdateStart ());
 
        // a return of 1 will cancel action
 
        if (evtResult == 1)
 
            return;
 
        }
 
 
 
    if (action == "Print")
 
        {
 
        window.print();
 
        return;
 
        }
 
    // an action of "" is a user defined button which doesn't cause a page reload
 
    if (action != "")
 
        this.performAction(action);
 
    else
 
        {
 
        // button clicked event
 
        if (this.eventImplemented("ButtonClicked"))
 
            this.ButtonClicked (row+1, buttonName)
 
        }
 
}
 
 
 
function HTDW_getColNum(col)
 
{
 
    if (typeof col == "string")
 
        {
 
        for (var i=1; i< this.cols.length; ++i)
 
            {
 
            var colObj = this.cols[i];
 
            if (colObj.name == col)
 
                return i;
 
            }
 
        }
 
    else
 
        return col;
 
 
 
    // if we get here, then we couldn't find it
 
    return -1;
 
}
 
 
 
function HTDW_DeletedCount()
 
{
 
    return this.deletedCount;
 
}
 
 
 
function HTDW_DeleteRow(row)
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        if (row > 0)
 
            this.currRow = row-1;
 
        this.performAction ("DeleteRow");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_GetClickedColumn()
 
{
 
    return this.clickedCol;
 
}
 
 
 
function HTDW_GetClickedRow()
 
{
 
    return this.clickedRow + 1;
 
}
 
 
 
function HTDW_GetColumn()
 
{
 
    return this.currCol;
 
}
 
 
 
function HTDW_GetNextModified(startRow)
 
{
 
    var nextModified = 0;
 
    var index, rowObj;
 
 
 
    if (startRow == null)
 
        return null;
 
 
 
    for (index=startRow-1; index < this.rows.length; ++index)
 
        {
 
        rowObj = this.rows[index];
 
        if (rowObj != null)
 
            {
 
            if (rowObj[0].itemStatus == DW_ITEMSTATUS_MODIFIED ||
 
                rowObj[0].itemStatus == DW_ITEMSTATUS_NEW_MODIFIED)
 
                {
 
                nextModified = index+1;
 
                break;
 
                }
 
            }
 
        }
 
    return nextModified;
 
}
 
 
 
function HTDW_GetRow()
 
{
 
    return this.currRow + 1;
 
}
 
 
 
function HTDW_GetItem(row, col)
 
{
 
    var result;
 
    var colNum = this.getColNum(col);
 
    var rowObj = this.rows[row-1];
 
 
 
    if (colNum == -1 ||
 
            (rowObj + "" == "undefined") || 
 
            rowObj[colNum] + "" == "undefined")
 
        result = -1;
 
    else
 
        result = rowObj[colNum];
 
 
 
    return result;
 
}
 
 
 
function HTDW_GetItemStatus(row, col)
 
{
 
    if (row == null || col == null)
 
        return null;
 
 
 
    var dwItemStatus = DW_ITEMSTATUS_NOCHANGE;
 
    var colNum = this.getColNum(col);
 
    var rowObj = this.rows[row-1];
 
 
 
    if (colNum == -1 ||
 
            (rowObj + "" == "undefined") || 
 
            (colNum > 0 && rowObj[colNum] + "" == "undefined"))
 
        dwItemStatus = -1;
 
    else if (colNum == 0)
 
            dwItemStatus = rowObj[0].itemStatus;
 
    else
 
        {
 
        if (rowObj[0].colModified[colNum])
 
            dwItemStatus = DW_ITEMSTATUS_MODIFIED;
 
        }
 
 
 
    return dwItemStatus;
 
}
 
 
 
function HTDW_InsertRow(row)
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.currRow = row-1;
 
        this.performAction ("InsertRow");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_ModifiedCount()
 
{
 
    return this.modifiedCount;
 
}
 
 
 
function HTDW_Retrieve()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("Retrieve");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_RowCount()
 
{
 
    return this.rowCount;
 
}
 
 
 
function HTDW_ScrollFirstPage()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("PageFirst");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_ScrollLastPage()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("PageLast");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_ScrollNextPage()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("PageNext");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_ScrollPriorPage()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("PagePrior");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_SetItem(row,col,value)
 
{
 
    var result;
 
    var colNum = this.getColNum(col);
 
    var rowObj = this.rows[row-1];
 
 
 
    if (colNum == -1 ||
 
            (rowObj + "" == "undefined") || 
 
            rowObj[colNum] + "" == "undefined")
 
        result = -1;
 
    else
 
        {
 
        if (rowObj[colNum] != value)
 
            {
 
            rowObj[colNum] = value;
 
            if (rowObj[0].itemStatus != DW_ITEMSTATUS_MODIFIED &&
 
                rowObj[0].itemStatus != DW_ITEMSTATUS_NEW_MODIFIED)
 
                this.modifiedCount++;       
 
            rowObj[0].colModified[colNum] = true;
 
            if (rowObj[0].itemStatus == DW_ITEMSTATUS_NOCHANGE)
 
                rowObj[0].itemStatus = DW_ITEMSTATUS_MODIFIED;
 
            else if (rowObj[0].itemStatus == DW_ITEMSTATUS_NEW)
 
                rowObj[0].itemStatus = DW_ITEMSTATUS_NEW_MODIFIED;
 
            }
 
 
 
        // update them all
 
        this.cols[colNum].updateDependents(this, row-1, false);
 
        result = 1;
 
        }
 
 
 
    return result;
 
}
 
 
 
function HTDW_SetColumn(col)
 
{
 
    var result = -1;
 
    var colNum = this.getColNum(col);
 
 
 
    if (colNum != -1)
 
        {
 
        var colObj = this.cols[colNum];
 
        if (typeof colObj != "undefined" && colObj.displayGobName != null)
 
            {
 
            var control = this.findControl(colObj.displayGobName, this.currRow, true);
 
            // if we can't find a control, then we can't set the column
 
            if (control != null)
 
                {
 
                // force focus onto the found control
 
                // the onFocus event will change the currency variables
 
                control.focus();
 
                result = 1;
 
                }
 
            }
 
        }
 
    return result;
 
}
 
 
 
function HTDW_SetRow(row)
 
{
 
    var result = -1;
 
    row -= 1;
 
    var colNum = this.currCol;
 
 
 
    if (colNum != -1)
 
        {
 
        var colObj = this.cols[colNum];
 
        if (typeof colObj != "undefined" && colObj.displayGobName != null)
 
            {
 
            var control = this.findControl(colObj.displayGobName, row, true);
 
            // if we can't find a control, then we can't set the row
 
            if (control != null)
 
                {
 
                // force focus onto the found control, 
 
                // the onFocus event will change the currency variables
 
                control.focus();
 
                result = 1;
 
                }
 
            }
 
        }
 
    return result;
 
}
 
 
 
function HTDW_SetSort(sortString)
 
{
 
    this.sortString = sortString;
 
    return 1;
 
}
 
 
 
function HTDW_Sort()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("Sort");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function HTDW_Update()
 
{
 
    if(this.AcceptText() == 1)
 
        {
 
        this.performAction ("Update");
 
        return 1;
 
        }
 
    else
 
        return -1;
 
}
 
 
 
function DW_EditKeyPressed(nCase)
 
{
 
    if(nCase == 1)
 
    {
 
        event.srcElement.value += String.fromCharCode(event.keyCode).toUpperCase();
 
        event.returnValue = false;
 
    }
 
    else if (nCase == 2)
 
    {
 
        event.srcElement.value += String.fromCharCode(event.keyCode).toLowerCase();
 
        event.returnValue = false;
 
    }
 
}
 
 
 
function HTDW_DataWindowClass(name, submitForm, actionField, contextField)
 
{
 
    // if used in 4GL web, these will not be defined!
 
    if (arguments.length == 1)
 
        {
 
        submitForm = null;
 
        actionField = null;
 
        contextField = null;
 
        }
 
 
 
    this.name = name;
 
    this.submitForm = submitForm;
 
    this.actionField = actionField;
 
    this.contextField = contextField;
 
    this.sortString = null;
 
    this.action = "";
 
 
 
    // private functions
 
    this.buttonPress = HTDW_buttonPress;
 
    this.performAction = HTDW_performAction;
 
 
 
    this.eventImplemented = HTDW_eventImplemented;
 
    this.itemClicked = HTDW_itemClicked;
 
 
 
    // public function
 
    this.GetFullContext = HTDW_GetFullContext;
 
 
 
    this.currRow = -1;
 
    this.currCol = -1;
 
    this.forcingBackFocusTo = null;
 
    this.currentControl = null;
 
    this.bSingleRow = false;
 
 
 
    this.gobs = new Object();
 
    this.rows = new Array();
 
    this.cols = new Array();
 
    this.navLayerForms = new Array();
 
    this.exprCtx = new HTDW_exprContextClass(this);
 
 
 
    // private functions
 
    this.getChanges = HTDW_getChanges;
 
    this.itemLoseFocus = HTDW_itemLoseFocus;
 
    this.selectControlContent = HTDW_selectControlContent;
 
    this.itemError = HTDW_itemError;
 
    this.itemGainFocus = HTDW_itemGainFocus;
 
    this.restoreFocus = HTDW_restoreFocus;
 
    this.findControl = HTDW_findControl;
 
    this.setCheckboxValue = HTDW_setCheckboxValue;
 
 
 
    // public functions
 
    this.AcceptText = HTDW_acceptText;
 
 
 
    // private functions
 
    this.getColNum = HTDW_getColNum;
 
 
 
    // public functions
 
    this.AcceptText = HTDW_acceptText;
 
    this.DeletedCount = HTDW_DeletedCount;
 
    this.DeleteRow = HTDW_DeleteRow;
 
    this.GetClickedColumn = HTDW_GetClickedColumn;
 
    this.GetClickedRow = HTDW_GetClickedRow;
 
    this.GetColumn = HTDW_GetColumn;
 
    this.GetNextModified = HTDW_GetNextModified;
 
    this.GetRow = HTDW_GetRow;
 
    this.GetItem = HTDW_GetItem;
 
    this.GetItemStatus = HTDW_GetItemStatus;
 
    this.InsertRow = HTDW_InsertRow;
 
    this.ModifiedCount = HTDW_ModifiedCount;
 
    this.Retrieve = HTDW_Retrieve;
 
    this.RowCount = HTDW_RowCount;
 
    this.ScrollFirstPage = HTDW_ScrollFirstPage;
 
    this.ScrollLastPage = HTDW_ScrollLastPage
 
    this.ScrollNextPage = HTDW_ScrollNextPage
 
    this.ScrollPriorPage = HTDW_ScrollPriorPage
 
    this.SetItem = HTDW_SetItem
 
    this.SetColumn = HTDW_SetColumn
 
    this.SetRow = HTDW_SetRow
 
    this.SetSort = HTDW_SetSort
 
    this.Sort = HTDW_Sort;
 
    this.Update = HTDW_Update
 
}
 
 
 
// determine the client browser
 
// this should be used only where ABSOLUTELY necessary
 
// Generic JavaScript should be used where ever possible
 
HTDW_DataWindowClass.isNav4 = false;
 
HTDW_DataWindowClass.isIE4 = false;
 
if (parseInt(navigator.appVersion) >= 4)
 
    {
 
    HTDW_DataWindowClass.isNav4 = (navigator.appName == "Netscape");
 
    HTDW_DataWindowClass.isIE4 = (navigator.appName.indexOf("Microsoft") != -1);
 
    }
 
 
 
function DW_ShowCodeTableDisplayValue(formatString, value)
 
{
 
    if (value == null)
 
        return "";
 
    var result = value.toString();
 
    var i;
 
    for (i = 0; i < this.column.displayValue.length; i++)
 
        if (value.toString() == this.column.dataValue[i])
 
            {
 
            result = this.column.displayValue[i];
 
            i = this.column.displayValue.length; 
 
            }
 
 
 
   return result;
 
}
 
 
 
// between is inclusive
 
function DW_Between(val, test1, test2)
 
{
 
    if (val == null || test1 == null || test2 == null)
 
        return false;
 
 
 
    if (test1 <= val && val <= test2)
 
        return true;
 
    else
 
        return false;
 
}
 
 
 
function DW_BetweenByFunc(val, test1, test2, func)
 
{
 
    return func(test1, val) >= 0 && func(val, test2) <= 0;
 
}
 
 
 
function DW_In(testValue)
 
{
 
    var bResult = false;
 
 
 
    for (var i=1; i < arguments.length; i++)
 
        {
 
        if (arguments[i] == testValue)
 
            {
 
            bResult = true;
 
            break;
 
            }
 
        }
 
    return bResult;
 
}
 
 
 
function DW_InByFunc(testValue, func)
 
{
 
    var bResult = false;
 
 
 
    for (var i=2; i < arguments.length; i++)
 
        {
 
        if (func(arguments[i],testValue) == 0)
 
            {
 
            bResult = true;
 
            break;
 
            }
 
        }
 
    return bResult;
 
}