function validateElement( oElement )
{
    if(!oElement.bProcessed)
    {
        oElement.bProcessed = false;
        if (browser.isGecko)
            window.captureEvents( Event.BLUR );
        oElement.oldOnBlur = oElement.onblur;
        oElement.onblur = function ( event )
       {
           var sFmtUpperCase = this.getAttribute( "upper" ) == "upper";
           if (sFmtUpperCase)
               this.value = this.value.toUpperCase();
           var sFmtLowerCase = this.getAttribute( "lower" ) == "lower";
           if (sFmtLowerCase)
               this.value = this.value.toLowerCase();
           var sFmtfilter = this.getAttribute( "filter" );
           if (sFmtfilter)
           {
               var re = new RegExp( '[^' + sFmtfilter + ']' );
               var sFrmFormat = oElement.getAttribute( "format" );
               if (sFrmFormat)
               {
                   rex = sFrmFormat;
                   while (rex.indexOf( '#' ) != -1) 
                       rex = rex.replace( '#' , '[' + sFmtfilter + ']', 'g');
                   rex = rex.replace( '(' , '\\(', 'g');
                   rex = rex.replace( ')' , '\\)', 'g');

                   rex = '^' + rex + '$';
                   rex = new RegExp( rex );
                   if (!rex.test(this.value))
                       oElement.value = '';
               } else {
                   if ( re.test( this.value ) )
                       oElement.value = '';
                   if ( browser.isGecko )
                   {
                       event.preventDefault();
                   } else {
                       window.event.returnValue = false;
                   }
               }
           }
           var sFmtFloatBrasil = this.getAttribute( "float" ) == "float";
           if (sFmtFloatBrasil)
               this.value = floatBr( this.value );
           var sFmtDate = this.getAttribute( "fmtdata" );
           if ( sFmtDate ) 
               this.value = fmtDateBr(this.value);
           try {
               this.oldOnBlur();
           } catch ( err ) {}
       }
       if (browser.isGecko) 
           window.captureEvents(Event.FOCUS);
       oElement.oldOnFocus = oElement.onfocus;
       oElement.onfocus = function (event)
       {
           var sFmtFloatBrasil = this.getAttribute("float") == "float";
           if(sFmtFloatBrasil)
           {
               this.value = floatBr( this.value );
               this.select();
           }

           try {
             this.oldOnFocus();
           } catch ( err ) {}
       }
    
       if (browser.isGecko) 
           window.captureEvents(Event.KEYPRESS);

       oElement.oldOnKeypress = oElement.onkeypress;
       oElement.onkeypress = function(event)
       {
           var keyCode  = (!window.event) ? event.which : window.event.keyCode;
           pressedKey  = String.fromCharCode(keyCode);
           if (pressedKey == '\r' || parseInt( pressedKey.charCodeAt( 0 ) ) == 0 || parseInt( pressedKey.charCodeAt( 0 ) ) == 8 || pressedKey == '')
               return true;
           var sFmtUpperCase = this.getAttribute( "upper" ) == "upper";
           if (sFmtUpperCase) 
           {
               this.value = this.value.toUpperCase();
               this.style.textTransform = 'uppercase';
           }
           var sFmtLowerCase = this.getAttribute( "lower" ) == "lower";
           if (sFmtLowerCase)
               this.style.textTransform = 'lowercase';
           var sFmtfilter = this.getAttribute("filter");
           if (sFmtfilter)
           {
               var sKey = String.fromCharCode(keyCode);
               var re = new RegExp( '[^' + sFmtfilter + ']' );
               if (re.test(sKey))
               {
                   try {
                       event.preventDefault();
                   } catch ( err ) {
                       window.event.returnValue = false;
                   }
                   return false
               }
           }
           var sFrmFormat = this.getAttribute( "format" );
           if (sFrmFormat)
           {
               var stext = this.value;
               var sKey  = String.fromCharCode( keyCode );
               var strSelection = ( document.selection ) ? document.selection.createRange().text : this.value.substr( this.selectionStart , this.selectionEnd );
               if (strSelection != '')
               {
                   this.value = '';
                   try {
                       event.preventDefault();
                   } catch ( err ) {
                       window.event.returnValue = false;
                   }
               } else {
                   if (sFrmFormat.substr( stext.length , 1 ) == '#')
                   {
                   if ( ( sFrmFormat.substr( stext.length + 1 , 1 ) != '#' ) && ( sFrmFormat.substr( stext.length + 1 , 1 ) != '' ) ) {
              this.value = this.value + sKey + sFrmFormat.substr( stext.length + 1 , 1 );
              try {
                event.preventDefault();
              } catch ( err ) {
                window.event.returnValue = false;
              }
            } else {
              return true;
            }
          } else {
            if ( stext.length + 1 <= sFrmFormat.length ){
              this.value = this.value + sFrmFormat.substr( stext.length , 1 ) + sKey;
                          }
            try {
              event.preventDefault();
            } catch ( err ) {
              window.event.returnValue = false;
            }
          }
        }
      }
      var sFmtFloatBrasil = this.getAttribute( "float" ) == "float";
      if( sFmtFloatBrasil ) {
        var sKey    = String.fromCharCode( keyCode );
        var re      = new RegExp( '[^0-9,]|(,[0-9]*,)' );
        var atestar = this.value + sKey
        if ( re.test( atestar ) ) {
          if ( browser.isGecko ) {
            event.preventDefault();
          } else {
            window.event.returnValue = false;
          }
        }
      }
      var sFmtDate = this.getAttribute( "fmtdata" ) == 'fmtdata';
      if( sFmtDate ) {
        this.maxlength = '10';
        var sKey    = String.fromCharCode( keyCode );
        var re      = new RegExp( '[^0-9/]|(/[0-9]*/[0-9]*/)' );
        var atestar = this.value + sKey

        if( re.test( atestar ) ) {
          if ( event.preventDefault ) {
            event.preventDefault();
          } else {
            window.event.returnValue = false;
          }
        } else {
          atestar = this.value;
          if ( sKey != '/' ) {
            if ( ( atestar.length == 1 ) || ( atestar.length == 4 ) ) {
              this.value += sKey + '/';
              if ( browser.isGecko ) {
                event.preventDefault();
              } else {
                window.event.returnValue = false;
              }
            } else if ( ( atestar.length == 2 ) || ( atestar.length == 5 ) ) {
              this.value += '/';
            }
          } else {
            if ( ( atestar.length == 0 ) || ( atestar.length == 3 ) ) {
              if ( browser.isGecko ) {
                event.preventDefault();
              } else {
                window.event.returnValue = false;
              }
            } else if ( atestar.length == 1 ) {
              this.value = '0' + this.value;
            } else if ( atestar.length == 4 ) {
              this.value = this.value.substr( 0 , 3 ) + '0' + this.value.substr( 3 , 1 );
            }
          }
        }
      }
      try {
        this.oldOnKeypress();
      } catch ( err ) {}
    }
    
  }
}
function Browser()
{
  
  this.isGecko = window.navigator.userAgent.toLowerCase().indexOf( 'gecko' ) != -1;
  this.isIe = window.navigator.userAgent.toLowerCase().indexOf( 'msie' )  != -1;
  this.isOpera  = window.navigator.userAgent.toLowerCase().indexOf( 'opera' ) != -1;
  this.isKonqueror = window.navigator.userAgent.toLowerCase().indexOf( 'khtml' ) != -1;
}
browser = new Browser();


