Array.prototype.in_array = function(p_val,strict) {
	var strict = strict || false;
    for(var i = 0, l = this.length; i < l; i++) {
    	if( (strict && this[i] === p_val) || (!strict && this[i] == p_val) ){
            return i;
        }
    }
    return false;
}

Array.prototype.in_array_text = function(p_val) {
    for(var i = 0; i < this.length; i++) {
    	if( this[i].indexOf(p_val)>-1){
            return i;
        }
    }
    return false;
}



///////////////////////////////////////
//	Animation des images du splash screen
//////////////////////////////////////
function loop_animation()
{
	exec_animation(false,true);
}

function anim_changeimg_dec(noeffect,loop)
{
	//Dans cette fonction on peut imaginer n'importe quel mixe de changement d'image
	//Dans ce mode on efface puis on raffiche
	//Il est possible de brancher dans le afterFinish des effet un callback qui efface l'image au bout de 5 second (ptetre plus jolie ???)
	//Ou de fusionner les deux tableau pour melanger les changements ?
	//A essayer

	var noeffect = noeffect || false;
	var loop = loop || false;
	var cpt = 0;

	//On efface les images toute seule au bout d'un moment
	for(var i=0;i<anim_img.length;i++)
	{
		if(loop)
		{
			var dl = ((anim_delay*cpt) + anim_duration);
			var df = anim_duration;
		}
		else
		{
			var dl = ((anim_delay*cpt) + (anim_timer/1000));
			var df = (anim_timer/1000);
		}
		
		var dc = (anim_delay*cpt);
		if(noeffect)
		{
			anim_img[i].balise.style.display="";
			new Effect.Fade(anim_img[i].balise,{duration:anim_duration,delay:dl ,queue:{ position: 'front', scope: anim_img[i].balise.id}});
		}
		else
		{
			new Effect.Appear(anim_img[i].balise,{duration:anim_duration,delay:dc,queue:{ position: 'front', scope: anim_img[i].balise.id},afterFinish:function(param){
				new Effect.Fade(param.element,{duration:anim_duration,delay:df,queue:{position: 'front', scope: param.element.id}});
			}});
		}
		cpt ++;
	}
	
	if(loop)
		setTimeout(function(){loop_animation()},((dl)*1100));

	//Reinit animation tableau
	anim_img = new Array();
}

function anim_changeimg_bloc(noeffect,loop)
{
	var noeffect = noeffect || false;
	var loop = loop || false;

	//Hide all image
	for(var i=0;i<old_img.length;i++)
	{
		new Effect.Fade(old_img[i].balise,{duration:anim_duration,queue:{ position: 'end', scope: old_img[i].balise.id}});
	}

	//Reinit old animation
	old_img = new Array();

	//Look all image
	for(var i=0;i<anim_img.length;i++)
	{
		if(noeffect)
			anim_img[i].balise.style.display = "";
		else
			new Effect.Appear(anim_img[i].balise,{duration:anim_duration,queue:{ position: 'end', scope: anim_img[i].balise.id}});
		old_img.push(anim_img[i]);
	}

	if(loop)
		setTimeout(function(){loop_animation()},(anim_duration*0.1));

	//Reinit animation tableau
	anim_img = new Array();
}

var current_img_ind = 1;
function anim_changesrc(indice,imgsrc)
{
	//Balise Image
	var img1 = $("pub_" + indice + "_1"); 
	var img2 = $("pub_" + indice + "_2"); 
	if(img1 && img2)
	{
		if(current_img_ind==1)
		{
			var prev_img = img2;
			var next_img = img1;
		}
		else if(current_img_ind==2)
		{
			var prev_img = img1;
			var next_img = img2;
		}
	}
	
	//Change Z index
	next_img.style.zIndex = 2;
	if(prev_img)
		prev_img.style.zIndex = 1;
	

	//Set img source
	next_img.src = imgsrc;
	anim_img.push({
		balise:next_img,
		appear:true
	});
}

function getRand(min,max)
{
	var rand = Math.random() * (max-min);
	var random = parseInt((Math.round(rand)) + min);

	return random;
}

function getUniqueRandVar(min,max,arr)
{
	var random = 0;
	while(arr.in_array(random)!==false)
	{
		var rand = Math.random() * (max-min);
		var random = parseInt((Math.round(rand)) + min);
	}

	return random;
}

function getUniqueRand(min,max,arr)
{
	var random = 0;
	while(arr.in_array(random)!==false)
	{
		var rand = Math.random() * (max-min);
		var random = parseInt((Math.round(rand)) + min);
	}

	return random;
}

function getRandImg(min,max)
{
	var rand = Math.random() * (max-min);
	var random = parseInt((Math.round(rand)) + min);

	return random;
}

function get_next_seq()
{
	if(isrand_seq)
	{
		var next = getUniqueRand(0,(anim_seq.length-1),seq_index);
		seq_index.push(next);
		if(seq_index.length == anim_seq.length)
		{
			seq_index = new Array();
			seq_index.push(next);
		}
	}
	else
	{
		var next = current_seq_index + 1;
		if(next == anim_seq.length)
			return 0;
	}

	return next;
}

function get_except(seq)
{
	var arr_ex = new Array();
	for(var i in seq)
	{
		if(seq[i]!="croix" && seq[i]!="")
		{
			arr_ex.push(seq[i]);
		}
	}
	return arr_ex;
}

function getUniqueText(srctab)
{
	var min = 0;
	var max = (srctab.length-1);
	var random = 0;
	var cpr = true;
	while(cpr)
	{
		var rand = Math.random() * (max-min);
		var random = parseInt((Math.round(rand)) + min);
		cpr = anim_except_src.in_array_text(srctab[random]);
	}
	
	//On ajoute l'exception pour evitert la redondance d'image si possible
	anim_except_src.push(srctab[random]);
	if(anim_except_src.length == srctab.length)
		anim_except_src = new Array();

	return srctab[random];	
}

function getSpecText(srctab,value)
{
	//Exist 
	var ind = srctab.in_array_text(value);
	if(ind===false)
		var val = getUniqueText(srctab);
	else
		var val = srctab[ind];
	return val;
}

var anim_seq = new Array();
// Sequence dans l'ordre ou pas
var seq_index = new Array();
var anim_img = new Array();
var old_img = new Array();
var anim_src = new Array();
var anim_except_src = new Array();
var current_seq_index = -1;
var anim_inteval;
var path_croix = "";

function get_src(item,except)
{
	if(item == "")
		var res = getUniqueText(anim_src);
	else if(item == "croix")
		var res = path_croix;
	else
		var res = getSpecText(anim_src,item);

	return res;
}


function exec_animation(noeffect,loop)
{
	var noeffect = noeffect || false;
	var loop = loop || false;

	//Recuperation de la sequence suivante
	var next = get_next_seq();
	anim_except_src = get_except(anim_seq[next]);

	var anim_seq_lgth=0;
	for(var i in anim_seq[next])
	{
		var imgsrc = get_src(anim_seq[next][i],anim_except_src);
		anim_changesrc(i,imgsrc);
		anim_seq_lgth ++;
	}
	current_seq_index = next;
	
	//Start animation
	if(isdecale)
		anim_changeimg_dec(noeffect,loop);
	else
		anim_changeimg_bloc(noeffect,loop);
		
	//Change photo indice
	current_img_ind = ((current_img_ind%2)+1);
}

function init_img_src()
{
	$$('.splash_img').each(function(item){
		anim_src.push(item.src);
	});
}


//Animation parametres
var autostart = true;		//Demarre de suite l'animation
var infinityloop = true;		//Fait tourner en boucle (on ne se sert plus du timer d'animation)
var isrand_seq = false;		//Prendre les sequence dans le desordre?
var isdecale = true;		//Afficher les sequences par bloc ou avec un effet de decale
var anim_delay = 0.1;		//Si en mode affichage decalé c'est le temps de decalage entre chaque affichage
var anim_duration =1;	//Temps de l'animation d'apparition ou de disparition
var anim_timer;		//Interval entre les changements


function init_animation()
{
		path_croix = $('img_croix').src;
		
		//Ajout des sequences
		//Les id de zones image vont de 1 à 28
		//Les images non présentes sont laissé blanche
		//Les images avec un nom de fichier sont forcé sur ce fichier si présent
		//Les images avec croix se verront attribué l'image croix

/* Exemple Laetitia 
		anim_seq.push({1:"croix",2:"",3:"croix",4:"croix",5:"",6:"croix",18:"",19:"croix",20:"croix",21:""});
		anim_seq.push({1:"",2:"croix",5:"croix",6:"",9:"",10:"",19:"",20:"",23:"",24:"croix",27:"croix",28:"",7:"croix",12:"croix",17:"croix",22:"croix"});
		anim_seq.push({2:"",3:"croix",4:"croix",5:"",7:"",9:"croix",10:"croix",12:"",14:"",15:"",17:"",19:"croix",20:"croix",22:"",24:"",25:"croix",26:"croix",27:""});

*/
/* Exemple d'animation séquentielle du haut en bas puis de gauche à droite */
/*
  		isrand_seq = false;
 		isdecale = true;
		anim_timer=1200;
		anim_duration=0.5;
		anim_delay = 0.2;
		anim_seq.push({1:"croix",2:"",3:"",4:"",5:"",6:"croix"});
		anim_seq.push({7:"",8:"croix",9:"",10:"",11:"croix",12:""});
		anim_seq.push({13:"croix",14:"",15:"",16:"croix"});
		anim_seq.push({17:"",18:"croix",19:"",20:"",21:"croix",22:""});
		anim_seq.push({23:"croix",24:"",25:"",26:"",27:"",28:"croix"});

		anim_seq.push({1:"croix",7:"",13:"",17:"",23:""});
		anim_seq.push({2:"",8:"croix",14:"",18:"",24:""});
		anim_seq.push({3:"",9:"",19:"croix",25:""});
		anim_seq.push({4:"",10:"",20:"",26:"croix"});
		anim_seq.push({5:"croix",11:"",15:"",21:"",27:""});
		anim_seq.push({6:"",12:"croix",16:"",22:"",28:""});
*/

/* Exemple d'animation extérieur intérieur, "vide" img aléatoire, "nomdel'image.png" image aléatoire ou"croix" motif*/

 		isrand_seq = false;
		isdecale = true;
		anim_timer=3400;
		anim_seq.push({1:"",2:"",5:"",6:"",7:"",12:"",14:"",15:"",17:"",22:"",23:"",24:"",27:"",28:""});
		anim_seq.push({1:"",6:"",8:"",11:"",14:"",15:"",18:"",21:"",23:"",28:""});
		anim_seq.push({1:"",2:"",5:"",6:"",7:"",12:"",17:"",22:"",23:"",24:"",27:"",28:""});
		anim_seq.push({2:"",3:"",4:"",5:"",7:"",9:"",10:"",12:"",14:"",15:"",17:"",19:"",20:"",22:"",24:"",25:"",26:"",27:""});


/* Exemple d'animation Complétement aléatoire (Old Kiblind like)*/
/*
	i=0;
	var imgl = $$('.splash_img').length-1;
	var arr = new Array();
	while(i < imgl)
	{
		//recuperation d'un animation au hasard
		var rd = getUniqueRand(0,imgl,arr); 
		arr=rd;

		var seq = {};
		seq[rd]="";
		anim_seq.push(seq);

		var seq = {};
		seq[rd]="croix";
		anim_seq.push(seq);

		i++;
	}
	
	isrand_seq = false;
	isdecale = true;
	anim_timer=5000;
*/
	
		//Init des sources
		init_img_src();

		//Lancement de l'animation
		if(!infinityloop)
		{
			//Initialisation de la première séquence
			exec_animation(true);
			if(autostart)
				exec_animation();
			anim_inteval = setInterval(function(){exec_animation();},anim_timer);
		}
		else
			exec_animation(false,true);
		
		
		//View site
		new Effect.Appear($('splash_ctn'),{duration:0.5});
}

var myrules = {
 	'.splash_animation': function(div)
 	{
		if(!div.initialized)
		{
			div.initialized = true;
			init_animation();
		}
	}
};

// Enregistrement des regles definies ci dessus dans Behaviour
Behaviour.register(myrules);
