﻿
//Ce code détecte si l'utilisateur se sert de Internet Explorer ou
//de Firefox (compatible Safari etc..)
var using_ie = true;
if(typeof(ActiveXObject)=="undefined"){
    using_ie = false;
}

var cssFloat = using_ie?"styleFloat":"cssFloat";

//sous les browsers autre que IE nous somme obligé de declarer les
//évenements à intercepter.
if(!using_ie)
{
    //document.captureEvents(Event.CLICK);
    //document.captureEvents(Event.MOUSEMOVE);
    //document.captureEvents(Event.KEYPRESS);
    //document.captureEvents(Event.KEYUP);
}

createListenerFunction();
function createListenerFunction()
{
    //ce code est utile uniquement sur IE,donc
    //on vérifie qu'on est bien sur IE.
    var using_ie = typeof(ActiveXObject)!="undefined";
    if(using_ie)
    {
        //sauvegarde des ancienne méthodes.
        var oldGetElementById = document.getElementById;
        var oldGetElementsByName = document.getElementsByName;
        var oldGetElementsByTagName = document.getElementsByTagName;
        
        document.addEventListener = addEventListener;
        document.executeEvents = executeEvents;
        
        //override 
        document.getElementById = function(id)
        {
            //appel de l'ancienne méthode pour récupérer l'élement.
            var obj = oldGetElementById(id);
            if(obj==null)return;
            //ajout des fonctions
            obj["addEventListener"] = addEventListener;
            obj["removeEventListener"] = removeEventListener;
            obj["executeEvents"] = executeEvents;
            return obj;
        }
        //comme getElementById mais avec une boucle qui 
        //parcourt chacun des éléments.
        document.getElementsByTagName = function(tag)
        {
            var obj = oldGetElementsByTagName(tag);
            if(!(obj!=null && obj.length>0))return;
            for(obj_i=0;obj_i<obj.length;obj_i++)
            {
                obj[obj_i]["addEventListener"] = addEventListener;
                obj[obj_i]["removeEventListener"] = removeEventListener;
                obj[obj_i]["executeEvents"] = executeEvents;
            }
            return obj;
        }
        //identique à getElementsByTagName.
        document.getElementsByName = function(name)
        {
            var obj = oldGetElementsByName(name);
            if(!(obj!=null && obj.length>0))return;
            for(obj_i=0;obj_i<obj.length;obj_i++)
            {
                obj[obj_i]["addEventListener"] = addEventListener;
                obj[obj_i]["removeEventListener"] = removeEventListener;
                obj[obj_i]["executeEvents"] = executeEvents;
            }
            return obj;
        }
        
        //Ajoute l'évenement dans un Array.
        var addEventListener = function(eventName,callback,b)
        {
            //on donne un nom a l'array qui contiendra les callbacks.
            //chaque évenement possede un Array différent.
            var eventArrayName = "ieEventList_"+eventName;
            //Si l'array est inexistant on le crée et on
            //lui indique comment executer les fonctions.
            if(typeof(this[eventArrayName])=="undefined")
            {
                var me = this;
                this[eventArrayName] = new Array();
                this["on"+eventName] = function()
                {
                    var ret = me.executeEvents(eventName);
                    return ret;
                }
            }
            //ajoute la fonction.
            this[eventArrayName][
                this[eventArrayName].length]=callback;  
        }
        
        var removeEventListener = function(eventName,callback,b)
        {
            //on donne un nom a l'array qui contiendra les callbacks.
            //chaque évenement possede un Array différent.
            var eventArrayName = "ieEventList_"+eventName;
            //Si l'array est inexistant on le crée et on
            //lui indique comment executer les fonctions.
            
            if(typeof(this[eventArrayName])!="undefined")
            {
                var me = this;
                for(i=0;i<this[eventArrayName].length;i++)
                {
                    if(this[eventArrayName][i]==callback)
                    {
                        this[eventArrayName].remove(i);
                    }
                }
            }
            //ajoute la fonction.
        }
        
        //execute la liste de fonctions se trouvant dans
        //l'Array attribué à un évenement.
        var executeEvents = function(eventName)
        {
            var eventArrayName = "ieEventList_"+eventName;
            if(typeof(this[eventArrayName])=="undefined")
                return;//au cas ou..
            //éxecution de chaque évenement.
            var _return = true;
            for(eventIndex=0;eventIndex<
                this[eventArrayName].length;eventIndex++)
            {
                var ret = this[eventArrayName][eventIndex]();
                if(!ret)_return = false;
            }
            return _return;
        }
    }
    
    var XMLHttpRequest = function()
    {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

String.prototype.endsWith = function(str) 
{return (this.match(str+"$")==str)}

//Touches du claviers
var KEY_ENTER       = 13;

//XMLHttpRequest : 
//Outils pour faire des appels AJAX.
function downloadString(url,callback)
{
    var xhr = null;
    if(using_ie){
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else{
        xhr = new XMLHttpRequest();
    }
    if(!url.endsWith(".png"))xhr.open("GET",url+"&rand="+Math.random(),true);
    else xhr.open("GET",url+"?rand="+Math.random(),true);
    xhr.onreadystatechange = function()
    {
        if(xhr.readyState == 4)
        {
            if(xhr.status == 200 || xhr.status == 0)
            {
                callback(xhr.responseText);
            }
            else if(xhr.status == 404)
            {
                callback("404");
            }
        }
    }
    xhr.send(null);
}

Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

function testImage(path,callback)
{
    
}

