/**
 * @author Márcio d'Ávila
 * @version 1.03, 2004-2008
 * http://www.mhavila.com.br/topicos/web/cpf_cnpj.html
 *
 * Licenciado sob os termos da licença Creative Commons,
 * Atribuição - Compartilhamento pela mesma licença 2.5:
 * http://creativecommons.org/licenses/by-sa/2.5/br/
 *
 * 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 + "00", false, pIsCnpj);
	calculado = calculado.substring(0, maxDigitos - 2);
	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);
	if (numero.length > NUM_DIGITOS_CPF) return 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; algUnico && i<NUM_DIGITOS_CPF; i++)
	{
		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);
	if (numero.length > NUM_DIGITOS_CNPJ) return false;

	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; algUnico && i<NUM_DGT_CNPJ_BASE; i++)
	{
		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 openWindow(title,url,w,h,scroll){
window.open(url, title, "width="+w+",height="+h+",toolbar=no,menubar=no,scrollbars="+scroll);
}

function getElement(id){
	if(document.getElementById && (element = document.getElementById(id)))
   {
    return element;
   }
}

function goToLink(id, url){
	element=getElement(id);		
	new Ajax.Updater(id, url, {onFailure:function(){element.innerHTML='Falha, tente novamente.';},asynchronous:true, evalScripts:true});	
return false;
}

Ajax.Responders.register({
  onCreate: function() {
    //new Effect.toggle(element,'appear',{duration: 0.5});
	//element.style.display='block';
    element.innerHTML='Carregando...';
  },
  onComplete: function() {
    element.innerHTML=responseText;
  }
});

function imagem_hover(id, img){

id.src=img;

}

function pre_carregar_imagem(img){

var preload = new Image();

preload.src = img;

}

function pre_carregar_imagens(){

var imagem_lista = Array('img/crie_a_sua_0.gif', 'img/crie_a_sua_1.gif');

var imagem_qtd = imagem_lista.length;

for (i = 0; i <imagem_qtd; i++) {

    var preload = new Image();

    preload.src = imagem_lista[i];
}
}
pre_carregar_imagens();

// FLASH
function flash(swf,flashVarString,w,h,bgcolor,menu,mode,q,id){
     document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '
     +'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" '
     +'width="'+w+'" height="'+h+'" id="'+id+'" align="">'
     +'<param name="movie" value="'+swf+'">'
     +'<param name="menu" value="'+menu+'"> '
     +'<param name="quality" value="'+q+'"> '
     +'<param name="wmode" value="'+mode+'"> '
     +'<param name="bgcolor" value="'+bgcolor+'"> '
     +'<param name="flashvars" value="'+flashVarString+'"> '
	 +'<param name="allowScriptAccess" value="always"> '
     +'<embed src="'+swf+'" flashvars="'+flashVarString+'" menu="'+menu+'" quality="'+q+'" wmode="'+mode+'" '
     +' bgcolor="'+bgcolor+'"  width="'+w+'" height="'+h+'" name="'+swf+'" '
     +' align=""  type="application/x-shockwave-flash" '
     +' pluginspage="http://www.macromedia.com/go/getflashplayer" allowScriptAccess="always"></embed></object> ');
}

/*
Selecionar o CSS 
*/

function check_browser(string)
{
	var detect = navigator.userAgent.toLowerCase();

	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

function seleciona_css(dirs){

var texto;
/*var pontos='';

for (i = 0; i < dirs; i++){

pontos = pontos + '../';

}
*/

if(dirs==null){ dirs = '';}else{ dirs = dirs + '/'; }

if (check_browser('msie')) 
{
 texto = '<link rel="stylesheet" href="' + dirs + 'css/style_ie.css" type="text/css">';	
}
else {
 texto = '<link rel="stylesheet" href="' + dirs + 'css/style.css" type="text/css">';	
}

return texto;

}

/*
Checar botoes de paginacao busca 
*/

function checkboxes(the_form, do_check)
{
    var elts      = (typeof(document.forms[the_form].elements['check_cel[]']) != 'undefined')
                  ? document.forms[the_form].elements['check_cel[]']
                  : (typeof(document.forms[the_form].elements['check_cel[]']) != 'undefined')
          ? document.forms[the_form].elements['check_cel[]']
          : document.forms[the_form].elements['check_cel[]'];
    var elts_cnt  = (typeof(elts.length) != 'undefined')
                  ? elts.length
                  : 0;

    if (elts_cnt) {
        for (var i = 0; i < elts_cnt; i++) {
            elts[i].checked = do_check;
        } // end for
    } else {
        elts.checked        = do_check;
    } // end if... else

    return true;
}

/*
Aviso de ações 
*/

function acoes(msg, link){

if(window.confirm(msg)){

window.location = link;

}

}

/*
Validar Formularios
*/

function vazio(string,min,max)
	{
	 var cont = string.length;
	 
	 if(min!=0 && max==0){
	 if(min>cont){ return false; }
	 }
	 
	 if(min==0 && max!=0){
	 if(max<cont){ return false; }
	 }
	 
	 if(min!=0 && max!=0){
	 if(min>cont || max<cont){ return false; }
	 }
	 
	 if(cont==0){ return false; }	 
	 
	 return true;	 
	}

function letras(texto, num_chars, behave){
		if(behave=="min"){
			var pattern=new RegExp("^[a-zA-Z]{"+num_chars+",}$");
		}else if (behave=="max"){
			var pattern=new RegExp("^[a-zA-Z]{0,"+num_chars+"}$");
		}else if (behave=="exato"){
			var pattern=new RegExp("^[a-zA-Z]{"+num_chars+","+num_chars+"}$");
		}
		
		if (texto.match(pattern)==null) {   
       		 return false;
		}
		else{ return true; }
	}
	
function numeros(texto, num_chars, behave){
		if(behave=="min"){
			var pattern=new RegExp("^[0-9]{"+num_chars+",}$");
		}else if (behave=="max"){
			var pattern=new RegExp("^[0-9]{0,"+num_chars+"}$");
		}else if (behave=="exato"){
			var pattern=new RegExp("^[0-9]{"+num_chars+","+num_chars+"}$");
		}
		
		if (texto.match(pattern)==null) {   
       		 return false;
		}
		else{ return true; }
	}
	
function dinheiro(num){
		
		var pattern=new RegExp("^[0-9]+(\.[0-9]{1,2})?$");
		
		if (num.match(pattern)==null) {   
       		 return false;
		}
		else{ return true; }
	}
	
function letras_numeros(texto, num_chars, behave){
	
		if(behave=="min"){
			var pattern=new RegExp("^[0-9a-zA-Z]{"+num_chars+",}$");
		}else if (behave=="max"){
			var pattern=new RegExp("^[0-9a-zA-Z]{0,"+num_chars+"}$");
		}else if (behave=="exato"){
			var pattern=new RegExp("^[0-9a-zA-Z]{"+num_chars+","+num_chars+"}$");
		}
		
		if (texto.match(pattern)==null) {   
       		 return false;
		}
		else{ return true; }
	}	


function email(emailStr) {

var emailPat=/^(.+)@(.+)$/

var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

var validChars="\[^\\s" + specialChars + "\]"

var quotedUser="(\"[^\"]*\")"

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

var atom=validChars + '+'

var word="(" + atom + "|" + quotedUser + ")"

var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	
	return false
}
var user=matchArray[1]
var domain=matchArray[2]


if (user.match(userPat)==null) {    
    
    return false
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	
    return false
}


var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   
   return false
}

if (len<2) {
 
   return false
}


return true;
}

function checkradio(campo)
{
for(i=0;i<campo.length;i++)
{
if(campo[i].checked == true){ return true; }
}
return false;
}

function checkbox(campo)
{

if(campo.checked == true){ return true; }

return false;
}

function valida_frete(){

if(!checkradio(document.calcfrete.servico)){ alert('Selecione a forma de envio.'); return false; }

if(!numeros(document.calcfrete.cep.value,8,'exato')){alert('Preencha o CEP corretamente. Sem - (hífen) e com 8 números.'); document.calcfrete.cep.focus(); return false;}

return true;

}

