/**
 *	retourne la langue base sur le href
 */
function getLang(){
	var regex = "/(en|fr)/";
	return location.href.match(regex)[0].substring(1, 3);
}

/**
 *	Transforme un formulaire en post
 */
function formToPost(thisForm,addLang){
	var post = "";
	for(var i = 0 ;i < thisForm.elements.length ;i++){
		if (thisForm.elements[i].type != "submit"){
			if (i != 0) {
				post += "&";
			}
			var value = getInputValue(thisForm.elements[i]);
			if(value != null) {
				post += thisForm.elements[i].name + "=" + encode(value);
			}
		}
	}
	if (addLang) {
		post += "&lang=" + getLang();
	}
		
	return post;	
}

/**
 *	retourne la valeur d'un input.
 */
function getInputValue(input){
	
	var value = null;
	
	switch(input.type) {
		case "radio":
		case "checkbox":
			if(!input.checked) {
				break;
			}
		default:
			value = input.value;
			break;	
	}
	
	return value;	
}

/**
 *	retourne la valeur d'un radio
 */
function getRadioValue(radio){
	for(var i=0;i < radio.length;i++)
		if (radio[i].checked)
			return radio[i].value;
	return 0;
}
/**
 * Convertit les valeurs nulles en valeur par défaut.
 *
 * @param str						Valeur à convertir
 * @param defaultValue	Valeur par défaut. 
 *											Si str est null/undefined/"", retourne cette valeur, sinon retourne str
 */
function nullToValue(str, defaultValue) {
	if (str == null || ""+str == "null" || ""+str == "undefined" || ""+str == "") {
		return defaultValue;
	}
	else {
		return str;
	}
}

/**
 * Enlève les espaces au début et à la fin d'une string
 */
function trim(str) {
	var result = str;
	result = result.replace(/^\s+/, ""); // enlève les espaces au début
	result = result.replace(/\s+$/, ""); // enlève les espaces à la fin
	return result;
}

/**
 * Insère (et déplace) un élément HTML après un autre élément
 *
 * @param refNewElement        Référence à l'élément à insérer
 * @param refPrecedentElement  Référence à l'élément après lequel on veut insérer l'élément
 */
function insertAfter(refNewElement, refPrecedentElement) {
	if (refPrecedentElement.nextSibling != null) {
		refPrecedentElement.parentNode.insertBefore(refNewElement, refPrecedentElement.nextSibling);
	}
	else {
		refPrecedentElement.parentNode.appendChild(refNewElement);
	}
}

/**
 * Insère (et déplace) une liste d'éléments HTML après un autre élément
 * 
 * @param tabNodes						Liste de références aux éléments à inserer, dans un Array
 * @param refPrecedentElement	Élément après lequel les éléments vont être insérés
 */
function insertNodeListAfter(tabNodes, refPrecedentElement) {
	var refInsertAfterNode = refPrecedentElement;
	
	for (var i = 0; i < tabNodes.length; i++) {
		var node = tabNodes[i];
		insertAfter(node, refInsertAfterNode);
		refInsertAfterNode = node;
	}
}


/**
 * Convertit une string en booléen.
 * <dl>
 *  <dt>"true" <dd>Retourne true</dd></dt>
 *  <dt>"yes"  <dd>Retourne true</dd></dt>
 *  <dt>"1"    <dd>Retourne true</dd></dt>
 *  <dt>"false"<dd>Retourne false</dd></dt>
 *  <dt>"no"   <dd>Retourne false</dd></dt>
 *  <dt>"0"    <dd>Retourne false</dd></dt>
 * </dl>
 * (Ces valeurs ne sont pas case-sensitive, donc "True"
 *  retournera le même résultat que "true")
 *
 * @param  str          String à convertir
 * @param  defaultValue Valeur à retourner si str ne correspond
 *                      à aucune des valeurs de la fonction.
 */
function stringToBool(str, defaultValue) {
  var result;

	if (str == null) {
		result = defaultValue;
	}
	else {
		var lowerStr = (""+str).toLowerCase();
		if ((lowerStr == "true") || (lowerStr == "yes") || (lowerStr == "1")) {
			result = true;
		}
		else if ((lowerStr == "false") || (lowerStr == "no") || (lowerStr == "0")) {
			result = false;
		} else {
			result = defaultValue;
		}
	}

  return result;
}


/**
 * Enlève des / ou \ au début ou à la fin d'un nom de fichier
 */
function trimSlashes(fileName) {
	var result = fileName;
	result = result.replace(/^[\/\\]/g, "");
	result = result.replace(/[\/\\]$/g, "");
	return result;
}

/**
 * Ajoute un slash à la fin d'un nom de répertoire, mais
 * seulement si ce nom ne se termine pas déjà un slash
 */
function appendSlash(folderName) {
	var result = folderName;
	var lastChar = result.substring(result.length-1);
	
  if ((lastChar != "/") && (lastChar != "\\")) {
		result += "/";
	}
	return result;
}


/**
 * Retourne la position absolue d'un élément HTML
 *
 * @param i     Référence à l'élément
 * @param which String contenant le nom de la coordonnée qu'on veut
 *              ("Top" ou "Left")
 */
function getRealPos(i,which) {
	var iPos = 0;
	while (i!=null) {
	 	iPos += i["offset" + which];
		i = i.offsetParent;
	}
	return iPos;
}

/**
 * Assigne à tous les checkbox d'un formulaire dont le nom
 * commence par namePrefix une nouvelle valeur
 *
 * @param newValue		Nouvelle valueur à assigner à checked (true ou false)
 * @param namePrefix	Début du nom des checkbox dont la valeur sera modifiée
 * @param	refForm			Référence au formulaire dans lequel la modification sera faite
 */
function toggleAll(newValue, namePrefix, refForm) {
	var refElements = refForm.elements;

	for (var i = 0; i < refElements.length; i++) {
		var refElement = refElements[i];
		if (refElement && refElement.name) {  // les éléments n'ont pas tous nécessairement un nom (par exemple les fieldset)
			if (refElement.name.substring(0, namePrefix.length) == namePrefix) {
				refElement.checked = newValue;
			}
		}
	}
}

function setAttribute(refNode, attributeName, attributeValue) {
	var refAttr = refNode.attributes.getNamedItem(attributeName);
	if (!refAttr) {
		refAttr = refNode.ownerDocument.createAttribute(attributeName);
		refNode.attributes.setNamedItem(refAttr);
	}
	
	refAttr.value = attributeValue;	
}

function getAttributeValue(refNode, attributeName) {
	var refAttr = refNode.attributes.getNamedItem(attributeName);
	if (refAttr) {
		return refAttr.value;
	}
	else {
		return "";
	}
}


function removeFromArray(refArray, elementIndex) {
	if ((elementIndex < refArray.length) && (elementIndex > -1)) {
		for (var i = elementIndex; i < refArray.length; i++) {
			refArray[i] = refArray[i+1];
		}
	
		refArray.length--;
	}
}

function findElementIndex(refArray, refElement) {
	var result = -1;
	
	for (var i = 0; (i < refArray.length) && (result == -1); i++) {
		if (refArray[i] == refElement) {
			result = i;
		}
	}
	
	return result;
}

/**
 * Fonction pour mettre à jour la valeur d'un champ de façon uniforme:
 * Peut être utilisé de la même façon pour un <select> et pour un <input>
 */
function setFieldValue(refField, newValue) {
	if (refField.options) {
		// select
		for (var i = 0; i < refField.options.length; i++) {
			if (refField.options[i].value == newValue) {
				refField.selectedIndex = i;
			}
		}
	}
	else {
		refField.setAttribute("value", newValue);
	}
}

function replaceInString(car, rep, str){
	var newStr = "" + str;
	var toto = new Array();
	toto = newStr.split(car);
	newStr = "";
	for(i=0; i<(toto.length)-1; i++){
		newStr += toto[i] + rep;
	}
	newStr += toto[(toto.length)-1];

	return newStr;
}

function limiterInput(ref_input,keycode,regexp){
	var c = String.fromCharCode(keycode);
	return (regexp.test(c));
}

function replaceEntityReferences(str)
{
	str = "" + str;
	str = str.replace(/\&\agrave\;/g,String.fromCharCode(224));
	str = str.replace(/\&\Agrave\;/g,String.fromCharCode(192));
	str = str.replace(/\&\acirc\;/g,String.fromCharCode(226));
	str = str.replace(/\&\Acirc\;/g,String.fromCharCode(194));
	str = str.replace(/\&\ccedil\;/g,String.fromCharCode(231));
	str = str.replace(/\&\Ccedil\;/g,String.fromCharCode(199));
	str = str.replace(/\&\eacute\;/g,String.fromCharCode(233));
	str = str.replace(/\&\Eacute\;/g,String.fromCharCode(201));
	str = str.replace(/\&\egrave\;/g,String.fromCharCode(232));
	str = str.replace(/\&\Egrave\;/g,String.fromCharCode(200));
	str = str.replace(/\&\ecirc\;/g,String.fromCharCode(234));
	str = str.replace(/\&\Ecirc\;/g,String.fromCharCode(202));
	str = str.replace(/\&\euml\;/g,String.fromCharCode(235));
	str = str.replace(/\&\Euml\;/g,String.fromCharCode(203));
	str = str.replace(/\&\icirc\;/g,String.fromCharCode(238));
	str = str.replace(/\&\Icirc\;/g,String.fromCharCode(206));
	str = str.replace(/\&\iacute\;/g,String.fromCharCode(237));
	str = str.replace(/\&\Iacute\;/g,String.fromCharCode(205));
	str = str.replace(/\&\ntilde\;/g,String.fromCharCode(241));
	str = str.replace(/\&\ocirc\;/g,String.fromCharCode(244));
	str = str.replace(/\&\Ocirc\;/g,String.fromCharCode(212));
	str = str.replace(/\&\ucirc\;/g,String.fromCharCode(251));
	str = str.replace(/\&\Ucirc\;/g,String.fromCharCode(219));
	str = str.replace(/\&\ugrave\;/g,String.fromCharCode(249));
	str = str.replace(/\&\Ugrave\;/g,String.fromCharCode(217));
	str = str.replace(/\&\Uacute\;/g,String.fromCharCode(218));
	str = str.replace(/\&\uacute\;/g,String.fromCharCode(250));

	for (var i = 0; i < 255; i++) {
		var reReplace = eval("/\\&\\#0*" + i + ";/g");
		str = str.replace(reReplace, String.fromCharCode(i));
	}

	return str;
}

function getRadioValue(radioObject){
	var value = null;
	
	if(radioObject.length) {
		for (var i=0; i<radioObject.length; i++) {
			if (radioObject[i].checked) {
				value = radioObject[i].value;
				break; 
			}
		}
	}
	else {
		if (radioObject.checked) {
			value = radioObject.value;
		}
	}
	return value;
}


function toggleVisibility(elementId){
	var div = document.getElementById(elementId);
	if (div.style.display != 'block'){
		div.style.display = 'block';
	}else{
		div.style.display = 'none';
	}
}

/**
 * Renvoit le  parametre sParam de la requete HTTP en cours
 */
location.getParameter = function(sParam) {

    var sKey = sParam + "=";

    var oParams = this.search.substring(1).split("&");
    var result;            
    var lsRegExp = /\+/g;

    for(var i = 0; i < oParams.length; i++)
        if(oParams[i].indexOf(sKey) == 0){
            result = oParams[i].substring(sKey.length);
  					return unescape(String(result).replace(lsRegExp, " "));
        }
    return "";
};

function IsEmailAddressValid(strEmailAddress)
{
	var bAtFound;
	var bDotFound;
	var i;
	
	bAtFound = false;
	bDotFound = false;
	for (i = 0; i < strEmailAddress.length; i++)
	{
		if (strEmailAddress.charAt(i) == '@')
		{
			bAtFound = true;
		}
		if (strEmailAddress.charAt(i) == '.')
		{
			bDotFound = true;
		}
		if (strEmailAddress.charAt(i) == ' ')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == ',')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == ';')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == '<')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == '>')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == '\'')
		{
			return false;
		}
		if (strEmailAddress.charAt(i) == '\"')
		{
			return false;
		}
	}
	if (!bAtFound || !bDotFound)
	{
		return false;
	}
	return true;
}


function CheckAll()
	{
	if(!IsEmailAddressValid(document.formCarte.email.value)) 		
		alert ("Le champ \ n'est pas valide. ")		
	else
		document.formCarte.submit();	
	
	}
	
function swapNodes(node1, node2) {
  var nextSibling = node2.nextSibling;
  if(nextSibling == node1) {
  	nextSibling = node2;
  }
  var parentNode1 = node1.parentNode;
  var parentNode2 = node2.parentNode;
  parentNode1.replaceChild(node2, node1);
  if(nextSibling == null) {
  	parentNode2.appendChild(node1);
  }
	else {
  	parentNode2.insertBefore(node1, nextSibling);
  }
}

function showHide(name,prefix){
	if (document.getElementById(name).checked)
		document.getElementById(prefix + name).style.display = "block";
	else
		document.getElementById(prefix + name).style.display = "none";
}