////////////////////////////////////////////////////////////////////////////////////////////////////
//
// THOMAS TISSOT-DUPONT COPYRIGHT 2007
//
////////////////////////////////////////////////////////////////////////////////////////////////////


//=============================================================================================
// FONCTIONS UTILES JAVASCRIPT ( PNG, ID OBJETS )
//=============================================================================================
//Fonction qui dit s'il s'agit d'IE6
function isIE( nVer )
{
	nVer = ( nVer ) ? nVer : -1;
	if ( navigator.appName != 'Microsoft Internet Explorer' )
		return false;
		
	var tag = "MSIE ";
	var nIEVersion = parseInt( navigator.appVersion.substr( navigator.appVersion.indexOf( tag ) + tag.length, 1 ) );

	if ( nVer != -1 )
		return ( nIEVersion == nVer );
	
	return true;
}

//Fonction qui récupère d'ID d'un objet selon le navigateur
function getObject( id )
{
	if ( document.getElementById ) 
		var returnVar = document.getElementById( id ); 
	else if ( document.all ) 
		var returnVar = document.all[ id ]; 
	else if ( document.layers ) 
		var returnVar = document.layers[ id ]; 
	return returnVar;
}

//Fonction créée pour afficher les PNG24 bits correctement dans IE6.
//Code source trouvé sur http://support.microsoft.com/kb/294714/fr/
function PngImageIE6Fix( imgsrc, id )
{
	var imgid = ( id ) ? "id=\"" + id + "\" " : "";
	
	
	if ( isIE( 6 ) )
		return "<img src=\"images/spacer.gif\" alt=\"\" " + imgid + "style=\"width: auto; height: auto; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + imgsrc + "', sizingMethod = 'image' );\" />";
	else
		return "<img src='" + imgsrc + "' " + imgid + "alt='' />";
}

//Affiche une image PNG en positionnement absolu
function DrawPNGImageAbsolute( imgsrc, left, top, id )
{
	left = ( left ) ? left + "px" : "0px";
	top = ( top ) ? top + "px" : "0px";
	
	document.write( "<div style='position: absolute; left: " + left + "; top: " + top + ";'>" );
		document.write( PngImageIE6Fix( imgsrc, id ) );
	document.write( "</div>" );
}

//Affiche une image en positionnement relatif
function DrawPNGImageRelative( imgsrc, id )
{
	document.write( PngImageIE6Fix( imgsrc, id ) );
}

//Affiche un séparateur ( pointillés ) au format PNG
function DrawPNGSeparator()
{
	document.write( PngImageIE6Fix( "images/separator.png" ) );
}







//=============================================================================================
// SCROLLBAR JAVASCRIPT
//=============================================================================================
//Fonction crée pour afficher les PNG24 bits correctement dans IE6.
//Code source trouvé sur http://support.microsoft.com/kb/294714/fr/
function ScrollbarBody( imgsrc, id )
{
	var imgid = ( id ) ? "id=\"" + id + "\" " : "";
	
	if ( navigator.appName == 'Microsoft Internet Explorer' )
		return "<img src=\"images/spacer.gif\" alt=\"\" " + imgid + "style=\"width: auto; height: auto; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + imgsrc + "', sizingMethod = 'scale' );\" />";
	else
		return "<img src='" + imgsrc + "' " + imgid + "alt='' />";
}

function ScrollbarDashedLine( imgsrc, id )
{
	var imgid = ( id ) ? "id=\"" + id + "\" " : "";
	
	if ( navigator.appName == 'Microsoft Internet Explorer' )
		return "<img src=\"images/spacer.gif\" alt=\"\" " + imgid + "style=\"width: auto; height: auto; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + imgsrc + "', sizingMethod = 'image' );\" />";
	else
		return "<img src='" + imgsrc + "' " + imgid + "alt='' />";
}


//Création de la barre de défilement
var Scrollbar = 
{
	//Default skin values
	skinUpArrow 	: 	"images/scrollbar/uparrow.gif",
	skinDownArrow 	: 	"images/scrollbar/downarrow.gif",
	skinBody 		: 	"images/scrollbar/body.png",
	skinDashedLine 	: 	"images/scrollbar/sbline.png",
		
	//Function which overrides the default skin values
	SetSkin : function( upArrow, dnArrow, body )
	{
		skinUpArrow = upArrow;
		skinDownArrow = dnArrow;
		skinBody = body;
	},
	
	error : function( message )
	{
		alert( "***SCROLLBAR FATAL ERROR***\n" + message );
	},

	//Parameter 1: text target	
	//Parameter 2: text target holder ( text container with overflow forcibly set to hidden )
	//Parameter 3: margin left
	//Parameter 3: margin top
	createScrollBar : function( targetname, parenttargetname, marginLeft, marginTop, userHeight )
	{
		//Get the number values ( in case of a string is passed as parameter ). If error, set to 0
		marginLeft = ( !isNaN( parseInt( marginLeft ) ) ) ? parseInt( marginLeft ) : 0;
		marginTop = ( !isNaN( parseInt( marginTop ) ) ) ? parseInt( marginTop ) : 0;

		if ( !targetname || !parenttargetname )
		{
			Scrollbar.error( "Target or parent-target nspt ecified or empty" );
			return;
		}
		
		//Make the links and images having no border
		document.write( "<style>" );
		document.write( "#" + targetname + "_sbContainer A { border: 0px; } #" + targetname + "_sbContainer IMG { border: 0px }" );
		document.write( "</style>" );
		
		target = document.getElementById( targetname );
		parenttarget = document.getElementById( parenttargetname );
		
		if ( !target || !parenttarget )
		{
			Scrollbar.error( "Invalid target or parent-target\nCheck the spelling ( the names are case-sensitive )" );
			return;
		}
		
		var flUserRatio = ( userHeight ) ? userHeight / parseInt( parenttarget.clientHeight ) : 1;
		
		var parentHeight = parseInt( parenttarget.clientHeight ) * flUserRatio;
		var targetHeight = parseInt( target.clientHeight ) * flUserRatio;
		
		overallHeight = parentHeight;
		
		
		/*if ( overallHeight >= targetHeight )
			return;*/


		var htmlText = "<div id=\"" + targetname + "_sbContainer\" style=\"overflow: hidden; position: absolute; width: 24px; height: auto;\">";
		
			htmlText += "<div class=\"scrollbarButton\" onMouseOut=\"javascript:scrollbarStop()\" onMouseUp=\"javascript:scrollbarStop()\" onMouseDown=\"javascript:setScrollbarScroll( 'up' )\"><img id=\"" + targetname + "_sbUpArrow\" src=\"" + Scrollbar.skinUpArrow + "\" style=\"position: relative;\" /></div>";
			
			
			htmlText += "<div id=\"" + targetname + "_sbBodyContainer\" class=\"scrollbarBody\">"; //auto will be overriden

				
				//Body
				htmlText += ScrollbarBody( Scrollbar.skinBody, targetname + "_sbBody" );
				
				//Dashed line
				htmlText += "<div onMouseOut=\"javascript:scrollbarStop()\" onMouseUp=\"javascript:scrollbarStop()\" onMouseDown=\"javascript:bodyScroll( event ? event : window.event );\" style='position: absolute; top: 0px !important; left: 3px; overflow: hidden; height: " + ( overallHeight + 16 ) + "px;'>" + ScrollbarDashedLine( Scrollbar.skinDashedLine, targetname + "_sbLine" ) + "</div>";
				
			htmlText += "</div>";
			
			htmlText += "<div class=\"scrollbarButton\" onMouseOut=\"javascript:scrollbarStop()\" onMouseUp=\"javascript:scrollbarStop()\" onMouseDown=\"javascript:setScrollbarScroll( 'down' )\"><img id=\"" + targetname + "_sbDownArrow\" src=\"" + Scrollbar.skinDownArrow + "\" style=\"position: relative\" /></div>";
		htmlText += "</div>";
		
		//Write the scrollbar HTML code
		document.write( htmlText );
		
		bodyScroll = function( event )
		{		
			isMozilla = ( document.addEventListener );
			
			if ( !isMozilla )
			{
				if ( typeof e == 'undefined' ) e = window.event;
				if ( typeof e.layerX == 'undefined' ) e.layerX = e.offsetX;
				if ( typeof e.layerY == 'undefined' ) e.layerY = e.offsetY;
			}
		
			var body = document.getElementById( targetname + "_sbBody" );
			var container = document.getElementById( targetname + "_sbContainer" );	
		}
		
		//Get updates very 0.1 second ( the content height may change, so update the scrollbar aswell )
		scrollbarThink = function()
		{	
			//Hauteur minimale de la scrollbar ( en pixels )
			var sbMinimalHeight = 10;
			
			//Update the height values
			flUserRatio = ( userHeight ) ? userHeight / parseInt( parenttarget.clientHeight ) : 1;
			parentHeight = parseInt( parenttarget.clientHeight ) * flUserRatio;
			targetHeight = parseInt( target.clientHeight ) * flUserRatio;
			overallHeight = parentHeight;
			
			//Mozilla firefox ?
			isMozilla = ( document.addEventListener );
			
			//Get the elements as variable names
			var sbContainer = document.getElementById( targetname + "_sbContainer" );
			var sbUpArrow = document.getElementById( targetname + "_sbUpArrow" );	
			var sbDownArrow = document.getElementById( targetname + "_sbDownArrow" );
			var sbBodyContainer = document.getElementById( targetname + "_sbBodyContainer" );
			var sbBody = document.getElementById( targetname + "_sbBody" );
			
			var bodyHeight = overallHeight;
			
			sbContainer.style.left = parenttarget.clientWidth + marginLeft + "px";
			sbContainer.style.top = parenttarget.style.top + marginTop + "px";
			
			sbContainer.style.visibility = ( overallHeight >= targetHeight ) ? "hidden" : "visible";
			
			//Get the scrollbar button and content text ratio etc.
			var ratio = ( ( bodyHeight - sbDownArrow.height ) / targetHeight <= 1 ) ? ( bodyHeight - sbDownArrow.height ) / targetHeight : 1;
						
			sbBodyContainer.style.height = bodyHeight + "px";
			sbBody.style.height = ( bodyHeight - sbDownArrow.height ) * ratio + sbMinimalHeight + "px";
			sbBody.style.width = "16px";
			
			
			
			Drag.init( sbBody, null, 0, 0, 0, bodyHeight + sbMinimalHeight + 1 - parseInt( sbBody.height ) - parseInt( sbDownArrow.height ) + ( ( isMozilla ) ? 0 : 0 ) );
			 
			sbBody.onDrag = function( x, y )
			{
				target.style.top = Math.floor( ( y ) / ( -ratio * flUserRatio  ) ) + "px";
				 
				if ( parseInt( target.style.top ) < ( -targetHeight + overallHeight ) / flUserRatio )
					target.style.top = ( -targetHeight + overallHeight ) / flUserRatio + "px";
			}
			
			//Keyboard listener for the UP / DOWN arrows which scroll the page
			function keyPress( e )
			{
				//Make sure the scrollbar is visible before scrolling
				if ( sbContainer.style.visibility != "visible" )
					return;
					
				isMozilla = ( document.addEventListener );
				eventChooser = ( isMozilla ) ? e.keyCode : event.keyCode;			
				var keyCode = ( String.fromCharCode( eventChooser ) ).charCodeAt( 0 );
				
				if ( keyCode == 38 /* UP ARROW */ )
					scrollbarScroll( 25 );
				else if ( keyCode == 40 /* DOWN ARROW */ )
					scrollbarScroll( -25 );
					
			}
			document.onkeydown = keyPress;
			
			
			scrollbarScroll = function( speed )
			{
				//Make sure the scrollbar is visible before scrolling
				if ( sbContainer.style.visibility != "visible" )
					return;
					
				target.style.top = parseInt( target.style.top ) + speed + "px";
				
				if ( parseInt( target.style.top ) > 0 )
					target.style.top = 0;
				else if ( parseInt( target.style.top ) < ( -targetHeight + overallHeight ) / flUserRatio )
					target.style.top = ( -targetHeight + overallHeight ) / flUserRatio + "px";
					
				sbBody.style.top = -parseInt( target.style.top ) * ratio * flUserRatio + "px";
			}
			
			scrollbarStop = function()
			{
				clearInterval( interval );
			}
		}
		var thinkInterval = setInterval( "scrollbarThink()", 1000 ); //Trigger the updates every 2 sec
		scrollbarThink(); //Call scrollbarThink() once to prevent the scrollbar from being shown on an incorrect place for a short time
		
		//Code fourni par le site: par le site http://adomas.org/javascript-mouse-wheel/plain.html
		function mouseWheel( event )
		{
			var delta = 0;
			
			if ( !event ) 
				event = window.event;
				
			if ( event.wheelDelta )
			{
				delta = event.wheelDelta / 5; 
				if ( window.opera )
					delta = -delta;		
			} 
			else if ( event.detail ) 
			{
				delta = -event.detail * 7;
			}
			if ( delta )
				scrollbarScroll( delta );
				
			if (event.preventDefault)
				event.preventDefault();
				
			event.returnValue = false;
		}
		//Mozilla Firefox
		if ( document.addEventListener )
			document.addEventListener( 'DOMMouseScroll', mouseWheel, false );
		
		// Internet Explorer & Opera.
		document.onmousewheel = mouseWheel;
		
		var interval = null;
		setScrollbarScroll = function( dir )
		{
			switch ( dir )
			{
				case "up":
					scrollbarStop();
					interval = setInterval( "scrollbarScroll( 25 )", 50 ); 
					break;
					
				case "down":
					scrollbarStop();
					interval = setInterval( "scrollbarScroll( -25 )", 50 ); 
					break;
			}
		}
		
		target.style.top = "0px"; //Init the target y position to zero ( 0 )
	}
}


//=============================================================================================
// FONCTIONS MACROMEDIA DREAMWEAVER POUR PERMUTER LES IMAGES
//=============================================================================================
//v3.0
function MM_swapImgRestore()
{ 
	var i, x, a = document.MM_sr;

	for( i = 0; a && i < a.length && ( x = a[i] ) && x.oSrc; i++ )
		x.src = x.oSrc;
}

//v3.0
function MM_swapImage() 
{ 
	var i, j = 0, x, a = MM_swapImage.arguments;
	document.MM_sr = new Array;

	for( i = 0; i < ( a.length - 2 ); i += 3 )
		if ( ( x = getObject( a[i] ) ) != null )
		{
			document.MM_sr[j++] = x; 
			if( !x.oSrc )
				x.oSrc = x.src;
				
			x.src = a[i+2];
		}
}

//=============================================================================================
// FONCTIONS DE THOMAS  POUR PERMUTER LES IMAGES AU FORMAT PNG
//=============================================================================================
function DrawSwapablePNGImage( link, imgsrc, imgoversrc, left, top, id )
{
	left = ( left ) ? left + "px" : "0px";
	top = ( top ) ? top + "px" : "0px";
	link = ( link ) ? link : "";
	
	var imgid = ( id ) ? "id=\"" + id + "\" " : "";
	
	document.write( "<div style='position: absolute; left: " + left + "; top: " + top + ";'>" );
		
		if ( link && link != "" )
			document.write( "<a href=\"" + link + "\" onmouseout=\"javascript:MM_swapPNGImgRestore()\" onmouseover=\"javascript:MM_swapPNGImage( '" + id + "', '', '" + imgoversrc + "', 1 )\">" );
		
		if ( isIE( 6 ) )
			document.write( "<img alt=\"" + imgsrc + "\" src=\"images/spacer.gif\" " + imgid + "style=\"width: auto; height: auto; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + imgsrc + "', sizingMethod = 'image' );\" />" );
		else
			document.write( "<img src='" + imgsrc + "' " + imgid + "alt='' />" );
			
		if ( link && link != "" )
			document.write( "</a>" );
			
	document.write( "</div>" );
}

function MM_swapPNGImgRestore()
{ 
	var i, x, a = document.MM_srpng;

	for( i = 0; a && i < a.length && ( x = a[i] ) && x.oSrc; i++ )
	{
		if ( isIE( 6 ) )
			x.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + x.oSrc + "', sizingMethod = 'image' );";
		else
			x.src = x.oSrc;
	}
}
//v3.0
function MM_swapPNGImage() 
{ 
	var i, j = 0, x, a = MM_swapPNGImage.arguments;
	document.MM_srpng = new Array;

	for( i = 0; i < ( a.length - 2 ); i += 3 )
	{
		if ( ( x = getObject( a[i] ) ) != null )
		{
			document.MM_srpng[j++] = x; 
			if( !x.oSrc )
			{
				if ( isIE( 6 ) )
					x.oSrc = x.alt;
				else
					x.oSrc = x.src;
			}
					
			if ( isIE( 6 ) )
				x.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + a[i+2] + "', sizingMethod = 'image' );";
			else
				x.src = a[i+2];
		}
	}
}

//v3.0
function MM_preloadImages() 
{ 
	var d = document;
	if( d.images )
	{ 
		if( !d.MM_p )
			d.MM_p = new Array();
			
		var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
		
		for( i = 0; i < a.length; i++ )
		{
			if ( a[i].indexOf( "#" ) != 0 )
			{ 
				d.MM_p[j]= new Image;
				d.MM_p[j++].src = a[i];
			}
		}
	}
}

//=============================================================================================
// SPECIAL ALAIN
//=============================================================================================
function drawRandomPictures( linkRef )
{
	linkRef = ( linkRef ) ? linkRef : '#';
	for ( i = 1; i < drawRandomPictures.arguments.length; i++ )
	{
		document.write( "<a href='" + linkRef + "'><img src='" + drawRandomPictures.arguments[i] + "' id='randpic" + i + "' alt='' /></a>" );
		if ( isIE( 6 ) )
			document.write( "<div class='loupe_ie6' id='loupe" + i + "'></div>" );
		else 
			document.write( "<div class='loupe' id='loupe" + i + "'></div>" );
			
		var loupe = getObject( "loupe" + i );
		var randpic = getObject( "randpic" + i );
		
		if ( isIE() )
		{
			loupe.style.left = 98 + "px";
			loupe.style.top = ( 91 ) * i + 23 * ( i - 1 ) + getObject( "randpic1" ).style.top + "px";
		}
		else
		{
			loupe.style.left = 92 + "px";
			loupe.style.top = ( 91 ) * i + 25 * ( i - 1 ) + getObject( "randpic1" ).style.top + "px";
		}
	}
}

//=============================================================================================
// DISPLAY THE "ENGLISH VERSION" TOOLTIP ONCE PER SESSION
//=============================================================================================
function getCookieValue( strCookieName )
{
	var search = strCookieName + "=";
	var returnvalue = "";
	
	if ( document.cookie.length > 0 )
	{
		offset = document.cookie.indexOf( search )
	
		if ( offset != -1 )
		{ 
			// if cookie exists
			offset += search.length
			
			// set index of beginning of value
			end = document.cookie.indexOf( ";", offset );
			
			// set index of end of cookie value
			if ( end == -1 )
				end = document.cookie.length;
				
			returnvalue = unescape( document.cookie.substring( offset, end ) );
		}
	}
	return returnvalue;
}

function ShowTooltip( id, opacityStart, opacityEnd, millisec, src, waitTime ) 
{
	if ( getCookieValue( 'tooltip' ) == '' )
	{
		//Display the tooltip once
		opacity( id, opacityStart, opacityEnd, millisec, src, waitTime );
		document.cookie = 'tooltip=yes';
	}
}

//=============================================================================================
// OPACITY FADING ( original source: http://brainerror.net/scripts/javascript/blendtrans/ )
//=============================================================================================
function opacity( id, opacityStart, opacityEnd, millisec, src, waitTime ) 
{
	//Get the wait time
	waitTime =  ( typeof( waitTime ) != "undefined" ) ? waitTime : 0;
	
	//Set opacity to opacityStart
	changeOpacity( opacityStart, id, src );
	
	//Wait, then fade out
	setTimeout( "startOpacity( '" + id + "', " + opacityStart + ", " + opacityEnd + ", " + millisec + ", '" + src + "' )", waitTime );
}

function startOpacity( id, opacityStart, opacityEnd, millisec, src ) 
{ 
    //speed for each frame 
    var speed = Math.round( millisec / 100 ); 
    var timer = 0; 
	
    //determine the direction for the blending, if start and end are the same nothing happens 
    if ( opacityStart > opacityEnd )
	{ 
        for( i = opacityStart; i >= opacityEnd; i-- )
		{ 
			setTimeout( "changeOpacity( " + i + ", '" + id + "', '" + src + "' )", ( timer * speed ) ); 
			timer++; 
        } 
    } 
	else if ( opacityStart < opacityEnd ) 
	{ 
        for( i = opacityStart; i <= opacityEnd; i++ )
		{ 
			setTimeout( "changeOpacity( " + i + ", '" + id + "' )", ( timer * speed ) ); 
			timer++; 
        } 
    } 
} 

//change the opacity for different browsers 
function changeOpacity( opacity, id, src ) 
{ 
	var object = getObject( id ).style; 
	object.opacity = ( opacity / 100 ); 
	object.MozOpacity = ( opacity / 100 ); 
	object.KhtmlOpacity = ( opacity / 100 ); 
	
	//Apply PNG background for IE PNG images and the alpha filter to the PNG background
	object.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader( src = '" + src + "', sizingMethod = 'image' ) alpha( opacity=" + opacity + " )";
} 