/******************************************************************************
    Funções desta biblioteca:
    trim() - string - retira os espações em branco a direita e esquerda
    isAlfa() - boolean - verifica se o valor passado é string
    comparaData() - compara se uma data é maior/menor/igual a outra
    select2String() - string - monta string a partir das opções de um <select>
    truncFloat() - float - retorna o valor truncado em n casas decimais
    roundFloat() - float - retorna o valor arrendondado em n casas decimais
    float2Str() - string - retorna um valor númerico como String
 ******************************************************************************/

/******************************************************************************/
/*    Funcao: trim()
    Parametros: nenhum
    Retorno: String
    Descricao: Retira os espacos em branco da esquerda e da direita
        de um objeto String*/
/******************************************************************************/
function trim(){
//    var re = / *(.*) */;
//    var retVal = this.replace(re, "$1");
    var retVal = this.ltrim();
    retVal = retVal.rtrim();
    return retVal;
}
String.prototype.trim = trim;

function ltrim(){
    var start = 0;
    var end = this.length;
    var retVal = this.substring(start, end);
    var esq = /^ /;
    while (retVal.match(esq)) {
        retVal = this.substring(++start, end);
    }
    return retVal;
}
String.prototype.ltrim = ltrim;
function rtrim(){
    var end = this.length;
    var retVal = this.substring(0, end);
    var dir = / $/;
    while (retVal.match(dir)) {
        retVal = this.substring(0, --end);
    }
    return retVal;
}
String.prototype.rtrim = rtrim;

/******************************************************************************/
/*    Funcao: trim()
    Parametros: nenhum
    Retorno: String
    Descricao: Retira os espacos em branco da esquerda e da direita
        de um objeto String*/
/******************************************************************************/
/*function trim(){
    var retVal = "";
    var start = 0;
    while ((start < this.length) && (this.charAt(start) == ' ')) {
    ++start;
    }
    var end = this.length;
    while ((end > 0) && (this.charAt(end - 1) == ' ')) {
    --end;
    }
    retVal = this.substring(start, end);
    return retVal;
}
String.prototype.trim = trim;*/


/******************************************************************************/
/*    Funcao: isAlfa(<value>)
    Parametros:
    - value : Valor a ser analisado como String
    Retorno: boolean
    Descricao: Verifica se um determinado valor contém apenas
        caracteres alfanuméricos */
/******************************************************************************/
function isAlfa( value)
{
	var expr= new RegExp("[A-Za-z ]+");
	return expr.test( value);
}

function isNum( value ) {
    var strValidos = "0123456789";
    var valor= new String(value);
    for( var i=0; i< valor.length; i++)
    {
        if( strValidos.indexOf(valor.charAt(i)) == -1)
            return false;
    }
    return true;
}

/******************************************************************************/
/*    Funcao: comparaData(<data_a>, <data_b>)
    Parametros:
    - data_a : String representando uma data válida
    - data_b : String representando uma data válida
    Retorno:
        -1 : menor
         0 : igual
         1 : maior
    Descricao: Verifica a data A em relação a data B */
/******************************************************************************/
function comparaData(data_a, data_b){
    var saida;
    var a_data = new Date(data_a.substr(6,4),data_a.substr(3,2),data_a.substr(0,2));
    var b_data = new Date(data_b.substr(6,4),data_b.substr(3,2),data_b.substr(0,2));
    saida = a_data.valueOf() < b_data.valueOf() ? -1 : a_data.valueOf() > b_data.valueOf() ? 1 : 0;
    return saida;
}

/******************************************************************************/
/*    Funcao: select2string(<nome_obj_in>, <nome_obj_out>){
    Parametros:
    - nome_obj_in : String representando uma entidade SELECT do HTML
    - nome_obj_out : String representando uma entidade INPUT do HTML
        (tipo HIDDEN, TEXT, ...)
    Retorno: Altera diretamente o conteúdo de "nome_obj_out"
    Descricao: Captura o conteúdo texto das opções selecionadas do "select"
        montando uma string com os dados separados por virgula /*
/******************************************************************************/
function select2string(nome_obj_in, nome_obj_out){
    var obj_in  = eval(document.getElementById(nome_obj_in) );
    var obj_out = eval(document.getElementById(nome_obj_out) );
    if (obj_in.selectedIndex >= 0 ) {
        obj_out.value = "";
        for(var i = 0 ; i < obj_in.options.length ; i++ )
            if (obj_in.options[i].selected)
                obj_out.value = (obj_out.value ? obj_out.value + ", " : "") + obj_in.options[i].text;
    }
}

/******************************************************************************/
/*    Funcao: truncFloat(<x>, <prec>){
    Parametros:
    - n : valor a ser "truncado"
    - prec : número de casas decimais
    Retorno: float
    Descricao: retorna o valor "truncado" com n casas decimais /*
/******************************************************************************/
function truncFloat(x,prec){
    var n = new Number();
    n = Math.floor(x * Math.pow(10,prec)) / Math.pow(10,prec);

    return n;
}

/******************************************************************************/
/*    Funcao: roundFloat(<x>, <prec>){
    Parametros:
    - n : valor a ser "arrendondado"
    - prec : número de casas decimais
    Retorno: float
    Descricao: retorna o valor "arrendondado" com n casas decimais /*
/******************************************************************************/
function roundFloat(x,prec){
    var n = new Number();
    n = Math.round(x * Math.pow(10,prec)) / Math.pow(10,prec);

    return n;
}

/******************************************************************************/
/*    Funcao: float2Str(<x>, <prec>){
    Parametros:
    - n : valor a ser analisado
    - prec : número de casas decimais
    Retorno: String
    Descricao: retorna um valor numérico em formato String com n casas decimais/*
/******************************************************************************/
function float2Str(x,prec){
    var n = new Number();
    n = roundFloat(x,prec);
    var s = new String();
    s = n.toString();
    if(s.indexOf('.') < 0) s += '.';

    while(s.length - s.indexOf('.') - 1 < prec) s += '0';

    return s;
}
	function validaEmail(mail){
		if(mail){
			var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
			if(typeof(mail) == "string"){
					if(er.test(mail)){ return true; }
			}else if(typeof(mail) == "object"){
					if(er.test(mail.value)){ 
											return true; 
									}
			}else{
				return false;
			}
		}
	}	
		
	function include(arquivo){
		var novo = document.createElement('script');
		novo.setAttribute('type', 'text/javascript');
		novo.setAttribute('src', arquivo);
		document.getElementsByTagName('head')[0].appendChild(novo);
		//apos a linha acima o navegador inicia o carregamento do arquivo
		//portanto aguarde um pouco até o navegador baixá-lo. :)
	}
	
	function script_calendar(){
		include("php/dhtmlgoodies_calendar.js?random=20060118");
		include("php/dhtmlgoodies_calendar.css?random=20051112");
	}
		
		function constroi_ajax() {
			var xmlhttp=false;
			if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
				try {
					xmlhttp = new XMLHttpRequest();
				}
				catch (e) {
					xmlhttp=false;
				}
			}
			if (!xmlhttp && window.createRequest) {
				try {
					xmlhttp = window.createRequest();
				} catch (e) {
					xmlhttp = false;
				}
			}
			if (!xmlhttp && window.ActiveXObject) {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			return(xmlhttp);
		}

		xmlhttp = new Array();


		/*
		Função para executar códigos ajax.
		Recebe a página a ser executada e os parametros a serem passados
		*/		
		function executa_ajax(parametros, pag, metodo) {	
			/*
			parametros: valores a serem repassados para a página de execução do ajax. Ex. "VALOR1=1&VALOR2=2..."
			pag: Endereço da fonte que executa o ajax. Ex. "sistema.php?ACAO=pagina_php.php"
			metodo: GET ou POST
			*/	
			var get = '';
			if (metodo == ''){//padrão é o method POST.
				metodo = "POST";
			}
			if (metodo == "POST"){//É possivel utilizar o metodo POST ou GET
				get = 'ajax=POST';//identificador de execução do ajax.
			}else if (metodo == "GET"){
				get = 'ajax=GET&'+parametros;//O "ajax=1" é passado sempre por GET, na página utilizar $_GET['ajax'] ou $_REQUEST['ajax'], para recuperar o valor.
			}else{
				alert ('O metodo passado para a função é inválido!('+metodo+')');
				return false;
			}
			
			var pos = pag.indexOf("?");
			
			if (pos < 0){
				get = "?"+get;
			}else{
				get = "&"+get;
			}	
			var i = xmlhttp.length;
			i++;		
			xmlhttp[i] = constroi_ajax();	
			//alert(pag+get);
			
			if (xmlhttp[i]) {
				xmlhttp[i].open(metodo, pag+get, true);//Adiciona o get Ajax para sempre ser usado como indicador de execução do código ajax.            
				xmlhttp[i].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				xmlhttp[i].setRequestHeader("Content-length", parametros.length);
				xmlhttp[i].setRequestHeader("Connection", "close");
				xmlhttp[i].setRequestHeader('Accept', 'message/x-jl-formresult');
				xmlhttp[i].send(parametros);
				xmlhttp[i].onreadystatechange = function() {
					if (xmlhttp[i].readyState == 4){
						var res = xmlhttp[i].responseText;				
						
						eval(res);  								
					}
				}
			} else {
				alert('Erro Ajax! Contate o suporte');
			}
			
		}
		function limpa_combo_js(id){//recebe o id da combo de cidade
		  //alert(id);
				var elSel = document.getElementById (id); 
				if (elSel.length != 'undefined'){
					var i; 
					for (i = elSel.length; i >= 0; i--) { 
						if (elSel.options [i]) { 
							elSel.remove (i); 
						}
					} 
				}
				var novo = document.createElement('option');
				novo.value = '';
				novo.text  = 'Aguarde...';
				document.getElementById(id).options.add(novo);
		}
		function habilita_uf_cid(nacionalidade){			
			if (nacionalidade != 'B'){
				document.getElementById('UF_NASC').disabled = true;
				document.getElementById('CIDADE_NASC').disabled = true;
				document.getElementById('PAIS').disabled = false;
			}else{
				document.getElementById('UF_NASC').disabled = false;
				document.getElementById('CIDADE_NASC').disabled = false;
				document.getElementById('PAIS').disabled = true;
			}
		}
		
		function validaCPF(valor, id) {
		var res;
		var resb;
		value = valor.trim();
		if (value.length < 11) resb = 1;
		if ((value.length == 11)){ //formato 000000000
			if (!(isNaN(value))){
				value = value.substr(0,3) + '.' +
						value.substr(3,3) + '.' +
						value.substr(6,3) + '-' +
						value.substr(9,2);
			}
		}
		else{ //formato 00.000.000-00
			if (value.length < 14)         resb = 1;
			if (isNaN(value.substr(0,3)))  resb = 1;
			if (value.substr(3,1) != '.')  resb = 1;
			if (isNaN(value.substr(4,3)))  resb = 1;
			if (value.substr(7,1) != '.')  resb = 1;
			if (isNaN(value.substr(8,3)))  resb = 1;
			if (value.substr(11,1) != '-') resb = 1;
			if (isNaN(value.substr(12,2))) resb = 1;
		}
		
		for (y = 0; y <= 9; y++){ //Testa se é tipo 00.000.000/0000-00
			t = y.toString(); 
			inv = t+t+t+'.'+t+t+t+'.'+t+t+t+'-'+t+t;
			if (value == inv)
				resb = 1;
		}
		
        if (res != 1){
			sum1 = 	(10 * Number(value.substr(0,1))) + 
					(9 * Number(value.substr(1,1))) + 
					(8 * Number(value.substr(2,1))) + 
					(7 * Number(value.substr(4,1))) + 
					(6 * Number(value.substr(5,1))) + 
					(5 * Number(value.substr(6,1))) + 
					(4 * Number(value.substr(8,1))) + 
					(3 * Number(value.substr(9,1))) + 
					(2 * Number(value.substr(10,1)));
			sum1 = sum1 % 11;
			if (sum1 < 2) {
			 res1 = 0;
			} else {
			 res1 = 11 - sum1;
			}
			sum = 	(11 * Number(value.substr(0,1))) + 
					(10 * Number(value.substr(1,1))) + 
					(9 * Number(value.substr(2,1))) + 
					(8 * Number(value.substr(4,1))) + 
					(7 * Number(value.substr(5,1))) + 
					(6 * Number(value.substr(6,1))) + 
					(5 * Number(value.substr(8,1))) + 
					(4 * Number(value.substr(9,1))) + 
					(3 * Number(value.substr(10,1)))+
					(2 * res1);
			sum = sum % 11;
			if (sum < 2) {
			 res = 0;
			} else {
			 res = 11 - sum;
			}
		}
		
		if (res != Number(value.substr(13,1)) || resb == 1) {
			alert('Número inválido!');						
			document.getElementById(id).focus();
			return '';
		}else{
			return (value);
		}
	}
	/*
	function cpf(){
		var id = document.getElementById('CGC_CPF');
		var cpf = validaCPF(id.value);
		if (cpf == ''){			
			document.getElementById('ERRO_CPF').innerHTML = "CPF inválido";
			
		}else{
			id.value = cpf;
			document.getElementById('ERRO_CPF').innerHTML = "";
		}
		
	}		*/
	