
var GENERATION = "./includes/generation";

var requete;
function CreateXMLHTTPRequestObject() 
{
	// Proprietes
	this.xhr_object    = null;
	this.response      = null;
	this.ready         = true;
	this.asynchronous  = true;

	// Creation de l'objet XMLHTTpRequest
	if(window.XMLHttpRequest) // Firefox
		this.xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // Internet Explorer
		this.xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else // XMLHttpRequest non supporte par le navigateur
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

	// Methodes
	
	// Appelle la fonction cense indiquer qu'une communication est en cours
	// La fonction doit etre fournie par l'utilisateur de la classe et doit prendre un booleen en parametre :
	//  - true  : la communication commence
	//  - false : la communication est terminee
	this.indicatorFunction = null;
	
	// Permet de definir la fonction qui servira d'indicateur de communication
	this.setIndicatorFunction = function(func) {
		if(typeof(func) == "function") this.indicatorFunction = func;
	}
	
	// Passe en mode synchrone
	this.setSynchronous = function() {
		this.asynchronous = false;
	}

	// Passe en mode asynchrone
	this.setAsynchronous = function() {
		this.asynchronous = true;
	}

	// Lance une requete sur un fichier du serveur en passant eventuellement des parametres, avec la methode GET
	this.getFileGet = function(url, data) {
		return this.doRequest(url, "GET", data);
	}

	// Alias de this.getFileGet
	this.getFile = this.getFileGet;

	// Effectue la requete proprement dite
	//  - method : GET, POST ou HEAD
	//  - url    : chemin vers un fichier
	//  - data   : donnees a transmettre (ex : a=5&foo=bar)
	this.doRequest = function(url, method, data) {
		if(!this.ready || !this.xhr_object) return false;

		// Recherche header_name dans tous les headers et retourne la valeur correspondante
		// ou "Header inconnu..." si header_name n'a pas ete trouve
		function _getResponseHeader(headers, header_name) {
			var tmp = headers.split("\n");
			for(var i=0, n=tmp.length, t=[]; i<n-1; ++i) {
				t = tmp[i].split(": ");
				if(t[0].toLowerCase() == header_name.toLowerCase()) return t[1];
			}
			return "Header inconnu...";
		}

		if(this.indicatorFunction) this.indicatorFunction(true);
		this.ready = false;

		// On copie la reference a l'objet courant car il ne sera plus "dans le contexte"
		// au moment ou la fonction onreadystatechange sera execute
		var obj = this;
		function onreadystatechangeFunction() {
			if(obj.xhr_object.readyState != 4) return;
			
			var all_headers = obj.xhr_object.getAllResponseHeaders();
			if(method == "HEAD") {
				obj.response = data ? _getResponseHeader(all_headers, data) : all_headers;
			}
			else {
				var content_type = _getResponseHeader(all_headers, "Content-Type");
				if (content_type != "Header inconnu..." && (new RegExp("^text/xml.*$", "gi")).test(content_type))
					obj.response = obj.xhr_object.responseXML;
				else
					obj.response = obj.xhr_object.responseText;
					obj.page = obj.xhr_object ;
			}
			if(obj.indicatorFunction) obj.indicatorFunction(false);
		}

		if(method == "GET" && typeof(data) != "undefined" && data != "") url += "?"+data;
		this.xhr_object.open(method, url, this.asynchronous);

		if(this.asynchronous)
			this.xhr_object.onreadystatechange = onreadystatechangeFunction;
		
		if(data) this.xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		else     data = null;
		this.xhr_object.send(data);

		if(!this.asynchronous)
			onreadystatechangeFunction();

		return true;
	}

	// Retourne true si la reponse est arrivee, false sinon
	this.hasResponse = function() {
		return this.response != null;
	}

	// Retourne la reponse a la derniere requete
	this.getResponse = function() {
		return this.response;
	}
}

var div_ouverts = new Array();

function afficheJoueur(joueur,monde,titre)
{
	for(var i=0;i<div_ouverts.length;i++)
	{
		if(div_ouverts[i]=='id'+joueur+'_'+monde)
		{
			if(document.getElementById('id'+joueur+'_'+monde).style.visibility=='hidden')
				document.getElementById('id'+joueur+'_'+monde).style.visibility='visible';
			else
				document.getElementById('id'+joueur+'_'+monde).style.visibility='hidden';
			return ;
		}
	}
	var div=document.createElement('div');
	div.setAttribute('id','id'+joueur+'_'+monde);
	div_ouverts.push('id'+joueur+'_'+monde);
	div.style.position="absolute";
	div.style.left="200px";
	div.style.top="200px";	
	div.style.width="600px";
	div.style.height="330px";	
	div.style.cursor="move";
	div.setAttribute('OnDblClick', 'cache_div("id'+joueur+'_'+monde+'")');
	div.className='cadre';
	div.innerHTML="<h3>"+titre+"</h3>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_joueurs.php?serveur="+monde+"&amp;user="+joueur+"&amp;type=population&amp;taille=300&amp;hauteur=150'/>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_joueurs.php?serveur="+monde+"&amp;user="+joueur+"&amp;type=nb_villages&amp;taille=300&amp;hauteur=150'/><br />"+
	"<img alt='' src='"+GENERATION+"/gen_graph_joueurs.php?serveur="+monde+"&amp;user="+joueur+"&amp;type=moyenne&amp;taille=300&amp;hauteur=150'/>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_joueurs.php?serveur="+monde+"&amp;user="+joueur+"&amp;type=rank&amp;taille=300&amp;hauteur=150'/>";
	document.body.appendChild(div);
	Drag.init(div);
}

function afficheAlliance(alliance,monde,titre)
{
	for(var i=0;i<div_ouverts.length;i++)
	{
		if(div_ouverts[i]=='aid'+alliance+'_'+monde)
		{
			if(document.getElementById('aid'+alliance+'_'+monde).style.visibility=='hidden')
				document.getElementById('aid'+alliance+'_'+monde).style.visibility='visible';
			else
				document.getElementById('aid'+alliance+'_'+monde).style.visibility='hidden';
			return ;
		}
	}
	var div=document.createElement('div');
	div.setAttribute('id','aid'+alliance+'_'+monde);
	div_ouverts.push('aid'+alliance+'_'+monde);
	div.style.position="absolute";
	div.style.left="200px";
	div.style.top="200px";	
	div.style.width="600px";
	div.style.height="330px";	
	div.style.cursor="move";
	div.setAttribute('OnDblClick', 'cache_div("aid'+alliance+'_'+monde+'")');
	div.className='cadre';
	div.innerHTML="<h3>"+titre+"</h3>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_alliances.php?serveur="+monde+"&amp;alliance="+alliance+"&amp;type=population&amp;taille=300&amp;hauteur=150'/>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_alliances.php?serveur="+monde+"&amp;alliance="+alliance+"&amp;type=nb_villages&amp;taille=300&amp;hauteur=150'/><br />"+
	"<img alt='' src='"+GENERATION+"/gen_graph_alliances.php?serveur="+monde+"&amp;alliance="+alliance+"&amp;type=moyenne&amp;taille=300&amp;hauteur=150'/>"+
	"<img alt='' src='"+GENERATION+"/gen_graph_alliances.php?serveur="+monde+"&amp;alliance="+alliance+"&amp;type=classement&amp;taille=300&amp;hauteur=150'/>";
	document.body.appendChild(div);
	Drag.init(div);
}

function cache_div(id)
{
	document.getElementById(id).style.visibility='hidden';
}

function result_rc(arg) { 
	if(!arg){
		var result=requete.getResponse();
		document.getElementById(div_ouverts[div_ouverts.length-1]).innerHTML=result;
		document.getElementById(div_ouverts[div_ouverts.length-1]).style.height=document.getElementsByName('rapport')[div_ouverts.length-1].offsetHeight+40+"px";
	}
}

function afficheRapport(chaine, id)
{
	for(var i=0;i<div_ouverts.length;i++)
	{
		if(div_ouverts[i]==chaine)
		{
			if(document.getElementById(chaine).style.visibility=='hidden')
				document.getElementById(chaine).style.visibility='visible';
			else
				document.getElementById(chaine).style.visibility='hidden';
			return ;
		}
	}
	var div=document.createElement('div');
	div.setAttribute('id',chaine);
	div_ouverts.push(chaine);
	div.style.position="absolute";
	div.style.left="200px";
	div.style.top="200px";	
	div.style.width="600px";
	div.style.height="350px";	
	div.style.cursor="move";
	div.setAttribute('OnDblClick', 'cache_div("'+chaine+'")');
	div.className='cadre';
	document.body.appendChild(div);
	Drag.init(div);
	
	requete=new CreateXMLHTTPRequestObject();
	requete.setAsynchronous();
	requete.setIndicatorFunction(result_rc);
	requete.getFile("ajax/profil.ajax.php?l=rc&chaine="+chaine+"&id_rapport="+id);
}

function result_village(arg) { 
	if(!arg){
		var village=requete.getResponse();
		manage_button(village,1);
	}
}

function save_village(village)
{
	var stock=document.getElementsByName('stock_'+village)[0].value;
	var production=document.getElementsByName('production_'+village)[0].value;

	var nom_village = document.getElementsByName('nom_village_'+village)[0].value;

	var troupes = document.getElementsByName('trp1_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp2_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp3_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp4_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp5_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp6_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp7_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp8_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp9_'+village)[0].value;
	troupes += ","+document.getElementsByName('trp10_'+village)[0].value;
	
	var silo = document.getElementById('silo_nb_'+village).value;
	silo += ","+document.getElementById('silo1_'+village).value;
	silo += ","+document.getElementById('silo2_'+village).value;
	silo += ","+document.getElementById('silo3_'+village).value;
	silo += ","+document.getElementById('silo4_'+village).value;
	silo += ","+document.getElementById('silo5_'+village).value;
	
	var mur = document.getElementById('mur_'+village).value;
	
	var alliance = document.getElementsByName('alliance')[0].value;

	requete=new CreateXMLHTTPRequestObject();
	requete.setAsynchronous();
	requete.setIndicatorFunction(result_village);
	requete.getFile("ajax/profil.ajax.php?l=save_village&alliance="+alliance+"&village="+village+"&nom_village="+nom_village+"&stock="+stock+"&production="+production+"&troupes="+troupes+"&silo="+silo+"&mur="+mur);
}

function save_heros(id)
{
	var nom 	= document.getElementsByName('nom'+id)[0].value;
	var type 	= document.getElementsByName('type'+id)[0].value;
	var x 		= document.getElementsByName('x'+id)[0].value;
	var y	 	= document.getElementsByName('y'+id)[0].value;
	var regeneration	= document.getElementsByName('regeneration'+id)[0].value;
	var attaque 		= document.getElementsByName('attaque'+id)[0].value;
	var defense_cac 	= document.getElementsByName('defense_cac'+id)[0].value;
	var defense_cav		= document.getElementsByName('defense_cav'+id)[0].value;
	var bonus_attaque 	= document.getElementsByName('bonus_attaque'+id)[0].value;
	var bonus_defense 	= document.getElementsByName('bonus_defense'+id)[0].value;
	
	var alliance = document.getElementsByName('alliance')[0].value;
	
	requete=new CreateXMLHTTPRequestObject();
	requete.setAsynchronous();
	requete.getFile("ajax/profil.ajax.php?l=save_heros&alliance="+alliance+"&id="+id+"&nom="+nom+"&type="+type+"&x="+x+"&y="+y+"&regeneration="+regeneration+"&attaque="+attaque+"&defense_cac="+defense_cac+"&defense_cav="+defense_cav+"&bonus_attaque="+bonus_attaque+"&bonus_defense="+bonus_defense);
}

function manage_button(village,type)
{
	if(type==1)
		document.getElementsByName('button_'+village)[0].disabled=true;
	else
		document.getElementsByName('button_'+village)[0].disabled=false;
}

function change_nb_silo(id ,nb)
{
	for(var i=1; i<=nb; i++)
	{
		document.getElementById('silo'+i+'_'+id).style.display='inline';
	}

	for(i=parseInt(nb)+1; i<=5; i++)
	{
		document.getElementById('silo'+i+'_'+id).style.display='none';
	}
}

var silo = new Array(0,1200, 1700, 2300, 3100, 4000, 5000, 6300, 7800, 9600, 11800, 14400, 17600, 21400, 25900, 31300, 37900, 45700, 55100, 66400, 80000);

function calcul_silo(id)
{
	var nb = document.getElementById('silo_nb_'+id).value;
	var capa=0;

	for(var i=1; i<=nb; i++)
	{
		var niveau = document.getElementById('silo'+i+'_'+id).value;
		capa += silo[niveau];
	}
	
	if(capa == 0)	capa=800;
	
	document.getElementById('silo_size_'+id).value=capa;
	manage_button(id,0);
}

function contact_description(id_elt)
{
	elts = new Array('default', 'chat', 'msn', 'email');
	for(var i = 0; i<elts.length; i++)
	{
		document.getElementById(elts[i]).style.display = 'none';
	}
	document.getElementById(id_elt).style.display = 'block';
}