// Funcoes gerais
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];}}
}
MM_preloadImages();

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function openWindow(theURL,winName) {
  var params = "scrollbars=yes,status=yes,location=yes,toolbar=yes,menubar=yes,resizeable=yes";
  if(winName == "fullscreen") params += ",fullscreen";
  window.open(theURL,winName,params);
}

function openPopupWindow(theURL,winName,w,h) {
  window.open(theURL,winName,"width="+w+",height="+h+",scrollbars=no,history=yes,directories=no,toolbar=no,location=no,status=no,menubar=no,resizable=no,left=50,top=50,screenX=50,screenY=50");
}

function openImageWindow(imageURL,title,width,height) {
  imageWindow = window.open("","image","width="+width+",height="+height);
  imageWindow.document.write('<html><head><title>'+title+'</title></head>');
  imageWindow.document.write('<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">');
  imageWindow.document.write('<img src="'+imageURL+'">');
  imageWindow.document.write('</body></html>');
  imageWindow.document.close();
}

// valida numero inteiros ou não
function number_validade(numero,inteiro) {
	numero = new String(numero);
	if(numero.length==0)
		return false;
	var exp = /^\$|\./g ;
	// retira $ e .
	numero = numero.replace(exp, "");
	exp = /,/g ;
	// troca , por .
	numero = numero.replace(exp,".");
	numero = parseFloat(numero);
	if(isNaN(numero))
		return false;
	if(inteiro && numero!=Math.round(numero))
		return false;
	return true;
}

// verifica se um ano é bissexto
function bi_year(ano) {
	if (ano % 100 == 0) {
		if (ano % 400 == 0) 
			return true; 
	}
	else 
		if ((ano % 4) == 0) 
			return true; 
	return false;
}

// Valida uma data
function date_validate(data) {
	var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})\2(\d{4})$/;
	var datadiv = data.match(datePat);
   	if (datadiv==null)
		return false;
	var dia = datadiv[1];
	var mes = datadiv[3];
	var ano = datadiv[4];
	if(dia<1 || dia>31 || mes<1 || mes>12 || ano < 2000)
		return false;
	if ((mes==4 || mes==6 || mes==9 || mes==11) && dia>30) 
		return false;
	if(mes==2)
		if(dia>29)
			return false;
		else
			if(dia==29 && !bi_year(ano))
				return false;
	return true;
}

// valida CEP
function cep_validate(cep) {
	if(cep.length>9 || (cep.indexOf("-")==-1 && cep.length>8))
		return false;
	var pat = /((\d{5})(-)(\d{3}))|(\d{8})/;
	var cepdiv = cep.match(pat);
	if(cepdiv==null)
		return false;
	return true;
}

// Calculo do CNPJ 
function cnpj_validate(cnpj) {
	var erro = true; 
	var aux_cnpj = "";	
	var cnpj1=0,cnpj2=0;
	for(j=0;j<cnpj.length;j++)
		if(cnpj.substr(j,1)>="0" && cnpj.substr(j,1)<="9")
			aux_cnpj += cnpj.substr(j,1);
	if(aux_cnpj.length!=14)
		erro = false;
	else {
		cnpj1 = aux_cnpj.substr(0,12);
		cnpj2 = aux_cnpj.substr(aux_cnpj.length-2,2);
		fator = "543298765432";
		controle = "";
		for(j=0;j<2;j++) {
			soma = 0;
			for(i=0;i<12;i++) 
				soma += cnpj1.substr(i,1) * fator.substr(i,1);
			if(j==1) soma += digito * 2;
			digito = (soma * 10) % 11;
			if(digito==10) digito = 0;
			controle += digito;
			fator = "654329876543";
		} 
		if(controle!=cnpj2)
			erro = false;
	} 
	return erro;
}

// Validação do CPF
function cpf_validate(cpf) {
	var cpf = new String(cpf);
    var aux_cpf = "";
	
	if(cpf.length!=11)
		return false;
		
    for(j=0;j<cpf.length;j++)
  		if(cpf.substr(j,1)>="0" && cpf.substr(j,1)<="9")
   			aux_cpf += cpf.substr(j,1);
	if(aux_cpf.length!=11)
		return false;
    else {
    	var cpf1 = String(aux_cpf);
    	var cpf2 = cpf.substr(cpf.length-2,2);
      	var controle = "";
      	var start = 2;
      	var end = 10;
      	for(var i=1;i<=2;i++) {
      		var soma = 0;
      		for(j=start;j<=end;j++)
      			soma += cpf1.substr((j-i-1),1)*(end+1+i-j);
        	if(i==2)
          		soma += digito * 2;
        	digito = (soma * 10) % 11;
        	if(digito==10)
          		digito = 0;
        	controle += digito;
        	start = 3;
        	end = 11;
      	}
      	if(controle!=cpf2)
        	return false;
    }
	
	return true;
}


// Esta é uma função simples para validar emails
function email_validate(email) {
	var chars = "@#$&[]()/\\\{}!^:'\"";
	var pat=/^(.+)@(.+)$/;
	var emaildiv = email.match(pat);
	if(emaildiv==null)
		return false;
	var login = emaildiv[1];
	var dominio = emaildiv[2];
	for(var i=0;i<chars.length;i++) {
		if(login.indexOf(chars.substr(i,1))!=-1)
			return false;
	}
	for(var i=0;i<chars.length;i++) {
		if(dominio.indexOf(chars.substr(i,1))!=-1)
			return false;
	}
	return true;
}

// Valida uma string em particular (tipo login ou senha)
function string_validate(string) {
	str = new String(string);
	if(str.length<5)
		return false;
	if(str.indexOf(" ")!=-1)
		return false;
	var chars = "@#$&[]()/\\\{}!^:'\"";
	for(var i=0;i<chars.length;i++) {
		if(str.indexOf(chars.substr(i,1))!=-1) {
			return false;
		}
	}
	return true;
}

// Valida o numero do Cartão de crédito
function creditcard_validate(numero) {
	var str = new String(numero);
	if(str.length==0)
		return false;
	var peso = (str.length%2==0) ? 2 : 1;
	var soma = 0;
	for(var i=0;i<str.length;i++) {
		num = str.substr(i,1);
		vlr = num*peso;
		soma+= (vlr>9) ? vlr-9 : vlr;
		peso = (peso==2) ? 1 : 2;
	}
	return (soma%10==0 && soma!=0);
}

// Valida a Data de validade do cartão (mm/aa)
function creditcard_date_validate(data) {
	var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})$/;
	var dtdiv = data.match(datePat);
	if(dtdiv==null)
		return false;
	var dia = 31;
	var mes = parseInt(dtdiv[1]);
	var ano = parseInt(dtdiv[3]);
	if(mes<1 || mes>12 || ano<01)
		return false;
	var data = new Date();
	var mes_at = data.getMonth();
	var ano_at = data.getYear();
	mes_at++;
	ano+=2000; 
	var anomes = ano*100+mes;
	var anomes_at = ano_at*100+mes_at;
	if(anomes<anomes_at)
		return false;
	return true;		
}

function delete_char(numero) {
	var exp = /^\$|\./g ;
	numero = numero.replace(exp, "");
	return numero;
}

function form_validate(form,campos,nomescampos,tipos,status) {
	/*
	form = posição do formulário (0,1,...)
	campos = campos a verificar (0,1,2,...)
	tipos = tipo de cada campo:
			 	1-inteiro
				2-decimal
				3-data
				4-email
				5-cpf
				6-cnpj
				7-cep
				8-string
				9-login/senha
				10-confirmação de senha 
				11-Cartão de Crédito
				12-Validade do Cartão (mes/ano)
	status = 0 - não obrigatório, 1 - obrigatório
	*/
	var msg = "";
	var erro = false;
//	form++;

	for(var i=0;i<campos.length;i++) {
		resultado=true;
		valor = document.forms[form].elements[campos[i]].value;
		switch(tipos[i]) {
		case 1:
			resultado = number_validade(valor,true);
			if(valor==0 && status[i]==1)
				resultado=false;
			document.forms[form].elements[campos[i]].value = delete_char(valor);
			break;
		case 2:
			resultado = number_validade(valor,false);
			document.forms[form].elements[campos[i]].value = delete_char(valor);			
			break;
		case 3:
			resultado = date_validate(valor);
			break;
		case 4:
			resultado = email_validate(valor);
			break;
		case 5:
			resultado = cpf_validate(valor);
			break;
		case 6:
			resultado = cnpj_validate(valor);
			break;
		case 7:
			resultado = cep_validate(valor);
			break;
		case 8:
			resultado = (valor.length==0) ? false : true;
			break;
		case 9:
			resultado = string_validate(valor);
			break;
		case 10:
			resultado = string_validate(valor);
			if(resultado)
				resultado = (valor==document.forms[form].elements[campos[i-1]].value) ? true : false;
			break;
		case 11:
			resultado = creditcard_validate(valor);
			break;
		case 12:
			resultado = creditcard_date_validate(valor);
			break;
		}
		
		if(!resultado && (status[i]==1 || (status[i]==0 && valor.length!=0))) {
			msg+= "- " + nomescampos[i] + "\n";
			erro = true;
		}
		
	}
	if(erro)
		alert(errormsg+"\n\n"+msg)
	return !erro;
}

function confirmLink(theMsg) {
	if(theMsg=='') return (false);
	is_confirmed = window.confirm(theMsg);
	return is_confirmed;
}

function update_textfield(form,field,text) {
	var textfield = document.forms[form].elements[field].value + text;
	document.forms[form].elements[field].value = textfield;
	document.forms[form].elements[field].focus();
}
