/**
 * JS Document.
 * @author Sandro Jordão.
 */
function incluir()
{
	window.location.href = basepath + 'cadastros/cadtabelas';
}

function alterar()
{
	var tabela = $('#gridTabelas').jqGrid('getGridParam','selrow');

    if(tabela) {
		window.location.href = basepath + 'cadastros/alterarTabela/' + tabela;
	} else {
		jAlert('Selecionar um registro para alteração!', 'Alerta!', function() { return false; });
	}
}

function excluir()
{
	var tabela = $('#gridTabelas').jqGrid('getGridParam','selrow');

    if(tabela)
	{
		$.post(basepath + 'principal/verificarLogado',
			function(logado) {
				if(logado == 0)
				{
					//
					jConfirm("Deseja realmente excluir o registro da tabela?", 'Confirmação!',
						function(r) {
							if (r == true)
							{
								$.post(basepath + "cadastros/excluirTabela", {
									tabela : tabela
								}, function(data){
									if(data == 1) {
										$("#gridTabelas").trigger("reloadGrid");
										jAlert('Tabela excluída com sucesso!', 'Alerta!');
									} else if(data == 2) {
										jAlert('Não foi possível excluir a tabela!', 'Alerta!');
									} else {
										jAlert('Ocorreu um erro:\n ' + data, 'Alerta de erro!');
									}
								});
							}
							else
							{
								return false;
							}
						});
						//
				}
				else
				{
					window.location.href = basepath + 'principal/' + logado;
				}
			});
	}
    else
	{
		jAlert('Selecionar um registro para exclusão!', 'Alerta!', function() { return false; });
	}
}

function alterarBD()
{
	$.post(basepath + 'principal/verificarLogado',
		function(logado) {
			if(logado == 0)
			{
				//
				var tabelaid  = $("#tabelaid").val();
				var banco 	  = $("#banco").val();
				var tabela 	  = $("#tabela").val();
				var nome 	  = $("#nome").val();
				var descricao = $("#descricao").val();

				var contador = 0;
				var campos = new Array();
				var valor = new Array();
				var descColuna = new Array();
				var permitir = new Array();
				var campoSelecao = new Array();
				$(".checkCampo:checked").each(function(){
					campos.push($(this).val());

					valor.push($("#input_" + $(this).val()).val());
					
					descColuna.push($("#inputDesc_" + $(this).val()).val());

					var p = $("#permitir_" + $(this).val()).is(':checked') ? 'S' : 'N';
					permitir.push(p);

					var m = $("#multiselect_" + $(this).val()).is(':checked') ? 'S' : 'N';
					campoSelecao.push(m);

					contador++;
				});

				var	bancoDados = new Array();
				$("input[name='bancoDados']").each(function(){ bancoDados.push($(this).val()); });
				var	tabelaPai = new Array();
				$("input[name='tabelaPai']").each(function(){ tabelaPai.push($(this).val()); });
				var	campoPai = new Array();
				$("input[name='campoPai']").each(function(){ campoPai.push($(this).val()); });
				var	tabelaFilho = new Array();
				$("input[name='tabelaFilho']").each(function(){ tabelaFilho.push($(this).val()); });
				var	campoFilho = new Array();
				$("input[name='campoFilho']").each(function(){ campoFilho.push($(this).val()); });

				var erro = 0;
				var msg = '';
				$('.msgErro').remove();

				if(nome == '')
				{
					$('#nome').after("<span class='msgErro'> Campo de preenchimento obrigatório. </span>");
					msg += '- O campo <em>Nome amigável da Tabela</em> é preenchimento obrigatório. <br/><br/>';
					erro++;
				}

				if(contador == 0)
				{
					$('#listaCampos').after("<span class='msgErro'> Necessário a escolha de pelo menos um campo. </span>");
					msg += '- Necessário a escolha de pelo menos um campo da tabela.';
					erro++;
				}

				if (erro == 0)
				{
					$("#btnVoltar").before('<span class="imgLoading"><img src="' + basepath + 'www/imagem/loadingModal.gif" align="absmiddle" /> Gravando dados, por favor aguarde...</span>');

					$.post(basepath + "cadastros/alterarTabelaBD", {
						tabelaid   		 : tabelaid,
						banco 	   		 : banco,
						tabela 	   		 : tabela,
						nome 	   		 : nome,
						descricao  		 : descricao,
						'campos[]' 		 : campos,
						'valor[]'  		 : valor,
						'descColuna[]'	 : descColuna,
						'permitir[]'  	 : permitir,
						'campoSelecao[]' : campoSelecao,
						'bancoDados[]'   : bancoDados,
						'tabelaPai[]'    : tabelaPai,
						'campoPai[]'  	 : campoPai,
						'tabelaFilho[]'  : tabelaFilho,
						'campoFilho[]'   : campoFilho
					}, function(data) {
						$(".imgLoading").remove();

						if(data == 1) {
							jAlert('Alterado com sucesso!', 'Alerta!', function() { window.location.href = basepath + 'cadastros/tabela'; });
						} else {
							jAlert('Ocorreu um erro:\n ' + data, 'Alerta!', function() { return false; });
						}
					});
				}
				else
				{
					jAlert(msg, 'Alerta!', function() { return false; });
				}
				//
			}
			else
			{
				window.location.href = basepath + 'principal/' + logado;
			}
		});
}

function gravar()
{
	$.post(basepath + 'principal/verificarLogado',
		function(logado) {
			if(logado == 0)
			{
				//
				var banco 	  = $("#banco").val();
				var tabela 	  = $("#tabela").val();
				var nome 	  = $("#nome").val();
				var descricao = $("#descricao").val();

				var contador = 0;
				var campos = new Array();
				var valor = new Array();
				var descColuna = new Array();
				var permitir = new Array();
				var campoSelecao = new Array();
				$(".checkCampo:checked").each(function(){
					campos.push($(this).val());

					valor.push($("#input_" + $(this).val()).val());
					
					descColuna.push($("#inputDesc_" + $(this).val()).val());

					var p = $("#permitir_" + $(this).val()).is(':checked') ? 'S' : 'N';
					permitir.push(p);

					var m = $("#multiselect_" + $(this).val()).is(':checked') ? 'S' : 'N';
					campoSelecao.push(m);

					contador++;
				});

				var	bancoDados = new Array();
				$("input[name='bancoDados']").each(function(){ bancoDados.push($(this).val()); });
				var	tabelaPai = new Array();
				$("input[name='tabelaPai']").each(function(){ tabelaPai.push($(this).val()); });
				var	campoPai = new Array();
				$("input[name='campoPai']").each(function(){ campoPai.push($(this).val()); });
				var	tabelaFilho = new Array();
				$("input[name='tabelaFilho']").each(function(){ tabelaFilho.push($(this).val()); });
				var	campoFilho = new Array();
				$("input[name='campoFilho']").each(function(){ campoFilho.push($(this).val()); });

				var erro = 0;
				var msg = '';
				$('.msgErro').remove();

				if(banco == '')
				{
					$('#banco').after("<span class='msgErro'> Por favor, escolha um banco de dados. </span>").slideDown('fast');
					msg += 'Por favor, escolha um banco de dados.';
					erro++;
				}
				else
				{
					if(tabela == '')
					{
						$('#tabela').after("<span class='msgErro'> Por favor, escolha um tabela. </span>");
						msg += 'Por favor, escolha um tabela.';
						erro++;
					}
					else
					{
						if(nome == '')
						{
							$('#nome').after("<span class='msgErro'> Campo de preenchimento obrigatório. </span>");
							msg += '- O campo <em>Nome amigável da Tabela</em> é preenchimento obrigatório. <br/><br/>';
							erro++;
						}

						if(contador == 0)
						{
							$('#listaCampos').after("<span class='msgErro'> Necessário a escolha de pelo menos um campo. </span>");
							msg += '- Necessário a escolha de pelo menos um campo da tabela.';
							erro++;
						}
					}
				}

				if (erro == 0)
				{
					$("#btnVoltar").before('<span class="imgLoading"><img src="' + basepath + 'www/imagem/loadingModal.gif" align="absmiddle" /> Gravando dados, por favor aguarde...</span>');

					$.post(basepath + "cadastros/verificarNomeAmigavel", {
						nome : nome
					}, function(data) {
						$(".imgLoading").remove();

						if(data == 1) {
							jConfirm("Há uma ou mais tabelas com o nome amigável <u>" + nome + "</u>.<br /><br />Deseja dar prosseguimento ao cadastro da tabela assim mesmo?", 'Confirmação!',
							function(r) {
								if (r == true)
								{
									$.post(basepath + "cadastros/gravaTabela", {
										banco 	   		 : banco,
										tabela 	   		 : tabela,
										nome 	   		 : nome,
										descricao  		 : descricao,
										'campos[]' 		 : campos,
										'valor[]'  		 : valor,
										'descColuna[]'	 : descColuna,
										'permitir[]'  	 : permitir,
										'campoSelecao[]' : campoSelecao,
										'bancoDados[]'   : bancoDados,
										'tabelaPai[]'    : tabelaPai,
										'campoPai[]'  	 : campoPai,
										'tabelaFilho[]'  : tabelaFilho,
										'campoFilho[]'   : campoFilho
									}, function(data) {
										$(".imgLoading").remove();

										if(data == 1) {
											jAlert('Tabela cadastrada com sucesso!', 'Alerta!', function() { window.location.href = basepath + 'cadastros/tabela'; });
										} else {
											jAlert('Ocorreu um erro:\n ' + data, 'Alerta!', function() { return false; });
										}
									});
								}
								else
								{
									return false;
								}
							});
						}
						else
						{
							$.post(basepath + "cadastros/gravaTabela", {
								banco 	   		 : banco,
								tabela 	   		 : tabela,
								nome 	   		 : nome,
								descricao  		 : descricao,
								'campos[]' 		 : campos,
								'valor[]'  		 : valor,
								'descColuna[]'	 : descColuna,
								'permitir[]'  	 : permitir,
								'campoSelecao[]' : campoSelecao,
								'bancoDados[]'   : bancoDados,
								'tabelaPai[]'    : tabelaPai,
								'campoPai[]'  	 : campoPai,
								'tabelaFilho[]'  : tabelaFilho,
								'campoFilho[]'   : campoFilho
							}, function(data) {
								$(".imgLoading").remove();

								if(data == 1) {
									jAlert('Tabela cadastrada com sucesso!', 'Alerta!', function() { window.location.href = basepath + 'cadastros/tabela'; });
								} else {
									jAlert('Ocorreu um erro:\n ' + data, 'Alerta!', function() { return false; });
								}
							});
						}
					});

				}
				else
				{
					jAlert(msg, 'Alerta!', function() { return false; });
				}
				//
			}
			else
			{
				window.location.href = basepath + 'principal/' + logado;
			}
		});
}

function fechar()
{
    $("#janela_modal").fadeOut();
    $("#overlay").fadeOut();
}

function addVinculo(campo)
{
	var pageWidth = $(document).width();
	var pageHeight = $(document).height();

	var banco = $("#banco").val();
	var tabela = $("#tabela").val();

	$.post(basepath + "cadastros/buscaVinculo", {
		banco : banco,
		tabela : tabela,
		campo : campo
	}, function(data) {

		$("#janela_modal").html('');
		$("#overlay").html('');

		var tamanhoY = $(window).height();
		var metadeY = $(window).height() / 2;
		var vJanela = $("#div_" + campo).offset().top;
		var topJanela = (vJanela > tamanhoY) ? vJanela : metadeY;

		var overlay = '<div id="overlay"></div>';
		var overlayCSS = {'width' : pageWidth + 'px' , 'height' : pageHeight + 'px'};

		var janela = '<div id="janela_modal"></div>';
		var janelaCSS = {'top' : topJanela + 'px' , 'left' : '50%' , 'width' : '500px' , 'height' : '250px' , 'margin-left' : '-250px' , 'margin-top' : '-175px'};

		var btnFechar = '<a onClick="fechar()"><img id="btnFechar" src="' + basepath + 'www/imagem/close.png" alt="Fechar" title="Fechar" /></a>';
		var btnFecharCSS = {'position' : 'absolute','top' : '50%','left' : '50%','cursor' : 'pointer','margin-left' : '225px','margin-top' : '-132px'}

		var btnCancelar = '<input type="image" id="btn_cancelar" name="btn_cancelar" src="' + basepath + 'www/imagem/btn_cancelar.png" onClick="fechar()" />';
		var btnCancelaCSS = {'position' : 'absolute','top' : '100%','left' : '100%','margin-left' : '-115px','margin-top' : '-40px','width' : '100px'}

		var btnOK = '<input type="image" id="btn_enviar" name="btn_enviar" src="' + basepath + 'www/imagem/btn_confirmar.png" onClick="mostrarVinculo(\''+ campo +'\')" />';
		var btnOKCSS = {'position' : 'absolute','top' : '100%','left' : '0%','margin-left' : '300px','margin-top' : '-40px','width' : '100px'}

		$("body").append(overlay);
		$("body").append(janela);
		$("#overlay").css(overlayCSS).fadeIn('fast', function(){

			$("#janela_modal").append(data);

			$("#janela_modal").append(btnFechar);
			$("#btnFechar").css(btnFecharCSS).fadeIn("slow");

			$("#janela_modal").append(btnCancelar);
			$("#btn_cancelar").css(btnCancelaCSS);

			$("#janela_modal").append(btnOK);
			$("#btn_enviar").css(btnOKCSS);

			$("#janela_modal").css(janelaCSS).fadeIn("slow");
		});

	});
}

function mostrarVinculo(campo)
{
	var banco = $("#banco").val();
	var tabela = $("#tabela").val();

	var tabelaVinculo = $("#tabelaVinculo").val();
	var campoVinculo = $("#camposVinculo").val();

	$('.msgErro').remove();

	if(tabelaVinculo == '')
	{
		$("#tabelaVinculo").after("<span class='msgErro'> Por favor, escolha um tabela. </span>").slideDown('fast');

		return false;
	}
	else
	{
		$.post(basepath + "cadastros/mostrarVinculo", {
			banco : banco,
			tabela : tabela,
			campo : campo,
			tabelaVinculo : tabelaVinculo,
			campoVinculo : campoVinculo
		}, function(data) {
			$("#jquerySpan_" + campo).append(data);

			$("#addSpan_" + campo).hide();

			fechar();
		});
	}
}

function mostraVinculo()
{
	var img = this.id;
	var campo = img.split("-");
	
	if( !$("#div_" + campo[1]).is(':visible') )
		$("#div_" + campo[1]).slideDown('fast');
	else
		$("#div_" + campo[1]).slideUp('fast');
}

function removeVinculo(id, campo)
{
	$("#" + id).remove();

	$("#addSpan_" + campo).show();

	return false;
}

function checkCampos()
{
	var checked = $("#selectAll").is(':checked');

	$(".checkCampo").attr('checked', checked);

	if(checked)
	{
		$(".inputCamposTabela").removeAttr('disabled');

		$(".checkCampoPermitir, .checkCampoMultiselect").removeAttr('disabled');

		$(".checkCampo").each(function(){
			var campo = $(this).val();
			var valor = ConvertePalavarPrimeiraMaiscula(campo);
			$("#input_" + campo).val(valor);
		});
	}
	else
	{
		$(".checkCampoPermitir, .checkCampoMultiselect").removeAttr('checked');

		$(".inputCamposTabela").attr('disabled', true).val("");

		$(".checkCampoPermitir, .checkCampoMultiselect").attr('disabled', true);

		$(".checkCampo").each(function(){ $("#input_" + $(this).val()).val(''); });
	}
}

function ConvertePalavarPrimeiraMaiscula(campo)
{
  var palavras = campo.split("_");
  var retorno = "";

  for (var i=0; i<palavras.length; i++) {
    retorno = retorno + " " + palavras[i].charAt(0).toUpperCase() + palavras[i].substring(1).toLowerCase();
  }

  return retorno.trim();
}

function checkCampo()
{
	var campo = $(this).val();

	var valor = ConvertePalavarPrimeiraMaiscula(campo);

	$("#permitir_" + campo + ", #multiselect_" + campo).removeAttr('checked');

	if($(this).is(':checked'))
	{
		$("#input_" + campo).removeAttr('disabled').val(valor);

		$("#inputDesc_" + campo).removeAttr('disabled');
		
		$("#permitir_" + campo + ", #multiselect_" + campo).removeAttr('disabled');

		$("#img_" + campo).removeClass('imgOff').addClass('imgOn');
	}
	else
	{
		$("#input_" + campo).attr('disabled', true).val("");
		
		$("#inputDesc_" + campo).attr('disabled', true).val("");

		$("#permitir_" + campo + ", #multiselect_" + campo).attr('disabled', true);

		$("#img_" + campo).removeClass('imgOn').addClass('imgOff');
	}
}

function buscaTabelas()
{
	var banco = $("#banco").val();

	$('.msgErro').remove();

	if(banco)
	{
		$("#banco").after('<span class="imgLoading"><img src="' + basepath + 'www/imagem/loadingModal.gif" align="absmiddle" /></span>');

		$.post(basepath + "cadastros/buscaTabelas", {
			banco : banco
		}, function(data) {
			$("#tabela option").remove();

			if(data == 1) {
				$("#tabela").append('<option value=""> Nenhum registro encontrado! </option>');
			} else {
				$("#tabela").append(data);
				$("#tabela").removeAttr('disabled');
				$("#tabelaBusca").removeAttr('disabled');
			}

			$(".imgLoading").remove();
		});
	}
	else
	{
		return false;
	}
}

function buscaCampos()
{
	var banco = $("#banco").val();
	var tabela = $("#tabela").val();

	$('.msgErro').remove();

	if(tabela)
	{
		$("#tabela").after('<img class="imgLoading" src="' + basepath + 'www/imagem/loadingModal.gif" align="top" />');

		$.post(basepath + "cadastros/buscaCampos", {
			banco : banco,
			tabela : tabela
		}, function(data) {
			$("#nome, #descricao").removeAttr('disabled').val('');
			$("#listaCampos").removeClass('divOff');
			$("#listaCampos").html(data);
			$(".checkCampo").click(checkCampo);
			$('.opacityImg').click(mostraVinculo);
			$(".imgLoading").remove();
			
			$( "#sortable" ).sortable({ 
				placeholder: "sortableSombra"
			});
		});
	}
	else
	{
		return false;
	}
}

function buscaCamposVinculo()
{
	var banco = $("#banco").val();
	var tabela = $("#tabelaVinculo").val();

	if(tabela)
	{
		$.post(basepath + "cadastros/buscaCamposVinculo", {
			banco : banco,
			tabela : tabela
		}, function(data) {
			$("#camposVinculo option").remove();
			$("#camposVinculo").append(data);
			$("#camposVinculo").removeAttr('disabled');
		});
	}
	else
	{
		return false;
	}
}

function procurar()
{
	var valor = $("#tabelaBusca").val();
	valor = valor.toUpperCase();
	var valorvetor = valor.split(" ");
	var achou;
	var i;

	$("#tabela option").each(function(){
		var value = $(this).text();
		value = value.toUpperCase();
		achou = true;
		for(i = 0; i < valorvetor.length; i++)
		{
			var busca = value.indexOf(valorvetor[i]);
			achou = achou && (busca !== -1);
		}

		if(!achou) {
			$(this).hide();
			$(this).attr('disabled', true);
		} else {
			$(this).removeAttr('disabled');
			$(this).show();
		}
	});
}

function voltar()
{
	window.location.href = basepath + 'cadastros/tabela';
}

function init()
{
	$( "#sortable" ).sortable({ 
		placeholder: "sortableSombra"
	});

	$(".checkCampo").click(checkCampo);
	$('.opacityImg').click(mostraVinculo);

	var pathTabelas = basepath + "cadastros/tabela";
	$('#menuContentLeft a').each(function() {
		if(pathTabelas == $(this).attr("href")) {
			$(this).css({'color' : '#4084b8', 'font-weight' : 'bold', 'font-style' : 'italic'});
		}
	});
}

$(document).ready(init);