/**
 * Ensemble de fonctions pratiques
 */

var jspeed;
	jspeed = 'fast';
	
function postForm(idForm, urlAction, dossier, divAjax){
	//creation de la variable data a partir du formulaire
	var data = $('#'+idForm+' :not(:disabled)').serializeArray();
	if(!dossier)	dossier='/';
	if(!divAjax)	divAjax='realContent';
	//envoie de la requete ajax
	$('#'+divAjax).empty(); // on vide avant la requête ajax pour empêcher certains bugs de double post etc
	$.post(dossier+''+urlAction, data, function(r){
			$('#'+divAjax).html(r);
		});
}

function profil(e,pseudo,param){
	if(!e) e=window.event;
	var winProfil = $('#profil');
	var scrolltop = document.documentElement.scrollTop  || document.body.scrollTop;
	$('#profilView').html('<img src="'+defines.statique+'images/loading.gif" alt="'+defines.LNG.global.LOADING+'" style="margin:20px;" />');
	winProfil.css('top', (scrolltop+e.clientY+20)+'px');
	winProfil.css('left', (e.clientX-197)+'px');
	winProfil.show(jspeed);
	$('#profilView').load("/game/profil/infobulle.php?"+param+"="+pseudo);
}

/**
 * @deprecated Jarter cette fontion et jarter le body onclick ... sur le template
 * @param {Object} e
 */
function closeAll(e){
	if(!e) e=window.event;
	var obj = (e.target) ? e.target : e.srcElement;
	if(obj.tagName!='A')
		$('#profil').hide(jspeed);
}

/**
 * Pas du tout sï¿½r que cette fonction soit utilisï¿½e
 * @param {Object} min
 * @param {Object} max
 */
function rand( min, max ) {
	if( max )	return Math.floor(Math.random() * (max - min + 1)) + min;
	else		return Math.floor(Math.random() * (min + 1));
}

/**
 * @deprecated derniï¿½re utilisation : support.js
 * @param {Object} id
 */
function formSelectValue(id){
	return $(id).val();
}

function number_format( number, decimals, dec_point, thousands_sep ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +     bugfix by: Michael White (http://crestidg.com)
	// +     bugfix by: Benjamin Lupton
	// +     bugfix by: Allan Jensen (http://www.winternet.no)
	// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)    
	// *     example 1: number_format(1234.5678, 2, '.', '');
	// *     returns 1: 1234.57     
	
	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 0 : decimals;
	var d = dec_point == undefined ? "," : dec_point;
	var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
	var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function popupDhtml(url, name){
	if ($('#'+name).length<=0){
		$('#content-container').prepend('<div id="'+name+'" class="popup" style="z-index:10000000;"></div>');
	}
	$('#'+name).html('<div style="background-color:#fff;padding:4px;"> <img src="'+defines.statique+'images/loading.gif" align="absmiddle" /> &nbsp; ' + defines.LNG.global.LOADING + '</div>');
	$('#'+name).fadeIn();
	if(url)
	    $('#'+name).load(url);
}

function bulleProfil(params){
	if(!params.evenement) e=window.event;
	else e=params.evenement;
	
	var winProfil = $('.popupProfil');
	var scrolltop = document.documentElement.scrollTop  || document.body.scrollTop;
	$('.popupProfil_Content').html('<img src="/beta/images/loading.gif" alt="loading" style="margin:20px;" />');
	winProfil.css('top', (scrolltop+e.clientY+45)+'px');
	winProfil.css('left', (e.clientX-197)+'px');
	winProfil.show(jspeed);
	
	// en fonction du param envoyé (soit userid soit bimboid), on appel le fichier ajax pour récupérer la bulle
	if (params.id_user) {
		$('.popupProfil_Content').load("/beta/inc/profil/ajax.php?id_user="+params.id_user); // appel avec userId
	}
}

function bulleProfil_commerce(params){
	if(!params.evenement) e=window.event;
	else e=params.evenement;
	
	var winProfil = $('.popupProfil');
	var scrolltop = document.documentElement.scrollTop  || document.body.scrollTop;
	$('.popupProfil_Content').html('<img src="/beta/images/loading.gif" alt="loading" style="margin:20px;" />');
	winProfil.css('top', (scrolltop+e.clientY+45)+'px');
	winProfil.css('left', (e.clientX-197)+'px');
	winProfil.show(jspeed);
	
	$('.popupProfil_Content').load("/beta/inc/profil/ajax-commerce.php?id_commerce="+params.id_commerce);
	
}

function affichePopup(param,idPopup){
	if(!param.evenement) e=window.event;
	else e=param.evenement;
	
	//on cache la popup active
	$('.popupSpaceFight').hide();
	var winPopup = $('#' + idPopup);
	/*winPopup.css('top', (e.clientY - 400) + 'px');
	winPopup.css('left', (e.clientX - 400) + 'px');*/
	winPopup.show(jspeed);
}

/**
 * FONCTION : évolution d'un champ Input de valeur numérique (+/- valeur) pour les vaisseaux et défenses
 */
function evolutionInput(name,valeur)
{
	var valActuel = parseInt($('input[name='+name+']').val());
	
	//décompte
	if(valeur<0)
	{
		if(valActuel>=2000){ valeur = -1000; }
		else if(valActuel>=200){ valeur = -100; }
		else if(valActuel>=20) { valeur = -10; }
		else valeur = -1;
	}
	//compte
	else{
		if(valActuel>=1000){ valeur = 1000; }
		else if(valActuel>=100){ valeur = 100; }
		else if(valActuel>=10) { valeur = 10; }
		else valeur = 1;
	} 
	
	var nouvelleValeur = valActuel + valeur;
	
	if(nouvelleValeur <0) nouvelleValeur = 0;
	$('input[name='+name+']').attr("value",nouvelleValeur);
}

/**
 * FONCTION : modification du champ Input par valeur pour les vaisseaux et défenses (copte amiral = fonctionnalité pour construire maxs possible)
 */

function maxInput(name,valeur)
{
	var valActuel = parseInt($('input[name='+name+']').val());
	$('input[name='+name+']').attr("value",valeur);
}

/**
 * FONCTION : affichage des détails d'un batiments par création d'un div
 * @param	name : le nom de la popup
 * @param	place : après quoi elle se met (optionnel)
 */
function afficheDetail(name,optionURL,place){
	
	var emplacementTexte = place;
	
	//création du div s'il n'existe pas
	if ($('#' + name + '_det').length <= 0) {
	
		//Chargement du texte de détails
		$.get('/beta/jeu.php?mod=splain&' + optionURL + '=' + name, function(data){
			$('#' + name + ' ' + emplacementTexte).after('<div id="' + name + '_det" style="padding-left:125px;padding-right:150px;padding-bottomt:10px;margin-bottom:10px;" title="Cliquez pour fermer" alt="Cliquer pour fermer"></div>');
			
			//on affiche les détails dans le div
			$('#' + name + '_det').html(data).fadeIn();
			
			//on active la suppression de cette fenetre lors d'un clique
			$('body').bind('click', function(){
				$('#' + name + '_det').fadeOut().remove();
			});
		});
	}
	else $('#'+name+'_det').fadeOut().remove();
}

function afficheTactique(name,optionURL,place){
	
	var emplacementTexte = place;

	//création du div s'il n'existe pas
	if ($('#tactique_' + name + '_det').length <= 0){
		
		//Chargement du texte de détails
		$.get('/beta/jeu.php?mod=splain&'+optionURL+'='+name, function(data){			
			$(emplacementTexte).after('<div id="tactique_' + name + '_det" style="margin:22px;padding-bottom:20px;width:530px;" title="Cliquez pour fermer" alt="Cliquer pour fermer"></div>');
			
			//on affiche les détails dans le div
			$('#tactique_' + name + '_det').html(data).fadeIn();
		
			//on active la suppression de cette fenetre lors d'un clique
			$('body').bind('click', function(){
				$('#tactique_' + name + '_det').fadeOut().remove();
			});
		});
	}
	else $('#tactique_' + name + '_det').fadeOut().remove();
}

//QUasi même fonction mais pour les détails dans cyberboutique
function afficheDetailBank(name,optionURL,place){
	
	//création du div s'il n'existe pas
	if ($('#'+name+'_det').length<=0){
		
		//Chargement du texte de détails
		$.get('/beta/jeu.php?mod=splain-banque&'+optionURL+'='+name, function(data){
			$('#'+name).after('<div id="'+name+'_det" style="padding-top:10px;padding-bottom:10px;padding-right:10px;margin-bottom:10px;" title="Cliquez pour fermer" alt="Cliquer pour fermer"></div>');
			
			//on affiche les détails dans le div
			$('#'+name+'_det').html(data).fadeIn();
		
			//on active la suppression de cette fenetre lors d'un clique
			$('body').bind('click', function(){
				$('#'+name+'_det').fadeOut().remove();
			});
		});
	}
	else $('#'+name+'_det').fadeOut().remove();	
}

//Fonction mettant à jour le nombre de messages dans le menu gauche "Messagerie(1)"
function updateNbMessage(valeur){
	var nbActuMess = parseInt($('#menu_infoJoueur > ul > li > a > #nb-message').html());
	var nbNewMess = nbActuMess+valeur;
	$('#menu_infoJoueur > ul > li > a > #nb-message').html(nbNewMess.toString());
}

//Fonction mettant à jour les resssources dans le menu gauche
function updateRessources(id_user,id_planete,argent){
	$.get('/ajax/ajax-ressources.php?id_user='+id_user+'&id_planete='+id_planete+'&argent='+argent+'&action=update', function(data){		
		$('#menu_ressources').html(data);
	});
}

//Fonction pour mettre des avertissements aux joueurs
function avertissement(id_user,id_post){
	$.get('/ajax/ajax-moderate.php?id_user='+id_user+'&id_post='+id_post+'&action=avertir', function(data){		
		$('#avertissement_'+id_post).html(data);
	});
}

/**
 * Centre un div verticalement par rapport à la taille de la fenêtre et au scroll. On affiche donc toujours le div en plein milieu de l'écran
 * Peut-être d'autre modifications à prévoir pour prendre en compte les marges etc... (sachant qu'un div positionné en absolute ne devrait pas avoir de marges...)
 * + la même fonction pour centrer horizontalement ? (plus à réaliser en css dans le div voulu)
 */
$.fn.centerDiv = function() {
  return this.each(function(){
	$(this).appendTo('body').css({
			margin:0,
			left: $(window).scrollLeft()+Math.round(($(window).width()-$(this).width())/2)+'px',
			top: $(window).scrollTop()+Math.round(($(window).height()-$(this).height())/2)+'px'
		});
  });	
};

/**
 * active les tabs à l'intérieur du div donné, la structure doit-être :
 * 			
	<div class="genericTabs">
		<a href="#id1" class="tabsLinks selected" title="blabla1">lien 1</a> 
		<a href="#id2" class="tabsLinks" title="blabla2">lien 2</a>
		<dl class="tabsContent">
			<dt id="id1">
				<!-- CONTENU DIV 1 -->
			</dt>			
			<dt id="id2">
				<ol>
					<!-- CONTENU DIV 2 -->
				</ol>
			</dt>
		</dl>
	</div>

	pour lancer : $('.genericTabs').genericTabs();
 */
$.fn.genericTabs = function() {
  return this.each(function(){
			$('> .tabsLinks', $(this))
			.click(function() {
				$(this.href.substring(this.href.indexOf('#'))).show().siblings().hide(); // on affiche le dt correspondant, on cache ses frères
				$(this).addClass('selected').siblings().removeClass('selected'); // on ajoute la classe "selected"
				this.blur();
				return false;
		}).eq(0).css('margin-left', 0);
		$('> .tabsContent > dt:gt(0)', $(this)).hide();			
  });	
};