/******************************************************************************
    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 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: 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 ou alert
	*/
    var parametros;
    var pag;
    var metodo;
    var mostra = false;

    var argv = executa_ajax.arguments;
    var argc = argv.length;
    if (argc < 2){
        alert('Erro ao utilizar função executa_ajax. Verifique em search.js');
        return false;
    }
    if(argv[0]){
        parametros = argv[0];
    }
    if(argv[1]){
        pag = argv[1];
    }
    if(argv[2]){
        metodo = argv[2];
    }else{
        metodo = '';
    }
    if(argv[3]){
        mostra = true;
    }

    /*alert(parametros);
	alert(pag);
	alert(metodo);
	alert(mostra);*/

    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();
    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;
                if(mostra){
                    alert(res);
                }
                eval(res);
            }
        }
    } else {
        alert('Erro Ajax! Contate o suporte');
    }

}
