var formatoDataHora = "##/##/####-##:##";
var formatoHora = "##:##";
var formatoCep = "#####-###";
var formatoTelefone = "(##)####-####";
var formatoCPF = "###.###.###-##";
var timeoutErro = undefined;
var opcao = 0;
function selecionaEstrangeiro(valor){
	if(valor == 0){
		Element.setStyle($("idBrasileiro"),{display:'inline'});
		Element.setStyle($("idEstrangeiro"),{display:'none'});
	}else{
		Element.setStyle($("idBrasileiro"),{display:'none'});
		Element.setStyle($("idEstrangeiro"),{display:'inline'});
	}
	$("txtCPF").value = $("txtCPF").defaultValue;
	new MaskedInput("txtCPF", formatoCPF);
	$("txtID").value = $("txtID").defaultValue;
}
function enviarPreInscricao(formu, tipoInsc){
	var campos = [];
	if(tipoInsc == 0){
		if(isMascarado($('txtCPF')) || !isCPFValido($('txtCPF')))campos.push("CPF");
	}else if(tipoInsc == 1)	{
		if(trim($('txtID').value) == "")campos.push("ID");
	}
	
	if(campos.length > 0){
		alert("Os seguintes campos não foram preenchidos, ou foram preenchidos incorretamente: \n" + campos.join("\n"));
		return false;
	}
	formu.submit();
}
function enviarInscricao(){
	var campos = [];
	if(trim($F('txtNome')) == "") campos.push("Nome");
	if(trim($F('txtNomeCracha')) == "")	campos.push("Nome para o crachá");
	if(trim($F('txtEmpresa')) == "")campos.push("Instituição/Empresa");
	if(trim($F('txtEndereco')) == "")campos.push("Endereço");
	if(trim($F('txtCidade')) == "")campos.push("Cidade");
	if(trim($F('txtUF')) == "")	campos.push("UF");
	if(isMascarado($('txtCep')))campos.push("Cep");
	if(comparaTelefone($("txtTelefone")) || isMascarado($("txtTelefone")))campos.push("Telefone");
	if(trim($F('txtEmail')) == "")campos.push("E-mail");
	if(trim($F('txtIdAtuacao')) == "") campos.push("Área de Atuação");
	
	if(!comparaTelefone($("txtFax")) && isMascarado($("txtFax")))campos.push("Fax");
	if(campos.length > 0){
		alert("Os seguintes campos não foram preenchidos, ou foram preenchidos incorretamente: \n" + campos.join("\n"));
		return false;
	}
	if(isMascarado($("txtFax"))){
		$("txtFax").value="";
	}
	$("inscricaoParticipante").submit();
}
function isMascarado(comparar){
	if(comparar.value.indexOf("_") != -1)
		return true;
	return false;
}
function comparaTelefone(comparar){
	var base = formatoTelefone.replace(/#/g, "_");
	return isStringTamanhoIgual(base,comparar);
}
function isDataValida(comparar){
	var base = formatoDataHora.replace(/#/g, "_");
	if(!isStringTamanhoIgual(base,comparar)){
		var tmpDataHora = [];
		comparar.value.scan(/\w+/, function(match){ tmpDataHora.push(match[0])});
		if(tmpDataHora.length != 5 ){
			return true;
		}
		var dia = tmpDataHora[0];
		var mes = tmpDataHora[1];
		var ano = tmpDataHora[2];
		if(isValidDate(ano, mes, dia)){
			return true;
		}
		var hora = tmpDataHora[3];
		var minutos = tmpDataHora[4];
		
		if(!isHoraValida(hora,minutos)){
			return true;
		}
		return false;
	}
	return true;
}
function isObjHoraValido(objHora){
	var base = formatoHora.replace(/#/g, "_");
	if(!isStringTamanhoIgual(base,objHora) && objHora.value.indexOf("_") == -1 ){	
		var tmpDataHora = [];
		objHora.value.scan(/\w+/, function(match){ tmpDataHora.push(match[0])});
		return isHoraValida(tmpDataHora[0],tmpDataHora[1]);
	}
	return false;
}
function isHoraValida(strHora,strMinuto){
	if(isNaN(parseInt(strHora)) || parseInt(strHora) > 23){
		return false;
	}
	if(isNaN(parseInt(strMinuto)) || parseInt(strMinuto) > 59){
		return false;
	}
	return true;
}
function isStringTamanhoIgual(strBase,comparar){
	if(strBase == comparar.value){
		return true;
	}
	return false;
}

function autotab(original,destination){
  var key = window.event.keyCode;
  if ((key == 9) || (key == 16))
     return;
  else if (original.getAttribute&&original.value.length==original.getAttribute("maxlength"))
     destination.focus()
}

//FUNÇÕES NÃO CUSTOMIZADAS
function trim(sString){
	while (sString.substring(0,1) == ' '){
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' '){
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}
Object.extend(Event, {
    KEY_HOME:     36,
    KEY_END:      35
});

var MaskedInput = Class.create();

MaskedInput.ranges = {
    numeric: [48, 57],
    padnum: [96, 105],
    characteres: [65, 90],
    all: [0, 255]
};

MaskedInput.inRange = function(n, range) {
    return n >= range[0] && n <= range[1];
};

MaskedInput.validRange = function(char) {
    switch(char) {
        case '!':
            return [MaskedInput.ranges.characteres];
        case '#':
            return [MaskedInput.ranges.numeric];
        case '?':
            return [MaskedInput.ranges.characteres, MaskedInput.ranges.numeric];
        case '*':
            return [MaskedInput.ranges.all];
    }
    
    return null;
};

MaskedInput.isMaskChar = function(chr) {
    return MaskedInput.validRange(chr) != null;
};

Object.extend(MaskedInput.prototype, {
    initialize: function(obj, mask, fillSpace) {
        this.obj = $(obj);
        this.mask = mask;
        this.fillSpace = fillSpace || '_';
        
        this.obj.onkeydown = this.keytest.bindAsEventListener(this);
        this.obj.onkeypress = Event.stop.bindAsEventListener(this);
        this.obj.onkeyup = Event.stop.bindAsEventListener(this);
        this.obj.onfocus = this.doSelection.bind(this);
        this.obj.onclick = this.doSelection.bind(this);
        
        if(!this.obj.value)
            this.obj.value = this.defaultString();
    },
    
    keytest: function(evt) {
        var e = evt || event;
        var code = e.keyCode || e.which || e.charCode;
        
        switch(code) {
            case Event.KEY_BACKSPACE:
                this.doBackspace();
                break;
            case Event.KEY_DELETE:
                this.doDelete();
                break;
            case Event.KEY_LEFT:
                this.moveCursor(-1);
                break;
            case Event.KEY_RIGHT:
                this.moveCursor(1);
                break;
            case Event.KEY_HOME:
                this.setSelection(0);
                break;
            case Event.KEY_END:
                this.setSelection(this.obj.value.length - 1);
                break;
            case Event.KEY_TAB:
            case Event.KEY_RETURN:
                return;
            default:
                this.maskTest(code);
        }
        
        Event.stop(e);
    },
    
    doBackspace: function() {
        this.moveCursor(-1);
        this.doDelete();
    },
    
    doDelete: function() {
        var pos = this.getCursor().left;
        
        var left = this.obj.value.substr(0, pos);
        var right = this.obj.value.substr(pos + 1, this.obj.value.length - 1);
        
        this.obj.value = left + this.fillSpace + right;
        this.setSelection(pos);
    },
    
    doSelection: function() {
        var pos = this.getCursor().left;
        
        if(pos == this.obj.value.length)
            pos--;
        
        if(!MaskedInput.isMaskChar(this.mask.charAt(pos))) {
            if(!this.moveCursor(1))
                this.moveCursor(-1);
        } else {
            this.setSelection(pos);
        }
    },
    
    moveCursor: function(step, left) {
        var pos = left || this.getCursor().left;
        
        if(step == 0)
            return false;
        
        if(pos == 0 && step < 0)
            return false;
        
        if(pos >= (this.obj.value.length - 1) && step > 0)
            return false;
        
        do {
            pos += step;
        } while(!MaskedInput.isMaskChar(this.mask.charAt(pos)) && pos > 0 && pos < this.obj.value.length);
        
        if(!MaskedInput.isMaskChar(this.mask.charAt(pos)))
            return false;
        
        this.setSelection(pos);
        return true;
    },
    
    maskTest: function(code) {
        if(MaskedInput.inRange(code, MaskedInput.ranges.padnum))
            code -= 48;
        
        var pos = this.getCursor().left;
        var chr = this.mask.charAt(pos);
        
        var ranges = MaskedInput.validRange(chr);
        var valid = false;
        
        for(var i = 0; i < ranges.length; i++) {
            if(MaskedInput.inRange(code, ranges[i])) {
                valid = true;
                break;
            }
        }
        
        if(valid) {
            var left = this.obj.value.substr(0, pos);
            var right = this.obj.value.substr(pos + 1, this.obj.value.length - 1);
            
            this.obj.value = left + String.fromCharCode(code) + right;
            
            var oldpos = pos;
            
            do {
                pos++;
            } while(!MaskedInput.isMaskChar(this.mask.charAt(pos)) && pos < this.obj.value.length);
            
            if(MaskedInput.isMaskChar(this.mask.charAt(pos)))
                this.setSelection(pos);
            else
                this.setSelection(oldpos);
        }
    },
    
    getCursor: function() {
        var left, right;
        
        if(this.obj.createTextRange) {
            var range;
            
            range = document.selection.createRange().duplicate();
            range.moveEnd("character", this.obj.value.length);
            
            if(!range.text)
                left = this.obj.value.length;
            else
                left = this.obj.value.lastIndexOf(range.text);
            
            range = document.selection.createRange().duplicate();
            range.moveStart("character", -this.obj.value.length);
            
            right = range.text.length;
        } else {
            left = this.obj.selectionStart;
            right = this.obj.selectionEnd;
        }
        
        return {left: left, right: right};
    },
    
    setSelection: function(left, rightPos) {
        var right = rightPos || left + 1;
        
        if(this.obj.createTextRange) {
            var range = this.obj.createTextRange();
            range.moveStart("character", left);
            range.moveEnd("character", right - this.obj.value.length);
            range.select();
        } else {
            this.obj.setSelectionRange(left, right);
        }
    },
    
    defaultString: function() {
        var str = '';
        
        for(var i = 0; i < this.mask.length; i++) {
            var chr = this.mask.charAt(i);
            str += MaskedInput.isMaskChar(chr) ? this.fillSpace : chr;
        }
        
        return str;
    }
});

// Verifica se  uma data vlida
function isDate(data) { 
	if (data.value != "" && data.value != "__/__/____") {
		dia = (data.value.substring(0,2)); 
        mes = (data.value.substring(3,5)); 
        ano = (data.value.substring(6,10)); 
        situacao = ""; 
        // verifica o dia valido para cada mes 
        if ((dia < 1)||(dia < 1 || dia > 30) && (  mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) { 
            situacao = "falsa"; 
        } 
        // verifica se o mes e valido 
        if (mes < 1 || mes > 12 ) { 
            situacao = "falsa"; 
        } 
        // verifica se e ano bissexto 
        if (mes == 2 && ( dia < 1 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
            situacao = "falsa"; 
        } 
        if (situacao == "falsa") { 
            alert(data.value + ": Data inválida!"); 
            data.focus(); 
			return false;
        } 
		return true;
	}
	alert("Informe uma data válida");
	return false;
} 

function round( numero) {
	return parseFloat(Math.round(numero*100)/100);
}

isValidDate = function(y, m, d){ //v1.0
        if(typeof y == "string" && m instanceof RegExp && d){
            if(!m.test(y)) return 1;
            y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];
        }
		if(isNaN(parseInt(y))){ 
			return 1;
		}
        d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;
        return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4
        : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;
};

function validarCPF(strCPF){
//strCPF = document.frmCadastro.CPF.value;
  var strInvalidos = '11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000';
  var contador, num1, num2, posicao,fator;
  var cpf,digitos;

  strCPF = strCPF.replace(".", "");
  strCPF = strCPF.replace(".", "");
  strCPF = strCPF.replace("-", "");
  if (strCPF.length != 11 || strInvalidos.indexOf(strCPF) >= 0) {
    return false;
  } else {
    digitos = strCPF.substr(9,2);
    cpf     = strCPF.substr(0,9);
    fator   = 0;
    for(contador = 1; contador <= cpf.length; contador++)    {
      fator = fator + contador * cpf.charAt(contador-1);
    }
    num1  = fator % 11;
    if(num1 == 10)    {
      num1 = 0;
    }

    cpf     = strCPF.substr(0,9) + parseInt(num1);
    fator   = 0;
    posicao = 0;

    for(contador = cpf.length; contador >= 1; contador--)    {
      fator   = fator + (contador + 1) * cpf.charAt(posicao);
      posicao = posicao + 1;
    }

    num2 = (fator * 10) % 11;
    if (num2 == 10)    {
      num2 = 0;
    }

    return (new String(num1) + new String(num2) == digitos);
  }
}

function isCPFValido(obj){
	if (obj.value.length > 0){
		if (validarCPF(obj.value) ==false){
			obj.focus();
			return false;
		}
	}else return false;
	return true;
}

function FormataTexto(texto) {
	var ret = '';
	var passouEspaco = true;
	var tabela = ['de','do','da','e', 'dos', 'das'];

	for (i=0; i<texto.value.length; i++) {
		if (passouEspaco==true) {
			ret += texto.value.charAt(i).toUpperCase();
		} else {
			ret += texto.value.charAt(i).toLowerCase();
		}
		if (texto.value.charAt(i) == ' ') {
			passouEspaco = true;
		} else {
			passouEspaco = false;
		}
	}
	var palavras = ret.split(' ');
	ret = '';
	for (var i = 0; i < palavras.length; i++) {
		for (var j = 0; j < tabela.length;  j++) {
			if (palavras[i].toLowerCase() == tabela[j].toLowerCase()) {
				palavras[i] = palavras[i].toLowerCase();
			}
		}
		ret += " " + palavras[i];
	}
	texto.value= trim(ret);
}