function Validator (the_id,the_hook) {
	
	the_hook = typeof(the_hook) != 'undefined' ? the_hook : false;
	
    this.the_id = the_id;
    this.results = '';
    this.serial_form = '';
    this.hook = the_hook;
    var parent = this;
    
    this.validate = function() {        
        var current_id = parent.the_id;
  
        this.the_id.observe('change', function(event) {
   	  
           var current_field = $(event.target.id).getAttribute("rel");
   	   
           if(current_field == "req")
           {   
              var current_class = $(event.target.id).getAttribute("class");  	      
   	          
   	          var url = '/verification/verify/id/' + event.target.name + "/value/" + event.target.value + "/class/" + current_class;
	  	  
	          this.serial_form = current_id.serialize(true);
	  	  
	          this.results = new Ajax.Request(url,
	          {
	             evalJSON:true,
		         parameters:this.serial_form,			 
		         onComplete:function(transport){
		            var response = transport.responseJSON;
                    var image = response.img;                   
                    var field = response.field;                
                    $(field).innerHTML = image;                 
		         }
              });
           }
        });
    
        
    this.the_id.observe('submit', function(event) {
       
       var required;
       var err_message = "";       
       var fail_array = $$('.fail');
       var empty_requireds = false;       
       
       for(i=0; i<current_id.length; i++)
       {
       	
          required = current_id.elements[i].getAttribute("rel");
   	      
   	      if( required == "req" && current_id.elements[i].value == "" )  //mark empty required fields red
   	      {
   	      	 current_id.elements[i].style.border = '1px solid #f00';  	      	    	      	 
   	      	 
   	      	 if( (typeof(ie_validation) != "undefined") && (current_id.elements[i].type == "select-one") ) {  //using IE and field is select box
   	      	 	current_id.elements[i].style.backgroundColor = '#f00';
   	      	 }
   	      	 
   	      	 empty_requireds = true;   	  		
   	      }
   	      else
   	      {
   	         current_id.elements[i].style.border = '';
   	         
   	         //if( (typeof(ie_validation) != "undefined") && (current_id.elements[i].type != "submit") ) {  //using IE, update borders of text fields/select boxes
   	         if( (typeof(ie_validation) != "undefined") && (current_id.elements[i].type == "text" || current_id.elements[i].type == "textarea" || current_id.elements[i].type == "radio" || current_id.elements[i].type == "checkbox" || current_id.elements[i].type == "select-one") ) {  //using IE, update borders of text fields/select boxes
   	         	current_id.elements[i].style.borderTop = '2px solid #404040';
   	         	current_id.elements[i].style.borderLeft = '2px solid #404040';
   	         	current_id.elements[i].style.borderBottom = '1px solid #d4d0c8';
   	         	current_id.elements[i].style.borderRight = '1px solid #d4d0c8';
   	         	current_id.elements[i].style.backgroundColor = '#fff';
   	         }
   	      }
       }
       
       if( (empty_requireds) || (fail_array.length > 0) )
       {
       		err_message = "Complete all required fields.";
       }
       
   	  
       if(err_message.length != 0)
       {
          Event.stop(event);
   	      $('error').innerHTML = err_message;
       }
       else
       {       	  
          if(parent.hook) {
          	 Event.stop(event);
          	 $('error').hide();
             hook(event);
          }
       }
    });    
  }
}


function IeValidator (the_id,the_hook) {
	
	the_hook = typeof(the_hook) != 'undefined' ? the_hook : false;	
	
    this.the_id = the_id;
    this.results = '';
    this.serial_form = '';
    this.hook = the_hook;
    var parent = this;
    
    this.validate = function() {
    	
        var current_id = this.the_id;
  
        with( the_form )
        {
           for( var i = 0 ; length > i ; i++ )
           {
              var element = elements[i];
      
	          $(elements[i]).observe('change', function(event) {
	          	
	          	try
	          	{
	          		var current_field = $(event.srcElement.id).attributes('rel');
	          	}
	          	catch(err)
	          	{
	          		var current_field = '';
	          	}	          	
	          		        
   	   
   	          if(current_field.value == "req")
   	          {
   	             var current_class = $(event.srcElement.id).attributes('class');   	              	           
   	             
   	             var url = '/verification/verify/id/' + event.srcElement.name + "/value/" + event.srcElement.value + "/class/" + current_class.value;
   	             
	  	         this.results = new Ajax.Request(url,
		         {
		  	        evalJSON:true,
		            parameters:this.serial_form,			 
			        onComplete:function(transport){
		               var response = transport.responseJSON;
                       var image = response.img;                      
                       var field = response.field;                
                       $(field).innerHTML = image;                
		            }
                 });
   	          }
           });
        }
     }    
  }
}

function autotab(original,destination){
if (original.getAttribute&&original.value.length==original.getAttribute("maxlength"))
destination.focus();
}


