
function toggleTrSnippets(){
	var tds=document.getElementsByTagName('td');
	for(t=0;t<tds.length;t++){
	    var otd=tds[t];
	    if(otd.className=="tdestado"){
	        var pos=otd.id.replace("tdestado","");
	        if(trsnippet=document.getElementById("trsnippet"+pos)){
	            otd.innerHTML="<a href='#trsnippet"+pos+"' class='linkmais' onclick='return showSnippet(this);'><img src='http://upsearch.clipdo.com.br/DOSP/img/menos.jpg' alt='retrair' /></a> " + otd.innerHTML;
	            trsnippet.style.display="table-row";
	        }
	    }
	}
}
function showSnippet(lnk){
    var retorno=false;
    var arrtid=lnk.href.split("#");
    var tid=arrtid[arrtid.length-1];
    if(trsnippet=document.getElementById(tid)){
	    if(trsnippet.style.display=="none"){
    	    var tdisp="table-row";
    	    var lnkcont="<img src='http://upsearch.clipdo.com.br/DOSP/img/menos.jpg' alt='retrair' />";
        }else{
    	    var tdisp="none";
    	    var lnkcont="<img src='http://upsearch.clipdo.com.br/DOSP/img/mais.jpg' alt='expandir' />";
        }
        trsnippet.style.display=tdisp;
        lnk.innerHTML=lnkcont;
        //retorno=true;
    }
    return retorno;
}

function doRecebeEndereco(objendereco){
	if(objresto=document.getElementById("restoendereco")) objresto.style.display="block";
	frm=document.getElementById("formCadastro");
	frm.elements["endereco"].value=objendereco.tipo + " " + objendereco.rua;
	frm.elements["bairro"].value=objendereco.bairro;
	frm.elements["cidade"].value=objendereco.cidade;
	for(var uf=0;uf<frm.elements["estado"].options.length;uf++) if(frm.elements["estado"].options[uf].value==objendereco.estado) frm.elements["estado"].selectedIndex=uf;
	frm.elements["cep"].value=oldcep;
	frm.elements["end_num"].focus();
}

var oldcep="";

function doBuscaEndereco(urlscript){
	frm=document.getElementById("formCadastro");
	frm.elements["cep"].value=sohnumeros(frm.elements["cep"].value);
	cepvalue=frm.elements["cep"].value;
	if(cepvalue.length==8){
		oldcep=cepvalue;
		frm.elements["cep"].value="buscando...";
		url=urlscript+"?f=buscaendereco&cep="+cepvalue;
		doJSON(url,doRecebeEndereco);
	}else{
		alert("Informe um CEP válido.");
		frm.elements["cep"].focus();
	}
	return false;
}

function validaPrecadastro(e){
	retorno=true;
	frm=getForm(e);
	if(frm.elements["nome"].value.ehvazio()){
		alert("Informe corretamente o nome.");
		frm.elements["nome"].focus();
		retorno=false;
	}else if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(sohnumeros(frm.elements["ddd"].value).length<2){
		alert("Informe corretamente o DDD.");
		frm.elements["ddd"].focus();
		retorno=false;
	}else if(sohnumeros(frm.elements["telefone"].value).length<7){
		alert("Informe corretamente o telefone.");
		frm.elements["telefone"].focus();
		retorno=false;
	}else if(!isCpfCnpj(frm.elements["cpf"].value)){
		alert("Informe corretamente um CPF/CNPJ válido.");
		frm.elements["cpf"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function validaTestdrive(e){
	retorno=true;
	frm=getForm(e);
	validarsenha=true;
	if(frm.elements["razaosocial"].value.ehvazio()){
		alert("Informe corretamente o Nome/Razão Social.");
		frm.elements["razaosocial"].focus();
		retorno=false;
	}else if(!isCpfCnpj(frm.elements["cgc"].value)){
		alert("Informe corretamente um CPF/CNPJ válido.");
		frm.elements["cgc"].focus();
		retorno=false;
	}else if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(validarsenha && frm.elements["senha"].value.ehvazio()){
		alert("Informe corretamente a senha.");
		frm.elements["senha"].focus();
		retorno=false;
	}else if(validarsenha && frm.elements["senha"].value!=frm.elements["confirmasenha"].value){
		alert("As senhas não conferem.");
		frm.elements["senha"].value="";
		frm.elements["confirmasenha"].value="";
		frm.elements["senha"].focus();
		retorno=false;
	}else if(!frm.elements["concordo"].checked){
		alert("É necessário ler e concordar com os Termos e Condições de Uso do serviço.");
		frm.elements["concordo"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function validaAssine(e){
	retorno=true;
	frm=getForm(e);
	if(frm.elements["nome"].value.ehvazio()){
		alert("Informe corretamente o nome.");
		frm.elements["nome"].focus();
		retorno=false;
	}else if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(sohnumeros(frm.elements["ddd"].value).length<2){
		alert("Informe corretamente o DDD.");
		frm.elements["ddd"].focus();
		retorno=false;
	}else if(sohnumeros(frm.elements["telefone"].value).length<7){
		alert("Informe corretamente o telefone.");
		frm.elements["telefone"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function validaCadastro(e){
	retorno=true;
	frm=getForm(e);
	var ehvendas=false;
		if(frm.elements["vendas"]) ehvendas=true;
	validarsenha=true;
	if(alterarsenha=document.getElementById("alterarsenha")) if(!alterarsenha.checked) validarsenha=false;
	if(frm.elements["razaosocial"].value.ehvazio()){
		mostrapassoCadastro("fscadastro");
		alert("Informe corretamente o Nome/Razão Social.");
		frm.elements["razaosocial"].focus();
		retorno=false;
	//}else if(!ehvendas && !isCpfCnpj(frm.elements["cgc"].value)){
	//	mostrapassoCadastro("fscadastro");
	//	alert("Informe corretamente um CPF/CNPJ válido.");
	//	frm.elements["cgc"].focus();
	//	retorno=false;
	}else if(!ehvendas && sohnumeros(frm.elements["cep"].value).length!=8){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o CEP.");
		frm.elements["cep"].focus();
		retorno=false;
	}else if(frm.elements["endereco"].value.ehvazio()){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente a rua.");
		frm.elements["endereco"].focus();
		retorno=false;
	}else if(frm.elements["end_num"].value.ehvazio()){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o número.");
		frm.elements["end_num"].focus();
		retorno=false;
	}else if(frm.elements["bairro"].value.ehvazio()){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o bairro.");
		frm.elements["bairro"].focus();
		retorno=false;
	}else if(frm.elements["cidade"].value.ehvazio()){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente a cidade.");
		frm.elements["cidade"].focus();
		retorno=false;
	}else if(frm.elements["estado"].options[frm.elements["estado"].selectedIndex].value.ehvazio()){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o estado.");
		frm.elements["estado"].focus();
		retorno=false;
	}else if(sohnumeros(frm.elements["dddtelefone"].value).length<2){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o DDD.");
		frm.elements["dddtelefone"].focus();
		retorno=false;
	}else if((frm.elements["telefone"].value).length<7){
		mostrapassoCadastro("fsendereco");
		alert("Informe corretamente o telefone.");
		frm.elements["telefone"].focus();
		retorno=false;
	}else if(!validaEmail(frm.elements["email"].value)){
		mostrapassoCadastro("fsacesso");
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(validarsenha && frm.elements["senha"].value.ehvazio()){
		mostrapassoCadastro("fsacesso");
		alert("Informe corretamente a senha.");
		frm.elements["senha"].focus();
		retorno=false;
	}else if(validarsenha && frm.elements["senha"].value!=frm.elements["confirmasenha"].value){
		mostrapassoCadastro("fsacesso");
		alert("As senhas não conferem.");
		frm.elements["senha"].value="";
		frm.elements["confirmasenha"].value="";
		frm.elements["senha"].focus();
		retorno=false;
	}else if(!frm.elements["concordo"].checked){
		mostrapassoCadastro("fsacesso");
		alert("É necessário ler e concordar com os Termos e Condições de Uso do serviço.");
		frm.elements["concordo"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function mostrapassoCadastro(dest){
	if(objdest=document.getElementById(dest)){
		var fieldsets=document.getElementsByTagName("fieldset");
		var valido=true;
		var objfrm=document.getElementById("formCadastro");
		var ehvendas=false;
			if(objfrm.elements["vendas"]) ehvendas=true;
		if(dest=="fsendereco"){
			if(!ehvendas && !isCpfCnpj(objfrm.elements["cgc"].value)){
				alert("Informe corretamente um CPF/CNPJ válido.");
				objfrm.elements["cgc"].focus();
				valido=false;
			}
		}else if(dest=="fsacesso"){
			if(sohnumeros(objfrm.elements["cep"].value).length!=8){
				alert("Informe corretamente o CEP.");
				objfrm.elements["cep"].focus();
				valido=false;
			}else if(objfrm.elements["endereco"].value.ehvazio()){
				alert("Informe corretamente a rua.");
				objfrm.elements["endereco"].focus();
				valido=false;
			}else if(objfrm.elements["end_num"].value.ehvazio()){
				alert("Informe corretamente o número.");
				objfrm.elements["end_num"].focus();
				valido=false;
			}else if(objfrm.elements["bairro"].value.ehvazio()){
				alert("Informe corretamente o bairro.");
				objfrm.elements["bairro"].focus();
				valido=false;
			}else if(objfrm.elements["cidade"].value.ehvazio()){
				alert("Informe corretamente a cidade.");
				objfrm.elements["cidade"].focus();
				valido=false;
			}else if(objfrm.elements["estado"].options[objfrm.elements["estado"].selectedIndex].value.ehvazio()){
				alert("Informe corretamente o estado.");
				objfrm.elements["estado"].focus();
				valido=false;
			}else if(sohnumeros(objfrm.elements["dddtelefone"].value).length<2){
				alert("Informe corretamente o DDD.");
				objfrm.elements["dddtelefone"].focus();
				valido=false;
			}else if((objfrm.elements["telefone"].value).length<7){
				alert("Informe corretamente o telefone.");
				objfrm.elements["telefone"].focus();
				valido=false;
			}
		}

		if(valido && !ehvendas){
			for(var f=0;f<fieldsets.length;f++) fieldsets[f].style.display="none";
			document.getElementById("botaocadastrar").style.display="none";
			objdest.style.display="block";
	
			if(dest=="fsacesso"){
				document.getElementById("fsemailscopia").style.display="block";
				document.getElementById("botaocadastrar").style.display="block";
			}
		}
	}
}

function clickpassoapassoCadastro(e){
	var lnk=getSource(e);
	if(dest=lnk.href.split("#")[1]) mostrapassoCadastro(dest);
	//fals(e);
	//return false;
}

function passoapassoCadastro(){
	for(var l=0;l<document.links.length;l++){
		var lnk=document.links[l];
		if(lnk.href.indexOf("#")>-1) addEvent(lnk, "click", clickpassoapassoCadastro);
	}
	if(xmlhttp) if(objresto=document.getElementById("restoendereco")) objresto.style.display="none";
	var mostrarfs="fscadastro";
	//var strhash=top.location.hash;
	//if(strhash.length>0) strhash=strhash.substring(1,strhash.length);
	//if(strhash.replace(/\s/gi)!="") mostrarfs=strhash;
	mostrapassoCadastro(mostrarfs);
}

function somepassosCadastro(){
	for(var l=0;l<document.links.length;l++){
		var lnk=document.links[l];
		if(lnk.href.indexOf("#")>-1) lnk.style.display="none";
	}
}

var ncaixaspostais=5;

function dhtml_caixaspostais(dcp){
	emails=document.getElementById("caixaspostais").value;
	arremails=emails.split(",");
	if(arremails.length>ncaixaspostais) ncaixaspostais=arremails.length;
	inps='';
	for(var i=1;i<=ncaixaspostais;i++){
		valor="";
		if(i<=arremails.length) valor=arremails[i-1];
		inps+='<br clear="all" /><label for="caixapostal'+i+'">'+i+'. <input type="text" name="caixapostal'+i+'" id="caixapostal'+i+'" onblur="juntacaixaspostais();" value="'+valor+'" maxlength="60" /></label>';
	}
	dcp.innerHTML+=inps;
	document.getElementById("porvirgula").style.display="none";
	document.getElementById("caixaspostais").style.display="none";
}

function addcaixapostal(){
	valores=new Array();
	for(var i=1;i<=ncaixaspostais;i++) valores[i-1]=document.getElementById("caixapostal"+i).value;
	ncaixaspostais++;
	dcp=document.getElementById("divcaixaspostais");
	dcp.innerHTML+='<br clear="all" /><label for="caixapostal'+ncaixaspostais+'">'+ncaixaspostais+'. <input type="text" name="caixapostal'+ncaixaspostais+'" id="caixapostal'+ncaixaspostais+'" onblur="juntacaixaspostais();" maxlength="60" /></label>';
	for(var i=1;i<ncaixaspostais;i++) document.getElementById("caixapostal"+i).value=valores[i-1];
	juntacaixaspostais();
	return false;
}

function juntacaixaspostais(){
	cps="";
	retorno=true;
	for(var i=1;i<=ncaixaspostais;i++){
		cp=document.getElementById("caixapostal"+i);
		if(!validaEmail(cp.value)){
			//cp.value="";
			//if(!cp.value.ehvazio()) cp.style.borderColor="red";
			retorno=false;
		}else{
			//cp.style.borderColor="#999";
			cps+=cp.value+",";
		}
	}
	document.getElementById("caixaspostais").value=cps;
	return retorno;
}

function validaLogin(e){
	retorno=true;
	frm=getForm(e);
	if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(frm.elements["senha"].value.ehvazio()){
		alert("Informe corretamente a senha.");
		frm.elements["senha"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function validaContato(e){
	retorno=true;
	frm=getForm(e);
	if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(frm.elements["assunto"].value.ehvazio()){
		alert("Informe corretamente o assunto.");
		frm.elements["assunto"].focus();
		retorno=false;
	}else if(frm.elements["mensagem"].value.ehvazio()){
		alert("Informe corretamente a mensagem.");
		frm.elements["mensagem"].focus();
		retorno=false;
	}else if(frm.elements["mensagem"].value.length>200){
		alert("A mensagem é muito longa.");
		frm.elements["mensagem"].focus();
		retorno=false;
	}
	if(!retorno) fals(e);
	return retorno;
}

function validaIndique(e){
	retorno=true;
	contac=0;
	frm=getForm(e);
	if(frm.elements["nome"].value.ehvazio()){
		alert("Informe corretamente o nome.");
		frm.elements["nome"].focus();
		retorno=false;
	}else if(!validaEmail(frm.elements["email"].value)){
		alert("Informe corretamente o email.");
		frm.elements["email"].focus();
		retorno=false;
	}else if(frm.elements["comentario"].value.ehvazio()){
		alert("Informe corretamente o comentário.");
		frm.elements["comentario"].focus();
		retorno=false;
	}else{
		algum=false;
		while(emailamigo=document.getElementById("email"+contac)){
			if(validaEmail(emailamigo.value)) algum=true;
			contac++;
		}
		if(!algum){
			alert("Informe corretamente o(s) email(s) do(s) seu(s) amigo(s).");
			retorno=false;
		}
	}
	if(!retorno) fals(e);
	return retorno;
}

function escondemostrasenha(chk){
	camposenha=document.getElementById("senha");
	labelsenha=camposenha.parentNode;
	if(labelsenha.nodeType == 3) labelsenha=labelsenha.parentNode;
	campoconfirmasenha=document.getElementById("confirmasenha");
	labelconfirmasenha=campoconfirmasenha.parentNode;
	if(labelconfirmasenha.nodeType == 3) labelconfirmasenha=labelconfirmasenha.parentNode;
	disp="none";
	if(chk.checked) disp="block";
	labelsenha.style.display=disp;
	labelconfirmasenha.style.display=disp;
}

//////////////////////////////////

function externallinks(){
	var as=document.getElementsByTagName("a");
	for(var a=0;a<as.length;a++){
		var lnk=as[a];
		var classe=lnk.className;
		var lnkrel="";
		if(!(lnkrel=lnk.getAttribute("rel"))) lnkrel="";
		var lnkhref=lnk.getAttribute("href");
		if(classe.indexOf("external")>-1 || lnkrel.indexOf("external")>-1){
			lnk.setAttribute("target","_blank");
			if(lnkhref.indexOf("?")>-1){
				lnkhref+="&externalwindow";
			}else{
				lnkhref+="?externalwindow";
			}
			//lnk.setAttribute("href",lnkhref);
		}
	}
}

function fals(e){
	if(typeof(e)!='undefined') if(e.preventDefault) e.preventDefault();
	return false;
}

function initialize(e){
	externallinks();
	
	if(objformPrecadastro=document.getElementById("formPrecadastro")) addEvent(objformPrecadastro, "submit", validaPrecadastro);

	if(objformTestdrive=document.getElementById("formTestdrive"))
		addEvent(objformTestdrive, "submit", validaTestdrive);

	if(objformAssine=document.getElementById("formAssine")) addEvent(objformAssine, "submit", validaAssine);

	if(objformCadastro=document.getElementById("formCadastro")){
		/*
		if(!objformCadastro.elements["vendas"]){
			if(objformCadastro.elements["acao"].value=="cadastro"){
				if(!document.getElementById("msgerro")){
					passoapassoCadastro();
				}else{
					somepassosCadastro();
				}
			}
		}
		*/
		if(objformCadastro.elements["passoapasso"]) passoapassoCadastro();
		addEvent(objformCadastro, "submit", validaCadastro);
		var nomecampoerro="";
		if(document.getElementById("msgerro"))
			if(objcampoerro=document.getElementById("errocampo"))
				nomecampoerro=objcampoerro.value;
		if(!objformCadastro.elements[nomecampoerro]){
			nomecampoerro="cep";
			if(objformCadastro.elements["vendas"]) nomecampoerro="razaosocial";
		}
		objformCadastro.elements[nomecampoerro].focus();
	}
	if(divCaixaspostais=document.getElementById("divcaixaspostais")) dhtml_caixaspostais(divCaixaspostais);

	if(objformLogin=document.getElementById("formLogin")) addEvent(objformLogin, "submit", validaLogin);

	if(objformContato=document.getElementById("formContato")) addEvent(objformContato, "submit", validaContato);
	if(objformIndique=document.getElementById("formIndique")) addEvent(objformIndique, "submit", validaIndique);
	if(objTblCrits=document.getElementById("crits")) if(objTblCrits.className=="tbbuscador") toggleTrSnippets();
}

function addEvent(obj, evType, fn){
    if(obj.addEventListener) obj.addEventListener(evType, fn, true);
    if(obj.attachEvent) obj.attachEvent("on"+evType, fn);
}

function getSource(e){
	if(typeof(e)=='undefined') var e=window.event;
	obj=e.target?e.target:e.srcElement;
	if(obj.nodeType == 3) obj=obj.parentNode;
	return obj;
}

function getForm(e){
	frm=getSource(e);
	while(frm.tagName!="FORM") frm=frm.parentNode;
	return frm;
}

addEvent(window, "load", initialize);

///////////////////////////////////////////

/**
 * @author Márcio d'Ávila
 * @version 1.01, 2004
 *
 * PROTÓTIPOS:
 * método String.lpad(int pSize, char pCharPad)
 * método String.trim()
 *
 * String unformatNumber(String pNum)
 * String formatCpfCnpj(String pCpfCnpj, boolean pUseSepar, boolean pIsCnpj)
 * String dvCpfCnpj(String pEfetivo, boolean pIsCnpj)
 * boolean isCpf(String pCpf)
 * boolean isCnpj(String pCnpj)
 * boolean isCpfCnpj(String pCpfCnpj)
 */


var NUM_DIGITOS_CPF  = 11;
var NUM_DIGITOS_CNPJ = 14;
var NUM_DGT_CNPJ_BASE = 8;


/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
	var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
} //String.lpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim


/**
 * Elimina caracteres de formatação e zeros à esquerda da string
 * de número fornecida.
 * @param String pNum
 *      String de número fornecida para ser desformatada.
 * @return String de número desformatada.
 */
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
} //unformatNumber


/**
 * Formata a string fornecida como CNPJ ou CPF, adicionando zeros
 * à esquerda se necessário e caracteres separadores, conforme solicitado.
 * @param String pCpfCnpj
 *      String fornecida para ser formatada.
 * @param boolean pUseSepar
 *      Indica se devem ser usados caracteres separadores (. - /).
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String de CPF ou CNPJ devidamente formatada.
 */
function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var numero = unformatNumber(pCpfCnpj);

	numero = numero.lpad(maxDigitos, '0');
	if (!pUseSepar) return numero;

	if (pIsCnpj)
	{
		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
		numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
	}
	else
	{
		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
		numero = numero.replace(reCpf, "$1.$2.$3-$4");
	}
	return numero;
} //formatCpfCnpj


/**
 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de
 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
 * informa se o número-efetivo fornecido é CNPJ (default = false).
 * @param String pEfetivo
 *      String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é de um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String com os dois dígitos verificadores.
 */
function dvCpfCnpj(pEfetivo, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	var i, j, k, soma, dv;
	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);
	calculado = calculado.substring(2, maxDigitos);
	var result = "";

	for (j = 1; j <= 2; j++)
	{
		k = 2;
		soma = 0;
		for (i = calculado.length-1; i >= 0; i--)
		{
			soma += (calculado.charAt(i) - '0') * k;
			k = (k-1) % cicloPeso + 2;
		}
		dv = 11 - soma % 11;
		if (dv > 9) dv = 0;
		calculado += dv;
		result += dv
	}

	return result;
} //dvCpfCnpj


/**
 * Testa se a String pCpf fornecida é um CPF válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpf
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF válido.
 */
function isCpf(pCpf)
{
	var numero = formatCpfCnpj(pCpf, false, false);
	var base = numero.substring(0, numero.length - 2);
	var digitos = dvCpfCnpj(base, false);
	var algUnico, i;

	// Valida dígitos verificadores
	if (numero != base + digitos) return false;

	/* Não serão considerados válidos os seguintes CPF:
	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
	 */
	algUnico = true;
	for (i=1; i<NUM_DIGITOS_CPF; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	return (!algUnico);
} //isCpf


/**
 * Testa se a String pCnpj fornecida é um CNPJ válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCnpj
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CNPJ válido.
 */
function isCnpj(pCnpj)
{
	var numero = formatCpfCnpj(pCnpj, false, true);
	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
	var digitos = dvCpfCnpj(base + ordem, true);
	var algUnico;

	// Valida dígitos verificadores
	if (numero != base + ordem + digitos) return false;

	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:
	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
	 */
	algUnico = numero.charAt(0) != '0';
	for (i=1; i<NUM_DGT_CNPJ_BASE; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	if (algUnico) return false;

	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.
	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300
	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).
	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.
	 */
	if (ordem == "0000") return false;
	return (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
} //isCnpj


/**
 * Testa se a String pCpfCnpj fornecida é um CPF ou CNPJ válido.
 * Se a String tiver uma quantidade de dígitos igual ou inferior
 * a 11, valida como CPF. Se for maior que 11, valida como CNPJ.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpfCnpj
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF ou CNPJ válido.
 */
function isCpfCnpj(pCpfCnpj)
{
	var numero = pCpfCnpj.replace(/\D/g, "");
	if (numero.length > NUM_DIGITOS_CPF)
		return isCnpj(pCpfCnpj)
	else
		return isCpf(pCpfCnpj);
} //isCpfCnpj

//function validaEmail(mail){
//	return mail.search(/(\w[\w\.\+-]+)@(.+)\.(\w+)$/)==0;
//}

function validaEmail(email){
   if (typeof(email) != "string")
       return false;
   else if (!email.match(/^[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_.-][A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}$/))
       return false;
   return true;
}//end isValidMail()

function sohnumeros(txt){
	return txt.replace(/\D/gi,"");
}

//Função pra usar no "onkeyup" de campos de formulário numéricos que aceitam vírgula...
function sohnumerosevirgula(campo){
    valor=campo.value;
    valorlimpo=valor.replace(/[^\d,]/gi,"");
    if(valor!=valorlimpo) campo.value=valorlimpo;
}

//Função pra usar no "onkeyup" de campos de formulário de data, que aceitam barra...
function sohnumerosebarra(campo){
    valor=campo.value;
    valorlimpo=valor.replace(/[^\d\/]/gi,"");
    if(valor!=valorlimpo) campo.value=valorlimpo;
}

//Função pra usar no "onkeyup" de campos de formulário numéricos...
function sohnumerosenada(campo){
    valor=campo.value;
    valorlimpo=valor.replace(/[^\d]/gi,"");
    if(valor!=valorlimpo) campo.value=valorlimpo;
}

//Vê se a string está num formato de data válido. Retorna boolean.
function strehdata(){
	porcoes=this.split("/");
	if(porcoes.length!=3){
		return false;
	}else{
		pdia=parseFloat(porcoes[0].replace(/^0/,""));
		pmes=parseFloat(porcoes[1].replace(/^0/,""));
		pano=parseInt(porcoes[2],10);
		if((pano+"").length==2){
			preano="20";
			if(parseInt(pano,10)>50) preano="19";
			pano=parseInt(preano + pano,10);
		}
		return pdia>0 && pdia<=31 && pmes>0 && pmes<=12 && pano>1900;
	}
}
String.prototype.ehdata = strehdata;

function strehvazio(){
	return this.replace(/\s/gi,"")=="";
}
String.prototype.ehvazio = strehvazio;

function abrirbuscador(url){
	window.open(url,"_blank","location=no,menubar=no,toolbar=no,status=no,resizable=yes,width=800,scrollbars=yes");
}
