/**
 * This class represents the layer browsing capabilities of the Gigapan Explorer application. 
 * <br><br>
 * <a href="mailto:ehudsons@andrew.cmu.edu">Ellen Hudson-Snyder</a>, 
 * <a href="mailto:evedar@andrew.cmu.edu">Elvin Vedar</a>,
 * <a href="mailto:cbalz@andrew.cmu.edu">Christopher M. Balz</a>.
 * <br><br>CVS Version Info:<br>
 *  $Id: LayerPad.js,v 1.18 2005/11/29 06:42:19 evedar Exp $     
 * <br><br>
 * @inherits-from <code>AbstractWidget</code>
 * @object-prop <code>intRowIncrementForIE</code> </code>number<code> The amount to increment the css 
 *              <code>top</code> property for the layer pad widget's rows.  
 *              This incrementing is done as part of a workaround that is executed if 
 *              Gigapan is running on Internet Explorer(tm).
 * @listens-to-event <code>onclick</code> from the <code>backwardSlowButton</code> document image object.
 * @listens-to-event <code>onclick</code> from the <code>backwardMediumButton</code> document image object.
 * @listens-to-event <code>onclick</code> from the <code>backwardFastButton</code> document image object.
 * @listens-to-event <code>onclick</code> from the <code>forwardSlowButton</code> document image object.
 * @listens-to-event <code>onclick</code> from the <code>forwardMediumButton</code> document image object.
 * @listens-to-event <code>onclick</code> from the <code>forwardFastButton</code> document image object.
 * @listens-to-event <code>ondisablebackwardslow</code> from the <code>plate</code> document object
 * @listens-to-event <code>ondisablebackwardmedium</code> from the <code>plate</code> document object
 * @listens-to-event <code>ondisablebackwardfast</code> from the <code>plate</code> document object
 * @listens-to-event <code>ondisableforwardslow</code> from the <code>plate</code> document object
 * @listens-to-event <code>ondisableforwardmedium</code> from the <code>plate</code> document object
 * @listens-to-event <code>ondisableforwardfast</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenablebackwardslow</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenablebackwardmedium</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenablebackwardfast</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenableforwardslow</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenableforwardmedium</code> from the <code>plate</code> document object
 * @listens-to-event <code>onenableforwardfast</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetbackwardslowtext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetbackwardmediumtext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetbackwardfasttext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetforwardslowtext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetforwardmediumtext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetforwardfasttext</code> from the <code>plate</code> document object
 * @listens-to-event <code>onsetcurrentlayertext</code> from the <code>plate</code> document object
 * @emits-event <code>onbackwardslow</code>.
 * @emits-event <code>onbackwardmedium</code>.
 * @emits-event <code>onbackwardfast</code>.
 * @emits-event <code>onforwardslow</code>.
 * @emits-event <code>onforwardmedium</code>.
 * @emits-event <code>onforwardfast</code>.
 * @object-prop <code>string</code>  <code>strBackwardSlowButtonId</code>  The backward slow button.
 * @object-prop <code>string</code>  <code>strBackwardMediumButtonId</code>  The backward medium button.
 * @object-prop <code>string</code>  <code>strBackwardFastButtonId</code>  The backward fast button.
 * @object-prop <code>string</code>  <code>strForwardSlowButtonId</code>  The forward slow button.
 * @object-prop <code>string</code>  <code>strForwardMediumButtonId</code>  The forward medium button.
 * @object-prop <code>string</code>  <code>strForwardFastButtonId</code>  The forward fast button.
 * @object-prop <code>string</code>  <code>strBackwardSlowButtonImgId</code>  The backward slow button image.
 * @object-prop <code>string</code>  <code>strBackwardMediumButtonImgId</code>  The backward medium button image.
 * @object-prop <code>string</code>  <code>strBackwardFastButtonImgId</code>  The backward fast button image.
 * @object-prop <code>string</code>  <code>strForwardSlowButtonImgId</code>  The forward slow button image.
 * @object-prop <code>string</code>  <code>strForwardMediumButtonImgId</code>  The forward medium button image.
 * @object-prop <code>string</code>  <code>strForwardFastButtonImgId</code>  The forward fast button image.
 * @object-prop <code>string</code>  <code>strBackwardSlowLayerText</code>  The backward slow layer text.
 * @object-prop <code>string</code>  <code>strBackwardMediumLayerText</code>  The backward medium layer text.
 * @object-prop <code>string</code>  <code>strBackwardFastLayerText</code>  The backward fast layer text.
 * @object-prop <code>string</code>  <code>strForwardSlowLayerText</code>  The forward slow layer text.
 * @object-prop <code>string</code>  <code>strForwardMediumLayerText</code>  The forward medium layer text.
 * @object-prop <code>string</code>  <code>strForwardFastLayerText</code>  The forward fast layer text.
 * @object-prop <code>string</code>  <code>strCurrentLayerText</code>  The current layer text.
 * @author Team GigaToasted (Fall-2005-CMU-NASA/Google-Practicum Subteam) 
 * @version 1.0
 * <br><br>
 */


// Set the prototype chain for efficient inheritance:
LayerPad.prototype = new AbstractWidget();


/**
 * Create a <code>LayerPad</code> object.
 * @param objParent <code>object</code>  The parent, if any, of this object.
 */
function LayerPad(objParent) {
    this.superC("layerpad", objParent); // Complete the inheritance.  
    
    this.intRowIncrementForIE = 0;    
    this.strCurrentLayerText = "currentLayerText";

    this.strBackwardSlowLayerText = "backwardSlowLayerText";
    this.strBackwardMediumLayerText = "backwardMediumLayerText";
    this.strBackwardFastLayerText = "backwardFastLayerText";
    this.strForwardSlowLayerText = "forwardSlowLayerText";
    this.strForwardMediumLayerText = "forwardMediumLayerText";
    this.strForwardFastLayerText = "forwardFastLayerText";

    this.strBackwardSlowButtonId = "backwardSlowButton";
    this.strBackwardMediumButtonId = "backwardMediumButton";
    this.strBackwardFastButtonId = "backwardFastButton";
    this.strForwardSlowButtonId = "forwardSlowButton";
    this.strForwardMediumButtonId = "forwardMediumButton";
    this.strForwardFastButtonId = "forwardFastButton";

    this.strBackwardSlowButtonImgId = "backwardSlowButtonImg";
    this.strBackwardMediumButtonImgId = "backwardMediumButtonImg";
    this.strBackwardFastButtonImgId = "backwardFastButtonImg";
    this.strForwardSlowButtonImgId = "forwardSlowButtonImg";
    this.strForwardMediumButtonImgId = "forwardMediumButtonImg";
    this.strForwardFastButtonImgId = "forwardFastButtonImg";

    this.getHtml = LayerPad_getHtml;
    this.receiveEvent = LayerPad_receiveEvent;
    this.onbackwardslow = LayerPad_onbackwardslow;
    this.onbackwardmedium = LayerPad_onbackwardmedium;
    this.onbackwardfast = LayerPad_onbackwardfast;
    this.onforwardslow = LayerPad_onforwardslow;
    this.onforwardmedium = LayerPad_onforwardmedium;
    this.onforwardfast = LayerPad_onforwardfast;
    this.ondisableforwardslow = LayerPad_ondisableforwardslow;
    this.ondisableforwardmedium = LayerPad_ondisableforwardmedium;
    this.ondisableforwardfast = LayerPad_ondisableforwardfast;
    this.ondisablebackwardslow = LayerPad_ondisablebackwardslow;
    this.ondisablebackwardmedium = LayerPad_ondisablebackwardmedium;
    this.ondisablebackwardfast = LayerPad_ondisablebackwardfast;
    this.onenableforwardslow = LayerPad_onenableforwardslow;
    this.onenableforwardmedium = LayerPad_onenableforwardmedium;
    this.onenableforwardfast = LayerPad_onenableforwardfast;
    this.onenablebackwardslow = LayerPad_onenablebackwardslow;
    this.onenablebackwardmedium = LayerPad_onenablebackwardmedium;
    this.onenablebackwardfast = LayerPad_onenablebackwardfast;
    this.onsetforwardfasttext = LayerPad_onsetforwardfasttext;
    this.onsetforwardmediumtext = LayerPad_onsetforwardmediumtext;
    this.onsetforwardslowtext = LayerPad_onsetforwardslowtext;
    this.onsetbackwardfasttext = LayerPad_onsetbackwardfasttext;
    this.onsetbackwardmediumtext = LayerPad_onsetbackwardmediumtext;
    this.onsetbackwardslowtext = LayerPad_onsetbackwardslowtext;
    this.onsetcurrentlayertext = LayerPad_onsetcurrentlayertext;
    this.workAroundIE = LayerPad_workAroundIE;

    // Register events:
    self.gloScope.registerEvent(this.strId, this, this.strBackwardSlowButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, this.strBackwardMediumButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, this.strBackwardFastButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, this.strForwardSlowButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, this.strForwardMediumButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, this.strForwardFastButtonId,  "onclick");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisablebackwardslow");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisablebackwardmedium");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisablebackwardfast");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisableforwardslow");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisableforwardmedium");
    self.gloScope.registerEvent(this.strId, this, "plate", "ondisableforwardfast");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenablebackwardslow");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenablebackwardmedium");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenablebackwardfast");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenableforwardslow");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenableforwardmedium");
    self.gloScope.registerEvent(this.strId, this, "plate", "onenableforwardfast");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetforwardfasttext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetforwardmediumtext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetforwardslowtext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetbackwardfasttext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetbackwardmediumtext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetbackwardslowtext");
    self.gloScope.registerEvent(this.strId, this, "plate", "onsetcurrentlayertext");

    if (self.gloScope.objIs.ie) { // Must workaround padding IE 6 falsely inserts; see below.
        this.workAroundIE(); 
    }
}


/**
 * This method prepares to workaround Internet Explorer(tm)'s incorrect
 * adding of inline padding after a <code>div</code> element when that element has a height property 
 * specified and is set to 'relative' positioning with zero margin and padding.
 * It gathers the height of the layer pad row for later use and switches the css <code>position</code> attribute
 * to <code>absolute</code>.
 */
function LayerPad_workAroundIE() {
    var objGs = self.gloScope, domStyleSheet, domStyleClass;
    domStyleSheet = objGs.getStyleSheetByTitle(this.strId);
    if (domStyleSheet) {        
        domStyle = objGs.getStyleClassByName(domStyleSheet, ".layerPadRow").style;
        this.intRowIncrementForIE = parseInt(domStyle.height);
        domStyle.position = "absolute";
    }   
}


/**
 * Return the HTML of the navigation pad widget its child widgets or elements.    
 * @return <code>string</code>  A string representing the HTML of the 
 *                 object managed by the widget and its child widgets.
 */
function LayerPad_getHtml() {
    var strHtml, intCurrentRowTop = 0, intRowIncrementForIE = this.intRowIncrementForIE,
        booIsIE = self.gloScope.objIs.ie;

    /**
     * Return the HTML of the backward slow button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the backward slow button.
     */
    function _getHtml_backwardSlowButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strBackwardSlowButtonId + "' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strBackwardSlowButtonImgId + "' src='images/control_panel/BackwardSlow.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    /**
     * Return the HTML of the backward medium button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the backward medium button.
     */
    function _getHtml_backwardMediumButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strBackwardMediumButtonId + "' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strBackwardMediumButtonImgId + "' src='images/control_panel/BackwardMedium.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    /**
     * Return the HTML of the backward fast button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the backward fast button.
     */
    function _getHtml_backwardFastButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strBackwardFastButtonId + "' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strBackwardFastButtonImgId + "'src='images/control_panel/BackwardFast.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    /**
     * Return the HTML of the forward slow button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the forward slow button.
     */
    function _getHtml_forwardSlowButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strForwardSlowButtonId + "' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strForwardSlowButtonImgId + "' src='images/control_panel/ForwardSlow.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    
    /**
     * Return the HTML of the forward medium button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the forward medium button.
     */
    function _getHtml_forwardMediumButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strForwardMediumButtonId + "' " +
            " class='layerPadButtonImage' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strForwardMediumButtonImgId + "' src='images/control_panel/ForwardMedium.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    /**
     * Return the HTML of the forward fast button.
     * @param objMe  <code>Object</code> Reference to class
     * @return <code>string</code>  A string representing the HTML of the forward fast button.
     */
    function _getHtml_forwardFastButton(objMe) {
        var strHtml =
            "<a href='#Dummy' id='" + objMe.strForwardFastButtonId + "' " +
            "onclick='self.Environment.handleEvent(this.id, \"onclick\", null);'>" +
            "<img id='" + objMe.strForwardFastButtonImgId + "' src='images/control_panel/ForwardFast.jpg' class='layerPadButtonImage' /></a>";

        return strHtml;
    }


    /**
     * This method gets the additional style property needed to work around Internet Explorer(tm)'s incorrect
     * adding of inline padding after a <code>div</code> element when that element has a height property 
     * specified and is set to 'relative' positioning with zero margin and padding.
     * @param pIntCurrentRowTop <code>number</code> An integer specifying the current row top position (in the
     * terms of css <code>absolute</code> positioning: We switch the <code>position</code> attribute
     * on initialization of this widget when running on Internet Explorer(tm), as part of this workaround.
     */
    function _getHtml_getStyleAdditionForIE(pIntCurrentRowTop) { 
        if (!booIsIE) {
            return "";
        }
        intCurrentRowTop = pIntCurrentRowTop + intRowIncrementForIE;
        return " style='top: " + intCurrentRowTop + "px; ' ";    
    }
                                 
    
    strHtml = 
        "<div class='layerPad'>" +
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intRowIncrementForIE*(-1)) + ">" + 
                  _getHtml_backwardFastButton(this)   + "<span id='" +
             this.strBackwardFastLayerText   + "'  class='layerPadButtonText'></span></div>" + 
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
                 _getHtml_backwardMediumButton(this) + "<span id='" +
             this.strBackwardMediumLayerText + "'  class='layerPadButtonText'></span></div>" + 
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
                _getHtml_backwardSlowButton(this)   + "<span id='" +
             this.strBackwardSlowLayerText   + "'  class='layerPadButtonText'></span></div>" + 
             "<div class='layerPadRow' " 
                                             + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
              "<span class='layerPadRowCurrentLayer layerPadRowCurrentLayerColors'>Current Layer: </span>"  
              + "<span id='" +
             this.strCurrentLayerText        + "'  class='layerPadButtonText  layerPadRowCurrentLayerColors'>" + 
               "No Layer Info</span></div>" +
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
                _getHtml_forwardSlowButton(this)    + "<span id='" +
             this.strForwardSlowLayerText    + "'  class='layerPadButtonText'></span></div>" +
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
                _getHtml_forwardMediumButton(this)  + "<span id='" +
             this.strForwardMediumLayerText  + "'  class='layerPadButtonText'></span></div>" + 
             "<div class='layerPadRow' "     + _getHtml_getStyleAdditionForIE(intCurrentRowTop) + ">" + 
                _getHtml_forwardFastButton(this)    + "<span id='" +
             this.strForwardFastLayerText    + "'  class='layerPadButtonText'></span></div>" +
        "</div>";
    
    return strHtml;
}


/**
 * This method receives any events that this object listens to and 
 * routes them to the proper methods. 
 * @param pStrEventSourceElementId  <code>string</code> The i.d. of the document object model from which the event
 *                                  sprang.
 * @param pStrEventType  <code>string</code> The event type of the object (e.g., 'onclick', etc).
 * @param pObjEvent  <code>Object</code> The event object itself.
 */
function LayerPad_receiveEvent(pStrEventSourceElementId, pStrEventType, pObjEvent) {
    switch (pStrEventType) {
    case "onclick" :
        switch (pStrEventSourceElementId) {
             case this.strBackwardSlowButtonId :
                 this.onbackwardslow();
                 break;
             case this.strBackwardMediumButtonId :
                 this.onbackwardmedium();
                 break;
             case this.strBackwardFastButtonId :
                 this.onbackwardfast();
                 break;
             case this.strForwardSlowButtonId :
                 this.onforwardslow();
                 break;
             case this.strForwardMediumButtonId :
                 this.onforwardmedium();
                 break;
             case this.strForwardFastButtonId :
                 this.onforwardfast();
                 break;
        }
        break; 
    case "ondisablebackwardslow" :
        this.ondisablebackwardslow();
        break;
    case "ondisablebackwardmedium" :
        this.ondisablebackwardmedium();
        break;
    case "ondisablebackwardfast" :
        this.ondisablebackwardfast();
        break;
    case "ondisableforwardslow" :
        this.ondisableforwardslow();
        break;
    case "ondisableforwardmedium" :
        this.ondisableforwardmedium();
        break;
    case "ondisableforwardfast" :
        this.ondisableforwardfast();
        break;
    case "onenablebackwardslow" :
        this.onenablebackwardslow();
        break;
    case "onenablebackwardmedium" :
        this.onenablebackwardmedium();
        break;
    case "onenablebackwardfast" :
        this.onenablebackwardfast();
        break;
    case "onenableforwardslow" :
        this.onenableforwardslow();
        break;
    case "onenableforwardmedium" :
        this.onenableforwardmedium();
        break;
    case "onenableforwardfast" :
        this.onenableforwardfast();
        break;
    case "onsetforwardslowtext" :
        this.onsetforwardslowtext(pObjEvent);
        break;
    case "onsetforwardmediumtext" :
        this.onsetforwardmediumtext(pObjEvent);
        break;
    case "onsetforwardfasttext" :
        this.onsetforwardfasttext(pObjEvent);
        break;
    case "onsetbackwardslowtext" :
        this.onsetbackwardslowtext(pObjEvent);
        break;
    case "onsetbackwardmediumtext" :
        this.onsetbackwardmediumtext(pObjEvent);
        break;
    case "onsetbackwardfasttext" :
        this.onsetbackwardfasttext(pObjEvent);
        break;
    case "onsetcurrentlayertext" :
        this.onsetcurrentlayertext(pObjEvent);
        break;
    }

    // if (self.gloScope.objIs.opera) { // Protect against Opera event bugs.
    //    window.onerror = cachedOnerror;
    // }
}


/**
 * This method is an event handler and emits the <code>onbackwardslow</code> event.
 */
function LayerPad_onbackwardslow() {
     self.Environment.handleEvent(this.strId, 'onbackwardslow', null);
}


/**
 * This method is an event handler and emits the <code>onbackwardmedium</code> event.
 */
function LayerPad_onbackwardmedium() {
     self.Environment.handleEvent(this.strId, 'onbackwardmedium', null);
}


/**
 * This method is an event handler and emits the <code>onbackwardfast</code> event.
 */
function LayerPad_onbackwardfast() {
     self.Environment.handleEvent(this.strId, 'onbackwardfast', null);
}


/**
 * This method is an event handler and emits the <code>onforwardslow</code> event.
 */
function LayerPad_onforwardslow() {
     self.Environment.handleEvent(this.strId, 'onforwardslow', null);
}


/**
 * This method is an event handler and emits the <code>onforwardmedium</code> event.
 */
function LayerPad_onforwardmedium() {
     self.Environment.handleEvent(this.strId, 'onforwardmedium', null);
}


/**
 * This method is an event handler and emits the <code>onforwardfast</code> event.
 */
function LayerPad_onforwardfast() {
     self.Environment.handleEvent(this.strId, 'onforwardfast', null);
}


/**
 * Disable the forward slow button.
 */
function LayerPad_ondisableforwardslow() {
    window.document.getElementById(this.strForwardSlowButtonImgId).src='images/control_panel/ForwardSlowDisabled.jpg';
    window.document.getElementById(this.strForwardSlowButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strForwardSlowButtonId).style.cursor='default';
}


/**
 * Disable the forward medium button.
 */
function LayerPad_ondisableforwardmedium() {
    window.document.getElementById(this.strForwardMediumButtonImgId).src='images/control_panel/ForwardMediumDisabled.jpg';
    window.document.getElementById(this.strForwardMediumButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strForwardMediumButtonId).style.cursor='default';
}


/**
 * Disable the forward fast button.
 */
function LayerPad_ondisableforwardfast() {
    window.document.getElementById(this.strForwardFastButtonImgId).src='images/control_panel/ForwardFastDisabled.jpg';
    window.document.getElementById(this.strForwardFastButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strForwardFastButtonId).style.cursor='default';
}


/**
 * Disable the backward slow button.
 */
function LayerPad_ondisablebackwardslow() {
    window.document.getElementById(this.strBackwardSlowButtonImgId).src='images/control_panel/BackwardSlowDisabled.jpg';
    window.document.getElementById(this.strBackwardSlowButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strBackwardSlowButtonId).style.cursor='default';
}


/**
 * Disable the backward medium button.
 */
function LayerPad_ondisablebackwardmedium() {
    window.document.getElementById(this.strBackwardMediumButtonImgId).src='images/control_panel/BackwardMediumDisabled.jpg';
    window.document.getElementById(this.strBackwardMediumButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strBackwardMediumButtonId).style.cursor='default';
}


/**
 * Disable the backward fast button.
 */
function LayerPad_ondisablebackwardfast() {
    window.document.getElementById(this.strBackwardFastButtonImgId).src='images/control_panel/BackwardFastDisabled.jpg';
    window.document.getElementById(this.strBackwardFastButtonId).onclick=function() { return false; };
    window.document.getElementById(this.strBackwardFastButtonId).style.cursor='default';
}


/**
 * Enable the backward slow button.
 */
function LayerPad_onenablebackwardslow() {
    window.document.getElementById(this.strBackwardSlowButtonImgId).src='images/control_panel/BackwardSlow.jpg';
    window.document.getElementById(this.strBackwardSlowButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strBackwardSlowButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strBackwardSlowButtonId).style.cursor='pointer';
}


/**
 * Enable the backward medium button.
 */
function LayerPad_onenablebackwardmedium() {
    window.document.getElementById(this.strBackwardMediumButtonImgId).src='images/control_panel/BackwardMedium.jpg';
    window.document.getElementById(this.strBackwardMediumButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strBackwardMediumButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strBackwardMediumButtonId).style.cursor='pointer';
}


/**
 * Enable the backward fast button.
 */
function LayerPad_onenablebackwardfast() {
    window.document.getElementById(this.strBackwardFastButtonImgId).src='images/control_panel/BackwardFast.jpg';
    window.document.getElementById(this.strBackwardFastButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strBackwardFastButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strBackwardFastButtonId).style.cursor='pointer';
}

/**
 * Enable the forward slow button.
 */
function LayerPad_onenableforwardslow() {
    window.document.getElementById(this.strForwardSlowButtonImgId).src='images/control_panel/ForwardSlow.jpg';
    window.document.getElementById(this.strForwardSlowButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strForwardSlowButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strForwardSlowButtonId).style.cursor='pointer';
}


/**
 * Enable the forward medium button.
 */
function LayerPad_onenableforwardmedium() {
    window.document.getElementById(this.strForwardMediumButtonImgId).src='images/control_panel/ForwardMedium.jpg';
    window.document.getElementById(this.strForwardMediumButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strForwardMediumButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strForwardMediumButtonId).style.cursor='pointer';
}


/**
 * Enable the forward fast button.
 */
function LayerPad_onenableforwardfast() {
    window.document.getElementById(this.strForwardFastButtonImgId).src='images/control_panel/ForwardFast.jpg';
    window.document.getElementById(this.strForwardFastButtonId).onclick=new Function("self.Environment.handleEvent('" +
                                   this.strForwardFastButtonId +"', \"onclick\", null); return true;");
    window.document.getElementById(this.strForwardFastButtonId).style.cursor='pointer';
}


/**
 * Set the text of the forward fast button
 * @param pStrText <code>string</code>  Text of the forward fast button
 */
function LayerPad_onsetforwardfasttext(pStrText) {
    window.document.getElementById(this.strForwardFastLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the forward medium button
 * @param pStrText <code>string</code>  Text of the forward medium button
 */
function LayerPad_onsetforwardmediumtext(pStrText) {
    window.document.getElementById(this.strForwardMediumLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the forward slow button
 * @param pStrText <code>string</code>  Text of the forward slow button
 */
function LayerPad_onsetforwardslowtext(pStrText) {
    window.document.getElementById(this.strForwardSlowLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the backward fast button
 * @param pStrText <code>string</code>  Text of the backward fast button
 */
function LayerPad_onsetbackwardfasttext(pStrText) {
    window.document.getElementById(this.strBackwardFastLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the backward medium button
 * @param pStrText <code>string</code>  Text of the backward medium button
 */
function LayerPad_onsetbackwardmediumtext(pStrText) {
    window.document.getElementById(this.strBackwardMediumLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the backward slow button
 * @param pStrText <code>string</code>  Text of the backward slow button
 */
function LayerPad_onsetbackwardslowtext(pStrText) {
    window.document.getElementById(this.strBackwardSlowLayerText).innerHTML=pStrText;
}


/**
 * Set the text of the current layer
 * @param pStrText <code>string</code>  Text of the current layer
 */
function LayerPad_onsetcurrentlayertext(pStrText) {
    if (pStrText == "") {
        window.document.getElementById(this.strCurrentLayerText).innerHTML="No Layer Information";
    } else {
        window.document.getElementById(this.strCurrentLayerText).innerHTML=pStrText;
    }
}


