var mensagem = '';
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
function validate()
{
	// Pre-carrega as imagens
	var img = new Image();
	img.src = 'http://procureimovel.com.br/public/images/incorrect.gif';
	var img2 = new Image();
	img2.src = 'http://procureimovel.com.br/public/images/correct.gif';
	
	$("input[class*='validate']").change(function(){
		validateField(this);
	});
	
	$("form[class*='validate']").submit(function(){
		return submited(this);
	});

	/* 
	var fm = document.getElementsByTagName('form');
	for(i=0;i<fm.length;i++)
	{
		if(fm[i].className.match('validate'))
		{
			var els = fm[i].elements;
			for(j=0;j<els.length;j++)
			{
				if(els[j].className.match('validate'))
				{
					els[j].onchange = function()
					{
						validateField(this);
					}
				}
			}
			fm[i].onsubmit = function()
			{
				return submited(this);
			}
		}
	}
	*/
	
}
function validateField(field)
{
	var classe = field.className;
	mensagem = '';
	if(classe.match('not-null')) notNull(field);
	if(classe.match('data')) validDate(field);
	if(classe.match('vfoto')) vFoto(field);
	if(classe.match('e-mail')) vEmail(field);
	if(classe.match('numero')) vNumero(field);
	if(classe.match('conf')) vSenha(field);
	if(classe.match('cpf')) vCPF(field);
	if(classe.match('cnpj')) vCNPJ(field);
	if(classe.match('descricao')) vDescricao(field);
	//if(classe.match('no-caps')) vUpper(field);

	var txt = document.createElement('div');
	var img = new Image();
	txt.className = 'invalid';
	if(mensagem != '')
	{
		if(field.parentNode.getElementsByTagName('div').length > 0) field.parentNode.removeChild(field.parentNode.getElementsByTagName('div')[0]);
		img.src = 'http://procureimovel.com.br/public/images/incorrect.gif';
		txt.innerHTML = '<img src="'+img.src+'" alt /> '+mensagem;
		field.parentNode.appendChild(txt);
		return false;
	} else {
		if(field.parentNode.getElementsByTagName('div').length > 0) field.parentNode.removeChild(field.parentNode.getElementsByTagName('div')[0]);
		img.src = 'http://procureimovel.com.br/public/images/correct.gif';
		txt.appendChild(img);
		field.parentNode.appendChild(txt);
		return true;
	}
}

function notNull(field)
{
	if(mensagem != '') return;
	var ml = 0;
	var aux = field.className.split('not-null-')
	if(aux.length > 0 && aux != field.className)
		ml = aux[1].split(' ')[0];
	if(field.value.trim() == '' || field.value.trim().length < ml)
		mensagem = 'Campo obrigatório.';
	else
		mensagem = '';
}

function vDescricao(field)
{
	if($('#ed_descricao').val() == '' && $('#ed_infra_estrutura').val() == '' && $('#ed_lazer').val())
		mensagem = 'Preencha pelo menos um dos campos descrição, lazer ou infra-estrutura.';
	else
		mensagem = '';
}

function vSenha(field)
{
	if(mensagem != '') return;
	var campo = document.getElementById(field.className.split(' ')[field.className.split(' ').length-1]);
	if(campo.value != field.value)
		mensagem = 'As senhas não conferem.';
	else
		mensagem = '';
}

function vEmail(field)
{
	if(mensagem != '') return;
	if(field.value == '') { mensagem = ''; return; }
	var valor = field.value.trim();
	if((valor.indexOf('@') < 2) && (valor.indexOf('.') < 4))
	{
		mensagem = 'E-mail inválido.';
	} else
	{
		mensagem = '';
	}
}

function validDate(field)
{
	if(mensagem != '') return;
	var valor = field.value;
	var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
	if (!valor.match(expReg))
		mensagem = 'Data inválida! ( DD/MM/AAAA )';
	else
		mensagem = '';
}

function vNumero(field)
{
	if(mensagem != '') return;
	if(field.value == '') { mensagem = ''; return; }
	if(!isNumeric(field.value.trim()))
		mensagem = 'Apenas números.';
	else
		mensagem = '';
}

function vUpper(field)
{
	var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	if(mensagem != '') return;
	if(field.value == '') { mensagem = ''; return; }
	if(field.value.length < 5) { mensagem = ''; return; }
	
	var qtde = parseInt(field.value.length);
	var perm = 0.3;
	var count = 0;
	for(i=0;i<field.value.length;i++)
	{
		if(str.indexOf(field.value[i]) > -1)
			count++;
	}
	if((count / qtde) > perm)
		mensagem = 'Não utilize caracteres maiúsculos em excesso.';
	else
		mensagem = '';
}

function vYear(field)
{
	if(mensagem != '') return;
	if(field.value == '') { mensagem = ''; return; }
	if((parseInt(field.value) < 1900) || (parseInt(field.value) > 2100))
		mensagem = 'Ano inválido.';
	else
		mensagem = '';
	vNumero(field);
}

function vFoto(field)
{
	if(mensagem != '') return;
	if(field.value.trim() == '') return;
	var ok = ['jpg', 'jpeg', 'png', 'gif'];
	var ext = field.value.split('.')[1].toLowerCase();
	if(ok.indexOf(ext) < 0)
		mensagem = 'Formato de arquivo inválido.';
	else
		mensagem = '';
}

function submited(form)
{
	var c =0;
	for(i=0;i<form.elements.length;i++)
	{
		if(!form.elements[i].className.match('validate')) continue;
		if(!validateField(form.elements[i]))
			c++;
	}
	if(form.ed_descricao)
	{
		if(form.ed_descricao.value.trim() == '' && form.ed_infra_estrutura.value.trim() == '' && form.ed_area_lazer.value.trim() == '')
		{
			Dialog.show({content: 'Preencha pelo menos um dos campos descrição, infra-estrutura ou lazer.'});
			return false;
		}
	}
	if(c > 0)
	{
		Dialog.show({content: 'Algumas informações estão incorretas, por favor, verifique.'});
		return false;
	}
	return true;
}
function isNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;


   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}

function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}

function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}

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 data(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)
    return v
}

function soNumeros(v){
    return v.replace(/\D/g,"")
}

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 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 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 vCPF(field){
	if(mensagem != '') return;
	var cpf = field.value;

	cpf = cpf.replace('.', '');
	cpf = cpf.replace('.', '');
	cpf = cpf.replace('.', '');
	cpf = cpf.replace('-', '');

   if(cpf.length != 11 || cpf == "00000000000" || cpf == "11111111111" ||
	  cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" ||
	  cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" ||
	  cpf == "88888888888" || cpf == "99999999999"){
	mensagem = 'CPF Inválido.';
	return false;
   }

   soma = 0;
   for(i = 0; i < 9; i++)
   	 soma += parseInt(cpf.charAt(i)) * (10 - i);
   resto = 11 - (soma % 11);
   if(resto == 10 || resto == 11)
	 resto = 0;
   if(resto != parseInt(cpf.charAt(9))){
	 mensagem = 'CPF Inválido.';
	 return false;
   }
   soma = 0;
   for(i = 0; i < 10; i ++)
	 soma += parseInt(cpf.charAt(i)) * (11 - i);
   resto = 11 - (soma % 11);
   if(resto == 10 || resto == 11)
	 resto = 0;
   if(resto != parseInt(cpf.charAt(10))){
     mensagem = 'CPF Inválido.';
	 return false;
   }
  mensagem = '';
 }
function vCNPJ(field) {
	if(mensagem != '') return;
	var cnpj = field.value;
     var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;

     cnpj = cnpj.replace('/', '');
     cnpj = cnpj.replace('-', '');
     cnpj = cnpj.replace('.', '');
     cnpj = cnpj.replace('.', '');

      digitos_iguais = 1;
      if (cnpj.length < 14 && cnpj.length < 15)
	  {
		  mensagem = 'CNPJ inválido.';
            return false;
	  }
      for (i = 0; i < cnpj.length - 1; i++)
            if (cnpj.charAt(i) != cnpj.charAt(i + 1))
                  {
                  digitos_iguais = 0;
                  break;
                  }
      if (!digitos_iguais)
            {
            tamanho = cnpj.length - 2
            numeros = cnpj.substring(0,tamanho);
            digitos = cnpj.substring(tamanho);
            soma = 0;
            pos = tamanho - 7;
            for (i = tamanho; i >= 1; i--)
                  {
                  soma += numeros.charAt(tamanho - i) * pos--;
                  if (pos < 2)
                        pos = 9;
                  }
            resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
            if (resultado != digitos.charAt(0))
			{
				mensagem = 'CNPJ inválido';
                  return false;
			}
            tamanho = tamanho + 1;
            numeros = cnpj.substring(0,tamanho);
            soma = 0;
            pos = tamanho - 7;
            for (i = tamanho; i >= 1; i--)
                  {
                  soma += numeros.charAt(tamanho - i) * pos--;
                  if (pos < 2)
                        pos = 9;
                  }
            resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
            if (resultado != digitos.charAt(1))
			{
				mensagem = 'CNPJ inválido.';
                  return false;
			}
            return true;
            }
      else
	  {
		  mensagem = 'CNPJ inválido.';
            return false;
	  }
}