
//_# ATIVA 	A FUNÇÃO validacao()
$(document).ready(function(){
	$("form").submit(function(){
		return validacao(this);
	});
});
//_#

//_# FUNÇÃO USADA PRA VALIDAR TODOS OS FORMULÁRIOS DO PAINEL QUE UTILIZAM O ID #formCadastro
function validacao(obj){
	//_# Define veriáveis
	var tipo,valido,classes,arrClasses,classe,temClasse,corretamente;
	tipo = ''; valido = ''; classes = ''; arrClasses = Array(); classe = ''; temClasse = ''; corretamente = '';
	//_#
	
	
	//_# Percorre todos os elementos que contém a classe .obg
	$(obj).find(".obg.visivel").each(function(){

		uploadField	= $(this).attr('class').indexOf("uploadField") > -1 ? true : false;
		//_# Pega o nome da tag do elemento para sabermos o que validar nele
		tipo = $(this).attr('tagName').toLowerCase();
		//_#
		
		//_# Se for TEXTAREA ou INPUT. Casos: ckFinder (input hidden), ckEditor (textarea), campos de texto em geral, data, hora
		if (tipo == 'textarea' || (tipo == 'input' && uploadField == false)){
			//_# Pega o atributo class do elemento, da um split(" ") pra pegarmos em um array todas as classes daquele objeto
			classes = $(this).attr('class');
			arrClasses = classes.split(" ");
			//_#
			//_# Percorremos por todas as classes do objeto a procura de alguma classe chave, q vai definir q tipo de validação será feita
			for (i in arrClasses){
				classe = arrClasses[i];
				temClasse = false;
				//_# Se contém a classe .email , o tipo de validação é se é um email valido: checkMail()
				if (classe == 'email'){
					temClasse = true;
					if (!checkMail( $(this).val() )){
						valido = false;
						corretamente = 'corretamente';
						break; //_o comando break é utilizado para sair imediatamente do loop for ()
					}else{
						valido = true;
					}
				//_#
				}
			}
			//_#
			
			//_# Se temClasse é false, significa que o elemento não contém nenhuma das classes chaves, portanto a validação é se o value nao é vazio
			if (!temClasse){
				if ( $(this).val() == '' ){
					valido = false;
				}else if ( $(this).val() == $(this).attr('defaultValue') ){
					valido = false;
				}else{
					valido = true;
				}
			}
			//_#
			
			return f_valido('Favor preencher o campo %field '+corretamente,valido,$(this));
			//_fim das validações de TEXTAREA e INPUT, se tiver algo pra alertar, estará na variavel valido
		}
		//_#
		
		//_# Se for SELECT :: listbox,combobox
		else if ( tipo == 'select' ){
			attrSize = $(this).attr('size');
			attrMultiple = $(this).attr('multiple');
			
			//_# Se tiver atributo size ou multiple , então é um listbox
			value = $(this).val();
			if (attrSize || attrMultiple){
				selectedIndex = $(this).attr('selectedIndex');
				if (selectedIndex == '-1'){
					valido = false;
				}else{
					valido = true;
				}
			}else{
				if (value == '0'){
					valido = false;
				}else{
					valido = true;
				}
			}
			return f_valido('Favor selecionar uma opção no campo %field',valido,$(this));
		}
		//_#
	});
	//_#

	if (valido == true){
		//_# Percorre todos os elementos que contém a classe .obgUploadify :: UPLOADIFY!!!
		$(".obgUploadify.visivel").each(function(){
			//_# Se contém a classe .uploadify , o tipo de validação é se a fila de arquivos é maior que zero ou se está num editar (Se ja tem video)
			queue = $(this).uploadifySettings('queueSize');
			editar = $(this).parent().children(".flvPreview,.mp3Preview,.file").length;
			
			galeria = $("#fotosGalery ul").length;
			
			//_# Se não for uma galeria de fotos, ou seja se for um uploadify qualquer
			if (galeria == '0'){
				if (queue == '0' && editar == '0'){
					valido = false;
				}else{
					valido = true;
				}
			//_# Se for uma galeria de fotos
			}else{
				var result = $("#fotosGalery ul").sortable('toArray');
				$("#ordem").val(result);
				if (result == 0 && queue == '0'){
					valido = false;
				}else{
					valido = true;
				}
			}
			//_#
			return f_valido('Favor selecionar um arquivo no campo %field',valido,$(this));
		});
		//_#
	}
	
	if (valido == true){
		//_# Percorre todos os elementos que contém a classe .uploadField :: UPLOAD NORMAL!!!
		$(".uploadField.visivel").each(function(){
			//_# 
			editar = $(this).parent().parent().children(".flvPreview,.preview,.file").length;
			if (editar == '0' && $(this).val() == '' ){
				valido = false;
			}else{
				valido = true;
			}
			//_#
			return f_valido('Favor selecionar um arquivo no campo %field',valido,$(this));
		});
		//_#
	}
	
	if (valido){
		enviaUploadify();
		return false;
	}
	return valido;
}
//_#

//_# FUNÇÃO UTILIZADA PRA ENVIAR OS UPLOADIFY'S QUE TIVEREM COM A FILA MAIOR QUE ZERO
function enviaUploadify(){
	//_# Define variavel :: Se não tiver nenhum uploadify, por padrão ela será 0 então passará na verificação do final
	var queue = 0;
	//_#
	
	//_# Varre os objetos da classe .uploadify coletando a fila (queue) :: caso ache alguma fila maior que zero , ele para o loop e manda fazer upload
	$(".obgUploadify.visivel").each(function(){
		queue = parseInt($(this).uploadifySettings('queueSize'));
		if (queue > 0){
			$(this).uploadifyUpload();
			return false;
		}
	});
	//_#
	
	//_# Se no final das contas a fila (queue) for igual a 0 , então o formulário pode ser enviado
	if (queue == 0){
		//black_loading();
		document.getElementById('formCadastro').submit();
	}
	//_#
}
//_#

//_# FUNÇÃO UTILIZADA PARA RETORNAR UM NOME 'AMIGÁVEL' USANDO COMO PARÂMETRO O PRÓPRIO OBJETO (JQUERY) DO EMENETO
function pegaNome(obj){
	//_# Pega o texto do atributo nome criado pelo desenvolvedor
	nome = $(obj).attr('nome');
	//_#
	
	//_# Se o atributo for vazio, não-definido, pega o ID do elemento
	if ( !nome ){
		nome = $(obj).attr('id');
		//_# Faz replace em algumas palavras conhecidas
		nome = nome.replace('keywords','Palavras-Chave');
		//_#
		
		//_# Verifica se existe algum texto label seguinto a estrutura: <tr><td>Label</td><td>field</td>n(<td>...</td>)</tr>
		label = $(obj).parent().parent().children('td').eq(0).text();
		//_#
		//_# Se existe ele já pega esse texto e da uns replaces pra ficar correto e usa ele como retorno , caso contrario ele segue com uma das opções acima
		if (label != ''){
			label = label.replace(":","");
			label = label.replace("*","");
			nome = label;
		}
		//_#
	}
	//_#
	
	nome = nome.replace("\n","");
	nome = Trim(nome);
	nome = nome.replace("\r","");
	return nome;
}
//_#


function f_valido(txt,valido,obj){
	//_# Se valido == false , então o elemento não passou na validação , da o alert e para o loop each() pelo comando return false;
	if (valido == false){
		//_# Pega o nome do campo a ser mostrado no alert
		var nome = pegaNome( obj );
		//_#
		//alert("Favor preencher o campo " + nome );
		alert( txt.replace('%field',nome) );
		obj.focus();
	}
	
	return valido;
	//_#
};
