function CustomHTMLElement( pObject )
{
    if( pObject == null ) return null;

   //BUG: TODO: ClassName became readonly this way
   //pObject.ClassName = pObject.className;
   pObject.Css = Browser.ns4 ? pObject : pObject.style;

    pObject.GetTop = function(){ return this.Css.top; }
    pObject.SetTop = function(iZ){ this.Css.top = iZ; }
    pObject.GetLeft = function(){ return this.Css.left; }
    pObject.SetLeft = function(iZ){ this.Css.left = iZ; }
    pObject.GetWidth = function(){ return Browser.ns4 ? this.document.width : this.offsetWidth; }
    pObject.GetClipWidth = function(){ return Browser.ns4 ? this.clip.width : this.offsetWidth; }
    pObject.GetHeight = function(){ return Browser.ns4 ? this.document.height : this.offsetHeight; }
    pObject.GetClipHeight = function(){ return Browser.ns4 ? this.clip.height : this.offsetHeight; }

    pObject.X = function(){ return FormHelper.prototype.FindAbsolutePositionX.apply(this); }
    pObject.Y = function(){ return FormHelper.prototype.FindAbsolutePositionY.apply(this); }

    pObject.SetX = function(iZ){ this.Css.position = 'absolute'; this.Css.left = iZ; }
    pObject.SetY = function(iZ){ this.Css.position = 'absolute'; this.Css.top = iZ; }

    //pObject.HasClassName = function(pclassname){ return formHelper.HasClassName(pObject, pclassname) }
    //pObject.RemoveClassName = function(pclassname){ formHelper.RemoveClassName(pObject, pclassname) }
    //pObject.AddClassName = function(pclassname){ formHelper.AddClassName(pObject, pclassname) }

    pObject.HasClassName = formHelper.HasClassName; // function(pclassname){ return formHelper.HasClassName(pObject, pclassname) }
    pObject.RemoveClassName = formHelper.RemoveClassName; // function(pclassname){ formHelper.RemoveClassName(pObject, pclassname) }
    pObject.AddClassName = formHelper.AddClassName; // function(pclassname){ formHelper.AddClassName(pObject, pclassname) }

    pObject.Hide = function(){ this.AddClassName('hidden'); }
    pObject.Show = function(psDisplay){ this.RemoveClassName('hidden'); }
    pObject.ShowOrHide = function(psDisplay){ if(this.HasClassName('hidden')) this.RemoveClassName('hidden'); else this.AddClassName('hidden'); }

    pObject.Alpha = function(alpha){ formHelper.Alpha(pObject, alpha); }

    pObject.AttachEvent = function(pEvent, pListener, pEventCapturing){ formHelper.AttachEvent(pObject, pEvent, pListener, pEventCapturing); }
    pObject.DetachEvent = function(pEvent, pListener, pEventCapturing){ formHelper.DetachEvent(pObject, pEvent, pListener, pEventCapturing); }

    pObject.SetInnerText = function(value){ if(this.innerText != undefined) this.innerText = value; else this.contentText = value; }
    pObject.GetInnerText = function(){ return this.innerText != undefined ? this.innerText : this.contentText; }
        
    pObject.GetClipHeight = function(){ return Browser.ns4 ? this.clip.height : this.offsetHeight; }
    
    pObject.Enabled = function(pIsEnabled)
    { 
       this.disabled = !pIsEnabled; 

       if( pIsEnabled )
       {
          this.RemoveClassName("disabled");
       }
       else
       {
          this.AddClassName("disabled");
       }
       
       if( this.type == "text" || this.type == "password" || this.type == "textarea" )
       {
          if( pIsEnabled )
          {
             this.RemoveClassName("textInputDisabled");
          }
          else
          {
             this.AddClassName("textInputDisabled");
          }
       }
       else if( this.type == "checkbox" || this.type == "radio" )
       {
          //check next sibling for LABEL tags
          lbObj = this.nextSibling;
          lbObjNodeName = lbObj.nodeName;         
          labelFor = lbObj.getAttribute("for");
          
          //if getAttribute("for") doesn't work, search for it on attribute array
          //may be the case of some bugIEd browsers
          if( labelFor == null )
          {
             for( var x = 0; x < lbObj.attributes.length; x++ ) {
                if( lbObj.attributes[x].nodeName.toLowerCase() == 'for' ) {
                   labelFor = lbObj.attributes[x].nodeValue;
                }
             }
          }

          if( lbObjNodeName == "LABEL" && labelFor == this.id )
          {
             if( pIsEnabled )
             {
                formHelper.GetElementByRef(lbObj).RemoveClassName("disabled");
             }
             else
             {
                formHelper.GetElementByRef(lbObj).AddClassName("disabled");
             }
          }
       }
    }

   if( pObject.nodeName == "SELECT" )
   {
      pObject.SetSelectedIndex = formHelper.SetSelectedIndex;
      pObject.GetSelectedIndex = function(){ return this.selectedIndex; }
      pObject.GetSelectedText = formHelper.GetSelectedText;
      pObject.GetSelectedValue = formHelper.GetSelectedValue;
   }
   
   return pObject;
}

