//By Alessandro Rosa
function formvalidator()
{
      this.presetRULESarray = new Array();
      this.errMSGarray = new Array();
      this.errCTRLIDSarray = new Array();

      this.CRLF = ( navigator.userAgent.toLowerCase().indexOf( "windows" ) != -1 ) ? "\r\n" : "\n" ;

      this.outputResponseFn ;
      this.responseValue = false ;
}

formvalidator.prototype.flushERRORSarrays = function()
{
      while( this.errMSGarray.length > 0 ) this.errMSGarray.pop() ;
      while( this.errCTRLIDSarray.length > 0 ) this.errCTRLIDSarray.pop() ;
}

formvalidator.prototype.getResponse = function() { return this.responseValue ; }

formvalidator.prototype.getRULESarrayLENGTH = function()
{
    var l = 0 ;
    for( var currentKEY in this.presetRULESarray )
    {
         l++ ;
    }

    return l ;
}

formvalidator.prototype.getRulesList = function( bPLAINtextMODE ) 
{
    if ( this.getRULESarrayLENGTH() == 0 ) return false ;
    else
    {
        var retSTR = "" ;
        
        for( var currentKEY in this.presetRULESarray )
        {
              var packingARRAY = this.presetRULESarray[ currentKEY ].split( "@@" ); ;
              var CTRLid = packingARRAY[0] ;
              var regexp = packingARRAY[1] ;
        
              retSTR += currentKEY + " : " + CTRLid + " - " + regexp ;
              retSTR += ( bPLAINtextMODE ) ? this.CRLF : "<br>" ;
        }
        
        return retSTR ;
    }
}

formvalidator.prototype.AddRule = function( CTRLid, regExpression, errMSG )
{
    var bFOUND = false ;
    if ( CTRLid.length == 0 || regExpression.length == 0 ) return false ;

    for( var currentKEY in this.presetRULESarray )
    {
    	   if ( currentKEY == CTRLid )
    	   {
              bFOUND = true ; 
              break ;
         }
    }
    
    if ( !bFOUND )
    {
        this.errMSGarray[ CTRLid ] = errMSG ;
        this.presetRULESarray[ CTRLid ] = regExpression ;

        return ( this.presetRULESarray[ CTRLid ] == regExpression ) ? true : false ;
    }
    else return false ; 
}

formvalidator.prototype.ModifyRule = function( CTRLid, regExpression, errMSG )
{
    var bFOUND = false ;
    if ( CTRLid.length == 0 || regExpression.length == 0 ) return false ;

    for( var currentKEY in this.presetRULESarray )
    {
    	   if ( currentKEY == CTRLid )
    	   {
              this.presetRULESarray[ CTRLid ] = regExpression ;
              
              bFOUND = ( this.presetRULESarray[ CTRLid ] == regExpression ) ? true : false ;
              
              if ( bFOUND )
              {
                  this.errMSGarray[ CTRLid ] = errMSG ;
              }
              break ;
         }
    }
    
    return bFOUND ;
}

formvalidator.prototype.DeleteRule = function( CTRLid )
{
    if ( CTRLid.length == 0 ) return false ;

    for( var currentKEY in this.presetRULESarray )
    {
    	   if ( currentKEY == CTRLid )
    	   {
              delete this.presetRULESarray[ CTRLid ] ;
              break ;
         }
    }
}

formvalidator.prototype.check = function()
{
    if ( this.getRULESarrayLENGTH() == 0 ) return false ;
    else
    {
        for( var currentKEY in this.presetRULESarray )
        {
                    var CTRLid = currentKEY ;
                    var regEXPR = this.presetRULESarray[ currentKEY ] ;
                    
                    if ( CTRLid.length > 0 && regEXPR.length > 0 )
                    {
                        var CTRL = document.getElementById( CTRLid );
                        if ( CTRL != null )
                        {
                            var bOK = false ;
                            
                            switch( CTRL.tagName.toLowerCase() )
                            {
                                case "input" :
                                    var INPUTvalue = CTRL.value ;
                                    RegExpOBJ = new RegExp( regEXPR ) ;
                                    bOK = this.responseValue = RegExpOBJ.test( INPUTvalue );
                                break;
                                case "td" :
                                    var INPUTvalue = CTRL.innerHTML ;
                                    RegExpOBJ = new RegExp( regEXPR ) ;
                                    bOK = this.responseValue = RegExpOBJ.test( INPUTvalue );
                                break;
                            }

                            if ( !bOK )
                            {
                                 this.errCTRLIDSarray.push( "" + CTRLid );
                            }
                        }
                    }
        }
    }
}
