function CtrConfAlarmeEstoque() {

	var autoReferencia = this;
	this.setAutoReferencia(this);
	
	this.setId("CtrConfAlarmeEstoque");

	this.instanciarLimite = function() {
		return new LimConfAlarmeEstoque(this);
	}
	
	// VARIAVEIS GLOBAIS
	this.entConfAlarmeEstoque = null;
	
	this.inicializa = function() {
		var entConfAlarmeEstoque = new EntConfAlarmeEstoque();

		var deptoConfiguracoes = new DeptoConfiguracoes();
		deptoConfiguracoes.busca(entConfAlarmeEstoque, this.retornoBuscaAlarmes);	
	}
	
	// *** METODOS QUE SERAO ULTILIZADOS LOGO APOS ABRIR A INTERFACE ***
	
	//METODO RESPONSAVEL POR APRESENTAR AO USUARIO TODOS OS USUARIOS e produtos CADASTRADOS PARA RECEBER O ALARME
	this.retornoBuscaAlarmes = function(resposta) {
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			if (resposta.dados[0] != null) {
				var entConfAlarmeEstoqueConf = autoReferencia.montaEntConfAlarmeEstoque(resposta.dados[0]);
				autoReferencia.setEntConfAlarmeEstoque(entConfAlarmeEstoqueConf);
				autoReferencia.atualizaListagemProdutos();
				autoReferencia.atualizaListagemUsuarios();
			}
		}
	}
	
	//METODO QUE IRA MONTAR A ENTCONFALARMEESTOQUE VINDA DO SERVIDOR, RETORNANDO PARA O RETORNOBUSCA 
	this.montaEntConfAlarmeEstoque = function(dados) {
		var entConfAlarmeEstoque = new EntConfAlarmeEstoque();
		
		entConfAlarmeEstoque.setColaboradores(this.montaArrayColaboradores(dados.colaboradores));
		entConfAlarmeEstoque.setLimitesProdutos(this.montaLimitesProdutos(dados.limitesProdutos));
		
		return entConfAlarmeEstoque;
	}
	
	// RESPONSAVEL POR MONTAR O ARRAY DE COLABORADORES RESUMO
	this.montaArrayColaboradores = function(colaboradores) {
		var arrayColaboradores = new Array();
		
		if (colaboradores != null) {
			for(var i = 0; i < colaboradores.length; i++) {
				var entColaboradorResumo = this.montaColaborador(colaboradores[i]);
				
				arrayColaboradores.push(entColaboradorResumo);
			}
		}
		return arrayColaboradores;
	}
	
	//RESPONSAVEL POR MONTAR A ENTCOLABORADORRESUMO VINDA DO SERVIDOR
	this.montaColaborador = function(colaboradorResumo) {
		var entColaboradorResumo = new EntColaboradorResumo();
		
		entColaboradorResumo.setCodigo(colaboradorResumo.codigo);
		entColaboradorResumo.setNome(colaboradorResumo.nome);

		return entColaboradorResumo;
	}
	
	// RESPONSAVEL POR MONTAR O ARRAY DE LIMITES PRODUCAO
	this.montaLimitesProdutos = function(limitesProdutos) {
		var arrayLimitesProdutos = new Array();
		
		if (limitesProdutos != null) {
			for(var i = 0; i < limitesProdutos.length; i++) {
				var entLimiteProduto = this.montaEntLimiteProduto(limitesProdutos[i]);
			
				arrayLimitesProdutos.push(entLimiteProduto);
			}
		}
		return arrayLimitesProdutos;
	}
	
	// RESPONSAVEL POR MONTAR O OBJETO ENTLIMITEPRODUCAO
	this.montaEntLimiteProduto = function(limiteProduto) {
		var entLimiteProduto = new EntLimiteProduto();
		
		entLimiteProduto.setResumoProduto(this.montaResumoProduto(limiteProduto.resumoProduto));
		entLimiteProduto.setQuantidadeMinima(limiteProduto.quantidadeMinima);
	
		return entLimiteProduto;
	}
	
	// RESPONSAVEL POR MONTAR O OBJETO ENTREGISTROPRODUTO
	this.montaResumoProduto = function(resumoProduto) {
		var entRegistro = new EntRegistro();
		
		entRegistro.setCodigo(resumoProduto.codigo);
		entRegistro.setDescricao(resumoProduto.descricao);
		
		return entRegistro;
	}
	
	// *** FIM DOS METODOS ULTILIZADOS LOGO APOS ABRIR A INTERFACE ***
	
	//*** ABA PRODUTO ***
	
	// PESQUISA PRODUTO
	this.pesquisarProduto = function () { 
		this.setMetodoPesquisaProduto(this.pesquisaProduto);
		this.setMetodoRetornoProduto(this.buscaProdutoPorCodigo);
		this.pesquisarProdutos();
	}	

	this.pesquisaProduto = function(codigo, iniciais, ativo, fabricante, categoria, descender, regInicial, qtdeDeRegistros, metodoRetornoProduto) {
		DeptoEstoqueFacade.listarProdutos(codigo, iniciais, ativo, fabricante, categoria, descender, regInicial, qtdeDeRegistros, metodoRetornoProduto);
	}
  	
  	//METODO ONDE ATUALIZA E LISTA DE PRODUTOS
	this.metodoPesquisaCategorias = function(metodoRetornoCategorias) {
		this.getLimite().mostraImagemBarraCarregando("divPesquisaProdutosCategorias")
		DeptoEstoqueFacade.listarCategoriasDeProduto(metodoRetornoCategorias);
	}
	
	this.metodoRetornoCategorias = function(dados) {
		var xml = new Xml();
		xml.lerXml(dados);
		var mensagem = xml.getValorElemento("resposta");
		
		var objLimite = autoReferencia.getLimite();
		if(autoReferencia.trataMensagemRespostaServidor(mensagem.codErro, mensagem.mensagem, false)) {
			objLimite.imprimirListaCategorias(mensagem.dados);
		}
	}
  	
  	/***  BUSCAS RAPIDA PRODUTO (retorno ao final do script, junto aos pesquisas) ***/
	this.buscaRapidaProduto = function(campoAtual, proximoCampo) {
		var departamento = "DeptoEstoque()";
		var pesquisa = "Produto";
		var requisitante = "CtrConfAlarmeEstoque";
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
  	
  	//BUSCA PRODUTO POR CODIGO  
  	this.buscaProdutoPorCodigo = function(codigo) {
		DeptoEstoqueFacade.buscarProduto(codigo, this.retornoProduto);
	}
  	
  	this.retornoProduto = function(dados) {
		var xml = new Xml();
		xml.lerXml(dados);
		var mensagem = xml.getValorElemento("resposta");
		
		var objLimite = autoReferencia.getLimite();
		
		
		if (autoReferencia.trataMensagemRespostaServidor(mensagem.codErro, mensagem.mensagem, false)) {		
			if (mensagem.dados != undefined) {
				objLimite.setCampoCodigoProduto(mensagem.dados.Produto.codigo);
				objLimite.setCampoProduto(mensagem.dados.Produto.nome);
				objLimite.setDivUnidade(mensagem.dados.Produto.unidadeMedida.nome);
				objLimite.colocaMascara(mensagem.dados.Produto.unidadeMedida.simbolo);
				}
			else {
				objLimite.limpaProduto();
			}			
		}				
	} 
  	
  	// RESPONSAVEL POR PEGAR DA INTERFACE OS DADOS E ATRIBUIR A UM OBJETO ENTLIMTEPRODUTO
  	this.preencheEntLimiteProduto = function(){
  		var limite = this.getLimite();
		var numero = new Numero();
		
		var resumoProduto = new EntRegistro();
		resumoProduto.setCodigo(limite.getCampoCodigoProduto());
		resumoProduto.setDescricao(limite.getCampoProduto());
		
		var entLimiteProduto = new EntLimiteProduto();
		entLimiteProduto.setResumoProduto(resumoProduto);
		entLimiteProduto.setQuantidadeMinima(numero.formataNumeroParaServidor(limite.getCampoQuantidadeProduto()));
		
		return entLimiteProduto;
  	}
  	
  	// RESPONSAVEL POR ADICIONAR O OBJETO ENTLIMITEPRODUTO AO ARRAY DE CONFIGURAÇOES
  	this.adicionaLimitesProdutosAoArray = function(limitesProduto) {
  		if(this.checaRepeticaoProdutos(limitesProduto.getResumoProduto())){
	  		var entConfAlarmeEstoque = this.getEntConfAlarmeEstoque();
	  		entConfAlarmeEstoque.getLimitesProdutos().push(limitesProduto);
	  		
	  		this.setEntConfAlarmeEstoque(entConfAlarmeEstoque);
  		}
  	}
  	
  	this.checaRepeticaoProdutos = function(produto) {
		var arrayLimitesProdutos = this.getEntConfAlarmeEstoque().getLimitesProdutos();
		var retorno = true;
		
		for (var i = 0; i < arrayLimitesProdutos.length; i++) {
			if (arrayLimitesProdutos[i].getResumoProduto().getCodigo() == produto.getCodigo()) {
				retorno = false;
				break;
			}
		}
		
		return retorno;
	}
  	
  	// RESPONSAVEL POR ATUALIZAR A LISTAGEM DE PRODUTOS TANTO DO ADICIOANR PRODUTO QUANTO DO RETORNOBUSCAALARME
  	this.atualizaListagemProdutos = function() {
  		this.getLimite().setListagemProdutos(this.getEntConfAlarmeEstoque().getLimitesProdutos());
  	}
  	
  	// RESPONSAVEL POR ADICIONAR O PRODUTO 
	this.adicionaProduto = function() {
		var limite = this.getLimite();
		
		var entLimiteProduto = this.preencheEntLimiteProduto();
		this.adicionaLimitesProdutosAoArray(entLimiteProduto);
		
		limite.limpaProduto();
		this.atualizaListagemProdutos();
	}
	// RESPONSAVEL POR REMOVER UM PRODUTO
	this.removerProduto = function(posicao) {
		var arrayLimitesProdutos = this.getEntConfAlarmeEstoque().getLimitesProdutos();
		arrayLimitesProdutos.splice(posicao, 1);
	
		this.getLimite().setListagemProdutos(arrayLimitesProdutos);
	}
	
	//*** ABA USUARIO DEPARTAMENTO ***
	/***  BUSCAS RAPIDA Departamento (retorno ao final do script, junto aos pesquisas) ***/
	this.buscaRapidaDepartamento = function(campoAtual, proximoCampo) {
		var departamento = "DeptoOperacional()";
		var pesquisa = "Departamento";
		var requisitante = "CtrConfAlarmeEstoque";
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	/***  BUSCAS RAPIDA usuario (retorno ao final do script, junto aos pesquisas) ***/
	this.buscaRapidaUsuario = function(campoAtual, proximoCampo) {
		var departamento = "DeptoOperacional()";
		var pesquisa = "Usuario";
		var requisitante = "CtrConfAlarmeEstoque";
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	this.buscaDepartamento = function(codigo) {
		var entDepartamento = new EntDepartamento();
		entDepartamento.setCodigo(codigo);
		
		var deptoOperacional = new DeptoOperacional();
		deptoOperacional.busca(entDepartamento, this.retornoBuscaDepartamento);
	}
	
	
	this.retornoBuscaDepartamento = function(resposta) {
		var limite = autoReferencia.getLimite();
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			
			var entDepartamento = new EntDepartamento();		
			
			if (resposta.dados != undefined) {
				limite.setCampoCodigoDepartamento(resposta.dados[0].codigo);
				limite.setCampoDepartamento(resposta.dados[0].nome);
			} else {
				limite.limpaDepartamento();
			}
		}
	}	
	
	
	this.buscaUsuario = function(codigo) {
		var entUsuario = new EntUsuario();
		entUsuario.setCodigo(codigo);
		
		var deptoOperacional = new DeptoOperacional();
		deptoOperacional.busca(entUsuario, this.retornoBuscaUsuario);
	}
	
	this.retornoBuscaUsuario = function(resposta) {
		var limite = autoReferencia.getLimite();
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			
			var entUsuario = new EntUsuario();		
			
			if (resposta.dados != undefined) {
				limite.setCampoCodigoUsuario(resposta.dados[0].codigo);
				limite.setCampoUsuario(resposta.dados[0].nome);
			}
			else {
				limite.limpaUsuario();
			}
			
		}
	}
	
	this.pesquisaUsuario = function() {
		var ctrPesquisaSimples = aplicativo.getControlador("CtrPesquisaSimples");
		ctrPesquisaSimples.setDepto("DeptoOperacional()");
		ctrPesquisaSimples.setPesquisa("Usuario");
		ctrPesquisaSimples.setControladorRequisitante("CtrConfAlarmeEstoque");
		ctrPesquisaSimples.abrirJanela();	
	}
	
	this.pesquisaDepartamento = function() {
		var ctrPesquisaSimples = aplicativo.getControlador("CtrPesquisaSimples");
		ctrPesquisaSimples.setDepto("DeptoOperacional()");
		ctrPesquisaSimples.setPesquisa("Departamento");
		ctrPesquisaSimples.setControladorRequisitante("CtrConfAlarmeEstoque");
		ctrPesquisaSimples.abrirJanela();	
	}
	
	this.retornoPesquisas = function(codigo, descricao, pesquisa) {
		var limite = this.getLimite();
		
		if (pesquisa == "Usuario") {
			limite.setCampoCodigoUsuario(codigo);
			limite.setCampoUsuario(descricao);
			
		} else if (pesquisa == "Departamento") {
			limite.setCampoCodigoDepartamento(codigo);
			limite.setCampoDepartamento(descricao);
		} else if (pesquisa == "Produto") {
			autoReferencia.buscaProdutoPorCodigo(codigo);
		}		
		else {
			this.getLimite().mostrarMensagem("alerta", PESQUISA_NAO_RECONHECIDA);
		}
	}
	
	this.adicionaDepartamento = function() {
		var limite = this.getLimite();
		
		var entPesquisa = new EntPesquisa() ;
		entPesquisa.setCodigo(limite.getCampoCodigoDepartamento());
		entPesquisa.setPesquisa("UsuarioPorDepartamento");
		
		var deptoOperacional = new DeptoOperacional();
		deptoOperacional.pesquisa(entPesquisa, this.retornoAdicionaDepartamento);
		
		limite.limpaDepartamento();
	}
	
	this.retornoAdicionaDepartamento = function(resposta) {
		var limite = autoReferencia.getLimite();
		
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			if (resposta.dados[0].registros != null) {
				autoReferencia.adicionaUsuarios(resposta.dados[0].registros);
			}
		}
		
	}
	
	this.adicionaUsuarios = function(usuarios) {
		for (var i = 0; i < usuarios.length; i++) {
			var colaboradorResumo = new EntColaboradorResumo();
			colaboradorResumo = this.montaEntColaboradorResumo(usuarios[i]);
			
			this.adicionaColaboradorResumoAoArray(colaboradorResumo);
		}
		this.atualizaListagemUsuarios();
	}

	this.montaEntColaboradorResumo = function(colaboradorResumo) {
		var entColaboradorResumo = new EntColaboradorResumo();
		
		entColaboradorResumo.setCodigo(colaboradorResumo.codigo);
		entColaboradorResumo.setNome(colaboradorResumo.descricao);

		return entColaboradorResumo;
	}
	
	this.atualizaListagemUsuarios = function() {
		this.getLimite().setListagemUsuario(this.getEntConfAlarmeEstoque().getColaboradores());
	}
	
	
	this.adicionaUsuario = function() {
		var limite = this.getLimite();
		
		var entColaboradorResumo = new EntColaboradorResumo();
		entColaboradorResumo.setCodigo(limite.getCampoCodigoUsuario());
		entColaboradorResumo.setNome(limite.getCampoUsuario());

		this.adicionaColaboradorResumoAoArray(entColaboradorResumo);
		this.atualizaListagemUsuarios();
		
		limite.limpaUsuario();
	}

	this.adicionaColaboradorResumoAoArray = function(colaboradorResumo) {
		if (this.checaRepeticaoColaboradores(colaboradorResumo)) {
			var entConfAlarmeEstoque = this.getEntConfAlarmeEstoque();
			entConfAlarmeEstoque.getColaboradores().push(colaboradorResumo);
			this.setEntConfAlarmeEstoque(entConfAlarmeEstoque);
		}
	}
	
	this.checaRepeticaoColaboradores = function(colaboradorResumo) {
		var arrayColaboradores = this.getEntConfAlarmeEstoque().getColaboradores();
		var retorno = true;
		
		for (var i = 0; i < arrayColaboradores.length; i++) {
			if (arrayColaboradores[i].getCodigo() == colaboradorResumo.getCodigo()) {
				retorno = false;
				break;
			}
		}
		
		return retorno;
	}
	
	this.removeUsuario = function(posicao) {
		var arrayColaboradores = this.getEntConfAlarmeEstoque().getColaboradores();
		arrayColaboradores.splice(posicao, 1);
		
		this.getLimite().setListagemUsuario(arrayColaboradores);
	}
	
	//VERIFICA SE EXISTE VALORES NOS ARRAYS AFIM DE DEIXAR SALVAR
	this.habilitarSalvar = function() {
		var entConfAlarmeEstoque = this.getEntConfAlarmeEstoque();
		var repetido = false;
				
		if(entConfAlarmeEstoque.getColaboradores() != "" && entConfAlarmeEstoque.getLimitesProdutos() != "") {
			return (repetido = true);
		}
	}
	
	// *** SALVAR ***
	
	this.botaoSalvar = function() {
		var entConfAlarmeEstoque = this.getEntConfAlarmeEstoque(); 
		var limite = this.getLimite();
		var deptoConfiguracoes = new DeptoConfiguracoes();
		
		limite.mostrarImagem("barraCarregando");
		limite.desabilitaBotaoSalvar();
		
		deptoConfiguracoes.cadastra(entConfAlarmeEstoque, this.retornoCadastra);
	}
	
	this.retornoCadastra = function(resposta) {
		var limite = autoReferencia.getLimite();
		limite.habilitaBotaoSalvar();
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, true)) {
			limite.limpaAlarmeEstoque();
		}
	}
	
		
	//GETS E SETS
	
	this.getEntConfAlarmeEstoque = function() {
		return this.entConfAlarmeEstoque == null ? new EntConfAlarmeEstoque() : this.entConfAlarmeEstoque;
	}

	this.setEntConfAlarmeEstoque = function(valor) {
		this.entConfAlarmeEstoque = valor;
	}
	
	
}
CtrConfAlarmeEstoque.prototype = new Controlador;