Array.prototype.contains = function (element) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == element) {
			return true;
		}
	}
	return false;
};


/*
* parametros:
		campos -> Array -> será composto em pares, sendo o primeiro
						   o nome do campo e o segundo a mensagem!
		div -> String -> para qual div deverá ser carregada a proxima pagina
						 q vai ta num hidden chamado GoPag
		funcoes -> Array -> será composto por strings que são os nomes dos metodos já
							com os paramentros (tudo certo) que serão chamados depois
							de verificar se todos os campos estão preenchidos.
		frm -> Form -> é o form que está o formulário a ser revisado!
  retorno:
  		true -> se todos os campos do formulário estiverem preenchidos corretamente!
		false -> caso contrario
  Exemplo:
  		onsubmit="return validar_form(Array('Campo1', 'Mensagem1', 'Campo2', 'Mensagem2'), 'uma_div', Array('verifica_email(\'Email\')', 'verifica_uf(\'UF\')'), this);"
*/
function validar_form(page, campos, div, functions, frm) {
	try {
		if(campos.length % 2 == 0) {
			for(var i = 0; i < campos.length; i+=2) {
				var obj = document.getElementById(campos[i]);
				
				if(obj) {
					if(obj.type == 'text' || obj.type == 'textarea' || obj.type == 'hidden' || obj.type == 'file' || obj.type == 'password')
						if(obj.value == null || trim(obj.value) == '')
							return aviso(obj, campos[i+1]);
		
					if(obj.type == 'checkbox')
						if(!obj.checked)
							return aviso(obj, campos[i+1]);
		
					if(obj.type == 'select-one')
						if(obj.selectedIndex == null || obj.selectedIndex == 0)
							return aviso(obj, campos[i+1]);
							
					if(obj.type == 'select-multiple') {
						var contem = false;
						for(var j = 0; j < obj.length; j++) {
							if(obj.options[j].value != null && obj.options[j].value != "") {
								contem = true;
								break;
							}
						}
						if(!contem)
							return aviso(obj, campos[i+1]);
					}
				}
			}
			for(var i = 0; i < functions.length; i++) {
				var retorno = eval(functions[i]);
				if(retorno == false) return false;
				else continue;
			}
		} else 
			alert('Ocorreu um erro inesperado.\n\nCODIGO DO ERRO #1001');
		
		if(page.length > 0) {
			if(frm.id == "form_fckeditor") {
				if(FCKeditorAPI.GetInstance('Mensagem'))
					document.getElementById('Mensagem').value = FCKeditorAPI.GetInstance('Mensagem').GetHTML();
					
				if(FCKeditorAPI.GetInstance('Descricao'))
					document.getElementById('Descricao').value = FCKeditorAPI.GetInstance('Descricao').GetHTML();
			}
			
			post(page, div, gerar_parametros(frm));
		}
			
		return true;
	} catch(e) {
		alert('Exception validacao: ' + e);
		return false;
	}
}

function validar_data(campo) {
	var obj = document.getElementById(campo);
		if(trim(obj.value).length > 0) {
		dia = (obj.value.substring(0,2)); 
		mes = (obj.value.substring(3,5)); 
		ano = (obj.value.substring(6,10)); 
	
		cons = true; 
		
		// verifica se foram digitados números
		if(isNaN(dia) || isNaN(mes) || isNaN(ano)) {
			aviso(obj, "Preencha a data somente com números."); 
			return false;
		}
			
		// verifica o dia valido para cada mes 
		if((dia < 01)||(dia < 01 || dia > 30) && (mes == 04 || mes == 06 ||  mes == 09 || mes == 11 ) || dia > 31) { 
			cons = false; 
		} 
	
		// verifica se o mes e valido 
		if(mes < 01 || mes > 12 ) { 
			cons = false; 
		} 
	
		// verifica se e ano bissexto 
		if(mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
			cons = false; 
		} 
		
		if(cons == false)
			aviso(obj, "A data inserida não é válida: " + obj.value);  
		
		return cons;
	}
	else return true;
}

function validar_uf(campo) {
	try {
		var obj = document.getElementById(campo);
		if(obj.value.length > 0) {
			var estados = new Array("AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO");
			
			if(estados.contains(obj.value.toUpperCase()) == false)
				return aviso(obj, "O estado (UF) inserido é inválido: " + obj.value.toUpperCase());
		}
		return true;
	} catch(e) {
		alert("Exception estado: " + e);
		return false;
	}
}

function validar_cep(campo) {
	var obj = document.getElementById(campo);
	if(trim(obj.value).length > 0) {
		if(trim(obj.value).length < 9)
			return aviso(obj, "O CEP inserido é invalido: " + obj.value);
		else
			return true;
	}
	else return true;
}

function validar_telefone(campo) {
	var obj = document.getElementById(campo);
	if(trim(obj.value).length > 0) {
		if(trim(obj.value).length < 12)
			return aviso(obj, "O telefone inserido é invalido: " + obj.value);
		else
			return true;
	}
	else return true;
}

function validar_email(campo) {
	try {
		var obj = document.getElementById(campo);
		if(trim(obj.value).length > 0) {
			if((obj.value.indexOf(".") == -1) || (obj.value.indexOf("@") == -1))
				return aviso(obj, "O email inserido é inválido: " + obj.value);
			else
				return true;
		} else
			return true;
	} catch(e) {
		alert("Exception email: " + e);
		return false;
	}
}

function validar_senha(senha, conf) {
	var s = document.getElementById(senha);
	var c = document.getElementById(conf);
	if(s.value != c.value) {
		c.value = '';
		return aviso(c, "Senhas não conferem!");
	} else 
		return true;
}

function validar_cobranca() {
	var programa = document.getElementById('ProgramaID');
	var periodo = document.getElementById('Periodo');
	
	if(programa.selectedIndex > 0 && periodo.selectedIndex == 0) {
		return aviso(periodo, "Você deve selecionar um período");
	} else  if(programa.selectedIndex == 0 && periodo.selectedIndex > 0) {
		return aviso(programa, "Você deve selecionar um programa");
	}
	
	return true;
}

function validar_vencimentos_cobranca() {
	var objs = document.getElementsByName('Vencimento[]');
	for(i=0; i<objs.length; i++) {
		if(objs[i].type == 'checkbox' && objs[i].checked)
			return true;
	}
	
	alert('Você deve selecionar pelo menos um vencimento');
	return false;
}

function gerar_parametros(frm) {
	var poststr = '';
	for(var i = 0; i < frm.length; i++) {
		var obj = frm[i];
		if(obj.type == 'text' || obj.type == 'textarea' || obj.type == 'hidden' || obj.type == 'password' || obj.type == 'file') {
			poststr = poststr + obj.name + "=" + encodeURIComponent(obj.value) + "&";
		}
		if(obj.type == 'radio') {
			if(obj.checked) poststr = poststr + obj.name + "=" + encodeURIComponent(obj.value) + "&";
		}
		if(obj.type == 'checkbox') {
			if(obj.checked) poststr = poststr + obj.name + "=" + encodeURIComponent(obj.value) + "&";
			else poststr = poststr + obj.name + "=0" + "&";
		}
		if(obj.type == 'select-one') {
			poststr = poststr + obj.name + "=" + encodeURIComponent(obj.options[obj.selectedIndex].value) + "&";
		}
		if(obj.type == 'select-multiple') {
			for(var j = 0; j < obj.length; j++) {
				poststr = poststr + obj.name + "[" + j + "]"  + "=" + encodeURIComponent(obj.options[j].value) + "&";
			}
		}
	}
	return poststr;
}

function LTrim(str) {
	var whitespace = new String(" \t\n\r");
	var s = new String(str);

	if(whitespace.indexOf(s.charAt(0)) != -1) {
      var j=0, i = s.length;
      while(j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;
      s = s.substring(j, i);
   }
   return s;
}

function RTrim(str) {
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if(whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      var i = s.length - 1;
      while(i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;
      s = s.substring(0, i+1);
   }
   return s;
}

function trim(str){
   return RTrim(LTrim(str));
}