/**********************************************************************/
/*   aPanel | Imobiliárias - Sistema para Imobiliárias e Corretores   */
/**********************************************************************/
/*                                                                    */
/*   aPanel | Informática - http://www.apanelinformatica.com.br       */
/*                                                                    */
/*   Arquivo com funções para trabalhar com formulários, este         */
/*   sistema foi desenvolvido para uso de fins imobiliários.          */
/*                                                                    */
/**********************************************************************/

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA MASCARAR CAMPOS DE FORMULÁRIOS
******/
function mask(obj, mask, evt) {
	var i, count, str_vlr, str_size, mask_size, bol_mask, new_str, key;
	
	// captura o evento keypress de acordo com o navegador utilizado
	key = wKey(evt);
			
	// permite as teclas 'backspace'e 'tab'
	if (key == 8 || key == 0) {
		return true;
	}
		
	str_vlr = obj.value;

	/* limpa todos os caracteres de formatações que estiverem no campo */
	str_vlr = str_vlr.toString().replace("-", "");
	str_vlr = str_vlr.toString().replace("-", "");
	str_vlr = str_vlr.toString().replace(".", "");
	str_vlr = str_vlr.toString().replace(".", "");
	str_vlr = str_vlr.toString().replace("/", "");
	str_vlr = str_vlr.toString().replace("/", "");
	str_vlr = str_vlr.toString().replace(":", "");
	str_vlr = str_vlr.toString().replace(":", "");
	str_vlr = str_vlr.toString().replace("(", "");
	str_vlr = str_vlr.toString().replace("(", "");
	str_vlr = str_vlr.toString().replace(")", "");
	str_vlr = str_vlr.toString().replace(")", "");
	str_vlr = str_vlr.toString().replace(" ", "");
	str_vlr = str_vlr.toString().replace(" ", "");
	// captura o sizeanho da string
	str_size = str_vlr.length;
	// captura o sizeanho da máscara a ser aplicada
	mask_size = mask.length;

	i = 0;
	count = 0;
	new_str = "";
	mask_size = str_size;

	// começa a rotina de concatenação do valor e máscara
	while (i < mask_size) {
		bol_mask = ((mask.charAt(i) == '-') || (mask.charAt(i) == '.') || (mask.charAt(i) == '/') || (mask.charAt(i) == ':'));
		bol_mask = bol_mask || ((mask.charAt(i) == '(') || (mask.charAt(i) == ')') || (mask.charAt(i) == ' '));

		/* se bol_mask for true */
		if (bol_mask) {
			new_str += mask.charAt(i);
			mask_size++;
		}
		else {
			new_str += str_vlr.charAt(count);
			count++;
		}

		// incrementa o i e volta ou sai do while
		i++;
	}

	obj.value = new_str;

	if (key != 8) { // backspace
 		if (mask.charAt(i - 1) == '9')
			return ((key > 47) && (key < 58));
		else
			return true;
	}
	else {
		return true;
	}
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA PERMITIR APENAS DIGITOS NÚMERICOS
******/
function onlyNum(evt) {
	var key = wKey(evt);
	
	// valida as teclas
	if (((key < 48) || (key > 57)) && (key != 13) && (key != "0") && (key != 8) && (key != 44)) {
		return false;
	}
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA MÁSCARAR UM CAMPO NO FORMATO MOEDA
******/
function makeNum(num) {
	var valid    = "0123456789";
	var numok = "";
	var temp;
	
	for (var i = 0; i < num.length; i++) {
		temp = num.substr(i, 1);
		if (valid.indexOf(temp) != -1)
			numok = numok + temp;
	}
	
	return (numok);
}
	
function maskCur(obj, evt, max_size, decimal) {	
	var key = wKey(evt);                                // escolhe o evento de acordo com o browser
	var obj_size = obj.value.length;                    // quantidade de caracteres que contém no obj/campo
	
	if ((key == 8) && (obj_size == max_size))
		obj_size = obj_size - 1;
	
	vr = makeNum(obj.value);
	size = vr.length;
	
	if (((key == 8) || (key >= 48 && key <= 57) || (key >= 96 && key <= 105)) && (parseInt(obj_size) + 1 <= parseInt(max_size))) {
		if ((size < max_size) && (key != 8))
			size = vr.length + 1;
		if ((key == 8) && (size > 1))
			size = size - 1;
		
		if (size <= decimal)
			obj.value = ("0," + vr);
		if ((size == (decimal + 1)) && (key == 8))
			obj.value = vr.substr(0, (size - decimal)) + "," + vr.substr((size - decimal), size);
		if ((size > (decimal + 1)) && (size <= (decimal + 3)) && (vr.substr(0,1) == "0"))
			obj.value = vr.substr(1, (size - (decimal+1))) + "," + vr.substr(size - (decimal), size);
		if ((size > (decimal + 1)) && (size <= (decimal + 3)) && (vr.substr(0,1) != "0"))
			obj.value = vr.substr(0, (size - decimal)) + "," + vr.substr(size - decimal, size);
		if ((size >= (decimal + 4)) && (size <= (decimal + 6)))
			obj.value = vr.substr(0, size - (decimal + 3)) + "." + vr.substr(size - (decimal + 3), 3) + "," + vr.substr(size - decimal, size);
		if ((size >= (decimal + 7)) && (size <= (decimal + 9)))
			obj.value = vr.substr(0, size - (decimal + 6)) + "." + vr.substr(size - (decimal + 6), 3) + "." + vr.substr(size - (decimal + 3), 3) + "," + vr.substr(size - decimal, size);
		if ((size >= (decimal + 10)) && (size <= (decimal + 12)))
			obj.value = vr.substr(0, size - (decimal + 9)) + "." + vr.substr(size - (decimal + 9), 3) + "." + vr.substr(size - (decimal + 6), 3) + "." + vr.substr(size - (decimal + 3), 3) + "," + vr.substr(size - decimal, size);
		if ((size >= (decimal + 13)) && (size <= (decimal + 15)))
			obj.value = vr.substr(0, size - (decimal + 12)) + "." + vr.substr(size - (decimal + 12), 3) + "." + vr.substr(size - (decimal + 9), 3) + "." + vr.substr(size - (decimal + 6), 3) + "." + vr.substr(size - (decimal + 3), 3) + "," + vr.substr(size - decimal, size);
	}
	else if((key != 8) && (key != 9) && (key != 13) && (key != 18) && (key != 35) && (key != 36) && (key != 37) && (key != 39)) {
		return false;
	}
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO ESTA VÁZIO
******/
function isEmpty(str) {
  var size   = str.length;
  var newStr = '';

  for (var pos=0; pos < size; pos++) {
    if (str.substring(pos, (pos + 1)) != '') {
      newStr = newStr + str.substring(pos, (pos + 1));
    }
  }

  if (newStr.length > 0)
    return false;
  else
    return true;
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM APENAS DIGITOS ALPHA
******/
function isAlpha(str) {
  var alpha = /^[a-zA-ZáéíóúâêîôûãõàèìòùçÁÉÍÓÚÂÊÎÔÛÃÕÀÈÌÒÙÇ]+$/;
  return alpha.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM APENAS DIGITOS NÚMERICOS
******/
function isNum(str) {
  var num = /^\d+$/;
  return num.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM O FORMATO VÁLIDO PARA E-MAIL
******/
function isEmail(str) {
  var email = /^[\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}\])$/;
  return email.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM O FORMATO VÁLIDO PARA DATA
******/
function isDate(str) {
  var date = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|[1-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
  return date.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM O FORMATO VÁLIDO PARA MOEDA
******/
function isCurrency(str) {
  var currency = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
  return currency.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO QUE VERIFICA SE O VALOR DO CAMPO CONTÉM O FORMATO VÁLIDO PARA TELEFONE
******/
function isPhone(str) {
  var phone = /^\(?\d{2}\)?\d{4}-\d{4}$/;
  return phone.test(str);
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA VALIDAR UM FORMULÁRIO
******/
function validate(obj_form) {
	// percorre o formulário passado para validação dos campos
	for (var inc=0; inc < obj_form.length; inc++) {
		var field = obj_form.elements[inc];
		// captura o nome da classe do campo e a transforma em uma array
		var valid = field.className;
			valid = valid.split(' ');
			
		// se o campo não requerer validação passa para o próximo campo
		if (valid.length == 1) { continue; }
		
		// se o campo é de preenchimento obrigatório retorna falso
		if (valid[1] == 'required' && isEmpty(field.value)) {
			alert('campo de preenchimento obrigatório!!!');
			field.focus();
			return false;
		}

		// se o campo está preenchido verifica se o formato passado esta correto
		if (!(isEmpty(field.value))) {
			// para campos que aceitam apenas caracteres de texto
			if (valid[2] == 'alpha' && !(isAlpha(field.value))) {
				alert('o campo deve conter apenas caracteres de texto!!!');
				field.focus();
				return false;
			}
			
			// para campos que aceitam apenas caracteres numéricos
			if (valid[2] == 'number' && !(isNum(field.value))) {
				alert('O campo deve conter apenas caracteres numéricos!!!');
				field.focus();
				return false;
			}
			
			// para campos de email
			if (valid[2] == 'email' && !(isEmail(field.value))) {
				alert('o formato de e-mail está inválido!!!');
				field.focus();
				return false;
			}
			
			// para campos de data
			if (valid[2] == 'date' && !(isDate(field.value))) {
				alert('o formato da data está inválido!!!');
				field.focus();
				return false;
			}
			
			// para campos de moeda
			if (valid[2] == 'currency' && !(isCurrency(field.value))) {
				alert('o formato da moeda está inválido!!!');
				field.focus();
				return false;
			}
			
			// para campos de telefone
			if (valid[2] == 'phone' && !(isPhone(field.value))) {
				alert('o campo de telefone está inválido!!!');
				field.focus();
				return false;
			}
		}
	}
	
	return true;
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA CAPTURAR OS DADOS DE UM FORMULÁRIO
******/
function getDataForm(obj_form) {
	var param = '';
	var tag_name;
	var input_type;
	
	
	// varre os elementos do formulário
	for (var i=0; i < obj_form.elements.length; i++) { 
		tag_name  = obj_form.elements[i].tagName.toUpperCase();
		input_type= obj_form.elements[i].type.toUpperCase();
		
		// verifica o nome da tag e o tipo do campo
		if (tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA') {
			if (input_type == 'CHECKBOX' || input_type == 'RADIO') {
				// verifica se está marcado
				if (obj_form.elements[i].checked)
					param += obj_form.elements[i].name + "=" + escape(obj_form.elements[i].value) + "&";
			}
			else {
				param += obj_form.elements[i].name + "=" + escape(obj_form.elements[i].value) + "&";
			}
		} 
	}
	
	// retorna os nomes e os valores dos campos encontrados
	return param;
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA ENVIA OS FORMULÁRIOS DO WEBSITE
******/
function sendmail(url, obj_form) {
	// valida os campos obrigatórios do formulário
	if (!validate(obj_form)) {
		return false;
	}
	
	// faz as requzições AJAX para envio do formulário
	if (ajax && (ajax.readyState == 4 || ajax.readyState == 0)) {
		var dados = getDataForm(obj_form);

		ajax.open("POST", url, true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.onreadystatechange = function () {
			if (ajax.readyState == 4) {
				if (ajax.status == 200) {
					var res = ajax.responseText;
					// mostra a mensagem de retorno para o usuário
					alert(res);
					// limpa os campos do formulário
					obj_form.reset();
				}
			}
		}
		ajax.send(dados);
	}
}

/*--------------------------------------------------------------------*/

/******
* FUNÇÃO PARA ENQUETE DO WEBSITE
******/

function poll(obj_form) {	
	// faz as requzições AJAX para votar
	if (ajax && (ajax.readyState == 4 || ajax.readyState == 0)) {
		var dados = getDataForm(obj_form);
		

		ajax.open("POST", 'pscripts/enquete.imobiliaria.php', true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		ajax.onreadystatechange = function () {
			if (ajax.readyState == 4) {
				if (ajax.status == 200) {
					var res = ajax.responseXML;
					
					var p = res.getElementsByTagName("poll");
					
					var show_poll = $g.id('opts-poll');
						show_poll.innerHTML = '';
					
					// escreve o resultado da enquete na tela
					for (var i=0; i < p.length; i++) {
						show_poll.innerHTML += '<dl>';
						show_poll.innerHTML += '<dt>' + p[i].getElementsByTagName('opt')[0].firstChild.nodeValue + '</dt>';
						show_poll.innerHTML += '<dd><img height="10" width="' + p[i].getElementsByTagName('qtd_vote')[0].firstChild.nodeValue + '" src="images/vote_middle.png" /></dd>';
						show_poll.innerHTML += '<dd style="width: 80px; text-align: right">' + p[i].getElementsByTagName('qtd_vote_perc')[0].firstChild.nodeValue + '%</dd>';
						show_poll.innerHTML += '<dl>';
					}
				}
			}
		}
		ajax.send(dados);
	}
}
