function fade(E, property, authFadeOut, os, oe, delayFadeOut, vFadeOut, authFadeIn, is, ie, delayFadeIn, vFadeIn){
	
	var _self = this;
	
	this.fading = function (Nstep,vFade,te,ts,delay){
		if(Nstep>0 && _self.step>vFade)
		{
			var s = (_self.step)/Nstep;
			var r = (te[0]+Math.floor((ts[0]-te[0])*s));
			var g = (te[1]+Math.floor((ts[1]-te[1])*s));
			var b = (te[2]+Math.floor((ts[2]-te[2])*s));
			eval('E.style.'+property+' = "rgb('+r+','+g+','+b+')"');
			_self.step -= vFade;
			_self.setFade = setTimeout(function(){_self.fading(Nstep,vFade,te,ts,delay)},delay);
		}
		else eval('E.style.'+property+' = "rgb('+te[0]+','+te[1]+','+te[2]+')"');
	}
	
	if(authFadeIn)
	{
		var NstepFadeIn = Math.max(Math.max(Math.abs(is[0]-ie[0]),Math.abs(is[1]-ie[1])),Math.abs(is[2]-ie[2]));
		addevent(E,'mouseover',function (){
			clearTimeout(_self.setFade);
			_self.step = NstepFadeIn;
			_self.fading(NstepFadeIn,vFadeIn,ie,is,delayFadeIn);
		}, false);
	}
	if(authFadeOut)
	{
		var NstepFadeOut = Math.max(Math.max(Math.abs(os[0]-oe[0]),Math.abs(os[1]-oe[1])),Math.abs(os[2]-oe[2]));
		addevent(E,'mouseout',function (){
			clearTimeout(_self.setFade);
			_self.step = NstepFadeOut;
			_self.fading(NstepFadeOut,vFadeOut,oe,os,delayFadeOut);
		}, false);
	}
}


function addevent(obj,evt,fn,capt){
	if(obj.addEventListener)
	{
		obj.addEventListener(evt, fn, capt);
		return true;
	}
	else if(obj.attachEvent)
	{
		obj.attachEvent('on'+evt, fn);
		return true;
	}
	else return false;
}


function initFade() {
	//
	// objets individuels
	//E883DF
	var obj1 = new fade (
		document.getElementById('p1'), 'backgroundColor',
		// fade out
		true, new Array(232,131,223), new Array(163,104,67), 10, 4,
		// fade in
		true, new Array(163,104,67), new Array(232,131,223), 10, 4
	);
	var obj12 = new fade (
		document.getElementById('p2'), 'backgroundColor',
		// fade out
		true, new Array(232,131,223), new Array(163,104,67), 10, 4,
		// fade in
		true, new Array(163,104,67), new Array(232,131,223), 10, 4
	);
	var obj13 = new fade (
		document.getElementById('p3'), 'backgroundColor',
		// fade out
		true, new Array(232,131,223), new Array(163,104,67), 10, 4,
		// fade in
		true, new Array(163,104,67), new Array(232,131,223), 10, 4
	);
	var obj14 = new fade (
		document.getElementById('p4'), 'backgroundColor',
		// fade out
		true, new Array(232,131,223), new Array(163,104,67), 10, 4,
		// fade in
		true, new Array(163,104,67), new Array(232,131,223), 10, 4
	);
	
	
	var obj21 = new fade (
		document.getElementById('p1'), 'color',
		// pas de fade out
		true, new Array(0,0,0), new Array(255,255,255), 10, 4,
		// fade in
		true, new Array(255,255,255), new Array(0,0,0), 10, 4
	);
	
	var obj22 = new fade (
		document.getElementById('p2'), 'color',
		// pas de fade out
		true, new Array(0,0,0), new Array(255,255,255), 10, 4,
		// fade in
		true, new Array(255,255,255), new Array(0,0,0), 10, 4
	);
	
	var obj23 = new fade (
		document.getElementById('p3'), 'color',
		// pas de fade out
		true, new Array(0,0,0), new Array(255,255,255), 10, 4,
		// fade in
		true, new Array(255,255,255), new Array(0,0,0), 10, 4
	);
	
	var obj24 = new fade (
		document.getElementById('p4'), 'color',
		// pas de fade out
		true, new Array(0,0,0), new Array(255,255,255), 10, 4,
		// fade in
		true, new Array(255,255,255), new Array(0,0,0), 10, 4
	);


	var liste = document.getElementById('menu').getElementsByTagName("a");
	var obj4 = new Array();
	
	for (i=0;i<liste.length;i++)
	{
		obj4[i] = new fade (
			liste[i], 'color',
			// fade out
			true, new Array(255,255,0), new Array(0,0,255), 50, 8,
			// fade in avec une seule couleur
			true, new Array(220,50,50), new Array(220,50,50), 0, 0
		);
	}
}

if (document.getElementById && document.getElementsByTagName)
{
	addevent(window,'load',initFade, false);
}
