stop();
var i;

// Esconde alguns itens
bt_fora.useHandCursor = false;
mc_fundo_janelas.visible = false;
mc_janela_objetivo.visible = false;
mc_janela_fim.visible = false;
mc_janela_pausa.visible = false;
mc_janela_troca.visible = false;
mc_carta.visible = false;
bt_repetir_ataque.visible = false;
bt_jogue_por_mim.visible = false;
mc_sua_vez.visible = false;

// Botão para mostrar o objetivo
mc_mostrar_objetivo.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.ativo) {
		mc_carta.visible = false;
		mc_objetivo.gotoAndStop(Relacao.get_relacao(Reguladora.ativo, Relacao.OBJETIVO).id);
		(new SomObjetivo()).play();
	}
});

// Botão para o Fale Conosco
mc_chamar_suporte.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	ExternalInterface.call("fale_conosco");
});

// Botão para finalizar a jogada
mc_proximo_jogador.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.vez.humano && !Grafica.editando_mundo) {
		Usuario.terra_origem = null;
		Usuario.terra_alvo = null;
		Reguladora.finalizar_jogada();
	}
});

// Botão para fazer troca
mc_cartas_recebidas.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (!Grafica.editando_mundo && Reguladora.ativo) {
		Usuario.mostrar_cartas();
	}
});

// Botão para não fazer troca
mc_nao_fazer_troca.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.vez.humano && !Grafica.editando_mundo && Reguladora.etapa == Reguladora.TROCA) {
		(new Movimento(Movimento.NAO_TROCAR)).executar();
	}
});

// Botão para não fazer troca
mc_parar_ataques.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.vez.humano && !Grafica.editando_mundo && Reguladora.etapa == Reguladora.ATACAR && !Usuario.atacando) {
		Usuario.terra_origem = null;
		Usuario.terra_alvo = null;
		Reguladora.finalizar_etapa();
	}
});

// Botão para repetir o ataque
bt_repetir_ataque.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	Grafica.root.bt_repetir_ataque.visible = false;
	Usuario.repetir_ataque();
});

// Botão para fazer com que a IA jogue para o usuário
bt_jogue_por_mim.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Usuario.jogando) {
		Reguladora.chat("Só é possível usar essa opção antes de fazer qualquer movimento");
	} else {
		Grafica.root.bt_jogue_por_mim.visible = false;
		Usuario.jogando_por_mim = true;
		Reguladora.vez.humano = false;
		switch (Reguladora.etapa) {
		case Reguladora.DIREITO:
			Inteligente.colocar();
			break;
		case Reguladora.TROCA:
			Inteligente.trocar();
			break;
		case Reguladora.ATACAR:
			Inteligente.atacar();
			break;
		case Reguladora.MOVER:
			Inteligente.mover();
			break;
		}
	}
});

// Deseleciona os territórios
bt_fora.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.vez.humano && !Grafica.editando_mundo && (Reguladora.etapa == Reguladora.ATACAR || Reguladora.etapa == Reguladora.MOVER)) {
		if (Usuario.terra_origem) {
			Grafica.atualizar_territorio(Usuario.terra_origem);
			if (Reguladora.etapa == Reguladora.MOVER && Usuario.terra_origem.livres != Usuario.terra_origem.soldados-1) {
				Grafica.atualizar_territorio(Usuario.terra_origem, {"fundo" : 2});
			}
			Usuario.terra_origem = null;
		}
		if (Usuario.terra_alvo) {
			Grafica.atualizar_territorio(Usuario.terra_alvo);
			if (Reguladora.etapa == Reguladora.MOVER && Usuario.terra_alvo.livres != Usuario.terra_alvo.soldados-1) {
				Grafica.atualizar_territorio(Usuario.terra_alvo, {"fundo" : 2});
			}
			Usuario.terra_alvo = null;
		}
		if (Usuario.movendo_ataque) {
			Grafica.atualizar_territorio(Usuario.movendo_ataque.origem);
			Grafica.atualizar_territorio(Usuario.movendo_ataque.alvo);
			Usuario.movendo_ataque = null;
		}
	} else if (Grafica.editando_mundo) {
		// Retira o efeito anterior
		if (Reguladora.alvo_edicao) {
			Grafica.atualizar_territorio(Reguladora.alvo_edicao);
		}
		
		// Carrega o novo formulário
		Reguladora.alvo_edicao = null;
		Grafica.root.mc_edicao.txt_territorio.text = "Clique num deles";
		Grafica.root.mc_edicao.combo_cor.enabled = false;
		Grafica.root.mc_edicao.slider_soldados.enabled = false;
	}
});

// Funciona como não trocar, parar ataques e para de mover
mc_etapa.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Reguladora.vez.humano && !Grafica.editando_mundo) {
		if (Reguladora.etapa == Reguladora.TROCA) {
			(new Movimento(Movimento.NAO_TROCAR)).executar();
		} else if (Reguladora.etapa == Reguladora.ATACAR) {
			Usuario.terra_origem = null;
			Usuario.terra_alvo = null;
			Reguladora.finalizar_etapa();
		} else if (Reguladora.etapa == Reguladora.MOVER) {
			Usuario.terra_origem = null;
			Usuario.terra_alvo = null;
			Reguladora.finalizar_etapa();
		}
	}
});

// Botão para reportar bug
mc_reportar_falha.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	var input = Grafica.root["input_chat"];
	if (input.text == "") {
		Reguladora.chat("Por favor, escreva no campo Mensagem uma breve descrição da falha");
		Reguladora.chat("Exemplo: exército azul não consegue mover");
	} else {
		new URLLoader(new URLRequest("bug.php?txt="+encodeURIComponent(input.text)));
		Reguladora.chat("BUG Reportado");
	}
	input.text = "";
});

// Depois do jogo volta ao início
mc_janela_fim.bt_fechar.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	Grafica.root.gotoAndStop(2);
});

// Pausa o jogo e vai para a tela de configurações
mc_configuracoes.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (Grafica.editando_mundo) {
		Grafica.editando_mundo = false;
		Grafica.editando_jogo = true;
		Grafica.root.prevFrame();
	} else if (Reguladora.vez.humano) {
		if (Usuario.jogando) {
			Reguladora.chat("Só é possível mudar as configurações do jogo antes de fazer qualquer movimento");
		} else {
			// Volta uma etapa
			if (Reguladora.etapa == Reguladora.DIREITO) {
				Reguladora.vez = Grafica.jogadores[(Reguladora.vez.id+4)%6];
				Reguladora.etapa = Reguladora.MOVER;
			} else if (Reguladora.etapa == Reguladora.TROCA) {
				Reguladora.etapa = Reguladora.DIREITO;
			} else if (Reguladora.etapa == Reguladora.ATACAR) {
				Reguladora.etapa = Reguladora.TROCA2;
			} else if (Reguladora.etapa == Reguladora.MOVER) {
				Reguladora.etapa = Reguladora.ATACAR;
			}
			Grafica.editando_jogo = true;
			Grafica.root.prevFrame();
		}
	} else {
		Grafica.root["mc_fundo_janelas"].visible = true;
		Grafica.root["mc_janela_pausa"].visible = true;
		Reguladora.pausar_jogo(function ():void {
			Grafica.editando_jogo = true;
			Grafica.root["mc_fundo_janelas"].visible = false;
			Grafica.root["mc_janela_pausa"].visible = false;
			Grafica.root.prevFrame();
		});
	}
});

slider_num.addEventListener(Event.CHANGE, function (e:Event) {
	// Muda o número de exércitos
	txt_colocar.text = Reguladora.formatar_num(e.currentTarget.value, 3);
	Usuario.proporcao = e.currentTarget.value/e.currentTarget.maximum;
});

if (Grafica.editando_mundo) {
	// Monta o formulário de edição do mundo
	mc_edicao.visible = true;
	mc_edicao.combo_cor.enabled = false;
	mc_edicao.slider_soldados.enabled = false;
	mc_edicao.combo_objetivo.enabled = false;
	mc_edicao.slider_cartas.enabled = false;
	Reguladora.alvo_edicao = null;
	mc_edicao.slider_troca.value = Reguladora.troca;
	mc_edicao.combo_cor.addEventListener(Event.CHANGE, function (e:Event) {
		// Transfere a posse do território
		var antigo_dono:Jogador = Relacao.get_relacao(Reguladora.alvo_edicao, Relacao.DONO);
		Relacao.desrelacionar(Reguladora.alvo_edicao, antigo_dono);
		var novo_dono:Jogador = Grafica.jogadores[e.currentTarget.selectedIndex];
		Relacao.relacionar(Reguladora.alvo_edicao, novo_dono, Relacao.DONO);
		Grafica.atualizar_territorio(Reguladora.alvo_edicao, {"fundo" : 5, "dono" : null});
		Grafica.campos_estaticos();
	});
	mc_edicao.combo_objetivo.addEventListener(Event.CHANGE, function (e:Event) {
		// Muda o objetivo do jogador
		var antigo_objetivo:Objetivo = Relacao.get_relacao(Reguladora.jog_alvo_edicao, Relacao.OBJETIVO);
		Relacao.desrelacionar(Reguladora.jog_alvo_edicao, antigo_objetivo, Relacao.OBJETIVO);
		var novo_objetivo:Objetivo = Grafica.objetivos[e.currentTarget.selectedIndex];
		Relacao.relacionar(Reguladora.jog_alvo_edicao, novo_objetivo, Relacao.OBJETIVO);
	});
	mc_edicao.slider_soldados.addEventListener(Event.CHANGE, function (e:Event) {
		// Muda o número de exércitos
		Reguladora.alvo_edicao.soldados = e.currentTarget.value;
		Grafica.atualizar_territorio(Reguladora.alvo_edicao, {"fundo" : 5, "delta" : null});
	});
	mc_edicao.slider_troca.addEventListener(Event.CHANGE, function (e:Event) {
		// Muda o número da troca
		Reguladora.troca = e.currentTarget.value;
		Grafica.campos_gerais();
	});
	mc_edicao.slider_cartas.addEventListener(Event.CHANGE, function (e:Event) {
		// Muda o número de cartas do jogador
		var cartas_atuais = Relacao.get_relacoes(Reguladora.jog_alvo_edicao, Relacao.CARTA);
		var delta:int = e.currentTarget.value-cartas_atuais.length;
		var i:int, soma:int = 0, max:int, j:String, carta:Carta;
		
		if (delta<0) {
			// Retira algumas cartas
			for (i=0; i<-delta; i++) {
				Relacao.desrelacionar(Reguladora.jog_alvo_edicao, cartas_atuais[i], Relacao.CARTA);
			}
		} else if (delta>0) {
			// Dá algumas cartas
			
			// Calcula o delta máximo
			for (j in Grafica.jogadores) {
				soma += Relacao.get_relacoes(Grafica.jogadores[j], Relacao.CARTA).length;
			}
			max = Grafica.cartas.length-soma;
			
			// Escolhe as cartas aleatoriamente
			for (i=0; i<Math.min(delta, max); i++) {
				// Dá uma carta
				do {
					carta = Grafica.cartas[Math.floor(Math.random()*Grafica.cartas.length)];
				} while (Relacao.get_relacoes(carta, Relacao.CARTA).length != 0);
				Relacao.relacionar(Reguladora.jog_alvo_edicao, carta, Relacao.CARTA);
			}
			
			// Atualiza o slider
			e.currentTarget.value = Relacao.get_relacoes(Reguladora.jog_alvo_edicao, Relacao.CARTA).length;
		}
		
		Grafica.campos_jogador(true);
	});
	
	// Configura os botões dos jogadores
	for (i in Grafica.jogadores) {
		root["mc_jogador"+i].addEventListener(MouseEvent.CLICK, function (e:MouseEvent) {
			// Carrega o novo formulário
			var id:int = int(e.currentTarget.name.substr(10))+1;
			Reguladora.jog_alvo_edicao = Grafica.jogadores[id-1];
			Grafica.root.mc_edicao.txt_jogador.text = Grafica.cores[id];
			Grafica.root.mc_edicao.combo_objetivo.enabled = true;
			Grafica.root.mc_edicao.combo_objetivo.selectedIndex = Relacao.get_relacao(Reguladora.jog_alvo_edicao, Relacao.OBJETIVO).id-2;
			Grafica.root.mc_edicao.slider_cartas.enabled = true;
			Grafica.root.mc_edicao.slider_cartas.value = Relacao.get_relacoes(Reguladora.jog_alvo_edicao, Relacao.CARTA).length;
		});
	}
} else {
	// Esconde o formulário de edição do mundo
	mc_edicao.visible = false;
	mc_jogador0.visible = false;
	mc_jogador1.visible = false;
	mc_jogador2.visible = false;
	mc_jogador3.visible = false;
	mc_jogador4.visible = false;
	mc_jogador5.visible = false;
}

// Configura os botões dos territórios
Grafica.configurar_botoes();

// Configura os botões da janela de troca
mc_janela_troca.bt_retornar.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	if (!Reguladora.vez.humano || Reguladora.etapa != Reguladora.TROCA || Relacao.get_relacoes(Reguladora.vez, Relacao.CARTA).length<5) {
		Grafica.root.mc_fundo_janelas.visible = false;
		Grafica.root.mc_janela_troca.visible = false;
	}
});
mc_janela_troca.bt_trocar.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	Usuario.executar_troca();
});
mc_janela_troca.bt_direita.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	Usuario.mostrar_cartas(1);
});
mc_janela_troca.bt_esquerda.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
	Usuario.mostrar_cartas(-1);
});
for each (i in ["00", "01", "02", "03", "04"]) {
	mc_janela_troca["mc_carta"+i].addEventListener(MouseEvent.CLICK, Usuario.selecionar_carta);
}
for each (i in ["10", "11", "12"]) {
	mc_janela_troca["mc_carta"+i].addEventListener(MouseEvent.CLICK, Usuario.deselecionar_carta);
}