document.write('<script type="text/javascript" src="numeros.js"></script>');

/**
 * Faz a validação do campo data testando se está com o formato DD/MM/AAAA e contém 10 caracteres.<br><br>
 * Caso os parâmetro corCampo e corLetra não sejam preenchidos as respectivas cores default são:<br><br>
 * Cor do campo - <i>background:</i> <b>#FF0000</b><br>
 * Cor da letra - <i>cor:</i> <b>#FFFFFF</b>
 *
 * @param data Objeto de um campo texto formatado como data
 * @param corCampo String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @param corLetra String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @return alert/void Retorna em caso de erro um alert com uma mensagem e altera a cor do fundo do campo e da letra ou não retorna nada.
 */
function validaData(data, corCampo, corLetra){

    verifica = new Array(10);

    if(!corCampo) corCampo = '#FF0000';

    if(!corLetra) corLetra = '#FFFFFF';

    //testa o numero de caracteres no campo
    if(data.value.length != 10){
        data.style.backgroundColor = corCampo;
        data.style.color = corLetra;
        data.focus;
        alert('ATENÇÃO!\n\nO campo data deve conter 10 (dez) caracteres no formato DD/MM/AAAA, verifique!');
    }else{
        //testa a ordem dos caracteres
        for (i = 0; i < data.value.length; i++) {
            if(numeros(data.value.substring(i, i + 1))) verifica[i] = true;
            else if(barra(data.value.substring(i, i + 1))) verifica[i] = true;
            else verifica[i] = false;
        }
        for (i = 0; i < verifica.length; i++) {
            if(!verifica[i]){
                data.style.backgroundColor = corCampo;
                data.style.color = corLetra;
                data.focus;
                alert('ATENÇÃO!\n\nO campo está preenchido de forma incorreta. Este deve conter 10 (dez) caracteres no formato DD/MM/AAAA, verifique!');
                return;
            }
        }
        if(data.value == '00/00/0000'){
            data.style.backgroundColor = corCampo;
            data.style.color = corLetra;
            data.focus;
            alert('ATENÇÃO!\n\nO campo está preenchido de forma incorreta. Este deve conter 10 (dez) caracteres no formato DD/MM/AAAA, verifique!');
            return;
        }
    }
}

/**
 * Cria uma máscara com o formato DD/MM/AAAA conforme o campo vai sendo preenchido.<br><br>
 * Caso os parâmetro corCampo e corLetra não sejam preenchidos as respectivas cores default são:<br><br>
 * Cor do campo - <i>background:</i> <b>#FF0000</b><br>
 * Cor da letra - <i>cor:</i> <b>#FFFFFF</b>
 *
 * @param obj Objeto de um campo texto
 * @param event Evento do navegador
 * @param corCampo String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @param corLetra String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @return Boolean/String Retorna o Objeto com o formato de data
 */
function mascaraData(obj, event, corCampo, corLetra){

    enter = 13;
    space = 32;
    esc = 27;
    del = 83;
    backspace = 8;
    validos = '0123456789';
    barra = '/';
    aux = '';

    //testa os parâmetros de cor
    if(!corCampo)
        corCampo = '#FF0000';

    if(!corLetra)
        corLetra = '#FFFFFF';

    //testa se o que foi digitado é número

    if(navigator.appName.indexOf('Netscape') != -1) tecla = event.which;
    else tecla = event.keyCode;

    if(tecla == enter)
        return false;
    else if(tecla == backspace)
        return true;
    else if(tecla == space)
        return false;
    else if(tecla == esc)
        return false;
    else if(tecla == del)
        return true;

    key = String.fromCharCode(tecla);

    if (validos.indexOf(key) == -1) {
        return false;
    }

    aux = obj.value;
    aux += key;

    if(aux.length == 2){
        obj.value = aux + '/';
    }else if(aux.length == 5){
        obj.value = aux + '/';
    }else if(aux.length == 10){
        if(!verificaData(aux)){
            obj.value = aux;
            obj.style.backgroundColor = corCampo;
            obj.style.color = corLetra;
            obj.focus;
            alert('ATENÇÃO!\n\nData inválida, verifique!');
            return false;
        }else{
            obj.value = aux;
        }
    }else if(aux.length <= 10){
        obj.value = aux;
    }
    return false;
}

/**
 * Verifica se a data é uma data válida, testa se o dia, o mes e o ano são válidos
 *
 * @param data String de um campo texto
 * @return Boolean Retorna true se form uma data válida e false caso contrário
 */
function verificaData(data){

    dia = data.substring(0,2);
    mes = data.substring(3,5);
    ano = data.substring(6,10);
    situacao = true;

    if((dia < '01') || (dia < '01' || dia > '30') && (mes == '04' || mes == '06' || mes == '09' || mes == '11') || dia > '31') situacao = false;
    
    if(mes < '01' || mes > '12') situacao = false;
    
    if(mes == '02' && (dia < '01' || dia > '29' || (dia > '28' && (parseInt(ano / 4) != ano / 4)))) situacao = false;

    if(data.value == '') situacao = false;

    return situacao;
}

/**
 * Verifica se o intervalo entre as datas inicial e final é válido.<br><br>
 * Caso os parâmetro corCampo e corLetra não sejam preenchidos as respectivas cores default são:<br><br>
 * Cor do campo - <i>background:</i> <b>#FF0000</b><br>
 * Cor da letra - <i>cor:</i> <b>#FFFFFF</b>
 *
 * @param dataInicial Objeto de um campo texto no formato de data
 * @param dataFinal Objeto de um campo texto no formato de data
 * @param corCampo String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @param corLetra String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @return alert/void Retorna um alert com uma mensagem em caso de erro ou não retorna nada.
 */
function verificaPeriodo(dataInicial, dataFinal, corCampo, corLetra){

    if(dataInicial && dataFinal){

        inicio = new Date(dataInicial.value.substring(6,10),dataInicial.value.substring(3,5),dataInicial.value.substring(0,2));
        fim = new Date(dataFinal.value.substring(6,10),dataFinal.value.substring(3,5),dataFinal.value.substring(0,2));

        if(!corCampo) corCampo = '#FF0000';

        if(!corLetra) corLetra = '#FFFFFF';

        inicio.setMonth(inicio.getMonth() - 1);
        fim.setMonth(fim.getMonth() - 1);

        if(inicio > fim){
            alert('ATENÇÃO! \n\nData de inicio é maior que data de término, verifique!');
            dataInicial.style.backgroundColor = corCampo;
            dataInicial.style.color = corLetra;
            dataFinal.style.backgroundColor = corCampo;
            dataFinal.style.color = corLetra;
            return false;
        }

    }else{
        alert('ATENÇÃO! \n\nDatas não preenchidas, verifique!');
        dataInicial.style.backgroundColor = corCampo;
        dataInicial.style.color = corLetra;
        dataFinal.style.backgroundColor = corCampo;
        dataFinal.style.color = corLetra;
        return false;
    }
    return true;

}

/**
 * Testa se no campo existem menos caracteres do que deveria caso o tamanho não seja preenchido o tamanho default é 10 caracteres
 * Caso os parâmetro corCampo e corLetra não sejam preenchidos as respectivas cores default são:<br><br>
 * Cor do campo - <i>background:</i> <b>#FF0000</b><br>
 * Cor da letra - <i>cor:</i> <b>#FFFFFF</b>
 *
 * @param obj Objeto de um campo texto que receberá validação 
 * @param corCampo String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @param corLetra String contendo o hexa da cor no formato '#FFFFFF' caso a variáver esteja vazia será usada a cor default de alerta
 * @return Boolean|String Retorna false em caso de caracteres não numéricos ou retorna String contendo o valor com a máscara
 */
function validaTamanhoData(obj, corCampo, corLetra){

    //testa os parâmetros de cor
    if(!corCampo) corCampo = '#FF0000';

    if(!corLetra) corLetra = '#FFFFFF';

    if(obj.value != '' && obj.value.length < 10){
        obj.style.backgroundColor = corCampo;
        obj.style.color = corLetra;
        obj.focus;
        alert('ATENÇÃO!\n\nO campo deve conter 10 caracteres com o formato DD/MM/AAAA, verifique!');
    }
    if(obj.value == '00/00/0000'){
        obj.style.backgroundColor = corCampo;
        obj.style.color = corLetra;
        obj.focus;
        alert('ATENÇÃO!\n\nO campo está preenchido de forma incorreta. Este, deve conter uma data válida, verifique!');
        return;
    }
}
