/*******************************************************************************************/ 
/*                                                                                         */
/*   Author      : DESPREZ Sylvain                                                         */
/*   Copyright © : WILD STUNTS                                                             */
/*                                                                                         */
/*   Toute utilisation de ce code non autorisée par l'auteur est strictement interdite     */
/*                                                                                         */
/*******************************************************************************************/ 


///-------------------------- classe -----------------------------


function Timer(nom)
{
//proprietes 

this.nom                = nom;          //nom de l'objet Timer obligatoirement
this.evenements         = new Array();  //tableau à 2 dimensions -> tableau de couple (id,script)
this.evenements_repetes = new Array();  //tableau à 2 dimensions -> tableau de couple (id,script)
this.curseur            = 0;            //curseur général pemettant de se repéré dans le temps

//methodes

this.addEventOnCurseur        = Timer_addEventOnCurseur;
this.addEventWithStart        = Timer_addEventWithStart;
this.addRepeatEvent           = Timer_addRepeatEvent;
this.addRepeatEventOnCurseur  = Timer_addRepeatEventOnCurseur;
this.addRepeatEventWithStart  = Timer_addRepeatEventWithStart;
this.getEventIndice           = Timer_getEventIndice;
this.getRepeatEventIndice     = Timer_getRepeatEventIndice;
this.eraseEvent               = Timer_eraseEvent;
this.eraseRepeatEvent         = Timer_eraseRepeatEvent;
this.eraseAllEvent            = Timer_eraseAllEvent;
this.eraseAllRepeatEvent      = Timer_eraseAllRepeatEvent;

}




//ajoute un evenement simple qui va être jouer au niveau du curseur ! 
//ajoute aussi l'action eraseEvent qui sera executé après 500ms de la fin de l'evenement

function Timer_addEventOnCurseur(id,script)
{
script += this.nom+'.eraseEvent("'+id+'");';
this.evenements.push(new Array(id,setTimeout(script,this.curseur)));
}




//ajoute un evenement simple qui va être jouer à start  ! 
//ajoute aussi l'action eraseEvent qui sera executé après 500ms de la fin de l'evenement

function Timer_addEventWithStart(id,script,start)
{
script += this.nom+'.eraseEvent("'+id+'");';
this.evenements.push(new Array(id,setTimeout(script,start)));
}



//ajoute un evenement qui se répète et qui va être jouer à interval régulier ! 

function Timer_addRepeatEvent(id,script,interval)
{
this.evenements_repetes.push(new Array(id,setInterval(script,interval)));
}



//ajoute un evenement qui se répète et qui va être jouer au niveau du curseur et à interval régulier ! 


function Timer_addRepeatEventOnCurseur(id,script,interval)
{
this.addEventOnCurseur(id,this.nom + ".addRepeatEvent('"+id+"','"+script+"',"+interval+");",this.curseur);
}



//ajoute un evenement qui se répète et qui va être jouer à start et à interval régulier ! 

function Timer_addRepeatEventWithStart(id,script,interval,start)
{
this.addEventWithStart(id,this.nom + ".addRepeatEvent('"+id+"','"+script+"',"+interval+");",start);
}




//donne l'indice ds le tablau d'evenements simples à partir de l'id

function Timer_getEventIndice(id)
{
for(var i = 0; i < this.evenements.length; i++)
 {
 if(this.evenements[i][0] == id) return i;
 }
return -1;
}




//donne l'indice ds le tablau d'evenements répétés à partir de l'id

function Timer_getRepeatEventIndice(id)
{
for(var i = 0; i < this.evenements_repetes.length; i++)
 {
 if(this.evenements_repetes[i][0] == id) return i;
 }
return -1;
}







//efface l'evenement simple ayant l'id donné

function Timer_eraseEvent(id)
{
//vérifie si l'id est valide et récupere l'indice dans le tableau

i = this.getEventIndice(id);
if(i == -1) return;

//fait un clearTimeout de l'evenement par son identifiant donné par setTimeout()

clearTimeout(this.evenements[i][1]);

//alert(this.evenements[i][0] + " clearTimeouté et supprimé "); 

//efface l'evenement du tableau

this.evenements.splice(i,1);

}






//efface tout les evenements simples

function Timer_eraseAllEvent()
{
for(var i = 0; i < this.evenements.length; i++)
 {
 clearTimeout(this.evenements[i][1]);
 }
this.evenements.splice(0,this.evenements.length);
}




//efface l'evenement répété par son id

function Timer_eraseRepeatEvent(id)
{
//fait un eraseEvent avec l'id -->supprime l'evement simple déclencheur au cas de lancement avec start ou curseur 

this.eraseEvent(id);  


//vérifie si l'id est valide et récupere l'indice dans le tableau d'évenements répétés

i = this.getRepeatEventIndice(id);
if(i == -1) return;

//fait un clearInterval de l'evenement répété son identifiant donné par setInterval()
//et l'enlève du tableau

clearInterval(this.evenements_repetes[i][1]);
this.evenements_repetes.splice(i,1);
}




//efface tout les evenements répétés 

function Timer_eraseAllRepeatEvent()
{
for(var i = 0; i < this.evenements.length; i++)
 {
 clearInterval(this.evenements_repetes[i][1]);
 }
this.evenements_repetes.splice(0,this.evenements_repetes.length);
}

///-------------------------- variables et fonctions -----------------------------


var timer = new Timer("timer");
