/*
 * Copyright (c) 2009-2011 ReactivOn SAS
 * All rights reserved.
 *
 * Author: Guillaume BERNARD
 * Date: 16 Mars 2009
 * MAJ : 09/09/2010
 * 
 * Boite a outils pour les fonctions js d'affichage
 */


/**
 * Retour le type du navigateur Web utilisé par l'internaute
 */
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

// Dans le cas ou l'utilisateur est sous IE < version 7 et qu'il n'a pas ete redirige vers la page d'incompatibilite alors BLOQUE
if(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7 && window.location.href.indexOf("m=incomp") == -1) {
	window.location.replace("./index.php?m=incomp");
}



/**
 * Prechargement des images utilisees sur les elements onclick ou onhover
 */
function preloader()
{
	 var i = 0;
	 imageObj = new Image();
	 images = new Array();
	 
	 images[0]="/img/contact_by_moins.png";
	 images[1]="/img/bg_cible_on.png";

	 for(i=0; i<1; i++) {
		  imageObj.src=images[i];
	 }
}


function popup_centre(page,largeur,hauteur,options) {     
	var top=(screen.height-hauteur)/2;     
	var left=(screen.width-largeur)/2;     
	window.open(page,"","top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
} 


function centrer(element){
	if (document.getElementById) {
		var windowHeight = get_page_size('windowHeight');
		if (windowHeight > 0) {
			var Elem = get_id(element);

			var dimensions = get_dimensions(element);
			var offset_left = (get_page_size('windowWidth') - dimensions.width) / 2 + 'px';

			if (windowHeight - 25 >= 0) {
				if ((document.all) && (navigator.appVersion.indexOf("Mac",0)<0)) {
					Elem.style.position = 'absolute';
					Elem.style.top = (document.body.scrollTop + windowHeight - 25) + 'px';
					var offset_top = document.body.scrollTop + (windowHeight - dimensions.height) / 2 -25 + 'px';
				}else {
					Elem.style.position = 'fixed';
					var offset_top = ((windowHeight - dimensions.height)/2) + 'px';
				}
			}else {
				Elem.style.position = 'static';
			}
			Elem.style.top=offset_top;
			Elem.style.left=offset_left;
		}
	}
}


function get_page_size(type,finition){
	var xScroll,yScroll;
	if(window.innerHeight&&window.scrollMaxY){
		xScroll=document.body.scrollWidth;
		yScroll=window.innerHeight+window.scrollMaxY;
	}else if(document.body.scrollHeight>document.body.offsetHeight){
			xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;
	}else{
			xScroll=document.body.offsetWidth;
			yScroll=document.body.offsetHeight;
	}
	var windowWidth,windowHeight;
	if(self.innerHeight){
		windowWidth=self.innerWidth;windowHeight=self.innerHeight;
	}else if(document.documentElement&&document.documentElement.clientHeight){
		windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;
	}else if(document.body){
		windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;
	}
	if(yScroll<windowHeight){
		pageHeight=windowHeight;
	}else{
		pageHeight=yScroll;
	}
	if(xScroll<windowWidth){
		pageWidth=windowWidth;
	}else{
		pageWidth=xScroll;
	}
	arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	
	if(type == 'hauteurDIV2') return pageHeight/2;
	else if(type == 'pageWidth') return pageWidth;
	else if(type == 'pageHeight') return pageHeight;
	else if(type == 'windowWidth') return windowWidth;
	else if(type == 'windowHeight') return windowHeight;
	else{
		if(finition != "") return pageHeight;
		else return pageHeight+'px';
	}
}


function get_dimensions(elem) {
	var element = get_id(elem);
	var display = element.style.display;
	if (display != 'none' && display != null) 
	  return {width: element.offsetWidth, height: element.offsetHeight};

	var els = element.style;
	var originalVisibility = els.visibility;
	var originalPosition = els.position;
	var originalDisplay = els.display;
	els.visibility = 'hidden';
	els.position = 'absolute';
	els.display = 'block';
	var originalWidth = element.clientWidth;
	var originalHeight = element.clientHeight;
	els.display = originalDisplay;
	els.position = originalPosition;
	els.visibility = originalVisibility;
	
	return {width: originalWidth, height: originalHeight};
}


/**
 * Extension de la fonction SPLIT qui ne permet ni la selection par delimiteur de debut et de fin
 * et egalement avec un parametre de LONGUEUR de chaine apres le delimiteur de depart (celui de fin etant optionnel)
 *
 * @param $delimiter Chaine de caractere apres laquelle il faut recuperer le texte
 * @param $delimiter_off (optionnel) Chaine de caractere permettant de determiner l'intervalle de texte a retourner
 * @param $string Chaine de caracteres BRUTE ou doit etre faite l'extraction
 * @param $limit (optionnel)
 *
 * @return Valeur de la chaine recherchee
 */
function explode( delimiter, delimiter_off, string, limit ) {
    // *     example 1: explode('src=\"', '.png' '<img src=\"./img/ico_lang_fr_off.png\" border=\"0\" id=\"ico_lang_fr\">');
    // *     return 1: './img/ico_lang_fr_off'
    // *     example 2: explode('src=\"', '' '<img src=\"./img/ico_lang_fr_off.png\" border=\"0\" id=\"ico_lang_fr\">', '5');
    // *     returns 2: './img'
 
    var emptyArray = { 0: '' };
    
    if ( arguments.length < 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined' ) {
        return null;
    }
 
 	// Le premier delimiteur est obligateur pour connaitre les premiers caracteres a extraire
    if ( delimiter === '' || delimiter === false || delimiter === null ) {
        return false;
    }
 
    if ( typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object' ) {
        return emptyArray;
    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }
    
    // La limite de longueur de chaine a recuperer est prioritaire
    if (!limit) {
    	if ( delimiter_off === '' ){
    		// Decoupe STRING dans un tableau avec le texte avant et apres le delimiteur de debut
			
    		var splitted = string.toString().split(delimiter.toString());
			
    		// Aucun delimiteur de fin et de longueur de chaine n'ont ete determines donc retourne TOUT APRES delimiteur de depart
    		return splitted[1];
    	}else{
    		var splitted = string.toString().split(delimiter.toString());
    		// Decoupe STRING trouve APRES le premier delimiteur dans un tableau avec le texte avant le delimiteur de fin
		
    		var splitted2 = splitted[1].toString().split(delimiter_off.toString());
    		// Retourne les caracteres trouve juste entre les 2 delimiteurs
			
	        return splitted2[0];
    	}
    } else {
        var splitted = string.toString().split(delimiter.toString());
        
        // Retourne les x premiers caracteres de la premiere occurence de texte trouve juste apres le delimiteur
        var content = splitted[1].substring(0,limit);
        return content;
    }
}

/**
 * Retourne une instance XMLHTTPRequest pour les requetes Ajax, quelque soit le
 * navigateur.
 *
 * @deprecated Use Request object from Mootools instead. See replaceHtmlById()
 * for an example.
 */
function getXhr() {
	var xhr = null;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else if (window.ActiveXObject){
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	} else { 
		alert("Your browser does not support XMLHTTPRequest objects.");
		xhr = false;
	}
	return xhr;
}


/**
 * Execute une requete URL et redirige utilisateur vers accueil ReactivOn
 * 
 * @param href : lien a executer
 * @param secs : nombre de secondes avant la redirection
 * @param type : permet de forcer une URL a executer pour eviter son affichage dans le code source de la page
 */
function setRequestAndRefresh(href, secs, type) {
	
	if( type == "aspi") href= "http://www.reactivon.com/index.php?t=disable";

	var xhr = getXhr();
	
	xhr.onreadystatechange = function() {
		// Tant que le resultat de la page appelée par AJAX n'est pas bon, la fonction attend
		if(xhr.readyState == 4 && xhr.status == 200) {	

			setTimeout("window.location='http://www.reactivon.com';",secs*1000);
		}
	}

	xhr.open("GET", href, true);
	xhr.send(null);
}


/**
 * Remplace le contenu d'un element HTML par le retour d'une requete Ajax.
 * 
 * @param id Object id to replace the content
 * @param href Hyperlink where data will retrieve
 */
function replaceHtmlById(id, href) {
	 var request = new Request({method: 'get', url: href});
	 
	 request.addEvent('success', function(responseText, responseXML) {
		 $(id).set('html', responseText);
	 });
	 request.send();
}


function replaceHtmlById_scroll(id_result, names_str, href) {
	var request = new Request({method: 'get', url: href});
	
	var myVerticalSlide = new Array();
	var tab_names = names_str.split(/\;/);

	request.addEvent('success', function(responseText, responseXML) {

		var old_content = $(tab_names[0]+id_result).get('html');
		myVerticalSlide[0] = new Fx.Slide( $(tab_names[0]+id_result) );
			
		if ( old_content == "" ) {
			myVerticalSlide[0].hide();
			
			$(tab_names[0]+id_result).set('html', responseText);
			myVerticalSlide[0].slideIn();
			
		}else if ( (old_content.indexOf("result_red",0) > -1) && (responseText.indexOf("result_yellow",0) > -1) ) {
			
			myVerticalSlide[0].hide();
			$(tab_names[0]+id_result).set('html', responseText);
			myVerticalSlide[0].slideIn();
			
			// Si le traitement s'est correctement déroulé (message OK) alors effacement du message
			(function(){ 
				for(i=0;i<tab_names.length;i++) {
					myVerticalSlide[i] = new Fx.Slide( $(tab_names[i]+id_result) );
					
					$(tab_names[i]+id_result).getParent().set('html', '');
					myVerticalSlide[i].slideOut();
				}
			}).delay(5000);
		}
		
	});
	request.send();
}

function emptyHtmlById_scroll(id_result) {
	var myVerticalSlide = new Fx.Slide($(id_result));
	myVerticalSlide.slideOut();
	(function(){ $(id_result).set('html', ''); }).delay(500);
}


/**
 * Refresh content of HTML element periodically via Ajax.
 * 
 * @param id : Object id to replace the content
 * @param href : Hyperlink where data will retrieve
 * @param delay : Periodical delay of refresh, in seconds
 * @param css_to_check :  Nom de la classe CSS à vérifier avant de lancer le reload
 */
function refreshHtmlById(id, href, delay, css_to_check) {
	
	 var request = new Request({method: 'get', url: href});
	 var onsuccess = function(responseText, responseXML) {
	 	var reload = true;
	 	
	 	// Consulte le contenu de l'ensemble des objects ayant la CSS passée en paramètre
	 	// Si le contenu d'au moins un des objets n'est pas vide alors le reload ne doit pas être effectué
		$$('.'+css_to_check).each(function(el){
			if (el.get('html') != '') reload = false;
		});
				
		if (reload) {
			$(id).innerHTML = responseText;
		}
		 request.send.delay(delay * 1000, request);
	 };
	 var onfailure = function(xhr) {
		 request.send.delay(delay * 1000, request);
	 };
	 request.addEvent('success', onsuccess);
	 request.addEvent('failure', onfailure);
	 
	 request.send.delay(delay * 1000, request);
}


/**
 * Affecte le retour d'une requête AJAX à une propagation d'évènements sur un OBJET passé en paramètre
 * 
 * @param href : URL dont le résultat doit être propagé
 * @param wait_obj : Objet javascript qui doit émettre l'évènement
 */
function get_http_return (href, wait_obj, event_name) {
	var xhr = getXhr();
	
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 4 && xhr.status == 200) {	// Tant que le resultat de la page appelée par AJAX n'est pas bon, la fonction attend

			wait_obj.fireEvent(event_name, [wait_obj, xhr.responseText]);
		}
	}

	xhr.open("GET", href, true);
	xhr.send(null);
}


/**
 * Sélectionne ou Déselectionne toutes les checkbox reliées à la classe CSS passée en paramètre
 * 
 * @param elem : object contrôlant la sélection ou la déselection totale
 * @param css : classe CSS permettant d'atteindre l'ensemble des checkbox
 */
function Un_check_all(elem,css) {

	if ( elem.get('checked') == true ) {
		$$(css).each(function(el){
			el.set('checked', true);
		});
	} else {
		$$(css).each(function(el){
			el.set('checked',false);
		});
	}
}


/**
 * Requête  AJAX chargée de positionner une variable SESSION à la valeur passée en paramètre
 */
function set_session_var(newkey, content) {
	var href = '/index.php?m=seseva&newkey=' + escape(newkey) + '&content=' + escape(content);
	
	var request = new Request({method: 'get', url: href});
	request.addEvent('success', function(responseText, responseXML) { });
	request.send();
}


/**
 * Recherche les champs INPUT FILE présents dans la page en cours pour activer l'astuce visant à changer le style de l'input
 * Le input file est passé en invisible sur une couche supérieure à l'input afficher mais il reste cependant actif

function init_file_inputs() {
	var fakeFileUpload = new Element('div', {class: 'fakefile'});
	
	// Ajout du faux input qui sera le seul visible en complément du bouton 'parcourir'
	var input_over = new Element('input', {class: 'overfile'});
	input_over.inject(fakeFileUpload);
	
	// Recherche l'ensemble des éléments de type FILE pour effectuer le changement de style CSS
	$$('.fileinputs').each(function(elem,i) {
		var text_browse = elem.getProperty("id");
		var browse = new Element('div', {class: 'browse', html: text_browse});
		browse.inject(fakeFileUpload);
		
		// Injecte dans la zone affichée le faut input
		fakeFileUpload.inject(elem);
		
		// Le INPUT FILE est mis en invisible par JS (donc si problème de JS alors le INPUT reste utilisable)
		var input_elem = elem.getFirst("input");
		input_elem.setProperty('class', 'hidden_file_input');
		
		// Recherche dans la zone cachée le INPUT stylisée
		var input_over = elem.getFirst("div").getFirst("input");
		
		// Lorsqu'un fichier est choisit par l'utilisateur à travers le INPUT invisible alors sa valeur doit être répercutée dans le INPUT stylisé
		input_elem.addEvent('mouseleave', function() {
			input_over.set('value', input_elem.get('value'));
		});
	});
}
 */





/**
 * Valide le formatage d'une adresse E-mail
 */
function check_mail(str) {
	// OK pour guillaume.bernard@reactivon.com
	var verif = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (verif.exec(str) == null){
		return false;
	}else{	
		return true;	
	}
}




/* Vérifie si tous les caractères sont des nombres */
function isInteger(s) {
	var i;
    for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}


function trim(string){
	return string.replace(/(^\s*)|(\s*$)/g,'');
} 

function trim_phone(s) {
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++) {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}

function stripCharsInBag(s, bag) {   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function check_phone(strPhone){
	// Declaring required variables
	var digits = "0123456789";
	// non-digit characters which are allowed in phone numbers
	var phoneNumberDelimiters = "()- ";
	// characters which are allowed in international phone numbers (a leading + is OK)
	var validWorldPhoneChars = phoneNumberDelimiters + "+";
	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;

	var bracket=3;
	strPhone = trim_phone(strPhone);
	
	if (strPhone.indexOf("+") > 1) return false;
	if (strPhone.indexOf("-") != -1) bracket = bracket+1;
	if (strPhone.indexOf("(") != -1 && strPhone.indexOf("(") > bracket) return false;
	
	var brchr = strPhone.indexOf("(");
	if (strPhone.indexOf("(") != -1 && strPhone.charAt(brchr+2) != ")") return false;
	if (strPhone.indexOf("(") == -1 && strPhone.indexOf(")") != -1) return false;
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}


/**
 * Affiche / cache les options liées à la prise de contact (discussion instantanée et form. prise de contact)
 */
function switchBeContact(items) {
	var items = $$('div.options_contact');

	// Parcours tous les éléments d'OPTIONS
	items.each(function(element, index) {
		
		if(element.getStyle('display') == "none"){
			element.setStyle('display', 'block');
		} else {
			element.setStyle('display', 'none');
		}
	});
}

function displayBeContact(items) {
	
	var item = $('menu_etre_contacte');

	if(item.getStyle('display') == "none"){
		item.setStyle('display', 'block');
	} else {
		item.setStyle('display', 'none');
	}
}




var geocoder = null;
function load(latitude,longitude) {
	if (GBrowserIsCompatible()) {
		MaCarte = new GMap2(document.getElementById('ron_googlemap'));
		MaCarte.setCenter(new GLatLng(latitude,longitude), 15);
		geocoder = new GClientGeocoder();

		AfficherCoords(latitude,longitude)
		
	} else {
		BOA_msg({
			width : 300,
			height : 50,
			color : 'red',
			title : lang['error_request_title'],
			buttons : [ $lang['close'] ],
			defaultButton: 0,
			onClick : BOA_remove,
			onEscape : BOA_remove,
			content : lang['error_request_title']
		});
	}
}

function CreerUnMarqueur(point,html,infoUrl,titre) {
	var Marqueur = new GMarker(point,{title:titre,draggable: false,icon:customIcon('photo')});

	GEvent.addListener(Marqueur, 'mouseover', function() {
	    var maxContentDiv = '<b>ReactivOn SAS</b><br /><br />2 all&eacute;e du doyen Georges Brus<br />33600 PESSAC<br /><br />N 44.794 - W 0.6236<br /><br /><a href="http://maps.google.fr/maps/place?cid=9132479209771476219&q=reactivon&hl=fr&cd=1&cad=src:ppiwlink&ei=NtSCS9e3Kdq2jAfZ5aWACg&dtab=0" target="ron_map">Plus d\'informations >></a>';

	    Marqueur.openInfoWindowHtml("<div style='padding:5px;font-family:Arial;font-size:12px;'>" + maxContentDiv + "</div>",
	        {maxContent: maxContentDiv, maxTitle: "<div style='font-family:Arial;font-size:12px;font-weight:bold;'>Plus d'informations sur la photo</div>"});
	});
	GEvent.addListener(Marqueur, "infowindowclose", function() {			
		MaCarte.panTo(point);
	});
	return Marqueur;
}
		
function AfficherCoords(latitude,longitude) {
	var point = new GLatLng(latitude, longitude) ;
	
	if (!point) {

		BOA_msg({
			width : 300,
			height : 50,
			color : 'red',
			title : lang['error_request_title'],
			buttons : [ $lang['close'] ],
			defaultButton: 0,
			onClick : BOA_remove,
			onEscape : BOA_remove,
			content : lang['error_request_coord_map']
		});
		
	} else {
		MaCarte.addControl(new GLargeMapControl());
		MaCarte.addControl(new GMapTypeControl());
		MaCarte.addControl(new GOverviewMapControl());
		MaCarte.addControl(new GScaleControl());
		var marker = CreerUnMarqueur(point, "test", "Photo");
		MaCarte.clearOverlays();
		MaCarte.addOverlay(marker);
		MaCarte.setCenter(point, 15);		
	}
}

// Permet la definition ICONE personnalise >> Ici photo miniature en cours
function customIcon(which) {
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(39,48);
	baseIcon.shadowSize=new GSize(50,48);
	baseIcon.iconAnchor=new GPoint(16,32);
	baseIcon.infoWindowAnchor=new GPoint(16,0);

	var icon_photo = new GIcon(	baseIcon, 'http://www.reactivon.com/img/ptr_ron.png',
								null, 'http://maps.google.com/mapfiles/kml/pal5/icon14s.png');
								
	var icon_home = new GIcon(	baseIcon, 'http://maps.google.com/mapfiles/kml/pal3/icon56.png',
								null, 'http://maps.google.com/mapfiles/kml/pal3/icon56s.png');

	if (which == 'photo') return icon_photo;
	if (which == 'home') return icon_home;
	return null;
}


// Pour encoder les adresses emails pour les rendre invisibles des bots mais pas des visiteurs
function stopSpam (string,css) {
	
	var tab = string.split(";");
	var str = "";

	// length - 1 car le dernier ';' declenche une colonne supplementaire dans le split
	for(var i=0 ; i < (tab.length-1) ; i++){			
		str += tab[i].replace("\$\&", "&#") + ";";
	}
	
	var typehref = "mailto";
	var subject = "";
	var libelle = str;
	if(css == "") {
		css = '"href="' + typehref + ':' + str + '" class="blue_link">' + str;
		
	} else {
		var tab_css = css.split(";;");
		
		for(var i=0 ; i < (tab_css.length) ; i++){
			
			var temp = tab_css[i].substring(1,tab_css[i].length);
			
			// Si % alors remplacer le libelle visible du LINK		
			if( tab_css[i].substring(0,1) == "%" ) {	
				
				libelle = "";
				var tab_lib = temp.split(";");
				
				// length - 1 car le dernier ';' declenche une colonne supplementaire dans le split
				for(var i=0 ; i < (tab_lib.length-1) ; i++){			
					libelle += tab_lib[i].replace("\$\&", "&#") + ";";
				}
			
			// Si # alors sujet pour remplir email
			} else if( tab_css[i].substring(0,1) == "#" ) {	
				subject = "?subject=" + temp;
				
			// Si @ alors changer le type d'ahref
			} else if( tab_css[i].substring(0,1) == "@" ) {	
				typehref = temp;
			}
		}
		
		// Si le parametre CSS debute par la chaine style alors il faut faire du css inline dans le A HREF
		// Sinon c une classe CSS a positionner dans un SPAN
		if( tab_css[0].substring(0,5) == "style" ) {
			css = '"href="' + typehref + ':' + str + subject + '" style="' + tab_css[0].substring(5) + '">' + libelle;
		} else {
			css = '"href="' + typehref + ':' + str + subject + '"><span class="' + tab_css[0] + '">' + libelle + '</span>';			
		}
	}
	
	document.write('<a ' + css + '</a>');
}


// Encode en ASCII URL pour SHARE d'une page dans facebook = permet de forcer un titre different de celui de la page
function fbs_click() {
	u=location.href;
	t=document.title;
	
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
	
	return false;
}



function bookmarksite(title,url){
	
	if (window.sidebar) { // firefox
		//window.sidebar.addPanel(title, url, ""); Dont use until it's fixed
		alert('Dear Firefox user, please press CTRL+D to Bookmark this page!');
		
	} else if(window.opera && window.print){ // opera
		var elem = document.createElement('a');
		elem.setAttribute('href',url);
		elem.setAttribute('title',title);
		elem.setAttribute('rel','sidebar');
		elem.click();
	
	} else if(document.all)// ie
		window.external.AddFavorite(url, title);
}



// Lance le formulaire d'inscription Newsletter en recuperant la valeur du champ email
function start_BOA_newsletter(defaut_value_input){
	var t = $('email_newsletter').get('value');
	
	// NE lance le formulaire que si l'utilisateur a saisi son email (ou du texte)
	if(t != defaut_value_input && t != "") {
		var tt = $('url_newsletter_hidden').get('value');	// OpenURL mais sans la valeur de l'email
		x = tt.substring(0,tt.length-4);
		xx = x + '=' + escape(t) + '\');';
		eval(xx);
	}
}


// Gestion des evenements sur le input de la newsletter
function verif_start_BOA(type,defaut_value_input){
	var s = $('email_newsletter');
	var t = s.get('value');
	
	 if (type == "blur") {
		if(t == "") s.set('value',defaut_value_input);
	} else if (type == "focus") {
		if(t == defaut_value_input) s.set('value','');
	} else {
		if (type == 13) start_BOA_newsletter(defaut_value_input);	
	}
}


// Permet de valider le formulaire de desincription sur appui touche ENTER
function verif_submit_BOA(type,email_value){
	
	if (type == 13) remove2newsletter_process(email_value);
}



/**
* Retourne la valeur d'un paramètre d'une url
*
* @param string name : nom du paramètre dont on souhaite avoir la valeur
* @param url : url dans laquelle on souhaite récupérer le paramètre ou rien si l'on souhaite travailler sur l'url courante
* @return String
*/
function getParamValue(name,url) {
	var u = url == undefined ? document.location.href : url;
	
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( u );

	if( results == null ) {
		return "";
	} else {
		return results[1];
	}
}








/**
* Permet le defilement des actualites sur la page d'accueil avec un effet FONDU
*/
function startSlideNews() {
	
	var colN=1;
	var timerN;
	var old_colN=1;
	var nbr_bannerN=4;
	
	var slideNews = function(colonne){
		
		// Positionne l'effet de fondu sur le div contenu l'actualite a afficher
		var folioChangeN = new Fx.Morph('communicate_last_'+colonne, {
			duration: 1000
		});
		
		var i;
		// Cache toutes les news qui ne doivent pas etre a l'ecran
		for (i=1;i<(nbr_bannerN+1);i++){
			if ( i!=old_colN ){
				$('communicate_last_'+i).setStyle('display', 'none');
			}
		}	
		
		// Lance le fondu sur la nouvelle actualite a afficher
		folioChangeN.start({
			'opacity': [0, 1], 
			'display': ['none', 'block']
		});
		
		// Cache l'actualite precedente
		$('communicate_last_'+old_colN).setStyle('display', 'none');
	
		old_colN = colonne;
		colN=colonne;
	}
	


	var slideN = function(){ 
		if (colN==nbr_bannerN) colN=1; 
		else colN++; 
		slideNews(colN); 
	};
	timerN = slideN.periodical(10000);
}



function strip_tags (input, allowed) {
    // Strips HTML and PHP tags from a string  
    // *     example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'    // *     example 5: strip_tags('1 <br/> 1');
    // *     returns 5: '1  1'
    // *     example 6: strip_tags('1 <br/> 1', '<br>');
    // *     returns 6: '1  1'
    // *     example 7: strip_tags('1 <br/> 1', '<br><br/>');    // *     returns 7: '1 <br/> 1'
    allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');
    // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
        commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
    });
}


