// FILE		functions.js
// DATE		2004/02/20 11:33:12
//
//
// DESCRIPTION
//	Ecmascript common functions.
//
// LICENCE
//	This source file comes from the website http://www.lacot.org/ ans 
//	is published under the Creative Commons Attribution-ShareAlike 2.5 
//	License. To view a copy of this license, visit 
//	http://creativecommons.org/licenses/by-sa/2.5/ or send a letter to 
//	Creative Commons, 543 Howard Street, 5th Floor, San Francisco, 
//	California, 94105, USA.

// détection du navigateur
var agent = navigator.userAgent.toLowerCase();
var major = parseInt(navigator.appVersion);
var minor = parseFloat(navigator.appVersion);

var opera = (agent.indexOf('opera') != -1);
var opera5 = ((agent.indexOf('opera 5') != -1) || (agent.indexOf('opera/5') != -1));
var opera6 = (opera && (major == 6) && !opera5);
var opera7 = (opera && (major == 7) && !opera5 && !opera6);

// un mac ?
var mac = (agent.indexOf('mac') != -1);

// Safari
var safari = ( navigator.userAgent.indexOf("Safari") > 0 );

// Internet Explorer
var ie = ((agent.indexOf("msie") != -1) && !opera);
var ie6 = ((agent.indexOf("msie 6") != -1) && !opera);
var ie7 = ((agent.indexOf("msie 7") != -1) && !opera);

// Version supérieure à la version 4
var ie5 = (ie && (major >= 4));

var ns = ( (agent.indexOf('mozilla') != -1) && (agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1) && !opera );
var ns4 = (ns && (major >= 4 && major < 5));
var ns6 = (ns && (major >= 5));

// propriétés supplémentaires du navigateur
var documentall = (document.all) ? 1 : 0;
var windowprint = (window.print) ? 1 : 0;

// gestion de la position de la souris
var global_mouse_x;
var global_mouse_y;
if(window.dvent && document.captureEvents)
{
 	document.captureEvents(Event.MOUSEMOVE);
}

document.onmousemove = getMousePosition;


// modificateurs
function centerOnWindow(id_object)
{
	var w = getObjectWidth(id_object);
	var h = getObjectHeight(id_object);
	var x = (getWindowWidth() - w) / 2;
	var y = (430 - h) / 2;//(getWindowHeight() - h) / 2;
	moveObject(id_object, x, y);
}


function OnPageLoad()
{
	if (typeof global_step_number != "undefined")
	{
		switch( global_step_number )
		{
		case "1" : 
			var header = document.getElementById("hautdepage");
			var topBiaisFinancing = 0;
			if (header != null)
			{
				topBiaisFinancing = 28;
			}
			
			var sfgPart = document.getElementById("SFG_BA_Zone");
			var fujiPart = document.getElementById("Fuji_BA_Zone");
			if (ie6)
			{
				if (sfgPart != null)
				{
					sfgPart.style.top = 395 + topBiaisFinancing + "px";
				}
				
				if (fujiPart != null)
				{
					fujiPart.style.top = 395 + topBiaisFinancing + "px";
				}
			}
			else
			{
				if (sfgPart != null)
				{
					sfgPart.style.top = 399 + topBiaisFinancing + "px";
				}
				
				if (fujiPart != null)
				{
					fujiPart.style.top = 399 + topBiaisFinancing + "px";
				}
			}
			break;
		default :		
			break;
		}
	}
	removeObject("wait_step1");
	//JFL 20070416
	//UpdatePriceTooltip();
	//MoveToolbar();
}

function MoveToolbar()
{
	var toolBar = document.getElementById('operations');
	if (toolBar != null)
	{
		var steps = document.getElementById('listeEtapes');
		if (steps != null)
		{
			// On cale la barre d'outils en bas de la bannière
			toolBar.style.display = "block";
			toolBar.style.top = (steps.offsetTop - toolBar.offsetHeight) + "px";
		}
	}
}

function PerformClick(buttonID)
{
	var button = document.getElementById(buttonID);
	if (button != null && button.click != null)
		button.click();
}


function IsNullOrEmpty(s)
{
	return (typeof (s) == "undefined" || s == null || s == "");
}

function displayObject(id_object)
{
	var myObject;
	
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.display = "";
		return true;
	}
	else
	{
		return false;
	}
}

/* SFGACFR */
function displayBlockObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.display = "block";
		return true;
	}
	else
	{
		return false;
	}
}

function displayInlineObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.display = "inline";
		return true;
	}
	else
	{
		return false;
	}
}
/* SFGACFR */

// accesseurs
function getMousePosition(e)
{
	if ( !e )
	{
		var e = window.event || window.Event;
	}

	if ( e.clientX )
	{
		global_mouse_x = e.clientX;
		global_mouse_y = e.clientY;
	}
	else
	{
		if ( e.pageX )
		{
			global_mouse_x = e.pageX;
			global_mouse_y = e.pageY;
		}	
	}
}


function getMouseX(e)
{
	return global_mouse_x;
}


function getMouseY(e)
{
	return global_mouse_y;
}


function getObject(id_object)
{
/*	if (id_object == null || id_object = "")
		return null;*/

	var obj = document.getElementById(id_object);
	if (obj != null)
		return obj;
	
	if (document.layers != null)
	{
		obj = eval("document." + id_object);
		if (obj != null)
			return obj;
	}
	
	if (document.all != null)
	{
		obj = document.all[id_object];
		if (obj != null)
			return obj;
	}

	return false;
}


function getObjectStyle(id_object)
{
	if ( document.getElementById(id_object) )
	{
		return document.getElementById(id_object).style;
	}
	else if ( document.layers && eval("document." + id_object) )
	{
		var myObject = eval("document." + id_object);
		return myObject;
	}
	else if ( document.all && document.all[id_object] )
	{
		return document.all[id_object].style;
	}
	else
	{
		return false;
	}
}


function getObjectContent(id_object)
{
	return document.getElementById(id_object).innerHTML;
}


function getObjectLeft(id_object)
{
	var myObject = getObjectStyle(id_object);
	switch ( myObject.position )
	{
		case "absolute" :
			if ( typeof(myObject.pixelLeft) != "undefined" )
			{
				// IE or Opera versions 4 or less
				return myObject.pixelLeft;
			}
			else if ( myObject.left.substr(myObject.left.length - 2, 2) == "px" )
			{
				// IE4 returns the position with "px" at the end
				return parseInt(myObject.left.substr(0, myObject.left.length - 2));
			}
			else
			{
				alert(myObject.left);
				return myObject.left;
			}
			break;
		default :
			// object placed in position: relative
			if ( document.getElementById )
			{
				return document.getElementById(id_object).offsetLeft;
			}
			else
			{
				return false;
			}
			break;
	}
}

function getObjectSrc(id_object)
{
	x = document.getElementById(id_object);
	return x.src;
}

function getObjectTop(id_object)
{
	var myObject = getObjectStyle(id_object);

	switch ( myObject.position )
	{
		case "absolute" :
			if ( typeof(myObject.pixelTop) != "undefined" )
			{
				// IE or Opera versions 4 or less
				return myObject.pixelTop;
			}
			else if ( myObject.top.substr(myObject.top.length - 2, 2) == "px" )
			{
				// IE4 returns the position with "px" at the end
				return parseInt(myObject.top.substr(0, myObject.top.length - 2));
			}
			else
			{
				return myObject.top;
			}
			break;
		default :
			// object placed in position: relative
			if ( document.getElementById )
			{
				return document.getElementById(id_object).offsetTop;
			}
			else
			{
				return false;
			}
			break;
	}
}

function getWindowHeight()
{
	if ( window.innerHeight )
	{
		return window.innerHeight;
	}
	else if ( document.body.clientHeight )
	{
		return document.body.clientHeight;
	}
	else
	{
		return false;
	}
}

function getWindowWidth()
{
	if ( window.innerWidth )
	{
		return window.innerWidth;
	}
	else if ( document.body.clientWidth )
	{
		return document.body.clientWidth;
	}
	else
	{
		return false;
	}
}


function getObjectPosition(obj) 
{
	var curleft = curtop = 0;
	var obj2 = obj;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curleft -= obj.scrollLeft
		curtop = obj.offsetTop
		curtop -= obj.scrollTop
		
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
//			curleft -= obj.scrollLeft
			curtop += obj.offsetTop
//			curtop -= obj.scrollTop
		}
		while (obj2 = obj2.parentNode)
		{
			if (obj2.scrollLeft != "undefined" && obj2.scrollLeft != null && obj2.tagName != "HTML" )
			{
				curleft -= obj2.scrollLeft
			}
			if (obj2.scrollTop != "undefined" && obj2.scrollTop != null && obj2.tagName != "HTML")
			{
				curtop -= obj2.scrollTop
			}
		}
		
	}
	return [curleft,curtop];
}

function getObjectHeight(id_object)
{
	var object = document.getElementById(id_object);
	return (object != null) ? object.offsetHeight : 0;
}

function getObjectWidth(id_object)
{
	var object = document.getElementById(id_object);
	return (object != null) ? object.offsetWidth : 0;
}

function hideObject(id_object)
{
	var myObject = getObjectStyle(id_object);
	myObject.visibility = ns4 ? "hide" : "hidden";
}

function moveObject(id_object, x, y)
{
	setObjectX(id_object, x);
	setObjectY(id_object, y);
}


function removeObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.display = "none";
		return true;
	}
	return false;
}



//change the opacity for different browsers
function changeOpac(opacity, id) 
{ 
	var object = document.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function opacity(id, opacStart, opacEnd, millisec)
{ 
	var speed = Math.round(millisec / 100); 
	var timer = 0; 
	if(opacStart > opacEnd)
	{ 
		for(i = opacStart; i >= opacEnd; i--) 
		{ 
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
			timer++; 
		} 
	} 
	else if(opacStart < opacEnd) 
	{ 
		for(i = opacStart; i <= opacEnd; i++) 
		{ 
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
			timer++; 
		} 
	} 
}

// Update class property 
function setElementStyleByClassName(cl, propertyName, propertyValue) 
{
    if (!document.getElementsByTagName) return;
    var re = new RegExp("(^| )" + cl + "( |$)");
    var el = document.all ? document.all :
      document.getElementsByTagName("body")[0].getElementsByTagName("*");
      
    for (var i = 0; i < el.length; i++) 
    {
        if (el[i].className &&  el[i].className.match(re)) 
        {
            el[i].style[propertyName] = propertyValue;            
        }
    }
}

function setObjectBackgroundImage(id_object, url)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.background = url;
		myObject.backgroundImage = url;
		return true;
	}
	else
	{
		return false;
	}
}


function setObjectClassName(id_object, className)
{
	var object = document.getElementById(id_object);
	if (object != null)
		object.className = className;
	else
	{
		//Erreur élément non trouvé
		//alert(e.message + " / id_object = " + id_object + " / className = " + className);
	}
}

function setObjectContent(id_object, content)
{
	var object = document.getElementById(id_object);
	if (object != null)
		object.innerHTML = content;
}

/* Similar to setObjectSrc(), but only changes the file name, not the path
 *
 * @param	string		object name
 * @param	string		filename of the new ressource
 */
function setObjectFileSrc(id_object, url)
{	
	setObjectSrc(id_object, url);
}

function setObjectHeight(id_object, value)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		if ( myObject.height )
		{
			myObject.height = value + "px";
		}
		else if ( myObject.pixelHeight )
		{
			myObject.pixelHeight = value;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

function setObjectMarginTop(id_object, value)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.marginTop = value;
	}
	else
	{
		return false;
	}
}


function setObjectSrc(id_object, url)
{
	document.getElementById(id_object).src = url;
}

function setObjectWidth(id_object, value)
{
	if (value < 0)
		return false;

	var myObject;
	if (myObject = getObjectStyle(id_object))
	{
		if ( myObject.width )
		{
			myObject.width = value + "px";
		}
		else if ( myObject.pixelwidth )
		{
			myObject.pixelwidth = value;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

function setObjectX(id_object, x)
{
	var myObject = getObjectStyle(id_object);
	
	if ( !myObject )
	{
		alert("erreur de d\351placement de " + id_object);
	}

	myObject.pixelLeft = x;
	
	//if ( (x.substr(x.length - 2, 2) != "px") 
	//	&& (myObject.left.substr(myObject.left.length - 2, 2) == "px") )
	//if (myObject.left.substr(myObject.left.length - 2, 2) == "px")
	//{
		// IE4/Mozilla need the position with "px" at the end
		myObject.left = x + "px";
	//}
	//else
	//{
	//	myObject.left = x + "px";
	//}
}


function setObjectY(id_object, y)
{
	var myObject = getObjectStyle(id_object);
	
	myObject.pixelTop = y;

	//if ( myObject.top.substr(myObject.top.length - 2, 2) == "px" )
	//{
		// IE4/Mozilla need the position with "px" at the end
		myObject.top = y + "px";
	//}
	//else
	//{
	//	myObject.top = y + "px";
	//}
}


function setObjectZIndex(id_object, zIndex)
{
	var myObject = getObjectStyle(id_object);
	myObject.zIndex = zIndex;
}


function showObject(id_object)
{
	var myObject = getObjectStyle(id_object);
	if ( ns4 )
	{
		myObject.visibility = "show";
	}
	else
	{
		myObject.visibility = "visible";
	}
}




/* Fonctions tirées de OpenWeb (http://www.openweb.eu.org/
 */

/* XMLHttpRequest object creation, depending on the browser's capacities
 */
function getHTTPObject()
{
	var xmlhttp = false;
	
	// ATTENTION: CECI N'EST PAS UN COMMENTAIRE !
	// Conditionnal compilation for IE:
	/*@cc_on
	@if ( @_jscript_version >= 5 )
		try
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				xmlhttp = false;
			}
		}
	@else
		xmlhttp = false;
	@end @*/

	// object creation if not already done (other browsers than IE)
	if ( !xmlhttp && typeof(XMLHttpRequest) != "undefined" )
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlhttp = false;
		}
	}
	return xmlhttp;
}

/* sends the XMLhttpRequest
 */
function sendData(method, url, data)
{	
	var xmlhttp = getHTTPObject();

	if ( !xmlhttp )
	{		
		return false;
	}
	else
	{
		// we have a fully functionnable xmlhttp object

		// attaches a function when response available
		
		xmlhttp.onreadystatechange = function()
		{			// state 4 : complete state
			if ( xmlhttp.readyState == 4 )
			{				
				// http 200 : ok
				if ( xmlhttp.status == 200 )
				{					
					financing_handleResponse(xmlhttp);
				}
			}
		}

		// opens the service through GET or POST
		if ( method == "GET" )
		{
			if( data == "null" )
			{
				xmlhttp.open("GET", url, false);
			}
			else
			{
				xmlhttp.open("GET", url + "?" + data, false);
			}
			xmlhttp.send(null);
		}
		else if ( method == "POST" )
		{
			xmlhttp.open("POST", url, true);
			// we're sending POST data => form urlencoded Content-Type
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlhttp.send(data);
		}
	}
}




var tools_fades = new Array();

function Tools_CreateGuid()
{
	var d = new Date();
	return "" + d.getHours() + d.getMinutes() + d.getSeconds() + d.getMilliseconds();
}

function Tools_SetAlpha(id, value)
{
	var obj = document.getElementById(id);
	if (obj != null)
	{
		var object = obj.style;
		object.opacity = (value / 100); 
		object.MozOpacity = (value / 100); 
		object.KhtmlOpacity = (value / 100); 
		object.filter = "alpha(opacity=" + value + ")"; 
	}	
}

function Tools_Fade(id, start, end)
{ 
	var step = (start < end) ? 1 : -1;
	var timer = 0;

	var fadeId = Tools_CreateGuid();
	tools_fades[id] = fadeId;
	for (var i = start; i != end; i += step)
	{ 
		// On doit vérifier qu'il n'y a pas deux fondus simultanés sur le même objet
		var check = "if (tools_fades['" + id + "'] == '" + fadeId + "')";
		setTimeout(check + "Tools_SetAlpha('" + id + "', " + i + ")", (timer * 7)); 
		timer++;
	}
}

function Tools_Fade_Home(id)
{ 
	var start = -0.5 * Math.PI;
	var end = 6.5 * Math.PI;
	
	var step = 0.2;
	var timer = 0;
	
	/* var fadeId = Tools_CreateGuid();
	 tools_fades[id] = fadeId; */
	for (var i = start; i <= end; i += step)
	{ 
		// On doit vérifier qu'il n'y a pas deux fondus simultanés sur le même objet
		var alpha = ((Math.sin(i) + 1) * 0.5) * 100;
		// alert(alpha);
		/* var check = "if (tools_fades['" + id + "'] == '" + fadeId + "')"; */
		setTimeout(/* check +*/ "Tools_SetAlpha('" + id + "', " + alpha + ")", timer); 
		
		timer += 20;
	}
}



