﻿
//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";

createListenerFunction();
function createListenerFunction()
{
    //ce code est utile uniquement sur IE,donc
    //on vérifie qu'on est bien sur IE.
    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.
            
            //on vérifie que la fonction n'est pas déjà assignée.
            var assigned = false;
            for(i=0;i<this[eventArrayName].length;i++)
            {
                if(this[eventArrayName][i] == callback)
                {
                    assigned = true;
                    break;
                }
            }
            if(!assigned)
                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].removeAtIndex(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;
            var event = window.event;
            event.target = event.srcElement;
            for(eventIndex=0;eventIndex<
                this[eventArrayName].length;eventIndex++)
            {
                var ret = this[eventArrayName][eventIndex](event);
                if(!ret)_return = false;
            }
            return _return;
        }
    }
    
    var XMLHttpRequest = function()
    {
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

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") && !url.endsWith(".jpg") )
        {
        //alert('1');
        //alert(encodeURI(url)+"&rand="+Math.random());
        xhr.open("GET",encodeURI(url)+"&rand="+Math.random(),true);
        }
    else 
    {
    //alert('2');
    xhr.open("GET",url+"?rand="+Math.random(),true);
    //alert(encodeURI(url)+"?rand="+Math.random());
    }
    
    xhr.onreadystatechange = function()
    {
        if(xhr.readyState == 4)
        {
            //alert('Status:'+xhr.status);
            if(xhr.status == 200 || xhr.status == 0)
            {                
                var responseText = "";
                try
                {
                    responseText = xhr.responseText;
                }
                catch(e)
                {
               
                }
                callback(responseText);
            }
            else if(xhr.status == 404)
            {
                callback("404");
            }
        }
    }
    xhr.send(null);
}


Array.prototype.removeAtIndex = 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)
{
    
}

function mysqlTimeStampToDate(timestamp) {
   //function parses mysql datetime string and returns javascript Date object
   //input has to be in this format: 2007-06-05 15:26:02
   var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
   var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
   return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
}

function getAbsolutePos(obj)
{
    var x = obj.offsetLeft;
    var y = obj.offsetTop;
    var parent = obj.offsetParent;
    var maxElement = 50;
    var elementCount = 0;
    do
    {
        if(typeof(parent.style)!="undefined" &&
         parent.style.position == "absolute")break;
        elementCount++;
        x+=parent.offsetLeft;
        y+=parent.offsetTop;
        parent = parent.offsetParent;
    }
    while(typeof(parent)!="undefined" &&
        parent!=null &&
        elementCount<maxElement);
    return {"x":x,"y":y}
}