
	// $Author: ke20 $
	// $Date: 2009-11-18 23:35:37 +0100 (mer., 18 nov. 2009) $
	// $Id: functions.js 17 2009-11-18 22:35:37Z ke20 $ $
	// $Description: Fichier contenant toutes fonctions javascript nécessaire.

/**
 * 
 * Crée un élément input file du dom
 * 
 */
function add_file(n)
{
	var el; 
	el = document.createElement('input'); 
	el.type = 'file'; 
	el.name = 'screens[]';
	el.size = '50'; 
	el.value = '';
	document.getElementById('target').appendChild(el);
}

/**
 * 
 * Affiche une image d'attente en préchargeant une image de taille importante.
 * 
 */
function preload(o, img_src, w, h) 
{
	var img = new Image ();
	
	img.onload = function () 
	{
		o.onload = null;
		if (w) o.width  = w;
		if (h) o.height = h;
		o.src = img.src;
	};
	
	img.src = img_src;
}

/**
 * Crée et retourne un élément http request pour les requêtes ajax
 * 
 * @return HttpRequest Object
 */
function getHttpRequest()
{
 	//Firefox ou IE >= 7.0
	if (window.XMLHttpRequest) 
	{  
	  xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 
	{
		// essaie de charger l'objet pour IE
		try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } 
	 	catch (e) 
	 	{
	 		// essaie de charger l'objet pour une autre version IE
		 	try  		{  xhr = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (e)  	{ window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest."); }
		} 
	}
	
	return xhr;
}


 /**
  * récupère la position de la souris et renvoi un tableau de coordonnées.
  * 0 -> position top
  * 1 -> position left
  * 
  * @param Object element
  */
 function findPos(obj) 
 {
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	
	return new Array(curtop, curleft);
 }


/**
 * Cette fonction permet de mettre une bordure de selection autour de l'image
 * macro sélectionné.
 * 
 */
var oldChoose = '';
function chooseMacro(e)
{
	e.style.border = "2px solid #b72e00";
	
	if(oldChoose != "")
		document.getElementById(oldChoose.id).style.border = "2px solid #e3e3e3";
	
	oldChoose = e;
}

function dispResult(description)
{
	var old_div = document.getElementById('display');
	var new_div = document.createElement("div");
	old_div.parentNode.replaceChild(new_div, old_div);
	
	new_div.id = "display";
	new_div.style.border = "1px solid #d0d0d0";
	new_div.style.padding = 5 + "px";
	new_div.style.cssFloat = "right";
	new_div.style.width = 320 + "px";
	new_div.innerHTML = description;
}

function submit_search(e)
{
	var elemError = document.getElementById('str_errors');	
	var inputText = document.getElementById("search");
	
	if(!inputText.value.match(/[a-z0-9]+/i)) {
		elemError.innerHTML = 'Saisie incorrecte.';
		return false;
	} 
	
	inputText.value = trim(inputText.value);
	if(inputText.value != "fu" && inputText.value.length < 3) {
		elemError.innerHTML = 'Minimum 3 caractères.';
		return false;
	}
	
	// On parcourt les noeuds pour vérifier si les checkbox sont cochées
	var checked = false;
	for(var i = 0; i < e.length; i++) {	
		// Si au moins une checkbox est rempli alors c'est suffisant
		if(e[i].type == "checkbox" && e[i].checked == true) {
			checked = true;
		}
	}
	
	// Si bool est vrai, on vérifie qu'il l'est aussi par les checkbox
	if(checked == false) {
		elemError.innerHTML = 'Aucune catégorie choisie.';
		return false;
	}
	
	return true;
}

function trim (myString)
{
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
} 

function displayNote(e, id, type)
{
	var div = null;
	if(!document.getElementById("notationDiv"))
	{
		div = document.createElement("div");
		div.id = "notationDiv";
		e.parentNode.appendChild(div);
		
		for(var i = 0; i < 5; i++)
		{
			var img = document.createElement("img");
			img.src = "img/star_empty.png";
			img.alt = "note de " + (i+1) + "/5";
			img.id  = i;
			img.style.cursor = "pointer";
			
			img.onmouseover = function(){
				for(var j = 0; j <= this.id; j++)
					document.getElementById(j).src = "img/star_full.png";
					//this.src = "img/note_full.gif";
			};
			
			img.onmouseout = function(){
				for(var j = 0; j <= this.id; j++)
					document.getElementById(j).src = "img/star_empty.png";
				//this.src = "img/note_empty.gif";
			};
			
			img.onclick = function() {
				switch(type)
				{
				case "addon":
				case "macro":
					AjaxSaveNote(div, type, id, this.id); // this.id est la valeur de la note.
					break;
				default: 
					alert("un soucis de reconnaissance est survenu.");
					break;
				}
			};
				
			div.appendChild(img);
		}
	}
	else
		div = document.getElementById("notationDiv");
	
	e.rel = (e.rel == "false") ? "true" : "false";
	div.style.display = (e.rel == "true") ? "block" : "none";
}


/**
 * Crée un tooltip sur l'élément donné à condition que ce dernier contient une div avec la valeur
 * de l'id donné en paramètre.
 * @param object e: élément de base du tooltip
 * @param string ref: nom de l'id donné à la div contenant le texte du tooltip
 * @param boolean display: affiche ou cache le tooltip
 */
function tooltip(e, ref, display)
{
	var elem = null;
	var childs = e.childNodes;

	for(var i = 0; i < childs.length; i++) {
		if(childs[i].id == ref) {
			elem = childs[i];
			break;
		}
	}

	if(elem) {
		var pos = findPos(elem);
		elem.style.position     = (display) ? "absolute" : "";
		elem.style.marginLeft   = (display) ? (pos[0] + 10) + "px" : "";
		elem.style.marginTop    = (display) ? (pos[1] + 10) + "px" : "";
		elem.style.display      = (display) ? "block" : "none";
		elem.style.visibility   = (display) ? "visible" : "hidden";
	}
}

function styleMessage(elem)
{
	elem.style.border = '3px solid #ff8e03';
	elem.style.backgroundColor = '#fff';
	return elem;
}

function styleError(elem)
{
	elem.style.border = '3px solid #ff0303';
	elem.style.backgroundColor = '#ffedd9';
	return elem;
}

function messageBox(elemRef, message, type)
{
	if(!elemRef) { return false; }
	
	var div = document.createElement("div");
	div.style.width = 350 + 'px';
	
	var width = pageWidth();
	var height = pageHeight();
	var left = leftPosition();
	var top = topPosition();
	var dialogwidth = div.offsetWidth;
	var dialogheight = div.offsetHeight;
	var topposition = top + (height / 4) - (dialogheight / 2);
	var leftposition = left + 50 - (dialogwidth / 2);
	
	div.style.top = topposition + "px";
	div.style.left = leftposition + "px";
	div.style.position = 'absolute';
	div.style.padding = 10 + 'px';
	div.style.display = 'block';
	
	if(type == 'error') {
		div = styleError(div);
	} else {
		div = styleMessage(div);
	}
	
	div.innerHTML = message;
	elemRef.parentNode.appendChild(div);
	
	// Suppression de la div au click dessus.
	div.onclick = function () {
		var parent = this.parentNode;
		parent.removeChild(this);
	};
}

function displayError(elemRef, message) {
	messageBox(elemRef, message, 'error');
}

function displayMessage(elemRef, message) {
	messageBox(elemRef, message, 'message');
}

//calculate the current window width //
function pageWidth() {
  return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

// calculate the current window height //
function pageHeight() {
  return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

// calculate the current window vertical offset //
function topPosition() {
  return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}

// calculate the position starting at the left of the window //
function leftPosition() {
  return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}


/**
 * Retourne un élément du DOM
 * @param string id
 * @return Dom object
 */
function $(id) {
	var obj = document.getElementById(id);
	if(obj) { return obj; }
	alert("l'élément id n'existe pas.");
}

/**
 * Modifie la notation de l'élément
 * @param int nb
 * @return void
 */
function notation(nb, total)
{
	for (var i = 0; i < total; i++) {
		$('star_' + i).src = (i < nb) ? 
				"./img/star_full.png" : 
				"./img/star_empty.png";
	}
}
