// FILE		navigatorUtils.js
// DATE		2004/02/20 11:33:12
//
// AUTHOR
//	Xavier Lacot <xavier@lacot.org>
//
// 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);

// Internet Explorer
var ie = ((agent.indexOf("msie") != -1) && !opera);

// Version sup?rieure ? la version 4
var ie5 = (ie && (major >= 4));

// netscape ?
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.event && document.captureEvents )
{
 	document.captureEvents(Event.MOUSEMOVE);
}

document.onmousemove = getMousePosition;


// accesseurs

/* retourne l'ensemble des ?l?ments appartenant ? une classe
 *
 * @param	string		nom de la classe recherch?e
 */
document.getElementByClass = function(classe)
{
	var resultat = new Array();

	if ( !document.evaluate )
	{
		var tousElements = document.getElementsByTagName("div");
		var i;
		var j;

		for ( i = 0, j = 0; i < tousElements.length; i++ )
		{
			var c = " " + tousElements[i].className + " ";
			if ( c.indexOf(" " + classe + " ") != -1 )
			resultat[j++] = tousElements[i];
		}
	}
	else
	{
		var resultatXPath = document.evaluate("//*[@class = \"" + classe + "\"]", document, null, 0, null);
		var element = resultatXPath.iterateNext();

		while ( element )
		{
			resultat[resultat.length] = element;
			element = resultatXPath.iterateNext();
		}
	}

	return resultat;
}


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 ( document.getElementById(id_object) )
	{
		return document.getElementById(id_object);
	}
	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];
	}
	else
	{
		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 getRadioValue(name)
{
	var inputs = document.getElementsByTagName("input");

	var i = 0;
	while ( i < inputs.length )
	{
		if ( (inputs[i].type == "radio") 
				&& (inputs[i].name == name) 
				&& inputs[i].checked)
		{
			return inputs[i].value;
		}

		i++;
	}

	return false;
}


function getWindowHeight()
{
	if ( window.innerHeight )
	{
		return window.innerHeight;
	}
	else if ( document.body.clientHeight )
	{
		return document.body.clientHeight;
	}
	else
	{
		return false;
	}
}


// modificateurs
function disableObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.disabled = "disabled";
		return true;
	}
	else
	{
		return false;
	}
}


function disableFormObject(id_object)
{
	var myObject;
	if ( myObject = getObject(id_object) )
	{
		myObject.disabled = "disabled";
		return true;
	}
	else
	{
		return false;
	}
}


function displayObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.display = "";
		return true;
	}
	else
	{
		return false;
	}
}


function enableObject(id_object)
{
	var myObject;
	if ( myObject = getObjectStyle(id_object) )
	{
		myObject.disabled = null;
		return true;
	}
	else
	{
		return false;
	}
}


function enableFormObject(id_object)
{
	var myObject;
	if ( myObject = getObject(id_object) )
	{
		myObject.disabled = null;
		return true;
	}
	else
	{
		return false;
	}
}


function hideObject(id_object)
{
	var myObject = getObjectStyle(id_object);
	if ( ns4 )
	{
		myObject.visibility = "hide";
	}
	else
	{
		myObject.visibility = "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;
	}
	else
	{
		return false;
	}
}


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)
{
	document.getElementById(id_object).className = className;
}


function setObjectContent(id_object, content)
{
	var myObject;
	if ( myObject = getObject(id_object) )
	{
		myObject.innerHTML = content;
		return true;
	}
	else
	{
		return false;
	}
}


/* 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)
{
	var old_url = document.getElementById(id_object).src;
	url = old_url.substr(0, old_url.lastIndexOf("/")) + "/" + 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 setObjectId(id_object, new_id_object)
{
	var myObject;
	if ( myObject = getObject(id_object) )
	{
		myObject.setAttribute("id", new_id_object);
		return true;
	}
	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 setObjectX(id_object, x)
{
	var myObject = getObjectStyle(id_object);

	myObject.pixelLeft = x;
	x = "" + x;

	if ( (x.substr(x.length - 2, 2) != "px") 
		&& (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;
	}
}


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;
	}
}


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;

	// 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 )
				{
					promosVolsHandleResponse(xmlhttp);
				}
			}
		}

		// opens the service through GET or POST
		if ( method == "GET" )
		{
			if( data == "null" )
			{
				xmlhttp.open("GET", url, true);
			}
			else
			{
				xmlhttp.open("GET", url + "?" + data, true);
			}

			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);
		}
	}
}

