/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Affiche ou cache un message par défaut dans un input
 * 
 * @param value
 * @param event
 */
function toggleDefaultValueInput(value, event) {
    var currentText = event.target.get('value');
    var result = currentText;
    if(currentText == value) {
        result = '';
        event.target.set('class', 'otherText');
    }
    
    if(currentText == '') {
        result = value;
        event.target.set('class', 'defaultText');
    }
    
    event.target.set('value', result);
}


/**
 * 
 * Crée un élément input file du dom
 * 
 * Requiert la librairie Mootools
 * 
 */
function add_file(elem, target)
{
    if(target.getElements('div').length >= 4)
        elem.setStyle('display', 'none');
    
    var div     = document.createElement('div');
    var input   = document.createElement('input'); 
    var btnClose= document.createElement('button');
    div.appendChild(input);
    div.appendChild(btnClose);
    target.appendChild(div);
    
    input.type = 'file'; 
    input.name = 'screens[]';
    input.size = '50'; 
    input.value = '';
    
    btnClose.type = 'button';
    btnClose.innerHTML = 'X';
    btnClose.addEvent('click', function(event) 
    {
        var btn = event.target;
        btn.getParent().destroy();
        
        if(target.getElements('div').length < 5)
            elem.setStyle('display', '');
    });
}

/**
 * 
 * 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 e: élément de base du tooltip
 * @param ref: nom de l'id donné à la div contenant le texte du tooltip
 * @param 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;
}

/**
 * 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";
    }
}


