// JavaScript Document
TabelaBancoDAO = {
	/**
	 * Usado para inserir ou atualizar informações de um formulario em uma tabela conforme a acao passada como parametro
	 * 
	 * @ jsonSetting.nomForm : nome do formulario que será buscado as informações
	 * @ jsonSetting.urlController : endereço do controlador, não é preciso passar, neste caso ele pega o default
	 * @ jsonSetting.desAcao : Acao do controlloers
	 * @ jsonSetting.funcBefore : função que será executada antes de enviar o ajax(chamar o arquivo)
	 * @ jsonSetting.funcAfterSuccess : função que será executada caso o insert dê certo
	 * @ jsonSettings.desRetornoSuccess : retorno para comparacao se foi retornado com sucesso ou não (default: 'success')
	 * @ jsonSetting.funcAfterError : função que será executada caso o insert dê erro
	 * @ jsonSettings.jsonVarsSubstitutoForm : Variaveis passadas manualmente no lugar de valores pegos automaticamente pelo form
	 */
	inserirOuAtualizar : function(jsonSettings){
		jsonSettings.funcBefore = Util.setValParam(jsonSettings.funcBefore,function(){});
		jsonSettings.funcAfterSuccess = Util.setValParam(jsonSettings.funcAfterSuccess,function(){});
		jsonSettings.desRetornoSuccess = Util.setValParam(jsonSettings.desRetornoSuccess,'success');
		jsonSettings.funcAfterError = Util.setValParam(jsonSettings.funcAfterError,function(){});
		$j.ajax({
			type: 'POST',
			url: jsonSettings.urlController,
			cache:false,
			dataType:'json',
			data: 'acao='+jsonSettings.desAcao+'&'+Util.createQueryStringVars(jsonSettings.nomForm,jsonSettings.jsonVarsSubstitutoForm),
			beforeSend: function(){
				jsonSettings.funcBefore();
			},
			success: function(json){ // txt => conteúdo trazido pela requisição
				if(json.indRetorno==jsonSettings.desRetornoSuccess){
					jsonSettings.funcAfterSuccess(json);
				}else{
					jsonSettings.funcAfterError(json);
				}
			}
		});
	},
	/**
	 * Usado para deletar um ou mais registro
	 * 
	 * @ jsonSettings.urlController : endereço do controlador, não é preciso passar, neste caso ele pega o default
	 * @ jsonSettings.desAcao : Acao do controlloers
	 * @ jsonSettings.cods : Codigos a ser excluidos
	 * @ jsonSettings.funcBefore : função que será executada antes de enviar o ajax(chamar o arquivo)
	 * @ jsonSettings.funcAfterSuccess : função que será executada caso o insert dê certo
	 * @ jsonSettings.funcAfterError : função que será executada caso o insert dê erro
	 * @ jsonSettings.desRetornoSuccess : retorno para comparacao se foi retornado com sucesso ou não (default: 'success')
	 * @ jsonSettings.nomVarCods : Nome da variavel no PHP que recebe os codigos pelo POST
	 */
	deletar : function(jsonSettings){ 
		jsonSettings.funcBefore = Util.setValParam(jsonSettings.funcBefore,function(){});
		jsonSettings.funcAfterSuccess = Util.setValParam(jsonSettings.funcAfterSuccess,function(){});
		jsonSettings.desRetornoSuccess = Util.setValParam(jsonSettings.desRetornoSuccess,'success');
		jsonSettings.funcAfterError = Util.setValParam(jsonSettings.funcAfterError,function(){});
		jsonSettings.nomVarCods = Util.setValParam(jsonSettings.nomVarCods,'cods');
		$j.ajax({
			type: 'POST',
			url: jsonSettings.urlController,
			cache:false,
			dataType:'json',
			data: 'acao='+jsonSettings.desAcao+'&'+jsonSettings.nomVarCods+'='+jsonSettings.cods+'&'+Util.createQueryStringVars(false,jsonSettings.jsonVarsSubstitutoForm),
			beforeSend: function(){
				if(Util.isSetVarParam(jsonSettings.funcBefore)) jsonSettings.funcBefore();
			},
			success: function(json){ //txt => conteúdo trazido pela requisição
				if(json.indRetorno==jsonSettings.desRetornoSuccess){
					jsonSettings.funcAfterSuccess(json);
				}else{
					jsonSettings.funcAfterError(json);
				}
			}
		});
	},
	/**
	 * @ jsonSetting.nomForm : nome do formulario que será buscado as informações
	 * @ jsonSetting.funcBefore : função que será executada antes de enviar o ajax(chamar o arquivo)
	 * @ jsonSetting.funcAfter : função que será executada após a requisicao voltar, trazendo todos os dados em json
	 * @ jsonSetting.urlController : endereço do controlador, não é preciso passar, neste caso ele pega o default
	 * @ jsonSetting.numPaginaAtual : Numero da pagina atual da paginacao
	 * @ jsonSetting.numQtdRegistroPorPagina : Quantidade de registros por pagina
	 * @ jsonSetting.desFuncOnclick : Funcao de javascript que lista
	 * @ jsonSetting.listadesLinkTemplate : Link do template da listagem
	 * @ jsonSetting.desAcao : acao no controlador responsavel pela busca
	 * @ jsonSetting.codNomVar : nom da variavel cod que recebe no PHP
	 */
	buscar : function(jsonSettings){
		jsonSettings.funcBefore = Util.setValParam(jsonSettings.funcBefore,function(){});
		jsonSettings.funcAfter = Util.setValParam(jsonSettings.funcAfter,function(){});
		$j.ajax({
			type: 'POST',
			url: jsonSettings.urlController,
			//cache:false,
			dataType:'json',
			data: 'acao='+jsonSettings.desAcao+'&'+jsonSettings.codNomVar+'='+jsonSettings.codVar+'&'+Util.createQueryStringVars(false,jsonSettings.jsonVarsSubstitutoForm),
			beforeSend: function(){
				if(jsonSettings.funcBefore!='' && jsonSettings.funcBefore!='null' && jsonSettings.funcBefore!='undefined') jsonSettings.funcBefore();
			},
			success: function(json){ // txt => conteúdo trazido pela requisição
				if(jsonSettings.funcAfter!='' && jsonSettings.funcAfter!='null' && jsonSettings.funcAfter!='undefined') jsonSettings.funcAfter(json);
			}
		});
	},
	/**
	 * @ jsonSetting.nomForm : nome do formulario que será buscado as informações
	 * @ jsonSetting.funcBefore : função que será executada antes de enviar o ajax(chamar o arquivo)
	 * @ jsonSetting.funcAfterSuccess : função que será executada caso o insert dê certo
	 * @ jsonSetting.funcAfterError : função que será executada caso o insert dê erro
	 * @ jsonSetting.urlController : endereço do controlador, não é preciso passar, neste caso ele pega o default
	 * @ jsonSetting.numPaginaAtual : Numero da pagina atual da paginacao
	 * @ jsonSetting.numQtdRegistroPorPagina : Quantidade de registros por pagina
	 * @ jsonSetting.desFuncOnclick : Funcao de javascript que lista
	 * @ jsonSetting.desLinkTemplate : Link do template da listagem
	 * @ jsonSetting.desAcao : Acao do controllers responsavel por listar
	 * @ jsonSetting.jsonVarsSubstitutoForm: Parammetro para passar variaveis
	 */
	listar : function(jsonSettings){
		jsonSettings.numPaginaAtual = Util.setValParam(jsonSettings.numPaginaAtual, 'null');
		jsonSettings.numQtdRegistroPorPagina = Util.setValParam(jsonSettings.numQtdRegistroPorPagina,'2');
		jsonSettings.funcBefore = Util.setValParam(jsonSettings.funcBefore,function(){});
		jsonSettings.funcAfter = Util.setValParam(jsonSettings.funcAfter,function(){});
		$j.ajax({
			type: 'POST',
			url: jsonSettings.urlController,
			//cache:false,
			dataType:'json',
			data: 'acao='+jsonSettings.desAcao+'&numPaginaAtual='+jsonSettings.numPaginaAtual+'&numQtdRegistroPorPagina='+jsonSettings.numQtdRegistroPorPagina+'&desFuncOnclick='+jsonSettings.desFuncOnclick+'&desLinkTemplate='+jsonSettings.desLinkTemplate+'&'+Util.createQueryStringVars(jsonSettings.nomForm,jsonSettings.jsonVarsSubstitutoForm),
			beforeSend: function(){
				if(jsonSettings.funcBefore!='' && jsonSettings.funcBefore!='null' && jsonSettings.funcBefore!='undefined') jsonSettings.funcBefore();
			},
			success: function(json){ // txt => conteúdo trazido pela requisição
				if(jsonSettings.funcAfter!='' && jsonSettings.funcAfter!='null' && jsonSettings.funcAfter!='undefined') jsonSettings.funcAfter(json);
			}
		});
	},
	/**
	 * jsonSettings.idSelect : ID do combo a ser preenchido
	 * jsonSettings.jsonDataVars : variaveis adicionais a ser enviadas para o PHP (controlador)
	 * jsonSettings.desAcao : Acao a ser enviado
	 * jsonSettings.urlController : endereço do controlador criado por vc. Ele deverá retornar um json assim: {jsonData:{{nom:'Uberlândia',cod:'1'},{nom:'São Paulo',cod:'2'},{nom:'Rio de Janeiro',cod:'3'}}}
	 * jsonSettings.desAcao : Acao esperada pelo controlador para esta ação
	 * jsonSettings.nomValorDefaultSelect : Valor default do combo, ou seja, o primeiro valor (false não será exibido nenhum valor default)
	 * jsonSettings.codFiltrar : Codigo usado para filtrar os valores do combo (Ex.: Cidades por estado, produtos por categoria)
	 * jsonSettings.indExigeCodFiltrar : Não será listado nada caso o jsonSettings.codFiltrar não seja passado
	 * jsonSettings.nomVarCodFiltrar : nome da variavel a ser filtrada (default: 'codFiltrar')
	 * jsonSettings.codSelecionar : Codigo que deverá vir selecionado do carregamento
	 * jsonSettings.funcBefore : funcao que sera executada antes do inicio do carregamento
	 * jsonSettings.funcAfter : funcao que sera executada depois que estiver completado o carregamento
	 */
	combo : function(jsonSettings){ 
		jsonSettings.idForm = Util.setValParam(jsonSettings.idForm,'');
		var idForm = (jsonSettings.idForm=='')  ?  ''  :  '#'+jsonSettings.idForm;
		jsonSettings.desAcao = Util.setValParam(jsonSettings.desAcao,'combo');
		jsonSettings.nomValorDefaultSelect = Util.setValParam(jsonSettings.nomValorDefaultSelect,' - Selecione - ');
		jsonSettings.indExigeCodFiltrar = Util.setValParam(jsonSettings.indExigeCodFiltrar,false);
		jsonSettings.nomVarCodFiltrar = Util.setValParam(jsonSettings.nomVarCodFiltrar,'codFiltrar');
		jsonSettings.codSelecionar = Util.setValParam(jsonSettings.codSelecionar,0);
		jsonSettings.funcBefore = Util.setValParam(jsonSettings.funcBefore,function(){});
		jsonSettings.funcAfter = Util.setValParam(jsonSettings.funcAfter,function(){});
		$j(idForm+' select[id='+jsonSettings.idSelect+']').html('').append("<option value=''>Aguarde, carregando...</option>");
		var jsonDataVars = jsonSettings.jsonDataVars;
		var arrQueryStringVars=[];
		if( (jsonSettings.indExigeCodFiltrar==false && jsonSettings.codFiltrar=='') || ( jsonSettings.indExigeCodFiltrar==true && (Util.isSetVarParam(jsonSettings.codFiltrar)) )  ){
			arrQueryStringVars.push(  jsonSettings.nomVarCodFiltrar+"="+jsonSettings.codFiltrar  );
		}
		if( arrQueryStringVars.length>0 ) strQueryStringVars="&"+arrQueryStringVars.join('&'); else strQueryStringVars='';
		$j.ajax({
			type: 'POST',
			url: jsonSettings.urlController,
			cache:false,
			dataType:'json',
			data: 'acao='+jsonSettings.desAcao+'&'+Util.createQueryStringVars(false,jsonSettings.jsonDataVars)+strQueryStringVars,
			beforeSend: function(){
				jsonSettings.funcBefore();
			},
			success: function(jsonRetorno){ // txt => conteúdo trazido pela requisição
				if(jsonSettings.nomValorDefaultSelect!==false) $j(idForm+' select[id='+jsonSettings.idSelect+']').html('').append("<option selected='selected' value=''>"+jsonSettings.nomValorDefaultSelect+"</option>");
				jsonDataRetorno = jsonRetorno.jsonData;
				var arrValues=[];
				i=1;
				for (var jsonDataRetornoKey in jsonDataRetorno){ // CORRESPONDENTE AO FOREACH DO PHP
					if(jsonDataRetorno[jsonDataRetornoKey].cod==jsonSettings.codSelecionar) var indSelected="selected='selected'";
					else var indSelected="";
					$j(idForm+' select[id='+jsonSettings.idSelect+']').append("<option "+indSelected+" value='"+jsonDataRetorno[jsonDataRetornoKey].cod+"'>"+jsonDataRetorno[jsonDataRetornoKey].nom +"</option>");
					i++;
				}
				jsonSettings.funcAfter(jsonRetorno);
			}
		});
	}
}
