/**
 * Classe para mascara dinamica de formularios
 * 
 * @author Abdala Cerqueira <abdala.cerqueira@gmail.com>
 * @author Jose Roberto de Oliveira <bertono@gmail.com>
 */
Mask = function( element , mask , fn ){
	var options = options || {};
	
	if( !element ){
		alert( "Element parameter is required!" );
		return false;
	}
	
	this.element = element.id ? element : document.getElementById( element );
	this.mask 	 = mask;
	this.fn 	 = eval( "this." + fn ) || this.press;
	
	Validator.Event.on( this.element , "keypress" , this.fn , this , true );
}

Mask.prototype = {
	
	element: {},
	mask: "",
	func: this.press,
	  
	press: function( ev )
	{
		var key = Validator.Event.key( ev );
		  	
		var value = this.element.value;
			
		this.element.maxLength = this.mask.length;
			
		if( ( key > 32 && key < 41 ) || 
			  key == 8   || 
			  key == 127 || 
			  key == 0   || 
			  key == 9   || 
			  key == 13 
		)
		{
			return false;
		}
		
		if( key > 47 && key < 58 ){
			
			if( value.length == 0 ){
				if ( this.mask.charAt( 0 ) != 0 ){ 
					value +=  this.mask.charAt( 0 ) + value;
				}
			}
				
			for ( i = 0 ; i < value.length ; i++ ) {
				
				if ( this.mask.charAt( i + 1 ) != 0 ) {
					if ( ( value.length - 1 ) == i ){ 
						this.element.value +=  this.mask.charAt( i + 1 );
					}
				}
			}
		} else{
			Validator.Event.stopEvent( ev );
		}
	},
	
	integer: function( ev )
	{
		var key = Validator.Event.key( ev );
		
		if( !( ( key > 47 && key < 58 ) || 
				key == 8   || 
				key == 127 || 
				key == 0   || 
				key == 9   || 
				key == 13 
			) 
		)
		{
			Validator.Event.stopEvent( ev );
		}
	},
	
	upperCase: function( ev )
	{
		var value = this.element.value;
		value.toUpperCase();
	},
	
	description: function( ev )
	{
		var key = Validator.Event.key( ev );
		
		//Permiti espaco, enter e backspace
		if( ( key == 8 )  || 
			( key == 32 ) || 
			( key == 13 ) 
		)
		{
			return;
		}
		
		//Permiti os acentos
		if( key > 193 && key < 251 ){ 
			return;
		}
		
		//Permiti todas as letras e bloqueia alguns caracteres
	    if( !( ( key > 64 && key < 123 ) && 
	    	!( key > 90 && key < 97 ) 
	    	) 
	    )
	    {
			Validator.Event.stopEvent( ev );
		}
	    return;
	},
	
	money: function( ev )
	{
		var key = Validator.Event.key( ev );
		var o = this.element;
		
		if( ( key > 32 && key < 41 ) || 
			key == 8   || 
			key == 127 || 
			key == 0   || 
			key == 9   || 
			key == 13 
		)
		{
			return;
		}
		
		if( key > 47 && key < 58 ){
			
	    	var n = 2;
	        var s = ( o.value.replace( /^0+/g , "" ) + String.fromCharCode( key ) ).replace( /\D/g , "" );
	        var l = s.length;
	        
	        if( o.maxLength + 1 && l >= o.maxLength ){ 
	        	return false;
	        }
	        
	        if( o.maxLength == o.value.length ){
	        	return false;
	        }
	        
	        l <= (n = 2) && (s = new Array(n - l + 2).join("0") + s);
	        for( var i = (l = ( s = s.split("") ).length ) - n; (i -= 3) > 0; s[i - 1] += "." );
	        n && n < l && ( s[l - ++n] += "," );
	        o.value = s.join( "" );
	    }
	    
	    Validator.Event.stopEvent( ev );
	}
}
