
/**
 * Enregistre une fonction à executer une fois le dom chargé
 * @param fn fonction
 * @return
 */
function ondomready(fn)
{
	//W3C
	if(document.addEventListener)
		document.addEventListener("DOMContentLoaded", fn, false);
	//IE
	else
		document.onreadystatechange = function(){
			if(document.readyState == "interactive") fn();
		};
}

var _article_ids	= [70, 71, 73];
var _initialized	= false;
var _dom_ready		= false;

// au chargement du dom on indique que le dom est pret
// on tente de charger jquery en parallele
ondomready(function(){
	_dom_ready	= true;
});

robbcodeLoadJquery();

// on défini le host sur lequel les images vont etre recuperees
if(typeof(_robbcode_host) == "undefined")
	var _robbcode_host = "zerodatabase.fr";

// si aucune url n'a été spécifiée pour trouver robbcode.php on en met une par défaut
if(typeof(_robbcode_ajax) == "undefined")
	var _robbcode_ajax = "/robbcode.php";

// si aucune langue n'a été spécifiée on initialise la variable
// la langue par defaut sera geree dans robbcode.php
if(typeof(_robbcode_lang) == "undefined")
	var _robbcode_lang = "";

/**
 * Déclare les fonctions à executer une fois le dom chargé
 */
function robbcodeOnload()
{
	// on boucle sur cette fonction tant que le dom n'est pas pret
	if(!_dom_ready){setTimeout("robbcodeOnload()", 100); return;}
	
	robbcodeInitialize();
}

/**
 * Initialise le systeme de RoBBcode
 */
function robbcodeInitialize()
{
	// l'initialisation ne doit se faire qu'une fois
	if(_initialized) return;
	_initialized = true;
	
	var elements 		= new Array();
	var _recup_ids		= "";
	var replace_pattern	= new RegExp("[?].*replace=1", "i");
	var pict_pattern	= new RegExp("[?].*pict=1", "i");
	
	// on crée le conteneur et on importe le css
	jQuery('body').append('<div id="_robbcode_container" style="display:none;"><table class="coins coins_vert"><tr><td class="coin_hg"></td><td class="coin_h"></td><td class="coin_hd"></td></tr><tr><td class="coin_g"></td><td class="coin_c"></td><td class="coin_d"></td></tr><tr><td class="coin_bg"></td><td class="coin_b"></td><td class="coin_bd"></td></tr></table></div>');
	jQuery('#_robbcode_container').prepend('<table class="coins coins_bleu" style="float:left;"><tr><td class="coin_hg"></td><td class="coin_h"></td><td class="coin_hd"></td></tr><tr><td class="coin_g"></td><td class="coin_c"></td><td class="coin_d"></td></tr><tr><td class="coin_bg"></td><td class="coin_b"></td><td class="coin_bd"></td></tr></table>');
	jQuery('head').append('<link rel="stylesheet" type="text/css" href="//'+_robbcode_host+'/generated/zd/robbcode/robbcode_style.css" />');
	
	// on recupere tous les ids
	jQuery.each(_article_ids, function(k, v){
		jQuery('a').each(function(){
			var pattern	= new RegExp("http://(?:www.)?"+_robbcode_host+"/ragnarokonline/"+v+"/([^/]+)/.*", "i");
			var href	= jQuery(this).attr("href");
			if(typeof(href) == "undefined" || !href.match(pattern)) return;
			
			// on determin les parametres passés
			var do_replace	= false;
			var do_pict		= false;
			if(href.match(replace_pattern))	do_replace = true;
			if(href.match(pict_pattern))	do_pict = true;
			
			// on recupere l'id et on crée l'id de l'element qui l'identifiera dans le tableau de retour
			// de la requete ajax
			var id		= href.replace(pattern, "$1");
			var elem_id	= v+":"+id;
			
			_recup_ids	+= elem_id+"/";
			
			// on garde l'id de l'element ainsi que l'element lui meme
			var e		= {id: elem_id, element: this, replace: do_replace, pict: do_pict};
			elements.push(e);
		});
	});
	
	// requete ajax
	jQuery.post(_robbcode_ajax, {ids: _recup_ids, lang: _robbcode_lang}, function(response){
		// une fois la reponse recue, on assigne les evenements a tous les elements
		// pour lesquels une reponse a été trouvee
		jQuery.each(elements, function(){
			if(typeof(response[this.id]) == "undefined") return;
			var txt			= response[this.id].text + "<br/><br/><b>&copy; Powered by zerodatabase.fr</b>";
			var pict		= response[this.id].pict;
			var do_replace	= this.replace;
			var do_pict		= this.pict;
			
			jQuery(this.element).mouseover(function(){
				jQuery("#_robbcode_container .coins_vert .coin_c").html(txt);
				
				if(pict.length > 0)
					jQuery("#_robbcode_container .coins_bleu").show().removeClass("robbcode_hidden").find(".coin_c").html("<img src='"+pict+"' alt='' />");
				else
					jQuery("#_robbcode_container .coins_bleu").hide().addClass("robbcode_hidden").find(".coin_c").html("");
				
				jQuery('#_robbcode_container').show();
			});
			
			jQuery(this.element).mousemove(function(event){
				robbcodeShow(event);
			});
			
			jQuery(this.element).mouseout(function(){
				jQuery("#_robbcode_container").hide();
			});
			
			// gestion du remplacement par le nom de l'element
			if(do_replace)
				jQuery(this.element).html(response[this.id].name);
			
			// gestion de l'ajout d'image a l'element
			if(do_pict && response[this.id].small_pict.length > 0)
				jQuery(this.element).prepend("<img src='"+response[this.id].small_pict+"' alt='' /> ");
			
		});
	}, "json");
	
}

/**
 * Charge jQuery s'il n'est pas présent
 */
function robbcodeLoadJquery()
{
	if(typeof(jQuery) == "function") {robbcodeOnload(); return;}
	
	var e	= document.createElement("script");
	e.src	= "http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js";
	e.type	= "text/javascript";
	
	// on ajoute un evenement onload de 2 manieres differentes pour satisfaire tous les navigateurs
	// on entre en mode noConflict de jquery pour eviter les conflits avec d'eventuels autres frameworks
	e.onload				= function(){jQuery.noConflict(); robbcodeOnload();};
	e.onreadystatechange	= function()
	{
        if (this.readyState == 'loaded') {jQuery.noConflict(); robbcodeOnload();}
	}

	document.getElementsByTagName('head')[0].appendChild(e);
}

/**
 * Affiche l'infobulle
 * @param element référence vers l'acronym
 * @param text texte à afficher dans l'infobulle
 */
function robbcodeShow(event)
{
	// on replace la largeur du bloc en auto, au cas où elle aurait été fixée à une
	// largeur plus grande que nécessaire
	jQuery('#_robbcode_container').css('width', 'auto').css('height', 'auto');
	
	// on masque l'illustration de gauche pour que ses dimensions n'interferent pas dans le calcul
	// fix bug firefox
	jQuery('#_robbcode_container .coins_bleu').hide();

	var w_width		= jQuery(window).width();
	var w_height	= jQuery(window).height();

	var a_width		= jQuery('#_robbcode_container').width();
	var a_height	= jQuery('#_robbcode_container').height();

	// on prend en compte les dimensions de l'illustration de gauche
	// seulement s'il y en a une
	var i_width		= jQuery('#_robbcode_container .coins_bleu').width();
	var i_height	= jQuery('#_robbcode_container .coins_bleu').height();
	
	if(!jQuery('#_robbcode_container .coins_bleu').hasClass("robbcode_hidden"))
	{
		a_width			+= i_width;
		jQuery('#_robbcode_container').width(a_width);
	}
	
	// la largeur du bloc ne doit pas dépasser 1/2 de la largeur de la fenetre
	if(a_width > (w_width / 2))
	{
		a_width		= w_width / 2;
		jQuery('#_robbcode_container').width(a_width);
		a_height	= jQuery('#_robbcode_container').height();
	}
	
	// on fait reapparaitre l'illustration de gauche s'il y en a une
	if(!jQuery('#_robbcode_container .coins_bleu').hasClass("robbcode_hidden"))
		jQuery('#_robbcode_container .coins_bleu').show();
	
	// la hauteur du bloc ne doit pas dépasser 1/2 de la hauteur de la fenetre
	a_height	= jQuery('#_robbcode_container').height();
	if(a_height > w_height)
	{
		a_height	= w_height;
		jQuery('#_robbcode_container').height(a_height);
	}
	
	// on calcul les coordonnées du bloc
	var dec			= 20;
	var pos_x		= event.clientX + dec;
	var pos_y		= event.clientY + dec;

	// on calcul si le bloc sort de la fenetre
	// si c'est le cas on l'affiche de manière à coller le bord de la fenetre
	var max_x		= pos_x + a_width;
	var max_y		= pos_y + a_height;

	if(max_x > w_width)		pos_x	= event.clientX - a_width - (dec / 2);
	if(pos_x < 0)			pos_x	= 0;
	if(max_y > w_height)	pos_y	= pos_y - (max_y - w_height);
	
	// on fixe la position du bloc
	jQuery('#_robbcode_container').css('left', pos_x+'px').css('top', pos_y+'px').show();
}
