// Verifica se há dados em um campo rich text editor
function validarEditor( id ){ try { return ( tinyMCE.get( id ).getContent() != '' ); } catch( exc ){ return !( !jQuery( '#' + id ).val() ) } }

// Verifica se um uma data é anterior à outra
function validarDataFutura( data, hoje, strict ){
	strict = (strict)? true : false;
	var data = data.split('/');
	var dia = parseInt( data[0] );
	var mes = parseInt( data[1] );
	var ano = parseInt( data[2] );
	var dia_atual = '';
	var mes_atual = '';
	var ano_atual = '';
	if( hoje == '' ){
		hoje = new Date();
		dia_atual = parseInt( hoje.getDate(), 10 );
		mes_atual = parseInt( hoje.getMonth(), 10 ) + 1;
		ano_atual = parseInt( hoje.getFullYear(), 10 );
	} else {
		hoje = hoje.split('/');
		dia_atual = parseInt( hoje[0] );
		mes_atual = parseInt( hoje[1] );
		ano_atual = parseInt( hoje[2] );
	}
	return strict? ( ( ano > ano_atual ) || ( ( ano == ano_atual ) && ( ( mes > mes_atual ) || ( mes == mes_atual && dia > dia_atual ) ) ) ):
				   ( ( ano > ano_atual ) || ( ( ano == ano_atual ) && ( ( mes > mes_atual ) || ( mes == mes_atual && dia >= dia_atual ) ) ) );
}

// Verifica se um valor termina com JPG, JPEG, GIF ou PNG
function validarImagem( valor ){ return valor && valor.match( /^(.*)(\.)((jpg)|(jpeg)|(gif)|(png))$/i ); }

// Retorna o valor float de um número em formato de moeda ( real )
function getFloat( valor ){ return ( '0' + valor ).replace( /\.|,/, '' ); }

// Verifica um valor de acordo com o padrão nacional
function validarValor( valor ){ return ( parseFloat( ( '0' + valor ).replace( /\./g, '' ).replace( /,/g, '.' ) ) > 0 ); }

// Verifica se o valor informado é composto apenas por números
function validarCampoNumerico( valor ){ return valor.match( /^\d+$/ ); }

// Verifica uma data no formato dd/mm/aaaa
function validarApelidoLink( valor ){ return valor && valor.match( /^[a-zA-Z0-9\-_]+$/i ); }

// Verifica uma data no formato HH:MM
function validarHorario( valor ){ return valor.match( /^([01][0-9])|(2[03]):[0-5][0-9]$/ ); }

// Verifica uma data no formato dd/mm/aaaa
function validarData( valor ){ return valor.match( /^(\d{2})\/(\d{2})\/(\d{4})$/ ); }

// Verifica se um dado link está sem prefixo
function linkSemPrefixo( valor ){ return ( valor != '' && !valor.match( /^((#)|(index)|(https?:\/\/))/ ) ); }

// Verifica a validade de um username
function validarUsername( valor ){ return !valor.match( /([\<|\>|\"|\'|\%|\;|\(|\)|\&])|(^$)/ ); }

// Verifica a validade de uma senha
function validarSenha( valor ){ return valor && valor.match( /^.{6,15}$/ ); }

// Verifica a validade de um endereço de email
function validarEmail( valor ){ return valor.match( /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/ ); }

// Verifica a validade de um telefone
function validarTelefone( valor ){ return valor.match( /^([(]?\s?\d{2}\s?[)]?\s?)?\d{4}\D?\d{2}\D?\d{2}$/ ); }

// Verifica a validade de um CEP
function validarCEP( valor ){ return valor.match( /^\d{2}\.?\d{3}(-)?\d{3}$/ ); }

// Verifica a validade de um número de CNPJ
function validarCNPJ( valor ){
	valor = valor.replace( /\D/g, '' );
	if( valor.length != 14 ) return false;
	if( valor.match( /^(0{14})|(1{14})|(2{14})|(3{14})|(4{14})|(5{14})|(6{14})|(7{14})|(8{14})|(9{14})$/ ) ) return false;
	var digito1 = valor.charAt( 12 );
	var digito2 = valor.charAt( 13 );
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	var total1 = 0;
	var total2 = 0;
	
	// Dígito 1
	for( i = 0; i < 12; i++ ) total1 += c[ i + 1 ] * parseInt( valor.charAt( i ) );
	total1 = 11 - ( total1 % 11 );
	if( total1 == 11 || total1 == 10 ) total1 = 0;
	
	// Dígito 2
	for( i = 0; i < 13; i++ ) total2 += c[i] * parseInt( valor.charAt( i ) );
	total2 = 11 - ( total2 % 11 );
	if( total2 == 11 || total2 == 10 ) total2 = 0;
	
	// Resultado
	return ( digito1 == total1 && digito2 == total2 );
}

// Verifica a validade de um número de CPF
function validarCPF( valor ){
	valor = valor.replace( /\D/g, '' );
	if( valor.length != 11 ) return false;
	if( valor.match( /(^0{11})|(1{11})|(2{11})|(3{11})|(4{11})|(5{11})|(6{11})|(7{11})|(8{11})|(9{11})$/ ) ) return false;
	var digito1 = valor.charAt( 9 );
	var digito2 = valor.charAt( 10 );
	var total1 = 0;
	var total2 = 0;
	
	// Dígito 1
	for( i = 0; i < 9; i++ ) total1 += ( 10 - i ) * parseInt( valor.charAt( i ) );
	total1 = 11 - ( total1 % 11 );
	if( total1 == 11 || total1 == 10 ) total1 = 0;
	
	// Dígito 2
	for( i = 0; i < 10; i++ ) total2 += ( 11 - i ) * parseInt( valor.charAt( i ) );
	total2 = 11 - ( total2 % 11 );
	if( total2 == 11 || total2 == 10 ) total2 = 0;
	
	// Resultado
	return ( digito1 == total1 && digito2 == total2 );
}
