////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// Bibliotecas de funcoes JavaScript 
//
//
////////////////////////////////////////////////////////////////////////////////////////////////

//Verifica qual o browser do visitante e armazena na variável púbica clientNavigator, 
//Caso Internet Explorer(IE) outros (Other) 

if (navigator.appName.indexOf('Microsoft') != -1){ 
    clientNavigator = "IE"; 
 }else{ 
    clientNavigator = "Other"; 
 } 


////////////////////////////////////////////////////////////////////////////////////////////////
//
// Valida Formulário Anunciante
//
//

function checkForm_Pedido()

{
	var campos = document.pedido;
	var msg = 'Mandatory Fields: \n\n';
	var i = 0;
	
	
	if(campos.nome.value == '') 
	{ 
		msg = msg + '- Name \n'; 
		i++;
	}
	
	if( campos.empresa.value == '') 
	{ 
		msg = msg + '- Company \n'; 
		i++;
	}	

	if( campos.depto.value == '') 
	{ 
		msg = msg + '- Department \n'; 
		i++;
	}	

	if( campos.dddfone.value == '') 
	{ 
		msg = msg + '- DDD  \n'; 
		i++;
	}	

	if( campos.fone.value == '') 
	{ 
		msg = msg + '- Phone  \n'; 
		i++;
	}	

	if( campos.cidade.value == '') 
	{ 
		msg = msg + '- City \n'; 
		i++;
	}	

	if( (campos.email.value == '') || (!doEmail(campos.email.value,1)) ) 
	{
		msg = msg + '- Invalid E-Mail \n'; 
		i++;			
	}	

	if( campos.quantidade.value == '') 
	{ 
		msg = msg + '- Qtt \n'; 
		i++;
	}	

	if( (campos.quantidade.value != '') && (!multiplo24(campos.quantidade.value)) ) 
	{ 
		msg = msg + '- Qtt not is multiple of 24!\n'; 
		i++;
	}	

	if(i) { alert(msg); return false; } else { campos.submit(); }
}

//
////////////////////////////////////////////////////////////////////////////////////////////////


function multiplo24(quant)
{
    var quantMult = quant % 24;

	if(quantMult == 0)
		return true;
	else
		return false;
}



function mascaraCNPJ(o){
	var v = o.value;
	
    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

	o.value = v;
	
    return true;
}


function mascaraCPF(o)
{
	var v = o.value;
	
    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

	o.value = v;
	
    return true;
}


function mascaraDDD(ddd)
{		
	if (ddd.length >= 3)
	{			
		document.getElementById('fone').focus();			
		document.getElementById('fone').value = "";		
	}
}

function mascaraFone(fone)
{		
	if (fone.length >= 8)
	{			
		document.getElementById('dddcel').focus();			
		document.getElementById('dddcel').value = "";		
	}
}

function mascaraDDDCel(dddcel)
{		
	if (dddcel.length >= 3)
	{			
		document.getElementById('Celular').focus();			
		document.getElementById('Celular').value = "";		
	}
}


function mascaraCelular(cel)
{		
	if (cel.length >= 8)
	{			
		document.getElementById('cnpj').focus();			
		document.getElementById('cnpj').value = "";		
	}
}

////////////////////////////////////////////////////////////////////////////////////////////////
//
// Validação E-Mail
//
//

var reEmail1 = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
var reEmail2 = /^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
var reEmail3 = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
var reEmail = reEmail3;

function doEmail(pStr, pFmt)
{
	eval("reEmail = reEmail" + pFmt);
	if (reEmail.test(pStr)) { return true; } else if (pStr != null && pStr != "") {	return false; }
} 

//
////////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////////
//
// Valida CEP
//
//

 function Verifica_Cep(cep, obrigatorio){ 
  //Se o parâmetro obrigatório for igual à zero, significa que elepode estar vazio, caso contrário, não 
  
     var strcep = cep; 
     if((obrigatorio == 1) || (obrigatorio == 0 && strcep != ""))
	 { 
         if (strcep.length != 9)
		 { 
             //alert("CEP informado inválido."); 
             //cep.focus(); 
             return false; 
         }
		 else
		 { 
             if (strcep.indexOf("-") != 5)
			 { 
                 //alert("Formato de CEP informado inválido."); 
                 //cep.focus(); 
                 return false; 
             }
			 else
			 { 
                 if (isNaN(strcep.replace("-","0")))
				 { 
                     //alert("CEP informado inválido."); 
                     //cep.focus(); 
                     return false;
                 } 
             } 
         } 
     }      
  } 
  
  function Bloqueia_Caracteres(evnt){ 
  //Função permite digitação de números 
     if (clientNavigator == "IE"){ 
         if (evnt.keyCode < 48 || evnt.keyCode > 57){ 
             return false 
         } 
     }else{ 
         if ((evnt.charCode < 48 || evnt.charCode > 57) && evnt.keyCode == 0){ 
             return false 
         } 
     } 
  } 
    
  function Ajusta_Cep(input, evnt){ 
  //Ajusta máscara de CEP e só permite digitação de números 
     if (input.value.length == 5){ 
         if(clientNavigator == "IE"){ 
             input.value += "-"; 
         }else{ 
             if(evnt.keyCode == 0){ 
                 input.value += "-"; 
             } 
         } 
     } 
  //Chama a função Bloqueia_Caracteres para só permitir a digitação de números 
     return Bloqueia_Caracteres(evnt); 
  } 
 

//
////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////
//
// Valida CPF e CNPJ
//
//

/**
 * @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

//
////////////////////////////////////////////////////////////////////////////////////////////////