/*======================================================================================================================
INITIALISATION
======================================================================================================================*/
declareJavascriptedCSS();

Event.observe(window,'load',function(){
	prepareVdaemonForms();
	prepareRollOverImg();
	prepareStripeTables();
	prepareHighlightRows();
	prepareToggleVisibility();
});


/*---------------------------------------------------------------------------------------------------
initNav // 
Note: Appeler cette fonction juste en dessous du div #nav pour que le menu se load plus vite
---------------------------------------------------------------------------------------------------*/
function initNav(){
	//log("initNav();",1);
	if(!$('topMenu'))return;
	var nav = $('topMenu');
	var mainUl = nav.getElementsByTagName("ul")[0]; 
	var lis = mainUl.getElementsByTagName("li"); 
	for(var i=0; i< lis.length; i++){
		
		var li = $(lis[i]);
		var ul = li.getElementsByTagName("ul")[0];
		if(!ul)continue;
		li.ul = ul;
		li.onmouseover = function(){
			this.ul.style.display = 'block';
		}
		li.onmouseout = function(){
			this.ul.style.display = 'none';
		}
	}
}

/*---------------------------------------------------------------------------------------------------
initRollOverImg // Créer des rollover selon le nom d'une classe et l'extension des images rollover, preload les images également
ex1: initRollOverImg(el,"rollover","rollover_on", "_on");
---------------------------------------------------------------------------------------------------*/
function initRollOverImg(containerElement,startClassName,endClassName,rollOverSuffix, activateName){
	//log("initRollOverImg("+containerElement+","+startClassName+","+endClassName+","+rollOverSuffix+","+ activateName+");",1);
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	var els = containerElement.getElementsByClassName(startClassName); 
	for(var i=0; i< els.length; i++){
		var rollOverImg = $(els[i]);
		if(!rollOverImg.getAttribute("src"))continue; // si le tag n'a pas d'attribut src on passe à la prochaine itération
		var startSrc    = rollOverImg.getAttribute("src"); // on assigne garde le chemin de l'image à startSrc
		var startSrcLen = startSrc.length;
		var filePath    = startSrc.substring(0,startSrcLen-4);
		var fileExt     = startSrc.substring(startSrcLen-4); 
		var rollSrc     = filePath + rollOverSuffix + fileExt; // on créer le chemin du rollover
		rollOverImg.activateName = activateName;
		rollOverImg.rollSrc = rollSrc; // on assigne le chemin de départ à l'objet image
		rollOverImg.startSrc = startSrc; // on assigne le chemin rollover à l'objet image
		
		//Activate state
		if(rollOverImg.className.indexOf(activateName) != -1){
			//log("Activate state -> src: " + rollOverImg.rollSrc);
			rollOverImg.setAttribute("src", rollOverImg.rollSrc); // assigne le chemin rollover
			rollOverImg.toggleClassName(endClassName);
		}
		
		//MouseOver
		Event.observe(rollOverImg,'mouseover',function(){
			//log("rollOverImg.mouseover() -> src: " + this.rollSrc);
			if(this.hasClassName(this.activateName))return;
			this.setAttribute("src", this.rollSrc); // assigne le chemin rollover
			this.toggleClassName(endClassName);	
		}.bindAsEventListener(rollOverImg));
		
		//MouseOut
		Event.observe(rollOverImg,'mouseout',function(){
			//log("rollOverImg.mouseout() -> src: " + this.startSrc);
			if(this.hasClassName(this.activateName))return;
			this.setAttribute("src", this.startSrc); // assigne le chemin normal
			this.toggleClassName(endClassName);
		}.bindAsEventListener(rollOverImg));
		
		//Preloading
		if (!document.createElement) return false;
		var refPreloadImg = document.createElement("img"); // crée un élément img qui n'est pas dans le document (donc invisible)
		refPreloadImg.setAttribute("src", rollSrc); // assigne le chemin du rollover
		
	}
}

/*---------------------------------------------------------------------------------------------------
toggleVisibility // Initialise les forms vdaemon (ajoute 
---------------------------------------------------------------------------------------------------*/
function toggleVisibility(containerElement,startAsHidden,classContainer,classHideBtn,classShowBtn,classToggleBtn,classContent,classContentSwitch){
	//log("toggleVisibility("+containerElement+","+startAsHidden+","+classContainer+","+classHideBtn+","+classShowBtn+","+classToggleBtn+","+classContent+","+classContentSwitch+")",1);
	if (!document.getElementById) return false;
	var containers = $(containerElement).getElementsByClassName(classContainer);
	if(containers.length <= 0)return;
	for(var i=0; i<containers.length; i++){
		var container = $(containers[i]);
		var hideBtn   = container.getElementsByClassName(classHideBtn)[0];
		var showBtn   = container.getElementsByClassName(classShowBtn)[0];
		var toggleBtn = container.getElementsByClassName(classToggleBtn)[0];
		var content   = container.getElementsByClassName(classContent)[0];
		if(classContentSwitch != null){
			var contentSwitch = container.getElementsByClassName(classContentSwitch)[0];
		}else{
			var contentSwitch = false;
		}
		
		if(startAsHidden){
			if(showBtn)showBtn.style.display = 'block';
			if(hideBtn)hideBtn.style.display = 'none';
			if(content)content.style.display = 'none';
			if(contentSwitch)contentSwitch.style.display = 'block';
		}else{
			if(showBtn)showBtn.style.display = 'none';
			if(hideBtn)hideBtn.style.display = 'block';
			if(content)content.style.display = 'block';
			if(contentSwitch)contentSwitch.style.display = 'none';
		}
		
		//showBtn
		if(showBtn){
			showBtn.hideBtn = hideBtn;
			showBtn.content = content;
			showBtn.contentSwitch = contentSwitch;
			showBtn.onclick = function(){	
				this.style.display = 'none';
				this.hideBtn.style.display = 'block';
				this.content.style.display = 'block';
				if(this.contentSwitch)this.contentSwitch.style.display = 'none';
			}
		}
		
		//hideBtn
		if(hideBtn){
			hideBtn.showBtn = showBtn;
			hideBtn.content = content;
			hideBtn.contentSwitch = contentSwitch;			
			hideBtn.onclick = function(){									
				this.style.display = 'none';
				this.showBtn.style.display = 'block';
				this.content.style.display = 'none';
				if(this.contentSwitch)this.contentSwitch.style.display = 'block';
			}
		}
		
		//toggleBtn
		if(toggleBtn){
			toggleBtn.content = content;
			toggleBtn.contentSwitch = contentSwitch;
			toggleBtn.onclick = function(){	
				if(this.content.style.display == 'none'){
					this.content.style.display = 'block';
					if(this.contentSwitch)this.contentSwitch.style.display = 'none';
				}else if(this.content.style.display == 'block'){
					this.content.style.display = 'none';
					if(this.contentSwitch)this.contentSwitch.style.display = 'block';
				}
			}
		}
	}
}

/*---------------------------------------------------------------------------------------------------
stripeTables // Ajoute des stripes à une table
---------------------------------------------------------------------------------------------------*/
function stripeTables(containerElement,tableClass,trOddClass,trEvenClass){
  //log("stripeTables("+containerElement+","+tableClass+","+trOddClass+","+trEvenClass+")",1);
  var tables = containerElement.getElementsByClassName(tableClass);
  for (var i=0; i<tables.length; i++) {
    var odd = false;
    var rows = $(tables[i]).getElementsByTagName("tr");
    for (var j=0; j<rows.length; j++) {
      if (odd == true) {
			$(rows[j]).addClassName(trOddClass);
			odd = false;
      } else {
			$(rows[j]).addClassName(trEvenClass);
			odd = true;
      }
    }
  }
}

/*---------------------------------------------------------------------------------------------------
highlightRows // Ajoute une class au tr lors du rollover sur une table 
---------------------------------------------------------------------------------------------------*/
function highlightRows(containerElement,tableClass,highlightClass) {
  //log("highlightRows("+containerElement+","+tableClass+","+highlightClass+")",1);
  var tables = containerElement.getElementsByClassName(tableClass);
	 for (var i=0; i<tables.length; i++) {
	 		var table = tables[i];
				var rows = table.getElementsByTagName("tr");
				for (var r=0; r<rows.length; r++) {
					//MouseOver
					Event.observe(rows[r],'mouseover',function(){
						this.addClassName(highlightClass);
					}.bindAsEventListener(rows[r]));
					
					//MouseOut
					Event.observe(rows[r],'mouseout',function(){
						this.removeClassName(highlightClass);
					}.bindAsEventListener(rows[r]));				
			}
	 }
}

/*---------------------------------------------------------------------------------------------------
addLoadEvent // Ajoute une fonction à la liste de fonction à executé lors de l'événement onload
---------------------------------------------------------------------------------------------------*/
function addLoadEvent(func) {
	Event.observe(window,'load',func);
}

/*---------------------------------------------------------------------------------------------------
getHTTPObject // retourne un objet pour faire une connexion XMLHttpRequest
---------------------------------------------------------------------------------------------------*/
function getHTTPObject(){
	if(window.ActiveXObject){
		var objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else if (window.XMLHttpRequest){
		var objXMLHttp = new XMLHttpRequest();
	}else{
		var objXMLHttp = false;
	}
	return objXMLHttp;
}

/*---------------------------------------------------------------------------------------------------
vdaemonFormFocus // Ajoute des fonctions de focus aux forms vdaemon
---------------------------------------------------------------------------------------------------*/
function vdaemonFormFocus(containerElement,classForm,classFocus,classInputError,classFocusError){
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	var forms = containerElement.getElementsByClassName(classForm);
	for(var i=0; i< forms.length; i++){
		var form = $(forms[i]);

		var formElements = new Array();
		//Inputs
		var inputs = form.getElementsByTagName("input");
		for(var z=0; z<inputs.length; z++)formElements.push(inputs[z]);
		//Textarea
		var textareas = form.getElementsByTagName("textarea");
		for(var z=0; z<textareas.length; z++)formElements.push(textareas[z]);
		//Select
		var selects = form.getElementsByTagName("select");
		for(var z=0; z<selects.length; z++)formElements.push(selects[z]);

		for(var z=0; z<formElements.length; z++){
			var formElement = $(formElements[z]);			
			
			//OnFocus
			formElement.onfocus = function(){
				this.addClassName(classFocus);
				if(this.hasClassName(classInputError))this.addClassName(classFocusError);
			}
			
			//OnBlur
			formElement.onblur = function(){
				this.removeClassName(classFocus);
				if(this.hasClassName(classInputError))this.removeClassName(classFocusError);
			}	
			
		}
	}
}

/*---------------------------------------------------------------------------------------------------
html_entity_decode
This script and many more are available free online at The JavaScript Source!! http://javascript.internet.com Created by: Ultimater | http://webdeveloper.com/forum/member.php?u=30185 
---------------------------------------------------------------------------------------------------*/
function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

/*---------------------------------------------------------------------------------------------------
log //
---------------------------------------------------------------------------------------------------*/
function log(msg,priority){
	var minPriority =  5;
	if(!$("log"))return;
	if(!priority)priority = 5;
	if(priority > 5)priority = 5;
	if(priority < 1)priority = 1;
	if(priority > minPriority)return;
	var logger = $("log");
	if(logger.i)logger.i += 1;
	else logger.i = 1;
	logger.innerHTML = '<span class="priority'+priority+'"><strong>' + logger.i + "</strong> - " + msg + '<span><br />' + logger.innerHTML;
}


/*---------------------------------------------------------------------------------------------------
declareJavascriptedCSS //
---------------------------------------------------------------------------------------------------*/
function declareJavascriptedCSS(){
	document.write("\n<style>\n<!--\n");
	document.write(".toggleHideContent{display:none;}\n");
	document.write(".contentHide{display:none;}\n");
	document.write(".jsOnlyContent{display:block !important;}\n");
	document.write("-->\n</style>\n");
}

function validSearch() {
	var inputSearch = document.getElementById("s");
	
	if ((!inputSearch.value=='') || (inputSearch.length>2)){
		return true;
	}
	inputSearch.focus();
	return false;
		
	//}	
}



//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


function prepareToggleVisibility(){
	var el = $("wrapper");
	toggleVisibility(el,true,"toggleHide","hideBtn","showBtn","toggleBtn","toggleHideContent");
	toggleVisibility(el,false,"toggleShow","hideBtn","showBtn","toggleBtn","toggleShowContent");
	toggleVisibility(el,false,"toggleContent","hideBtn","showBtn","toggleBtn","contentShow","contentHide");
}

function prepareVdaemonForms(){
	var el = $("wrapper");
	vdaemonFormFocus(el,"vdaemonForm","vdFieldFocus","vdFieldError","vdFieldErrorFocus");
}

function prepareRollOverImg(){
	var el = $("wrapper");
	initRollOverImg(el,"rollover","rollover_on", "_on", "activate");
}

function prepareStripeTables(){
	var el = $("wrapper");
	stripeTables(el,"stripes","odd","even");
}

function prepareHighlightRows(){
	var el = $("wrapper");
	highlightRows(el,"highlightRows","high");
}
