// JavaScript Document
var erros = [];
/**
 * Envia um formulario (acao de submit).
 * Usado na parte de administracao, uma vez que sempre tenho que mandar
 * uma variavel chamada "acao". 
 * 
 * @param string a nome da acao a ser enviada
 * @param string f ID do formulario a ser enviado
 * @return void
 */
function doAc(a,f){
	if(!f){
		f = '#form1';
	}
	if($('#acao').length == 0){
		$(f).append('<input type="hidden" name="acao" id="acao" />');
	}
	
	$('#acao').val(a);
	$(f).submit();
}

/**
 * Efetua uma consulta de CEP
 * @param string url endereco do servidor de consulta
 * @param string cep CEP a ser consultado
 * @return void
 */
function consultaCEP(url, cep) {
	
	$.post(url, {cep: cep}, function(json){
		if(json.erro_descricao == ''){
			for(var i in json){
				if(i=='uf'){
					$('#estado').val(json[i]);
				} else if(i=='cep'){
					continue;
				} else {
					$('#'+i).val(json[i]);
				}
			}
		} 
	}, 'json');
}

/**
 * Exibe os erros de formulario
 * @return
 */
function showErrors(){
	// exibe os erros dos forms
	if(erros.length){
		$('.inputError').removeClass('inputError');		
		$('div[id$="_error"]').remove();
		
		for(var i=0; i<erros.length; i++){
			$('#' + erros[i].campo).addClass('inputError').blur(function() {
				$(this).removeClass('inputError');
				$('#' + this.id + '_error').fadeOut(300, function() {
					$(this).remove();
				});
			});
			
			var p =$('#' + erros[i].campo).offset();
			if($('#'+erros[i].campo+'_error').length == 0){
				$('#' + erros[i].campo).parent().append('<div id="' + erros[i].campo + '_error" class="alertaError">'+erros[i].msg+'<'+'/div>');
			}
		
			var e = $('#' + erros[i].campo);
			var o = $('#' + erros[i].campo + '_error');
			$(o).css('position','absolute')
				.css('left', p.left + e.width() + 3)
				.css('top', p.top);
		}
		erros = [];
	}
}

/**
 * Exibe uma confirmacao nos links de remover, dentro do gerenciador
 * @param string url Endereco a ser chamado caso o usuario confirme
 * @return void
 */
function confirmaRemocao(url){
	if(confirm('Deseja realmente remover este registro?')){
		location.href = url;
	}
}

/**
 * Chama os filtros dentro do gerenciador
 * @return void
 */
function buscarUsuarios(){
	$('#form1')[0].method = 'GET';
	$('#form1').submit();
}

/**
 * Altera a selecao em checkboxes com a classe "checkboxOptions"
 * @return void
 */
function checaTodos(){
	$.each($('.checkboxOptions'), function() {
		this.checked = !this.checked;
	});
}

/**
 * Exibe a janela de consulta de usuarios
 * @param object objRef Objeto de referencia para posicionamento da janela
 * @return
 */
function buscarPessoas(objRef) {
	var offset = $(objRef).offset();
	var divPesquisa = $('#divPesquisa');
	
	divPesquisa.css('top', offset.top)
		.css('left',offset.left + $(objRef).width())
		.show('fast');
	
	function checa(e) {
		var el = e.target;
		var d = divPesquisa[0];
		
		while( true ) {
			if( el == d ) {
				return true;
			} else if( el == document ) {
				$(document).unbind('mousedown', checa);
				divPesquisa.hide('fast');
				return true;
			} else {
				el = $(el).parent()[0];
			}
		}
	}
	
	$(document).bind('mousedown', checa);

}

/**
 * Efetua a consulta de usuarios
 * @param string    str  String de consulta
 * @param Function  cb   Funcao de retorno
 * @return
 */
function pesquisarUsuarios(str, cb) {
	var divResult = $('#resultadosPesquisa');
	var url = window.location.href.split('#')[0].split('?')[0];
	divResult.html('');
	
	$.post(url, {acao: 'buscarUsuarios', nome: str}, function(json) {
		if(json) {
			$.each(json, function() {
				var rid = 'item'+Math.ceil(Math.random()*(new Date().getTime()));
				divResult.append('<div id="'+rid+'"></div>');
				
				var item = this;
				$('#'+rid).html(this.nome)
					.css('cursor','pointer')
					.mouseover(function(){
						$(this).css('font-weight','bold')
					})
					.mouseout(function(){
						$(this).css('font-weight','normal')
					})
					.click(function() {
						if(cb) {
							cb.apply($(this), [item]);
						}
					});
			});
		}
	},'json');
}

/**
 * Callback para quando clicar em um item dos resultados de "pesquisarUsuarios"
 * @param Object obj Objeto de referncia contendo os dados de usuario
 * @return
 */
function setaUsuario(obj) {
	$('#idPessoa').val(obj.idPessoa);
}

/**
 * Preenche a combo de capitulos conforme o curso selecionado
 * @return void
 */
function carregaCapitulos(){
	var obj = $('#idCapitulo');
	var curso = $('#idCurso').val();
	var url = window.location.href.split('#')[0].split('?')[0];
	
	obj.find('option').remove();
	$.post(url, {acao: 'capitulos', curso: curso}, function(json) {
		$.each(json, function(){
			obj.append('<option value="'+this.idCapitulo+'"' +(this.idCapitulo==numCapitulo ? ' selected="selected"' : '') + '>'+this.capituloNumero + ' - ' + this.titulo+'</option>');
		});
	},'json');
}

/**
 * coloca todas as letras em maisculuas
 * @param Object obj
 * @return void
 */
function allCaps(obj) {
	var str = $(obj).val();
	str = str.replace(/\s+/g,'_').toUpperCase();
	$(obj).val(str);
}

function indicar(){
	var div = $('#divIndique');
	var url = BASEURL + 'indicar.php';
	
	if( div.length == 0 ){
		div = $('<div id="divIndique"></div>').appendTo(document.body);
	}
	
	$.post(url, '', function(html){
		div.html( html );
		div.find('.btnEnviar').click(function(){
			var data = div.find('form').serialize();
			data += '&acao=enviar';
			data += '&endereco='+escape(location.href);
			
			$.post(url, data, function(html){
				if( html == 'ok' ){
					alert('Mensagem enviada com sucesso');
					div.dialog("close");
				} else {
					alert(html);
				}
			});
			
		});
		
		div.dialog({
			autoOpen: false,
			width: 490,
			modal: true,
			title: 'Indique para um amigo'
		}).dialog('open');
		
	});
}

// chamado quando o documento estiver pronto para o DOM
$(document).ready( function() {
	$('#btGravar').click(function() {
		doAc('gravar');
	});
	$('#btCancelar').click(function() {
		location.href = '?';
	});
	
	$('#btAdicionar').click(function() {
		$('#formulario').show('fast');
		$(this).fadeOut('fast');
	});
	
	$('#tabela_lista').tableDnD({
		onDrop: function(){
			location.href = '?acao=ordenar&' + ($.tableDnD.serialize());
		}
	});
	
	// lista de mascaras dos campos ( I Love JQuery! )
	$('.cep').mask('99999-999');
	$(".real").maskMoney({symbol:"R$",decimal:",",thousands:"."})
	$('.telefone').mask('(99)9999-9999');
	$('.data').datePicker({startDate: '01/01/1900'}).mask('99/99/9999');
	$('.allCaps').blur(function() {
		allCaps(this);
	});
	
	// esconde a div de pesquisa
	$('#divPesquisa').css('display','none');
	
	setTimeout(function() {
		$('.sucesso').slideUp('fast');
	}, 2000);
	
	showErrors();
});
