var gsNonIEFormType = 'body';
var gsOnChangeEvent = "";
var gsOnMouseOverEvent = "";
var gsOnMouseOutEvent = "";
var gsOnModifyEvent = "";

var True = true;
var False = false;
/*----------------------------------------------------------------------------------------------------------------
    This library is created by Andrew Connolly on behalf of Rapid Ascent Pty Ltd.
    !! This header section must remain untouched if distributed !!
  
    Javascript classes, methods and members:
    
    Class Name & Contructor            Methods                                  Members
    ================================== ======================================== ====================
    NewImage  (psSource,               Write()                                  sId
               psId,                   HTML()                                   sSrc
               psClass,                                                         sClass
               psWidth,                                                         sHeight
               psHeight,                                                        sWidth
               psAltText,                                                       sLink
               psLink,                                                          bOpenInNewWindow
               pbOpenNewWindow)                                                 sAltText

    Layer     (psSectionId,            Visibility    (pbVisible)                sId
               psSectionClass,         SetDimensions (psWidth,                  sClass
               psSectionAlignment)                    psHeight)                 sAlignment
                                       SetPosition   (pbRelative,               sVisibility
                                                      psTopOffset,              sHeight
                                                      psLeftOffset,             sWidth
                                                      psRightOffset,            sTop
                                                      psBottomOffset)           sLeft
                                       BeginLayer()                             sRight
                                       EndLayer()                               sBottom
                                       ReplaceContent(psContent)                sContent
                                       Write()                                  sPosition
                                       HTML(),
                                            - returns sContent
                                                    
----------------------------------------------------------------------------------------------------------------*/

function NewImage(psSource, psId, psClass, psWidth, psHeight, psAltText, psLink, pbOpenNewWindow, psAlignment)
{
    // initialise member variables through constructor
    this.sSrc           = psSource;
    this.sId            = (!psId ?            false: psId);
    this.sAlign         = (!psAlignment ?     false: psAlignment);
    this.sClass         = (!psClass ?         false: psClass);
    this.sWidth         = (!psWidth ?         false: psWidth);
    this.sHeight        = (!psHeight ?        false: psHeight);
    this.sLink          = (!psLink ?          false: psLink);
    this.bOpenNewWindow = (!pbOpenNewWindow ? false: true);
    this.sAltText       = (!psAltText ?       false: psAltText);

    var sHTML = ""
    sHTML += (this.sLink ? "<a href=\"" + this.sLink + "\"" : "");
    sHTML += (this.bOpenInNewWindow && this.sLink? "   target='_blank'" : "");
    sHTML += (this.sLink ? ">" : "");
    sHTML += "<img src=\"" + this.sSrc + "\"";
    sHTML += (this.sId ?      " name=\"" + this.sId + "\"" : "");
    sHTML += (this.sClass ?   " class=\"" + this.sClass + "\"" : "");
    sHTML += (this.sAlign ?   " align=\"" + this.sAlign + "\"" : "");
    sHTML += (this.sHeight ?  " height=\"" + this.sHeight + "\"" : "");
    sHTML += (this.sWidth ?   " width=\"" + this.sWidth + "\"" : "");
    sHTML += (this.sAltText ? " alt=\"" + this.sAltText + "\"" : "");
    sHTML += ">";
    sHTML += (this.sLink ? "</a>": "");

    document.writeln(sHTML);

    return this;
}

function Layer(psSectionId, psSectionClass, psSectionAlignment)
{
    // initialise member variables through constructor
    this.sId        = psSectionId;
    this.sClass     = (psSectionClass ? psSectionClass : "");
    this.sAlignment = (psSectionAlignment ? psSectionAlignment : "");
    // initialise other member variables
    this.sVisibility  = "inherit";
    this.sHeight      = false;
    this.sWidth       = false;
    this.sTop         = false;
    this.sLeft        = false;
    this.sRight       = false;
    this.sBottom      = false;
    this.sPosition    = "relative";
    this.sContent     = "";

    // method 'headers'
    this.Visibility    = Visibility;
    this.SetPosition   = SetPosition;
    this.SetDimensions = SetDimensions;
    this.BeginLayer    = BeginLayer;
    this.EndLayer      = EndLayer;
    this.ReplaceContent= ReplaceContent;
    this.Write         = Write;
    this.HTML          = HTML;

    // method 'bodies'
    function Visibility (pbVisible)
    {
        this.sVisibility = (!pbVisible ? "hidden": "inherit");
    }

    function SetPosition (pbRelative, psTop, psLeft, psRight, psBottom)
    {
        this.sTop      = (!psTop      ? false: psTop);
        this.sLeft     = (!psLeft     ? false: psLeft);
        this.sRight    = (!psRight    ? false: psRight);
        this.sBottom   = (!psBottom   ? false: psBottom);
        this.sPosition = (!pbRelative ? "absolute": "relative");
    }

    function SetDimensions (psWidth, psHeight)
    {
        this.sWidth    = (!psWidth  ? false: psWidth);
        this.sHeight   = (!psHeight ? false: psHeight);
    }

    function BeginLayer ()
    {
        document.writeln("<DIV id=\"" + this.sId + "\"");
            (this.sAlignment ? document.writeln(" align=\""  + this.sAlignment + "\""):"");
            (this.sClass     ? document.writeln(" class=\""  + this.sClass + "\""):"");

        document.writeln("     style=\"visibility: " + this.sVisibility + ";");
            (this.sWidth     ? document.writeln("width: "    + this.sWidth + ";"):"");
            (this.sHeight    ? document.writeln("height: "   + this.sHeight + ";"):"");
            (this.sTop       ? document.writeln("top: "      + this.sTop + ";"):"");
            (this.sLeft      ? document.writeln("left: "     + this.sLeft + ";"):"");
            (this.sRight     ? document.writeln("right: "    + this.sRight + ";"):"");
            (this.sBottom    ? document.writeln("bottom: "   + this.sBottom + ";"):"");
            (this.sPosition  ? document.writeln("position: " + this.sPosition + ";"):"");
        document.writeln("\">");
    }

    function EndLayer ()
    {
        document.writeln("</DIV>");
    }

    function ReplaceContent(psContent)
    {
        this.sContent = (!psContent ? "": psContent);
        document.getElementById(this.sId).innerHTML = this.sContent;
    }

    function Write(psContent)
    {
        this.sContent = (!psContent ? "": psContent);
        this.BeginLayer();
        document.writeln(this.sContent);
        this.EndLayer();
    }

    function HTML()
    {
        // Haven't written yet
        return;
    }

    return this;
}

function NewTable(psClass, psHorizontalAlignment, psVerticalAlignment, psWidth, psHeight, piCellpadding, piCellspacing, psBackground)
{
    this.sClass =               (!psClass ?               false : psClass);
    this.sHorizontalAlignment = (!psHorizontalAlignment ? false : psHorizontalAlignment);
    this.sVerticalAlignment =   (!psVerticalAlignment ?   false : psVerticalAlignment);
    this.sWidth =               (!psWidth ?               false : psWidth);
    this.sHeight =              (!psHeight ?              false : psHeight);
    this.iCellpadding =         (!piCellpadding ?         false : piCellpadding);
    this.iCellspacing =         (!piCellspacing ?         false : piCellspacing);
    this.sBackground =          (!psBackground ?          false : psBackground);

    var sHTML = "<table";
    sHTML += (this.sClass               ? " class='"      + this.sClass + "'" : "");
    sHTML += (this.sHorizontalAlignment ? " align='"      + this.sHorizontalAlignment + "'" : "");
    sHTML += (this.sVerticalAlignment   ? " valign='"     + this.sVerticalAlignment + "'" : "");
    sHTML += (this.sWidth               ? " width='"      + this.sWidth + "'" : "");
    sHTML += (this.sHeight              ? " height='"     + this.sHeight + "'" : "");
    sHTML += (this.sBackground          ? " background='" + this.sBackground + "'" : "");
    sHTML += ((this.iCellpadding || 
               this.iCellpadding === 0 ||
               this.iCellpadding === "0") ? " cellpadding='" + this.iCellpadding + "'" : "");
    sHTML += ((this.iCellspacing || 
               this.iCellspacing === 0 ||
               this.iCellspacing === "0") ? " cellspacing='" + this.iCellspacing + "'" : "");
    sHTML += ">";

    document.writeln(sHTML);
}

function NewRow(pbFirstRow, psClass, psHorizontalAlignment, psVerticalAlignment, psHeight)
{
    this.bFirstRow =            (!pbFirstRow ?            false : true);
    this.sClass =               (!psClass ?               false : psClass); 
    this.sHorizontalAlignment = (!psHorizontalAlignment ? false : psHorizontalAlignment);
    this.sVerticalAlignment =   (!psVerticalAlignment ?   false : psVerticalAlignment);
    this.sHeight =              (!psHeight ?              false : psHeight);

    var sHTML = (!this.bFirstRow ? "</td></tr><tr" : "<tr");
    sHTML += (this.sClass ?               " class='"  + this.sClass + "'": "");
    sHTML += (this.sHorizontalAlignment ? " align='"  + this.sHorizontalAlignment + "'": "");
    sHTML += (this.sVerticalAlignment ?   " valign='" + this.sVerticalAlignment + "'": "");
    sHTML += (this.sHeight ?              " height='" + this.sHeight + "'": "");
    sHTML += ">";

    document.writeln(sHTML);
}

function NewCell(pbFirstColumn, psClass, psHorizontalAlignment, psVerticalAlignment, psWidth, psHeight, piColspan)
{
    this.bFirstColumn =         (!pbFirstColumn ?         false : true);
    this.sClass =               (!psClass ?               false : psClass); 
    this.sHorizontalAlignment = (!psHorizontalAlignment ? false : psHorizontalAlignment);
    this.sVerticalAlignment =   (!psVerticalAlignment ?   false : psVerticalAlignment);
    this.sWidth =               (!psWidth ?               false : psWidth);
    this.sHeight =              (!psHeight ?              false : psHeight);
    this.iColspan =             (!piColspan ?             false : piColspan);

    var sHTML = (!this.bFirstColumn ? "</td><td" : "<td");
    sHTML += (this.sClass ?               " class='"   + this.sClass + "'": "");
    sHTML += (this.sHorizontalAlignment ? " align='"   + this.sHorizontalAlignment + "'": "");
    sHTML += (this.sVerticalAlignment ?   " valign='"  + this.sVerticalAlignment + "'": "");
    sHTML += (this.sWidth ?               " width='"   + this.sWidth + "'": "");
    sHTML += (this.sHeight ?              " height='"  + this.sHeight + "'": "");
    sHTML += (this.iColspan ?             " colspan='" + this.iColspan + "'": "");
    sHTML += ">";

    document.writeln(sHTML);
}

function NewCellFromTable(pbFirstColumn, psClass, psHorizontalAlignment, psVerticalAlignment, psWidth, psHeight, piColspan)
{
    // Allows background images in Mozilla
    NewCell(pbFirstColumn, "", psHorizontalAlignment, psVerticalAlignment, psWidth, psHeight, piColspan)
        // Apply Class to Table
        NewTable(psClass, psHorizontalAlignment, psVerticalAlignment, "100%", "100%", "0", "0")
            NewRow(true, "", psHorizontalAlignment, psVerticalAlignment, "100%");
                NewCell(true, "", psHorizontalAlignment, psVerticalAlignment, "100%", "100%");
        EndTable();
}


function Link(psLinkText, psLinkAction, psClass, pbOpenInNewWindow)
{
    this.sLinkText = psLinkText;
    this.sLinkAction = psLinkAction;
    this.sClass = (!psClass ? false : psClass);

    var sHTML = "<A href='" + this.sLinkAction + "'";
    if (pbOpenInNewWindow)
        sHTML += (" target=_blank");
    if (psClass)
        sHTML += (" class='" + this.sClass + "'");
    sHTML += (">" + this.sLinkText);
    sHTML += "</a>";

    document.write(sHTML);
}

function Spacer(psWidth, psHeight)
{
    this.sWidth =  psWidth;
    this.sHeight = psHeight;

    NewImage("../images/RapidAscent/Spacer.gif", false, false, this.sWidth, this.sHeight);
}


/*----------------------------------------------------------------------------------------------------------------
    Global Javascript functions:
    
    Function Name                                       Returns
    =================================================== ==============================
    Maximum    (pvar1, pvar2, pbStringCompare)          pvar1 or pvar2
    Minimum    (pvar1, pvar2, pbStringCompare)          pvar1 or pvar2
    Write      (psHTML)
----------------------------------------------------------------------------------------------------------------*/
function Minimum(pvar1, pvar2, pbStringCompare)
{
    if (!pbStringCompare)
    {
        if (parseFloat(pvar1) < parseFloat(pvar2))
            return pvar1;
        else
            return pvar2;
    }
    else
    {
        if (pvar1.toString() < pvar2.toString())
            return pvar1;
        else
            return pvar2;
    }
}

function Maximum(pvar1, pvar2, pbStringCompare)
{
    if (!pbStringCompare)
    {
        if (parseFloat(pvar1) > parseFloat(pvar2))
            return pvar1;
        else
            return pvar2;
    }
    else
    {
        if (pvar1.toString() > pvar2.toString())
            return pvar1;
        else
            return pvar2;
    }
}

function Write(psHTML)
{
    document.writeln(psHTML);
}

function WriteNoLineBreak(psHTML)
{
    document.write(psHTML);
}

function EndTable()
{
    document.writeln("</td></tr></table>");
}

function ValidateEmail(psEmail)
{
    var bOK  = true
    var iAtSym    = psEmail.indexOf('@')
    var iPeriod   = psEmail.lastIndexOf('.')
    var iSpace    = psEmail.indexOf(' ')
    var iLength   = psEmail.length - 1

    if ((iAtSym < 1) ||
        (iPeriod <= iAtSym+1) ||
        (iPeriod == iLength ) ||
        (iSpace  != -1))
      bOK = false

    return bOK
}

function Trim(psTrimString) 
{
    while ((psTrimString.substring(0,1) == ' ') ||
           (psTrimString.substring(0,1) == '\n') || 
           (psTrimString.substring(0,1) == '\r'))
        psTrimString = psTrimString.substring(1, psTrimString.length);

    while ((psTrimString.substring(psTrimString.length-1, psTrimString.length) == ' ') ||
           (psTrimString.substring(psTrimString.length-1, psTrimString.length) == '\n') || 
           (psTrimString.substring(psTrimString.length-1, psTrimString.length) == '\r'))
        psTrimString = psTrimString.substring(0, psTrimString.length-1);

    return psTrimString;
}

function SetOnChangeEvent(psAction)
{
    gsOnChangeEvent = psAction;
}

function SetOnModifyEvent(psAction)
{
    gsOnModifyEvent = psAction;
}

function SetOnMouseOverEvent(psAction)
{
    gsOnMouseOverEvent = psAction;
}

function SetOnMouseOutEvent(psAction)
{
    gsOnMouseOutEvent = psAction;
}

function ListBox(psListBoxName, psListBoxClass, paListBoxValueArray, paListBoxTextArray, paListBoxSelectedValue, pbDisabled)
{
    var ListBoxSize = 3;
    if (paListBoxValueArray.length >= ListBoxSize)
        ListBoxSize = paListBoxValueArray.length + 1 ;
    if (ListBoxSize > 13)
        ListBoxSize = 13;

    document.write("<SELECT name=\"" + psListBoxName + "\"" );
    if (psListBoxClass)
        document.write("     class=\"" + psListBoxClass + "\"");

    if (pbDisabled)
        document.writeln(" disabled=\"false\"");

    if (gsOnChangeEvent != "")
    {
        document.writeln("       onChange=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = "";
    }
    document.writeln(">");

    if (! paListBoxTextArray)
        paListBoxTextArray = paListBoxValueArray;

    var i;

    for (i=0; i<paListBoxTextArray.length; i++)
    {
        document.write("    <OPTION VALUE=\"" + paListBoxValueArray[i] + "\"");
        if (paListBoxSelectedValue == paListBoxValueArray[i] ||
            paListBoxSelectedValue == paListBoxTextArray[i])
            document.write(" SELECTED");
        document.write(">");
        document.write(paListBoxTextArray[i]);
        document.writeln("</OPTION>");
    }

    document.writeln("</SELECT>");
}

function ListBoxClear(poListBox)
{
   var options=poListBox.getElementsByTagName("option");
   var i;
   // Loop through the array of options and remove each
   // each one from the parent's childNode list.
   for (i=0; i<options.length; i++)
   {
      poListBox.removeChild(options[i]);
   }// end for i
}// end clearbox

function TextBox (psTextBoxName, psTextBoxClass, psTextBoxValue, piTextBoxMaxLength, piTextBoxSize, pbTextBoxReadOnly)
{
    document.writeln("<Input type=\"text\"");
    if (pbTextBoxReadOnly)
        document.writeln("      readonly");
    if (!psTextBoxClass)
        psTextBoxClass = "textbox";
    document.writeln("       class=\"" + psTextBoxClass + "\"");
    if (psTextBoxValue)
        document.writeln("       value=\"" + psTextBoxValue + "\"");
    if (piTextBoxMaxLength)
        document.writeln("       maxlength=\"" + piTextBoxMaxLength + "\"");
    if (piTextBoxSize)
        document.writeln("       size=\"" + piTextBoxSize + "\"");
    if (gsOnChangeEvent != "")
    {
        document.writeln("       onChange=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = "";
    }
    if (gsOnModifyEvent != "")
    {
        document.writeln("       onClick=\"" + gsOnModifyEvent + "\"");
        document.writeln("       onKeyUp=\"" + gsOnModifyEvent + "\"");
        gsOnModifyEvent = "";
    }
    document.writeln("       name=\"" + psTextBoxName + "\">");
}

function TextAreaLengthCheck(poTextAreaObject, piLengthCheckMaxLength)
{
    if (poTextAreaObject.value.length > piLengthCheckMaxLength)
        poTextAreaObject.value = poTextAreaObject.value.substring(0, piLengthCheckMaxLength);
}

function TextArea(psTextAreaName, psTextAreaClass, psTextAreaValue, piTextAreaRows, piTextAreaColumns, piTextAreaMaxLength)
{
    if (!piTextAreaRows)
        piTextAreaRows = 6
    if (!piTextAreaColumns)
        piTextAreaColumns = 80;

    document.writeln("<TEXTAREA name=\"" + psTextAreaName + "\"");
    document.writeln("          rows=\"" + piTextAreaRows + "\"");
    document.writeln("          cols=\"" + piTextAreaColumns + "\"");
    if (!psTextAreaClass)
        psTextAreaClass = "textarea";
    document.writeln("          class=\"" + psTextAreaClass + "\"");
    if (piTextAreaMaxLength)
    {
        document.write("          onChange=\"StoreCursorLocation(this);" + gsOnModifyEvent + "TextAreaLengthCheck(this, " + piTextAreaMaxLength + ")\"");
        document.write("          onClick=\"StoreCursorLocation(this);" + gsOnModifyEvent + "TextAreaLengthCheck(this, " + piTextAreaMaxLength + ")\"");
        document.write("          onKeyUp=\"StoreCursorLocation(this);" + gsOnModifyEvent + "TextAreaLengthCheck(this, " + piTextAreaMaxLength + ")\"");
        document.write("          onBlur=\"TextAreaLengthCheck(this, " + piTextAreaMaxLength + ")\"");
        document.write("          onKeyDown=\"TextAreaLengthCheck(this, " + piTextAreaMaxLength + ")\"");
    }
    else
    {
        document.write("          onChange=\"StoreCursorLocation(this);" + gsOnModifyEvent + "\"");
        document.write("          onClick=\"StoreCursorLocation(this);" + gsOnModifyEvent + "\"");
        document.write("          onKeyUp=\"StoreCursorLocation(this);" + gsOnModifyEvent + "\"");
    }

    document.write("          onSelect=\"StoreCursorLocation(this)\"");
    document.write("          onDblClick=\"StoreCursorLocation(this)\"");

    if (gsOnChangeEvent != "")
    {
        document.writeln("       onChange=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = "";
    }
    document.writeln(">");
    document.write(psTextAreaValue);
    document.writeln("</TEXTAREA>");
}

function StoreCursorLocation(poTextArea)
{
    if (poTextArea.createTextRange) 
        poTextArea.caretPos = document.selection.createRange().duplicate();

    gsNonIEFormType = poTextArea.name;
}

function Button (psButtonLabel, psButtonAction, psButtonClass, psId)
{
    if (!psButtonClass)
        psButtonClass = "button";
    if (!psButtonAction)
        psButtonAction = "Submit()";

    document.writeln("<input type=\"button\"");
    document.writeln(psId ? (" id=\"" + psId + "\"") : "");
    document.writeln("       value=\"" + psButtonLabel + "\"");
    document.writeln("       class=\"" + psButtonClass + "\"");
    if (gsOnMouseOverEvent != "")
    {
        document.writeln("       onMouseOver=\"" + gsOnMouseOverEvent + "\"");
        gsOnMouseOverEvent = ""
    }
    if (gsOnMouseOutEvent != "")
    {
        document.writeln("       onMouseOut=\"" + gsOnMouseOutEvent + "\"");
        gsOnMouseOutEvent = "";
    }
    document.writeln("       onClick=\"" + psButtonAction + "\">");
}

function Submit()
{
    if (!Validate)
        gfrmForm.submit();
    else if (Validate())
        gfrmForm.submit();
}

function ListItem(psListItemText, psListItemClass, psListItemLink)
{
    document.write("<li");
    if (psListItemClass)
        document.write(" class=\"" + psListItemClass + "\"");
    document.write(">");
    if (psListItemLink)
        Link(psListItemText, psListItemLink, psListItemClass);
    else
        document.write(psListItemText)
    document.writeln("</li>");
}

function ListItemStart(pbNumbered, psListClass)
{
    if (pbNumbered)
        document.write("<ol");
    else
        document.write("<ul");
    if (psListClass)
        document.write(" class=\"" + psListClass + "\"");
    document.writeln(">");
}

function ListItemEnd(pbNumbered)
{
    if (pbNumbered)
        document.writeln("</ol>");
    else
        document.writeln("</ul>");
}

function SpanStart(psClass, psId, psStyle)
{
    document.write("<SPAN");
    document.write(psClass ? (" class=\"" + psClass + "\"") : "");
    document.write(psId ? (" id=\"" + psId + "\"") : "");
    document.write(psStyle ? (" style=\"" + psStyle + "\"") : "");
    document.writeln(">");
}

function SpanEnd()
{
    document.write("</SPAN>");
}

function LayerStart(psClass, psId, psStyle)
{
    document.write("<DIV");
    document.write(psClass ? (" class=\"" + psClass + "\"") : "");
    document.write(psId ? (" id=\"" + psId + "\"") : "");
    document.write(psStyle ? (" style=\"" + psStyle + "\"") : "");
    document.writeln(">");
}

function LayerEnd()
{
    document.write("</DIV>");
}

function Password (psPasswordName, psPasswordClass, piPasswordMaxLength, piPasswordSize, psPasswordValue)
{
    if (!psPasswordClass)
        psPasswordClass = "password";

    document.writeln("<Input type=\"password\"");
    document.writeln(psPasswordClass    ?(" class=\""     + psPasswordClass     + "\""):"");
    document.writeln(piPasswordMaxLength?(" maxlength=\"" + piPasswordMaxLength + "\""):"");
    document.writeln(piPasswordSize     ?(" size=\""      + piPasswordSize      + "\""):"");
    document.writeln(psPasswordValue    ?(" value=\""     + psPasswordValue     + "\""):"");
    /*if (gsOnChangeEvent != "")
    {
        DocumentWriteLine("       onChange=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = gsDefaultOnChangeEvent;
    }*/
    document.writeln("       name=\"" + psPasswordName + "\">");
}

function FormBegin(psFormName, psFormAction, pbContainsFile)
{
    document.writeln("<form name='" + psFormName + 
                         "' action='" + psFormAction + "'");
    if (pbContainsFile)
        document.writeln("  enctype=\"multipart/form-data\"");
    document.writeln("      method='POST'>");
}

function FormEnd(psFormName, psFormVariable)
{
    document.writeln("</FORM>");
    if (psFormName && psFormVariable)
        eval("var " + psFormVariable + " = document." + psFormName);
}

function CheckBox(psCheckBoxName, psCheckBoxClass, pbCheckBoxSelected)
{
    if (pbCheckBoxSelected == "0" ||
        pbCheckBoxSelected == "False")
        pbCheckBoxSelected = false;

    document.writeln("<input type=\"checkbox\"");
    document.writeln("       name=\"" + psCheckBoxName + "\"");
    if (psCheckBoxClass)
        document.write("       class=\"" + psCheckBoxClass + "\"");
    if (pbCheckBoxSelected)
        document.write("       CHECKED");
    if (gsOnChangeEvent != "")
    {
        document.write("       onClick=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = "";
    }
    document.writeln(">");
}

function DaysInMonth(DIMMonth, DIMYear)
{
    DIMMonth = DIMMonth.toString();

    var FebDays;
    if (DIMYear % 400 == 0)
        FebDays = 29;
    else if (DIMYear % 100 == 0)
        FebDays = 28;
    else if (DIMYear % 4 == 0)
        FebDays = 29;
    else
        FebDays = 28;

    if (DIMMonth == 1 || 
        DIMMonth.toUpperCase().substr(0, 3) == "JAN")
        return 31;
    if (DIMMonth == 2 || 
             DIMMonth.toUpperCase().substr(0, 3) == "FEB")
        return FebDays;
    else if (DIMMonth == 3 || 
             DIMMonth.toUpperCase().substr(0, 3) == "MAR")
        return 31;
    else if (DIMMonth == 4 || 
             DIMMonth.toUpperCase().substr(0, 3) == "APR")
        return 30;
    else if (DIMMonth == 5 || 
             DIMMonth.toUpperCase().substr(0, 3) == "MAY")
        return 31;
    else if (DIMMonth == 6 || 
             DIMMonth.toUpperCase().substr(0, 3) == "JUN")
        return 30;
    else if (DIMMonth == 7 || 
             DIMMonth.toUpperCase().substr(0, 3) == "JUL")
        return 31;
    else if (DIMMonth == 8 || 
             DIMMonth.toUpperCase().substr(0, 3) == "AUG")
        return 31;
    else if (DIMMonth == 9 || 
             DIMMonth.toUpperCase().substr(0, 3) == "SEP")
        return 30;
    else if (DIMMonth == 10 || 
             DIMMonth.toUpperCase().substr(0, 3) == "OCT")
        return 31;
    else if (DIMMonth == 11 || 
             DIMMonth.toUpperCase().substr(0, 3) == "NOV")
        return 30;
    else if (DIMMonth == 12 || 
             DIMMonth.toUpperCase().substr(0, 3) == "DEC")
        return 31;
    else
        return "Invalid month (" + DIMMonth.toUpperCase().substr(0, 3) + ") passed to 'DaysInMonth' javascript function.";        
}

function ConvertMonthFormat (InputMonth, OutputType)
{
    // Output Types - 0=Number, 1=ShortMonth, 2=LongMonth
    var MonthNumber;
    var MonthName;

    var MonthInputString = new String(InputMonth);
    MonthInputString = MonthInputString.toUpperCase().substring(0, 3);

    if (MonthInputString == "1" ||
        MonthInputString == "JAN")
    {
        MonthNumber = 1
        MonthName = "January"
    }
    else if (MonthInputString == "2" ||
             MonthInputString == "FEB")
    {
        MonthNumber = 2
        MonthName = "February"
    }
    else if (MonthInputString == "3" ||
             MonthInputString == "MAR")
    {
        MonthNumber = 3
        MonthName = "March"
    }
    else if (MonthInputString == "4" ||
             MonthInputString == "APR")
    {
        MonthNumber = 4
        MonthName = "April"
    }
    else if (MonthInputString == "5" ||
             MonthInputString == "MAY")
    {
        MonthNumber = 5
        MonthName = "May"
    }
    else if (MonthInputString == "6" ||
             MonthInputString == "JUN")
    {
        MonthNumber = 6
        MonthName = "June"
    }
    else if (MonthInputString == "7" ||
             MonthInputString == "JUL")
    {
        MonthNumber = 7
        MonthName = "July"
    }
    else if (MonthInputString == "8" ||
             MonthInputString == "AUG")
    {
        MonthNumber = 8
        MonthName = "August"
    }
    else if (MonthInputString == "9" ||
             MonthInputString == "SEP")
    {
        MonthNumber = 9
        MonthName = "September"
    }
    else if (MonthInputString == "10" ||
             MonthInputString == "OCT")
    {
        MonthNumber = 10
        MonthName = "October"
    }
    else if (MonthInputString == "11" ||
             MonthInputString == "NOV")
    {
        MonthNumber = 11
        MonthName = "November"
    }
    else if (MonthInputString == "12" ||
             MonthInputString == "DEC")
    {
        MonthNumber = 12
        MonthName = "December"
    }
    else
    {
        MonthNumber = -1
        MonthName = "?"
    }

    if (OutputType == 0)
        return MonthNumber
    else if (OutputType == 1)
        return MonthName.substring(0, 3);
    else if (OutputType == 2)
        return MonthName
    else
        return "Invalid Output Type passed to ConvertMonthFormat function"
}

function RadioButton(psRadioButtonGroup, psRadioButtonValue, psRadioButtonClass, pbRadioButtonSelected)
{
    document.write("<input type=\"radio\"");
    document.write("       name=\"" + psRadioButtonGroup + "\"");
    document.write("       value=\"" + psRadioButtonValue + "\"");
    if (psRadioButtonClass)
        document.write("       class=\"" + psRadioButtonClass + "\"");
    if (pbRadioButtonSelected)
        document.write("       checked");
    if (gsOnChangeEvent != "")
    {
        document.writeln("       onClick=\"" + gsOnChangeEvent + "\"");
        gsOnChangeEvent = "";
    }
    document.writeln(">");
}

function Hidden(psName, psValue)
{
    document.writeln("<input type=\"HIDDEN\"");
    document.writeln("       name=\"" + psName + "\"");
    document.writeln("       value=\"" + psValue + "\">");
}

function NewWindowFromLink(psURL, piWidth, piHeight)
{
    var bAllowResize = false;

    if (!piWidth)
        piWidth = "width=500, ";
    else if (piWidth < 0)
    {
        bAllowResize = true;
        piWidth = "";
    }
    else
        piWidth = "width=" + piWidth + ", ";
    
    if (!piHeight)
        piHeight = "height=640, ";
    else if (piHeight < 0)
        piHeight = "";
    else
        piHeight = "height=" + piHeight + ", ";

    if (bAllowResize)
        window.open(psURL, 
                    "", 
                    "statusbar=no, " +
                    "scrollbars=yes, " +
                    "resizable=yes, " +
                    "copyhistory=no " +
                    piWidth +
                    piHeight);
    else
        window.open(psURL, 
                    "", 
                    "statusbar=no, " +
                    "scrollbars=no, " +
                    "resizable=no, " +
                    "copyhistory=no " +
                    piWidth +
                    piHeight);
}

function FlashMovie(psMovieLocation, piWidth, piHeight)
{
    document.writeln('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ');
    document.writeln('        width="' + piWidth + '" ');
    document.writeln('        height="' + piHeight + '">');
    document.writeln('    <param name="wmode"');
    document.writeln('           value="opaque">');
    document.writeln('    <param name="movie"');
    document.writeln('           value="' + psMovieLocation + '">');
    document.writeln('    <param name="quality"');
    document.writeln('           value="high">');
    document.writeln('<embed src="' + psMovieLocation + '" ');
    document.writeln('       wmode="opaque" ');
    document.writeln('       quality="high" ');
    document.writeln('       pluginspage="http://www.macromedia.com/go/getflashplayer" ');
    document.writeln('       type="application/x-shockwave-flash" ');
    document.writeln('       width="' + piWidth + '" ');
    document.writeln('       height="' + piHeight + '"></embed></object>');
}

function Line(psLineWidth, psLineHeight)
{
    NewImage("../images/RapidAscent/Line.gif", "", "", psLineWidth, psLineHeight);
}

function IsSelectionEmpty(poTextArea)
{
    if (poTextArea && 
        poTextArea.createTextRange && 
        poTextArea.caretPos)
        return (poTextArea.caretPos.text == '');
    else if (!document.all && 
             document.getElementById)
        return (MozillaSelectedText(poTextArea) == '');
    else
        return true;
}

function InsertAroundTextSelection(poTextArea, sPreText, sPostText)
{
    if (poTextArea && 
        poTextArea.createTextRange && 
        poTextArea.caretPos)
    {
        var oCursorLocation = poTextArea.caretPos;
        oCursorLocation.text = sPreText + oCursorLocation.text + sPostText;
    }
    else if (!document.all && 
             document.getElementById)
        MozillaWrap(document.getElementById('input' + gsNonIEFormType), sPreText, sPostText);        
    else
        document.getElementById('input' + gsNonIEFormType).value += sPreText + sPostText;
}

function MozillaWrap(poTextArea, psLeftPos, psRightPos)
{
    var iSelLength = poTextArea.textLength;
    var iSelStart = poTextArea.selectionStart;
    var iSelEnd = poTextArea.selectionEnd;
    if (iSelEnd == 1 || iSelEnd == 2)
        iSelEnd = iSelLength;
    var s1 = (poTextArea.value).substring(0, iSelStart);
    var s2 = (poTextArea.value).substring(iSelStart, iSelEnd)
    var s3 = (poTextArea.value).substring(iSelEnd, iSelLength);
    poTextArea.value = s1 + psLeftPos + s2 + psRightPos + s3;
}

function MozillaReplace(poTextArea, psNewText)
{
    var iSelLength = poTextArea.textLength;
    var iSelStart = poTextArea.selectionStart;
    var iSelEnd = poTextArea.selectionEnd;
    if (iSelEnd == 1 || iSelEnd == 2)
        iSelEnd = iSelLength;
    var s1 = (poTextArea.value).substring(0, iSelStart);
    var s2 = (poTextArea.value).substring(iSelEnd, iSelLength);
    poTextArea.value = s1 + psNewText + s2;
}

function MozillaSelectedText(poTextArea)
{
    var iSelLength = poTextArea.textLength;
    var iSelStart = poTextArea.selectionStart;
    var iSelEnd = poTextArea.selectionEnd;
    if (iSelEnd == 1 || iSelEnd == 2)
        iSelEnd = iSelLength;
    return (poTextArea.value).substring(iSelStart, iSelEnd);
}

function GetSelectionText(poTextArea)
{
    if (!document.all && 
        document.getElementById)
        return MozillaSelectedText(poTextArea);
    else
        return poTextArea.caretPos.text;
}

function InsertAtCursorLocation(poTextArea, psTextToInsert)
{
    if (poTextArea && 
        poTextArea.createTextRange && 
        poTextArea.caretPos)
    {
        var oCursorLocation = poTextArea.caretPos;
        oCursorLocation.text = oCursorLocation.text.charAt(oCursorLocation.text.length - 1) == ' ' ? 
                              psTextToInsert + ' ' : psTextToInsert;
    }
    else if (!document.all && 
             document.getElementById)
        MozillaReplace(document.getElementById('input' + gsNonIEFormType), psTextToInsert);                
    else if (poTextArea)
        poTextArea.value  += psTextToInsert;
    else 
        document.getElementById('input' + gsNonIEFormType).value += psTextToInsert;        
}

function ReplaceForumSpecialCharacters(psForumMessage, psCurrentClass, psNoBorderClass)
{
    if (psForumMessage.toUpperCase().indexOf("[HTML]") < 0)
    {
        // Quote
        psForumMessage = psForumMessage.replace(/\[qn\]/gi, "<table><tr><td class='" + psNoBorderClass + "'>");
        psForumMessage = psForumMessage.replace(/\[\/qn\]/gi, "</td></tr></table>");
        psForumMessage = psForumMessage.replace(/\[q\]/gi, "<table cellpadding=8><tr><td class='" + psCurrentClass + "'>");
        psForumMessage = psForumMessage.replace(/\[\/q\]/gi, "</td></tr></table>");
        // Emoticons
        var eee;
        psForumMessage = psForumMessage.replace(/:drunken:/gi, "<img src='../images/Emoticons/Drunk.gif'></img>");
        psForumMessage = psForumMessage.replace(/:D/gi, "<img src='../images/Emoticons/BigSmile.gif'></img>");
        psForumMessage = psForumMessage.replace(/:\)/gi, "<img src='../images/Emoticons/Smile.gif'></img>");
        psForumMessage = psForumMessage.replace(/:\(/gi, "<img src='../images/Emoticons/Sad.gif'></img>");
        psForumMessage = psForumMessage.replace(/:oops:/gi, "<img src='../images/Emoticons/Embarassed.gif'></img>");
        psForumMessage = psForumMessage.replace(/:o/gi, "<img src='../images/Emoticons/Surprised.gif'></img>");
        psForumMessage = psForumMessage.replace(/:shock:/gi, "<img src='../images/Emoticons/Startled.gif'></img>");
        psForumMessage = psForumMessage.replace(/:\?:/gi, "<img src='../images/Emoticons/Question.gif'></img>");
        psForumMessage = psForumMessage.replace(/:\?/gi, "<img src='../images/Emoticons/Confused.gif'></img>");
        psForumMessage = psForumMessage.replace(/8\)/gi, "<img src='../images/Emoticons/Cool.gif'></img>");
        psForumMessage = psForumMessage.replace(/:lol:/gi, "<img src='../images/Emoticons/Laughing.gif'></img>");
        psForumMessage = psForumMessage.replace(/:x/gi, "<img src='../images/Emoticons/Mad.gif'></img>");
        psForumMessage = psForumMessage.replace(/:P/gi, "<img src='../images/Emoticons/Raspberry.gif'></img>");
        psForumMessage = psForumMessage.replace(/:cry:/gi, "<img src='../images/Emoticons/Cry.gif'></img>");
        psForumMessage = psForumMessage.replace(/:evil:/gi, "<img src='../images/Emoticons/Evil.gif'></img>");
        psForumMessage = psForumMessage.replace(/:twisted:/gi, "<img src='../images/Emoticons/Twisted.gif'></img>");
        psForumMessage = psForumMessage.replace(/:roll:/gi, "<img src='../images/Emoticons/Rolleyes.gif'></img>");
        psForumMessage = psForumMessage.replace(/;\)/gi, "<img src='../images/Emoticons/Wink.gif'></img>");
        psForumMessage = psForumMessage.replace(/:!:/gi, "<img src='../images/Emoticons/Exclamation.gif'></img>");
        psForumMessage = psForumMessage.replace(/:idea:/gi, "<img src='../images/Emoticons/Idea.gif'></img>");
        psForumMessage = psForumMessage.replace(/:cheers:/gi, "<img src='../images/Emoticons/Cheers.gif'></img>");
        psForumMessage = psForumMessage.replace(/:scratch:/gi, "<img src='../images/Emoticons/ScratchHead.gif'></img>");
        psForumMessage = psForumMessage.replace(/:study:/gi, "<img src='../images/Emoticons/Study.gif'></img>");
        psForumMessage = psForumMessage.replace(/:thumbsdown:/gi, "<img src='../images/Emoticons/ThumbDown.gif'></img>");
        psForumMessage = psForumMessage.replace(/:thumbsup:/gi, "<img src='../images/Emoticons/ThumbUp.gif'></img>");
    
        // Text Formatting
        psForumMessage = psForumMessage.replace(/\[b\]/gi, "<b>");
        psForumMessage = psForumMessage.replace(/\[u\]/gi, "<u>");
        psForumMessage = psForumMessage.replace(/\[i\]/gi, "<i>");
        psForumMessage = psForumMessage.replace(/\[list\]/gi, "<ul>");
        psForumMessage = psForumMessage.replace(/\[list\=\]/gi, "<ol>");
        psForumMessage = psForumMessage.replace(/\[\*\]/gi, "<li>");
        psForumMessage = psForumMessage.replace(/\[url\]([^\[]*)/gi, "<a target=_blank href='$1'>$1");
        psForumMessage = psForumMessage.replace(/\[img\]([^\[]*)/gi, "<img class=ontableft src='$1'>");
        psForumMessage = psForumMessage.replace(/\[imgright\]([^\[]*)/gi, "<img align=right class=ontabright src='$1'>");
        psForumMessage = psForumMessage.replace(/\[imgleft\]([^\[]*)/gi, "<img align=left class=ontableft src='$1'>");
        psForumMessage = psForumMessage.replace(/\[fontsize=([^\]]*)\]/gi, "<fontsize=$1>");
        psForumMessage = psForumMessage.replace(/\[color=([^\]]*)\]/gi, "<color=$1>");

        psForumMessage = psForumMessage.replace(/\[\/b\]/gi, "</b>");
        psForumMessage = psForumMessage.replace(/\[\/u\]/gi, "</u>");
        psForumMessage = psForumMessage.replace(/\[\/i\]/gi, "</i>");
        psForumMessage = psForumMessage.replace(/\[\/list\]/gi, "</ul>");
        psForumMessage = psForumMessage.replace(/\[\/list\=\]/gi, "</ol>");
        psForumMessage = psForumMessage.replace(/\[\/url\]/gi, "</a>");
        psForumMessage = psForumMessage.replace(/\[\/img\]/gi, "</img>");
        psForumMessage = psForumMessage.replace(/\[\/imgright\]/gi, "</img>");
        psForumMessage = psForumMessage.replace(/\[\/imgleft\]/gi, "</img>");
        psForumMessage = psForumMessage.replace(/\[\/fontsize\]/gi, "</fontsize>");
        psForumMessage = psForumMessage.replace(/\[\/color\]/gi, "</color>");
    }
    else
    {
        psForumMessage = psForumMessage.replace(/\[HTML\]/gi, "");
        psForumMessage = psForumMessage.replace(/&lt;/gi, "<");
        psForumMessage = psForumMessage.replace(/&gt;/gi, ">");
    }

    return psForumMessage;
}

function SetVisibility (psId, pbVisible)
{
    eval("document.getElementById('" + psId + "').style.visibility=" + (!pbVisible ? "'hidden';": "'inherit';"));
}

function GetVisibility (psId)
{
    return eval("document.getElementById('" + psId + "').style.visibility=='inherit';");
}

function ReplaceContent(psId, psContent)
{
    document.getElementById(psId).innerHTML = psContent;
}

function GetCheckBoxValue(poCheckbox)
{
    if (poCheckbox &&
        poCheckbox.checked)
        return 1;
    else
        return 0;
}

function GetRadioButtonValue(poRadiobuttonGroup)
{
    var i;
    for (i = 0; i < poRadiobuttonGroup.length; i++)
    {
        if (poRadiobuttonGroup[i].checked)
            return poRadiobuttonGroup[i].value;
    }
    return '';
}

function SetRadioButtonValue(poRadiobuttonGroup, psValue)
{
    var i;
    for (i = 0; i < poRadiobuttonGroup.length; i++)
    {
        if (poRadiobuttonGroup[i].value == psValue)
            poRadiobuttonGroup[i].checked = true;
        else
            poRadiobuttonGroup[i].checked = false;
    }
}

function TruncateString(psString, piLength)
{
    if (psString.length > piLength)
        return psString.substr(0, piLength - 3) + " ...";
    return psString;
}

function ImageWithCaption(psImageURL, psCaption, psAlignment, psPhotographerCredit, psImageWidth, psImageHeight, 
                          psLinkURL, psCaptionClass, psImageClass, psCaptionAlignment, psAltText)
{
    document.write('<table');
    if (!psAltText)
        psAltText = psCaption;
    if (psAlignment)
        document.writeln(' align="' + psAlignment + '">');
    else
        document.writeln('>');
    document.write('<caption ');
    if (psCaptionClass)
        document.writeln(' class="' + psCaptionClass + '" ');
    if (!psCaptionAlignment)
        psCaptionAlignment = "bottom";
    document.writeln(' align="' + psCaptionAlignment + '"> ');
    document.writeln(psCaption);
    if (psPhotographerCredit)
        document.writeln('<br>Photo &copy; ' + psPhotographerCredit);
    document.writeln('</caption><tr><td>');
    if (psLinkURL)
        document.writeln('<a href="' + psLinkURL+ '">');
    document.write('<img src="' + psImageURL + '" ' +
                        'alt="' + psAltText  + '" ' +
                        'title="' + psAltText + '"');
    if (!psImageClass)
        psImageClass = 'ontab' + psAlignment;
    document.write(' class="' + psImageClass + '"');
    if (psImageWidth)
        document.write(' width="' + psImageWidth + '"');
    if (psImageHeight)
        document.write(' height="' + psImageHeight + '"');
    document.writeln('>');
    if (psLinkURL)
        document.writeln('</a>');
    document.writeln('</td></tr></table>');
}

function File(psName, psClass, psSize)
{
    if (!psClass)
        psClass="file";
    document.write("<INPUT type='file' " +
                   "       name='" + psName + "'" +
                   "       class='" + psClass + "'");
    if (psSize)
        document.write("   size='" + psSize + "'");
    document.writeln(">");
}

function Graph(psDataSource, psHeight, psWidth)
{
    document.write("<embed src='" + psDataSource + "' " + 
                   "       type='image/svg+xml' " +
                   "       height='" + psheight + "'" +
                   "       width='" + psWidth + "'/>");
}

function CommasInNumber(pdecNumber)
{
    pdecNumber += '';
	x = pdecNumber.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function FormatNumeric(poTextBox, piDecimalPlaces, pbIsCurrency, pbZeroIfBlank)
{
    poTextBox.value= FormatNumber(poTextBox.value, piDecimalPlaces, pbIsCurrency, pbZeroIfBlank);
}

function FormatNumber(pdecValue , piDecimalPlaces, pbIsCurrency, pbZeroIfBlank)
{
    if (!piDecimalPlaces ||
        isNaN(piDecimalPlaces))
        piDecimalPlaces = 0;
    else
        piDecimalPlaces = parseInt(piDecimalPlaces);
        
    var i, decNewNumber;
    var sNewText = ""
    var bDecimalFound = false;
    var sText = String(pdecValue);
    var bNegative = !(sText.indexOf('-') == -1);
    for (i = 0; i < sText.length; i++)
    {
        if ((sText.charAt(i) >= 0 &&
             sText.charAt(i) <= 9) ||
            (sText.charAt(i) == "." &&
             !bDecimalFound))
        {
            if (sText.charAt(i) == ".")
                bDecimalFound = true;
            sNewText += sText.charAt(i);
        }
    }
    if (sNewText == "." ||
        sNewText == "")
        decNewNumber = 0;
    else
        decNewNumber = parseFloat(sNewText);
    if (pbZeroIfBlank &&
        decNewNumber == parseFloat("0"))
        return "";
    
    decNewNumber = Math.round(decNewNumber * Math.pow(10, piDecimalPlaces)) / Math.pow(10, piDecimalPlaces);
    decNewNumber = String(decNewNumber);
    
    if (piDecimalPlaces > 0 &&
        decNewNumber.indexOf(".") < 0)
        decNewNumber = decNewNumber + ".";
    while (decNewNumber.substr(decNewNumber.indexOf(".")).length <= piDecimalPlaces)
        decNewNumber = decNewNumber + "0";

    return (pbIsCurrency?"$":"") + decNewNumber;
}

function ValidationError(poFocusObject, psErorMessage)
{
    alert(psErorMessage);
    poFocusObject.focus();
    return false;
}

function NewCellPair(psLabel, psValue, pbFirst)
{
    if (!pbFirst)
        document.write("</TD>");
    document.write("<TD>" + psLabel + "</TD><TD>" + psValue);

}

function GetText(poObject)
{
    if (!poObject)
        alert("No object passed into GetText function");
    else if (poObject.type != "select-one")
        return GetValue(poObject)
    else
    {
        var cc;
        for (cc = 0; cc < poObject.length; cc++)
        {
            if (poObject[cc].selected)
                return poObject[cc].text;
        }
        return "";
    }
}

function GetValue(poObject)
{
    if (!poObject)
        return "";
    if (poObject.type == "file" ||
        poObject.type == "text" ||
        poObject.type == "textarea" ||
        poObject.type == "hidden" ||
        poObject.type == "password")
        return poObject.value;
    else if (poObject.type == "checkbox")
        return poObject.checked;
    else if (poObject.type == "select-one")
    {
        var cc;
        for (cc = 0; cc < poObject.length; cc++)
        {
            if (poObject[cc].selected)
                return poObject[cc].value;
        }
        return "";
    }
    else // Must be a radio button !? ACtually still need to cater for select-multiple
        return GetRadioButtonValue(poObject);
        
}

function SetValue(poObject, pValue)
{
    if (!poObject)
        return;
    if (poObject.type == "file" ||
        poObject.type == "text" ||
        poObject.type == "textarea" ||
        poObject.type == "hidden" ||
        poObject.type == "password")
        poObject.value = pValue;
    else if (poObject.type == "checkbox")
        poObject.checked = (pValue == "" ||
                            pValue == 0 ||
                            pValue == "0" ||
                            !pValue ||
                            pValue=="false" || // workaround in case you are switching from hidden field to checkbox.
                            pValue=="False"?false:true);
    else if (poObject.type == "select-one")
    {
        var cc;
        for (cc = 0; cc < poObject.length; cc++)
        {
            if (poObject[cc].value == pValue)
                poObject[cc].selected = true;
            else
                poObject[cc].selected = false;
        }
    }
    else // Must be a radio button !? Actually still need to cater for select-many
        SetRadioButtonValue(poObject, pValue);
}

function ValidateNumeric(poObject, piMaxValue, piMinValue, piAction, psWarning)
{
    // piAction, 1 show warning, set focus, return false
    //           2 don't show warning, change value, return true
    if (!piAction)
        piAction = 2;
    if (!piMaxValue)
        piMaxValue = 999999999;
    if (!piMinValue)
        piMinValue = 0;
    if (!psWarning)
        psWarning = "The number specified was either not valid, or outside the acceptable range."

    var sNewValue;

    sNewValue = parseInt(poObject.value);
    if (isNaN(sNewValue))
        sNewValue = piMinValue;
    if (sNewValue < piMinValue)
        sNewValue = piMinValue;
    if (sNewValue > piMaxValue)
        sNewValue = piMaxValue;

    if (sNewValue == poObject.value)
    {
        poObject.value = sNewValue;
        return true;
    }

    if (piAction == 1)
        return ValidationError(poObject, psWarning);
    else if (piAction == 2)
    {
        poObject.value = sNewValue;
        return true;
    }

    alert("Invalid piAction passed to ValidateNumeric javascript function.");
    return false;
}

function GetDay(pdtDate)
{
    var iDate = pdtDate.getDay();
    switch (iDate)
    {
        case 0:
            return "Sunday";
            break;
        case 1:
            return "Monday";
            break;
        case 2:
            return "Tuesday";
            break;
        case 3:
            return "Wednesday";
            break;
        case 4:
            return "Thursday";
            break;
        case 5:
            return "Friday";
            break;
        case 6:
            return "Saturday";
            break;
    }
    return -1;
}

function AddSuffix(piNumber)
{
    if (piNumber % 10 == 1 &&
        piNumber % 100 != 11)
        return 'st';
    else if (piNumber % 10 == 2 &&
             piNumber % 100 != 12)
        return 'nd';
    else if (piNumber % 10 == 3 &&
             piNumber % 100 != 13)
        return 'rd';
    return 'th';
}

function Scroller(pId, pWidth, pHeight, piNum, bAxis, pbMouse)
{
    this.id = pId;
    this.el = document.getElementById?document.getElementById(pId):null;
    if (!this.el)
        return;
    this.css = this.el.style;
    this.css.left = this.x = 0;
    this.css.top = this.y = 0;
    this.w = pWidth;
    this.h = pHeight;
    this.num = piNum;
    this.axis = bAxis || "v";
    this.ctr = 0;
    this.pause = 5000;
    this.speed = 60;
    if (pbMouse)
        Scrollers.setMouseEvents(this.el);
    this.lastTime = new Date().getTime();
    this.check = 0;
    this.index = Scrollers.ar.length;
    Scrollers.ar[this.index] = this;
    this.active = true;
};

Scroller.prototype.setTiming = function(pSpeed, pPause)
{
    this.speed = pSpeed;
    this.pause = pPause;
};

Scroller.prototype.controlScroll = function()
{
    if (this.ctr > this.num - 1)
    {
        this.shiftTo(0, 0);
        this.ctr = 1;
    }
    else
    {
        switch (this.axis)
        {
            case "v":
                if (this.y > -this.h * this.ctr)
                {
                    var ny = this.y + -1 * this.elapsed / 1000 * this.speed;
                    ny = Math.max(ny, -this.h * this.ctr);
                    this.shiftTo(0,ny);
                }
                else
                    this.doPause();
                break;
            case "h":
                if (this.x > -this.w * this.ctr)
                {
                    var nx = this.x + -1 * this.elapsed / 1000 * this.speed;
                    nx = Math.max(nx, -this.w * this.ctr);
                    this.shiftTo(nx,0);
                }
                else 
                    this.doPause();
                break;
        }
    }
};

Scroller.prototype.doPause = function()
{
    this.check += this.elapsed;
    if (this.check >= this.pause)
    {
        this.ctr ++;
        this.check = 0;
    }
};

Scroller.prototype.shiftTo = function(px, py)
{
    this.css.left = (this.x = px) + "px";
    this.css.top = (this.y = py) + "px";
};

Scrollers = {};
Scrollers.ar = [];

Scrollers.setMouseEvents = function(pObj)
{
    pObj.onmouseover = Scrollers.halt;
    pObj.onmouseout = Scrollers.resume;
};

Scrollers.halt = function()
{
    var curObj;
    for (var i=0; curObj = Scrollers.ar[i]; i++)
    if (curObj.id==this.id)
    {
        curObj.active=false;
        return;
    }
};

Scrollers.resume = function(pE)
{
    var curObj;
    for (var i=0; curObj = Scrollers.ar[i]; i++)
    {
        if (curObj.id == this.id)
        {
            pE = pE?pE:window.event;
            var toEl = pE.relatedTarget?pE.relatedTarget:pE.toElement;
            if (this != toEl && 
                !Contained(toEl, this))
            {
                var now = new Date().getTime();
                curObj.elapsed = now - curObj.lastTime;
                curObj.lastTime = now;
                curObj.active = true;
                return;
            }
        }
    }
};

Scrollers.timer = window.setInterval("Scrollers.control()", 10);

Scrollers.control = function()
{
    var curObj;
    for (var i=0; curObj = Scrollers.ar[i]; i++)
    {
        if (curObj.active)
        {
            var now = new Date().getTime();
            curObj.elapsed = now - curObj.lastTime;
            curObj.lastTime = now;
            curObj.controlScroll();
        }
    }
};

Scrollers.GeckoTableFix = function()
{
    var ua=navigator.userAgent;
    if (ua.indexOf("Gecko") > -1 && 
        ua.indexOf("Firefox") == -1 && 
        ua.toLowerCase().indexOf("like gecko") == -1)
    {
        Scrollers.hold=[];
        for(var i=0; arguments[i]; i++)
        {
            var wndo = document.getElementById(arguments[i]);
            var holderId = wndo.parentNode.id;
            var holder = document.getElementById(holderId);
            document.body.appendChild(holder.removeChild(wndo));
            wndo.style.zIndex = 1000;
            var pos = GetPageOffsets(holder);
            wndo.style.left = pos.x + "px";
            wndo.style.top = pos.y + "px";
            Scrollers.hold[i] = [arguments[i], holderId];
        }
        window.addEventListener("resize", Scrollers.rePosition, true);
    }
};

Scrollers.rePosition = function()
{
    if (Scrollers.hold)
    {
        for(var i = 0; Scrollers.hold[i]; i++)
        {
            var wndo = document.getElementById(Scrollers.hold[i][0]);
            var holder = document.getElementById(Scrollers.hold[i][1]);
            var pos = GetPageOffsets(holder);
            wndo.style.left = pos.x + "px";
            wndo.style.top = pos.y + "px";
        }
    }
};

function GetPageOffsets(el)
{
    var left = el.offsetLeft;
    var top = el.offsetTop;
    if (el.offsetParent && 
        el.offsetParent.clientLeft ||
        el.offsetParent.clientTop)
    {
        left += el.offsetParent.clientLeft;
        top += el.offsetParent.clientTop;
    }
    while(el = el.offsetParent)
    {
        left += el.offsetLeft;
        top += el.offsetTop;
    }
    return {x:left, y:top};
};

function Contained(poNode, poCont)
{
    if (!poNode)
        return;
    while (poNode = poNode.parentNode)
        if(poNode == poCont)
            return true;
    return false;
};
    
Scrollers.unHook = function()
{
    var i, curObj;
    
    for(i = 0; curObj = Scrollers.ar[i]; i++)
    {
        if(curObj.el)
        {
            curObj.el.onmouseover = null;
            curObj.el.onmouseout = null;
            curObj.el = null;
        }
    }
};

if (window.addEventListener)
    window.addEventListener("unload", Scrollers.unHook, true);
else if (window.attachEvent)
    window.attachEvent("onunload", Scrollers.unHook);

Scrollers.setPartners = function(p1, p2) 
{
    if (p1.el && p2.el) 
    {
        p1.el.onmouseover = Scrollers.tandemHalt;
        p2.el.onmouseover = Scrollers.tandemHalt;
        p1.el.onmouseout = Scrollers.tandemResume;
        p2.el.onmouseout = Scrollers.tandemResume;
        p1.partner = p2; 
        p2.partner = p1;
    }
}

Scrollers.tandemHalt = function() 
{
    var curObj;
    for (var i=0; curObj = Scrollers.ar[i]; i++) 
    {
        if ( curObj.id == this.id ) 
        { 
            curObj.active = false; 
            curObj.partner.active = false;
            return; 
        }
    }
}

Scrollers.tandemResume = function(pE) 
{
    var curObj;
    for (var i=0; curObj = Scrollers.ar[i]; i++) 
    {
        if (curObj.id == this.id)
        {
            pE = pE? pE: window.event;
            var toEl = pE.relatedTarget? pE.relatedTarget: pE.toElement;
            if (this != toEl && 
                !Contained(toEl, this))
            { 
                var now = new Date().getTime();
                curObj.elapsed = now - curObj.lastTime;
                curObj.partner.elapsed = now - curObj.partner.lastTime;
                curObj.lastTime = now; 
                curObj.active = true; 
                curObj.partner.lastTime = now; curObj.partner.active = true;
                return; 
            }
        }
    }
}

/*************************************************************************
  The code above is from Dynamic Web Coding at www.dyn-web.com
  Copyright 2001-5 by Sharon Paine 
  See Terms of Use at www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!
*************************************************************************/

function Push(paArray, poItem)
{
    paArray[paArray.length] = poItem;
}

function XmlHttp() {}

XmlHttp.create = function ()
{
   try
   {
      if (window.XMLHttpRequest)
      {
         var req = new XMLHttpRequest();

         // some older versions of Moz did not support the readyState property
         // and the onreadystate event so we patch it!
         if (req.readyState == null)
         {
            req.readyState = 1;
            req.addEventListener("load", 
                                 function ()
                                 {
                                     req.readyState = 4;
                                     if (typeof req.onreadystatechange == "function")
                                         req.onreadystatechange();
                                 },
                                 false);
         }
         return req;
      }
      if (window.ActiveXObject)
         return new ActiveXObject(getControlPrefix() + ".XmlHttp");
   }
   catch (ex) {}
   // fell through
   throw new Error("Your browser does not support XmlHttp objects");
};

function SplitByLine(psText, pbRemoveBlankTrailingLines)
{
    var aRow = psText.split("\n");
    if (pbRemoveBlankTrailingLines)
    {
        while (Trim(aRow[aRow.length -1].toString()) == "")
            aRow.length = aRow.length - 1;
    }
    return aRow;
}

function S4()
{
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}

function generateGuid()
{
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()).toUpperCase();
}