/* 
 *
 * Funcao de Exibir ou Ocultar elemento
 *
 * JS
 * Chamada de funcao: show(item)
 * Referencia do elemento: <div id="item"></div>
 *
 * CSS 
 * Classe para exibir elemento  -> .show { display: block!important; } 
 * Classe para ocultar elemento -> .hide { display: none!important; }
 *
 * Ultima atualizacao: 01/08/2007 	
 * 
 */

function confirmDelete(id, url) {
	if(confirm("Tem certeza que deseja deletar esse item?")) {
		window.location = url;
	} 
}

function confirmRedirect(msg, url) {
	if(confirm(msg)) {
		window.location = url;
	}
}

function updateMessageCounter(field, maxSize) {
	
	var fieldCaracteres = document.getElementById(field).value.length;
	
	var numCaracteres = maxSize - fieldCaracteres;
		
	if(numCaracteres<0){
		document.getElementById(field).value = document.getElementById(field).value.substring(0,document.getElementById(field).value.length + numCaracteres);
		numCaracteres=0;
		alert('O campo ' + field + ' ultrapassou ' + maxSize + ' caracteres.');
		return false;
	}	
}

function openWindow(v) {

	window.location.href = v;

}

function show(elem) {

	var div = document.getElementById(elem);
	
	if(div.className == "hide") {

		div.className = "show";

	} else {

		div.className = "hide";

	}
	
	return false;

}

/**
 * Retorna mascara predefinida
 */

function formatWithMask(e,src,mask) {
	if(window.event) { 
		_TXT = e.keyCode; 
	} else if(e.which) { 
		_TXT = e.which; 
	}
	
	if(_TXT > 47 && _TXT < 58) {
 		var i = src.value.length; 
 		var saida = mask.substring(0,1); 
 		var texto = mask.substring(i)
 		if (texto.substring(0,1) != saida) { 
 			src.value += texto.substring(0,1); 
 		}
    return true; 
	} else { 
		if (_TXT != 8) { 
			return false; 
		} else { 
			return true; 
		}
	}
}

/* 
 * Script de Elcio Ferreira
 *
 * Adaptador por Líbene Fernandes
 */

function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}

function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}

function leech(v){
    v=v.replace(/o/gi,"0")
    v=v.replace(/i/gi,"1")
    v=v.replace(/z/gi,"2")
    v=v.replace(/e/gi,"3")
    v=v.replace(/a/gi,"4")
    v=v.replace(/s/gi,"5")
    v=v.replace(/t/gi,"7")
    return v
}

function soNumeros(v){
    return v.replace(/\D/g,"") //Remove tudo o que não é dígito
}

function soLetras(v) {
	//Só aceita letras 
	//return v.replace(/[^a-zA-Z\s]/g,"") 
	return v.replace(/[^a-zãàáâäèéêëìíîïõòóôöùúûüçA-ZÃÀÁÂÄÈÉÊËÌÍÎÏÖÒÓÔÙÚÛÜÇ\-\s]/g,"");
}

function soEmail(v) {
	//Só aceita caracteres a serem usados em e-mail 
	return v.replace(/[^0-9a-zãàáâäèéêëìíîïõòóôöùúûüçA-ZÃÀÁÂÄÈÉÊËÌÍÎÏÖÒÓÔÙÚÛÜÇ@\-_.\s]/g,"");
}

function soResultado(v) {
	return v.replace(/[^0-9.]/g,""); //remove tudo que nao e digito
}

function telefone(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

function soData(v) {
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/(\d{2})(\d)/,"$1/$2")    //Coloca hífen barra o segundo e o terceiro dígitos
    v=v.replace(/(\d{2})(\d)/,"$1/$2")    //Coloca hífen barra o quarto e o quinto dígitos
    return v
}

function cpf(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)
    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
    return v
}

function cep(v){
    v=v.replace(/D/g,"")                //Remove tudo o que não é dígito
    v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
    return v
}

function cnpj(v){
    v=v.replace(/\D/g,"")                           //Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/,"$1.$2")             //Coloca ponto entre o segundo e o terceiro dígitos
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") //Coloca ponto entre o quinto e o sexto dígitos
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2")           //Coloca uma barra entre o oitavo e o nono dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")              //Coloca um hífen depois do bloco de quatro dígitos
    return v
}

function romanos(v){
    v=v.toUpperCase()             //Maiúsculas
    v=v.replace(/[^IVXLCDM]/g,"") //Remove tudo o que não for I, V, X, L, C, D ou M
    //Essa é complicada! Copiei daqui: http://www.diveintopython.org/refactoring/refactoring.html
    while(v.replace(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"")!="")
        v=v.replace(/.$/,"")
    return v
}

function site(v){
    //Esse sem comentarios para que você entenda sozinho ;-)
    v=v.replace(/^http:\/\/?/,"")
    dominio=v
    caminho=""
    if(v.indexOf("/")>-1)
        dominio=v.split("/")[0]
        caminho=v.replace(/[^\/]*/,"")
    dominio=dominio.replace(/[^\w\.\+-:@]/g,"")
    caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")
    caminho=caminho.replace(/([\?&])=/,"$1")
    if(caminho!="")dominio=dominio.replace(/\.+$/,"")
    v="http://"+dominio+caminho
    return v
}


/* 
 * FUNCAO DE TRATAMENTO DE CAMPOS DE FORMULARIO
 */

/*Autor: Paulo Eduardo Neves neves@samba-choro.com.br
*Use à vontade, me dê apenas os devidos créditos, licensa tipo Python.
*
*Comando para colocar no <header> incluir este arquivo:
* <SCRIPT>function valida(f){return true}</SCRIPT>
* <SCRIPT LANGUAGE="JavaScript1.1" SRC="/validacaoForm.js">
* o anterior é para ficar compativel com IE3.0
*
*Para funcionar o mime-tyde deste arquivo tem que ser application/x-javascript
*
*Atributos pre-definidos dos elementos do form:
*opcional, int, num, min, max, email, deveAlterar
*
*Defina no corpo de sua pagina como cada elemento do form vai ser chamado
*por extenso. 
*Objeto porExtenso fala como a mensagem de erro deve se referenciar ao 
*determinado campo.
*Se o atributo "name" do campo nao for uma propriedade do objeto porExtenso, 
*entao o proprio valor da propriedade "name" sera' usado.
*/
/* 
var porExtenso = new Object()
//porExtenso.nome = "Nome"
//porExtenso.senha = "Senha"
//porExtenso.email = "Email"

//Na mensagem de erro o
//		% é substituido pelo nome do objeto definido em "porExtenso"
//		* é substitudo pelo valor do campo
//		# é substituido pelo valor do atributo
// por enquanto tem que mudar o código para cada coisa. Javascript é uma merda!

simboloNome = "%"
simboloValor = "*"
simboloAtributo = "#"

// INTERNACIONALIZACAO DE MENSAGENS DE ERRO
// As mensagens abaixo devem ficar em um arquivo separado, 
// o tratamento de linguas é feito no codigo-fonte da paginal central


//Voce pode redefinir suas mensagens de erro em sua pagina
//Tambem pode definir mensagens para cada tipo de erro em cada atributo
//    basta criar atributos de msgErro da forma msgErro['opcional:username']
var msgErro = new Object()
msgErro.opcional = "% deve ser preenchido."
msgErro.num = "% deve ter um valor numérico."
msgErro.min = "% deve ser um número maior ou igual do que #."
msgErro.max = "% deve ser um número menor ou igual do que #."
msgErro.email = "O email * não parece válido, por favor verifique-o.\n  Exemplo de email correto: nome@provedor.com.br"
msgErro.deveAlterar = "% deve ser preenchido com outro valor"

msgErroPadrao = "Por favor, faça as modificações abaixo \npara podermos continuar.\n\n"

function geraErro(campo, atributo){
	var nome = campo.name
	if (porExtenso[nome]){
		nome = porExtenso[nome]
	}
	var temp = new Substituidor(nome, campo.value, campo[atributo])
	if (msgErro[atributo + ":" + campo.name]) {
		msg = msgErro[atributo + ":" + campo.name]
	} else {
		msg = msgErro[atributo]
	}
	return temp.formataMsg(msg)
}


function substitui(umaStr, valor, simbolo){
	var pedacos = umaStr.split(simbolo)
	return pedacos.join(valor)
}


function Substituidor(nome, valor, atributo) {
  this.simbolos = new Object()
  this.simbolos[simboloNome] = nome
  this.simbolos[simboloValor] = valor
  this.simbolos[simboloAtributo] = atributo
}
new Substituidor('','',''); //merda de NS3

function Substituidor_formataMsg(msg){
	var novaMsg = msg
	for (var i in this.simbolos) {
		novaMsg = substitui(novaMsg, this.simbolos[i], i)
	}
	return novaMsg
}
Substituidor.prototype.formataMsg = Substituidor_formataMsg



function ehBranco(c){ //Fun&ccedil;&atilde;o s&oacute; fuciona para chars
        if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r') return true
        return false
}

function strip(strg){
        for (var posIni = 0;
	     (posIni < strg.length) && ehBranco(strg.charAt(posIni));
	     posIni++);
        for (var posFim = strg.length;
	     ((posFim - 1) >= posIni) && ehBranco(strg.charAt(posFim - 1));
	     posFim--);

        return strg.substring(posIni, posFim)
}

function preenchido(strg){
	if (strip(strg).length > 0) return true
	return false
}


function emailValido(campo) {
	//verifica APENAS o email: coisas como "Neves" <neves@email.com> sao invalidas
        var e = strip(campo.value).toLowerCase()
        var posA = e.indexOf('@')
        var posLastPt = e.lastIndexOf('.')

        //Tem que ter @ e .
        if (posA == -1 || posLastPt == -1  || posLastPt < posA || posA == 0) return false
        //Email tem que terminar com .xxx ou .xx
        posLastPt = e.length - posLastPt
        if (posLastPt != 3 && posLastPt !=4) return false

        //Verificando agora os caracteres válidos
        //Válidos para domínio
        var validChar = "0987654321abcdefghijklmnopqrstuvwxyz.-"
        for(var i = posA + 1; i < e.length; i++){
                if (validChar.indexOf(e.charAt(i)) == -1) return false;
        }
        validChar += "%+_#"
        for(var i = 0; i < posA; i++){
                if (validChar.indexOf(e.charAt(i)) == -1) return false;
        }

        return true
}

function numValido(campo){
	var n = parseFloat(campo.value)
	if (isNaN(n)) {
		return false
	}
	return true
}

function minValido(campo) {
	var valido = numValido(campo)
	if (valido) {
	   if (parseFloat(campo.value) < campo.min){
	      valido = false
	   }
	}
	return valido
}

function maxValido(campo) {
	var valido = numValido(campo)
	if (valido) {
	   if (parseFloat(campo.value) > campo.max){
	      valido = false
	   }
	}
	return valido
}

function deveAlterarValido(campo){//só está definido para textos
	if (strip(campo.value) == strip(campo.defaultValue)) {//strip por causa de bug no IE4
		return false
	}
	return true
}

//a ordem que os erros sao definidos dá prioridade a eles (se dois
//acontecem a msg de erro do primeiro que aparece)
validacao = new Object()
validacao.email = emailValido
validacao.num = numValido
validacao.min = minValido
validacao.max = maxValido
validacao.deveAlterar = deveAlterarValido

function validaCampo(campo) {
	if (!campo.opcional) {
		 if (!preenchido(campo.value)) {
			 return geraErro(campo, 'opcional')
		 }
	}
	for (var i in campo) {
	    if (campo[i] && typeof validacao[i] == "function"){
	       if (validacao[i](campo) == false){
	       	       return geraErro(campo, i)
	       } 
	    }
	}

	return false
}

function validaLista(form, campo){ //só verifica se é opcional
        var umMarcado = false
        var lista = form[campo.name]
	if (!lista.opcional) {
           if (typeof(lista.length) != "number") {
              //typeof(lista.length) NS3-retorna "object", NS4-retorna "undefined"
              //caso de merda: só tem um objeto checkbox ou radio, então
              //não constrói array:-(
              if (campo.checked) {
                  umMarcado = true
              }
           } else {
	      for (var i = 0; i < lista.length; i++){
		   if (lista[i].checked) {
			umMarcado = true
			break
		   }
	      }
	   }
           if (!umMarcado) return geraErro(campo, 'opcional') 
	}
	return false
}

function validaSelect(aSelect){
	if (!aSelect.opcional) {
		if (aSelect.selectedIndex == -1) {
			return geraErro(aSelect, 'opcional')
			}
	}
}

//faz a verificação de cada elemento do form
debug = 0
function valida(f) {
    var msg
    var erros = new Array()
    var listasValidadas = new Object()

    //Iteramos sobre os elementos do form e chamamos a função de validação apropriada para cada um
    for(var i = 0; i < f.length; i++) {
        var campo = f.elements[i];
				var achouErro = null
				if ((campo.type == "text") || (campo.type == "textarea") ||
  	    		(campo.type == "password") || (campo.type == "file")) {
					achouErro = validaCampo(campo)
				} else if (campo.type == "radio" || campo.type == "checkbox") {
					if (!listasValidadas[campo.name]){
						achouErro = validaLista(f, campo)
						listasValidadas[campo.name] = true
					}
				} else if (campo.type == "select-multiple") {
					achourro = validaSelect(campo)
				}
	
				if (achouErro) {
	    		erros[erros.length] = achouErro
	    		erros.length += 1
        }
    }

    if (erros.length == 0){
			return true;
    }
    
    alert(msgErroPadrao + erros.join('\n'))
    return false
}
*/
/* 
var message="Prezado, não é permitida a cópia desse conteúdo para fins comerciais e/ou profissionais. \n Atenciosamente, Gemini Media.";

function click(e) {
	if (document.all) {
		if (event.button == 2) {
 			alert(message); 
			return false;
		}
	}
	if (document.layers) {
		if (e.which == 3) {
 			alert(message); 
			return false;
		}
	}
}

if (document.layers) {
	document.captureEvents(Event.MOUSEDOWN);
}
	document.onmousedown=click;	
*/
function lockF5() {
	var tecla=window.event.keyCode;
  if (tecla==116) {
  	alert(message); 
  	event.keyCode=0;
		event.returnValue=false;
	}
}

function click(e) {
	if (document.all) {
		if (event.button == 2) {
			alert(message);
			return false;
		}
	}
	if (document.layers) {
		if (e.which == 3) {
			alert(message);
			return false;
		}
	}
}
if (document.layers) {
document.captureEvents(Event.MOUSEDOWN);
}
document.onmousedown=click;

//funcao de bloqueio de printscreen
	
function lockPrintScreen() {
	setInterval("window.clipboardData.clearData()",20)
}

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


/**
 * Funções para atualização de combos dinâmicas sem refresh com uso de xmlhttprequest
 */
var req;

function loadXMLDoc(url,val1,val2, process) {
    req = null;
    
    urlTotal = url+'?val1='+val1+'&val2='+val2
    
    // Procura por um objeto nativo (Mozilla/Safari)
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReturnDataFase;
        req.open("GET", urlTotal, true);
        req.send(null);
    // Procura por uma versao ActiveX (IE)
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReturnDataFase;
            req.open("GET", urlTotal, true);
            req.send();
        }
    }
}

function processReturnDataFase() {
    // apenas quando o estado for "completado"
    if (req.readyState == 4) {
        // apenas se o servidor retornar "OK"
        if (req.status == 200) {
            // procura pela div id="atualiza" e insere o conteudo
            // retornado nela, como texto HTML
            document.getElementById('returnDataFase').innerHTML = req.responseText;
        } else {
            alert("Houve um problema ao obter os dados:\n" + req.statusText);
        }
    }
}	

var req2;

function loadXMLDoc2(url,val1,val2, process) {
    req2 = null;
    
    urlTotal = url+'?val1='+val1+'&val2='+val2
    
    // Procura por um objeto nativo (Mozilla/Safari)
    if (window.XMLHttpRequest) {
        req2 = new XMLHttpRequest();
        req2.onreadystatechange = processReturnFieldsFormFase;
        req2.open("GET", urlTotal, true);
        req2.send(null);
    // Procura por uma versao ActiveX (IE)
    } else if (window.ActiveXObject) {
        req2 = new ActiveXObject("Microsoft.XMLHTTP");
        if (req2) {
            req2.onreadystatechange = processReturnFieldsFormFase;
            req2.open("GET", urlTotal, true);
            req2.send();
        }
    }
}

function processReturnFieldsFormFase() {
    // apenas quando o estado for "completado"
    if (req2.readyState == 4) {
        // apenas se o servidor retornar "OK"
        if (req2.status == 200) {
            // procura pela div id="atualiza" e insere o conteudo
            // retornado nela, como texto HTML
            document.getElementById('returnFieldsFormFase').innerHTML = req2.responseText;
        } else {
            alert("Houve um problema ao obter os campos de formulário:\n" + req2.statusText);
        }
    }	
}

function returnDataFase(url, val1, val2)
{
    loadXMLDoc(url, val1, val2, 'processReturnDataFase');
    
    loadXMLDoc2('returnFieldsFormFase.php', val1, val2, 'processReturnFieldsFormFase'); 

     
}


function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
        xmlhttp = false;
        }
      }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
    }
  return xmlhttp;
  }
/*
function verificaCaracteresCep(dir_site, pais) { 
	
	if(pais == 'BRA') {
		
		var countCep = document.getElementById("cep").value.length;
            	
		if(countCep == 8) { returnDataWithCep(dir_site); }
    
    }
            	
}
*/

function verificaCaracteresCep(dir_site) { 
	
	var countCep = document.getElementById("cep").value.length;
           	
	if(countCep == 8) { returnDataWithCep(dir_site); }
    
}
  
var http = getHTTPObject();

function returnDataWithCep(dir_site) {
	
	http.open("GET", '/' + dir_site + '/classes/return_cep.php?cep=' + document.getElementById("cep").value, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);

	var arr; //array com os dados retornados
	function handleHttpResponse() 
	{
		if (http.readyState == 1) {
			
			var urlImageCarregando = '<img src=/' + dir_site + '/imagens/def/carregando.gif>';
			
			document.getElementById("refresh").innerHTML = urlImageCarregando;
		} else if (http.readyState == 4) {
		
			var response = http.responseText;
			eval("var arr = "+response); //cria objeto com o resultado
			document.getElementById("logradouro").value = arr.rua;
			document.getElementById("bairro").value = arr.bairro;
			document.getElementById("cidade").value = arr.cidade;
			document.getElementById("estado").value = arr.estado;

			document.getElementById("refresh").innerHTML = arr.erro;
			
		}
	}
}

function returnRequisitoEtapa(v) {

	http.open("GET", '../../../classes/return_requisito_etapa.php?v='+v, true);
	http.onreadystatechange = handleHttpResponse;
	http.send(null);

	function handleHttpResponse() 
	{
		if (http.readyState == 4) {
			document.getElementById("view_requisito_etapa").innerHTML = http.responseText;
		}
	}
	
}