﻿/* Biblioteca : validateLib.js
	Autor : Jefferson Petilo( jefferson@netdom.com.br )
	
	Biblioteca Predecessora
		1 - utilLib.js
*/
var cor_primaria  = '#FFE1E1';

var timeDiff  =  {
    setStartTime:function (){
        d = new Date();
        time  = d.getTime();
    },

    getDiff:function (){
        d = new Date();
        return (d.getTime()-time);
    }
}

if (!String.prototype.htmlEncode) {
  String.prototype.htmlEncode = function(){ 
  return this.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;"); 
  };
}

if (!String.prototype.htmlDecode) {
   String.prototype.htmlDecode = function(){ 
   return this.replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&"); 
  };
}

if( !Number.prototype.Arredondar ){ 
  Number.prototype.Arredondar = function(x) {   
  	var temp = this;   
		temp=Math.round( temp*Math.pow(10,x))/Math.pow(10,x);   
 	return temp; 
  } 
}

if (!String.prototype.lTrim) {
  String.prototype.lTrim = function (){
   return this.replace(/^\s*/, "");
  };
}

if (!String.prototype.rTrim) {
  String.prototype.rTrim = function (){
   return this.replace(/\s*$/, "");
  };
}

String.prototype.trim = function (){
  return this.lTrim().rTrim();
};

String.prototype.isNumber = function() {
  return( !isNaN( this.split( '.' ).join( '' ).split( ',' ).join( '' ).split( '-' ).join( '' ) ) );
}

String.prototype.isDate = function() {
  if( this.split( '/' ).length != 3 ) return( false );

   var dd = Number( this.split( '/' )[ 0 ] );
   var mm = Number( this.split( '/' )[ 1 ] );
   var yy = Number( this.split( '/' )[ 2 ] );
   var dt = new Date( yy , mm -1 , dd  );
	
  return( [ yy , ( mm < 10 ? '0' : '' ) + mm , ( dd < 10 ? '0' : '' ) + dd ].join( '' ) == dt.Datas() );
}

String.prototype.isMail = function() {
 var test;
 var pt1    = this.split( '@' );
 var valid  = '.-_@';
		
	if( ( pt1.length != 2 ) || ( pt1[ 0 ].length == 0 ) || ( pt1[ 1 ].length == 0 ) ) 
		return( false );
	else {
	  for( var i = 0 ; i < valid.length - 1 ; i++ ) {
		if( pt1[ 0 ].split( valid.charAt( i ) ).hasEmptyElements() ) return( false );
		if( pt1[ 1 ].split( valid.charAt( i ) ).hasEmptyElements() ) return( false );
	   }			
	}
	for( var i = 0 ; i < this.length ; i++ ) {
	  var charac = this.toUpperCase().charCodeAt( i );
	  
		if( valid.indexOf( String.fromCharCode( charac ) ) == -1 )
		if(!( ( ( charac >= 65 ) && ( charac <= 90 ) ) || ( ( charac >= 48 ) && ( charac <= 57 ) ) ) ) 
		   return( false );
	}	
	
  return( true );
}

String.prototype.isCNPJ = function() {
 var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = this;

  if((c = c.replace(/[^\d]/g,"").split("")).length != 14) return ( false );
  for(var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
  if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n)) return ( false );
  for(var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
  if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n)) return ( false );

  return ( true );
}

Number.prototype.Arredondar = function(x) {   
 return Math.round( this * Math.pow(10,x))/Math.pow(10,x); 
} 

Date.prototype.Datas = function() {
  var dd = this.getDate();
  var mm = this.getMonth() + 1;
  var yy = this.getFullYear();
	
  return( [ yy , ( mm < 10 ? '0' : '' ) + mm , ( dd < 10 ? '0' : '' ) + dd ].join( '' ) );
}

Array.prototype.hasEmptyElements = function() {
  for( var i = 0 ; i < this.length ; i++ )
   if( ( this[ i ] == '' ) || ( this[ i ] == null ) || ( this[ i ] == undefined ) )
	  return( true );
			
   return( false );
}

function form(p_form) {
 if(!document.forms[ p_form ] ) return;
 return ( document.forms[ p_form ] ); 
}


function focusCampo( p_campo ){ 
 if( validateType( p_campo ) ){ 
	p_campo.focus();
 }
}  
function enableCampo( p_campo) {
  p_campo.disabled = false;
}
function disableCampo(p_campo) {
   p_campo.disabled = true;
}

function clearCampo( p_campo, p_valor_padrao ) {
 if( p_campo.value == p_valor_padrao ) p_campo.setAttribute('value','');
}

function defaultValueCampo( p_campo, p_valor_padrao ) {
  if( !p_campo.value ) p_campo.value = p_valor_padrao;
}

function fnc_controla_campos() {
 var vForm = ( fnc_controla_campos.arguments.length == 1 )?fnc_controla_campos.arguments[ 0 ]:'';
   
  if(vForm) { 
	 for( var i = 0; i < vForm.length; i++ ) {	
		if( fnc_verifica_tipo( vForm.elements[ i ] ) ){ 
	   		addEvent( vForm.elements[ i ] , 'focus' , setBGColor   , false ); 
	   		addEvent( vForm.elements[ i ] , 'blur'  , clearBGColor , false );
		}
	 }	
  } else { 
	for( var j = 0; j <  document.forms.length; j++ ) { 
	  vForm = document.forms[j];
	  for( var i = 0; i < vForm.length; i++ ) {	
		  if( fnc_verifica_tipo( vForm.elements[ i ] ) ){ 
			 addEvent( vForm.elements[ i ] , 'focus' , setBGColor   , false ); 
			 addEvent( vForm.elements[ i ] , 'blur'  , clearBGColor , false );
		  }
	  }	
	}
  }
}	

function fnc_verifica_tipo( p_campo ) {
   if(p_campo.readOnly) return false;
   
   switch( p_campo.type ){
	  case 'hidden':
	  case 'button':
	  case 'image':
	  		return (false);
	  break;
	  default:
	  	   return (true);
	 break;
   } 
}
function getValorCampo( p_campo ){
  var campo   = p_campo;
  var valor   = '';

  if(typeof campo == 'undefined') return valor;

  if( campo && ( !campo.readOnly || !campo.disabled ) )  {
	switch( campo.type ){
		case 'text'     : 
		case 'password' : 
		case 'hidden':
		case 'textarea' : 
			 valor 	 = campo.value.trim();
		break;
		case 'select-one': 
			valor = campo.options[ campo.options.selectedIndex ].value;
		break;
		
		case 'checkbox':
			valor = getCheckboxValor(campo);
		break;
		case 'radio':
			valor = getRadioSelecionadoValor(campo);
		break;
		default :
			valor = '';
		break;
	}
  }	
  
  return valor;
}

function setValorCampo( p_campo, p_valor ) {
 var campo = p_campo;

 if(typeof campo == 'undefined') return false;
 
  if( campo && ( !campo.readOnly || !campo.disabled ) )  {
	switch( campo.type ){
		case 'text'     : 
		case 'password' : 
		case 'hidden':
		case 'textarea' : 
			 campo.value = p_valor;
		break;
		case 'select-one' 	   : 
		case 'select-multiple' : 
			 for(var q = 0, il=campo.options.length; q < il; q++ )
			   if( campo.options[ q ].value  == p_valor)
				   campo.options[ q ].selected = true ;

		break;
		
		case 'checkbox':
		case 'radio':
			   campo.checked = p_valor;
		break;
	}
	if( campo.length > 1 && campo[ 1 ].type =='radio') setRadioValor( campo, p_valor );
  }
}
function getRadioSelecionado( p_grupo )
{
  if(typeof p_grupo != undefined)
  { 
    for(var i = 0; i < p_grupo.length; i++ )
	    if( p_grupo[ i ].checked ) return ( i ); // returna posição do elemento do array que est' + String.fromCharCode( 224 ) + ' selecionado
   } else 
	    if( p_grupo.checked ) return ( 0 );  // retorna posição do primeiro elemento
		   return ( -1 ); // retorna que não existe elemento selecionado
} 

function getRadioSelecionadoValor( p_grupo )
{
  var i = getRadioSelecionado( p_grupo );
  if( i == -1 ) 
  	 return '';
   else 
   {
	  if( p_grupo[ i ] ) 
		return ( p_grupo[ i ].value );
	  else 
		return ( p_grupo.value );
   }
}

function setRadioValor( p_grupo, p_valor ) {
 var grupo   = ( typeof p_grupo != 'string')?p_grupo:form('principal').elements[ p_grupo ];
 var vLength = grupo.length;

  if(vLength == 'undefined' ) {
	 grupo.checked = (grupo.value == p_valor);
	 return;
  }

  for( var i=0, vTotal=vLength; i<vTotal; i++)
		grupo[ i ].checked = (grupo[i].value == p_valor);

}

function fnc_verifica_form( form ) {
 var showMessage = function(p_msg, p_campo ){ alert( p_msg ); /*if( tip ) tip.show( p_msg );*/ p_campo.focus(); }
 var temSecao    = ( fnc_verifica_form.arguments.length == 2 );
 var secao	     = ( temSecao )?fnc_verifica_form.arguments[ 1 ]:'';
 var mensagem    = '';

 for( var i = 0; i < form.length; i++ ) {
	  var campo 	= form.elements[ i ];
	  var tipo  	= campo.getAttribute('typeValidate');
	  var requerido = campo.getAttribute('required');
	  var display	= campo.getAttribute('displayName');
	  var valor 	= campo.value;
	  var erro	    = false ;
		
		 if(typeof campo.name != 'undefined'){ 
		 
		  if ( ( temSecao && secao == campo.getAttribute('secao') ) || !temSecao )  { 
			  // se o campo for requerido
				if (requerido) { 
					
					if ( !valor.trim().length ) {
					   mensagem =  'O campo ' + display + ' ' + String.fromCharCode( 233 ) + '  requerido.';  
					   return( showMessage( mensagem , campo  ) );		
					} 

					if( tipo && valor ) { 
					   mensagem = 'O valor do campo ' + display  + ' deve ser ';
						if( tipo == 'numerico' && !valor.isNumber() ){
							erro = true;
							mensagem += ' num' + String.fromCharCode( 233 ) + 'rico.';
						} else if ( tipo == 'data' && !valor.isDate() ) {
							erro = true;
							mensagem += ' uma data v' + String.fromCharCode( 225 ) + 'lida.';
						} else if( tipo == 'email' && !valor.isMail() ){ 
							erro = true;
							mensagem += ' um e-mail v'+ String.fromCharCode( 225 )+'lido.';
						} else if( tipo == 'cnpj' && !valor.isCNPJ()) {
							erro = true;
							mensagem += 'um CNPJ v' + String.fromCharCode( 225 ) + 'lido.';
						} 
					   // mostra erro
					   if( erro ) return( showMessage( mensagem , campo  ) );
				   } 	 			
			  }
		  }
	 }
 }
 return true;
}

/*
 MODO DE USAR : 
   onkeyUP
   
  CEP 	: return mascara_formulario(document.principal, 'CEP', '99.999-999', event); 
  CPF 	: return mascara_formulario(document.principal, 'CPF', '999.999.999-99', event);
  CNPJ  : return mascara_formulario(document.principal, 'CNPJ', '99.999.999/9999-99', event);
  DATA  : return mascara_formulario(document.principal, 'DATA', '99/99/9999', event);
  FONE  : return mascara_formulario(document.principal, 'FONE', '(99) 999-9999', event);
  FONE  : return mascara_formulario(document.principal, 'FONE', '(99) 9999-9999', event);
  PROC  : return mascara_formulario(document.principal, 'PROC', '99.999999999/9999-99', event);
  CONTA : return mascara_formulario(document.principal, 'CONTA', '9999-!', event);  
*/
function Mask(objForm, strField, sMask, evtKeyPress) {
     var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

     if(document.all) { // Internet Explorer
       nTecla = evtKeyPress.keyCode; }
     else if(document.layers) { // Nestcape
       nTecla = evtKeyPress.which;
     }

     sValue = objForm[strField].value;

     // Limpa todos os caracteres de formata��o que
     // j� estiverem no campo.
     sValue = sValue.toString().replace( "-", "" );
     sValue = sValue.toString().replace( "-", "" );
     sValue = sValue.toString().replace( ".", "" );
     sValue = sValue.toString().replace( ".", "" );
     sValue = sValue.toString().replace( "/", "" );
     sValue = sValue.toString().replace( "/", "" );
     sValue = sValue.toString().replace( "(", "" );
     sValue = sValue.toString().replace( "(", "" );
     sValue = sValue.toString().replace( ")", "" );
     sValue = sValue.toString().replace( ")", "" );
     sValue = sValue.toString().replace( " ", "" );
     sValue = sValue.toString().replace( " ", "" );
     fldLen = sValue.length;
     mskLen = sMask.length;

     i = 0;
     nCount = 0;
     sCod = "";
     mskLen = fldLen;

     while (i <= mskLen) {
       bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
       bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

       if (bolMask) {
         sCod += sMask.charAt(i);
         mskLen++; }
       else {
         sCod += sValue.charAt(nCount);
         nCount++;
       }
       i++;
     }

     objForm[strField].value = sCod;

     if (nTecla != 8) { // backspace
       if (sMask.charAt(i-1) == "9") { // apenas n�meros...
         return ((nTecla > 47) && (nTecla < 58)); } // n�meros de 0 a 9
       else { // qualquer caracter...
         return true;
       } }
     else {
       return true;
     }
 }
