/*---------------------------------------------------------------------------------------------------
// Raccourci pour avoir document.getElementById
---------------------------------------------------------------------------------------------------*/
function $(id){
	return document.getElementById(id);
}


/*---------------------------------------------------------------------------------------------------
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(!$('nav'))return;
	var nav = $('nav');
	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';
		}
	}
}

/*---------------------------------------------------------------------------------------------------
getElementsByClassName // Retourne tout les lment d'une certaine classe
ex1: getElementsByClassName(document, "a", "className");
ex2: getElementsByClassName(document, "*", "className2");
---------------------------------------------------------------------------------------------------*/
function getElementsByClassName(el, strTagName, strClassName){
	var arrElements = (strTagName == "*" && el.all)? el.all : el.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}


/*---------------------------------------------------------------------------------------------------
getElementsByAttribute // Permet d'avoir tout les lment avec un certain attribut, et si vous voulez avec une valeur pour cette attribut
ex1: getElementsByAttribute(document.body, "*", "id");
ex2: getElementsByAttribute(document.getElementById("the-form"), "input", "type", "text");
---------------------------------------------------------------------------------------------------*/
function getElementsByAttribute(el, strTagName, strAttributeName, strAttributeValue){
	var arrElements = (strTagName == "*" && el.all)? el.all : el.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i<arrElements.length; i++){
		oCurrent = arrElements[i];
		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}


/*---------------------------------------------------------------------------------------------------
getStyle // Permet d'avoir le style css rendu d'un lment
ex1: getStyle(document.getElementById("container"), "font-size");
---------------------------------------------------------------------------------------------------*/
function getStyle(el, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(el, "").getPropertyValue(strCssRule);
	}
	else if(el.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = el.currentStyle[strCssRule];
	}
	return strValue;
}


/*---------------------------------------------------------------------------------------------------
addClass // Ajoute une classe  un lment
---------------------------------------------------------------------------------------------------*/
function addClass(el, strClassName){
	var strCurrentClass = el.className;
	if(!new RegExp(strClassName, "i").test(strCurrentClass)){
		el.className = strCurrentClass + ((strCurrentClass.length > 0)? " " : "") + strClassName;
	}
}


/*---------------------------------------------------------------------------------------------------
removeClass // Supprime une classe d'un lment
---------------------------------------------------------------------------------------------------*/
function removeClass(el, strClassName){
	var oClassToRemove = new RegExp((strClassName + "\s?"), "i");
	el.className = el.className.replace(oClassToRemove, "").replace(/^\s?|\s?$/g, "");
}


/*---------------------------------------------------------------------------------------------------
changeClass // Change une classe en une autre classe
---------------------------------------------------------------------------------------------------*/
function changeClass(el,startClass,endClass) {
	var classNameString = el.className;
	var newClassName = classNameString.replace(startClass,endClass);
	el.className = newClassName;
}


/*---------------------------------------------------------------------------------------------------
addLoadEvent // Ajoute une fonction  la liste de fonction  execut lors de l'vnement onload
---------------------------------------------------------------------------------------------------*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}


/*---------------------------------------------------------------------------------------------------
insertAfter // Ajoute un lment aprs un autre lment
---------------------------------------------------------------------------------------------------*/
function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}


/*---------------------------------------------------------------------------------------------------
getNextElement // Retourne l'lment suivant d'un lment
---------------------------------------------------------------------------------------------------*/
function getNextElement(node) {
  if(node.nodeType == 1) {
	return node;
  }
  if (node.nextSibling) {
    return getNextElement(node.nextSibling);
  }
  return null;
}


/*---------------------------------------------------------------------------------------------------
initRollOverImg // Crer 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){
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!containerElement.getElementsByTagName) return false;
	var imgs = containerElement.getElementsByTagName("img");
	for(var i=0; i< imgs.length; i++){
		var rollOverImg = imgs[i];
		if(rollOverImg.className.indexOf(startClassName) == -1)continue;	
		var startSrc    = rollOverImg.getAttribute("src");
		var startSrcLen = startSrc.length;
		var filePath    = startSrc.substring(0,startSrcLen-4);
		var fileExt     = startSrc.substring(startSrcLen-4);
		var rollSrc     = filePath + rollOverSuffix + fileExt;
		rollOverImg.rollSrc = rollSrc;
		rollOverImg.startSrc = startSrc;
		
		//Activate state
		if(rollOverImg.className.indexOf(activateName) != -1){
			rollOverImg.setAttribute("src", rollOverImg.rollSrc);
			changeClass(rollOverImg,startClassName,endClassName);
			continue; //arrte la loop
		}
		//MouseOver
		rollOverImg.onmouseover = function(){
			this.setAttribute("src", this.rollSrc);
			changeClass(this,startClassName,endClassName);
		}
		//MouseOut
		rollOverImg.onmouseout = function(){
			this.setAttribute("src", this.startSrc);
			changeClass(this,endClassName,startClassName);
		}
		//Preloading
		if (!document.createElement) return false;
		var refPreloadImg = document.createElement("img");
		refPreloadImg.setAttribute("src", rollSrc);
	}
}


/*---------------------------------------------------------------------------------------------------
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 = getElementsByClassName(containerElement, "form", classForm);
	for(var i=0; i< forms.length; i++){
		var form = forms[i];

		//Submit Button
		var submitBtn = form.getElementsByTagName("input");
		for(var i=0; i<submitBtn.length; i++){
			if(submitBtn[i].getAttribute("type")=="submit"){
				submitBtn = submitBtn[i];
				break;
			}
		}
		
		var formElements = new Array();
		//Inputs
		var inputs = form.getElementsByTagName("input");
		for(var i=0; i<inputs.length; i++)formElements.push(inputs[i]);
		//Textarea
		var textareas = form.getElementsByTagName("textarea");
		for(var i=0; i<textareas.length; i++)formElements.push(textareas[i]);
		//Select
		var selects = form.getElementsByTagName("select");
		for(var i=0; i<selects.length; i++)formElements.push(selects[i]);
		
		for(var i=0; i<formElements.length; i++){
			var formElement = formElements[i];
			
			//OnFocus
			formElement.onfocus = function(){
				addClass(this, classFocus);
				changeClass(this, classInputError, classFocusError);
			}
			
			//OnBlur
			formElement.onblur = function(){
				changeClass(this, classFocusError, classInputError);
				removeClass(this, classFocus);
			}			
		}
	}
}

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

/*---------------------------------------------------------------------------------------------------
stripeTables // Ajoute des stripes  une table
---------------------------------------------------------------------------------------------------*/
function stripeTables(containerElement,tableClass,trOddClass,trEvenClass){
  var tables = getElementsByClassName(containerElement, "table", 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) {
        addClass(rows[j],trOddClass);
        odd = false;
      } else {
			addClass(rows[j],trEvenClass);
        odd = true;
      }
    }
  }
}

/*---------------------------------------------------------------------------------------------------
highlightRows // Ajoute une class au tr lors du rollover sur une table 
---------------------------------------------------------------------------------------------------*/
function highlightRows(containerElement,tableClass,highlightClass) {
  var tables = getElementsByClassName(containerElement, "table", 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++) {
					rows[r].onmouseover = function() {
						addClass(this,highlightClass);
					}
					rows[r].onmouseout = function() {
						removeClass(this,highlightClass);
					}
				
			}
	 }
}


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

function initToggleVisibility(){
	document.write("<style><!--.toggleHideContent{display:none;}--></style>"); //doit le setter invisible tout de suite
	addLoadEvent(prepareToggleVisibility);
}

function prepareToggleVisibility(){
	var el = document.getElementById("container5");
	toggleVisibility(el,true,"toggleHide","hideBtn","showBtn","toggleBtn","toggleHideContent");
	toggleVisibility(el,false,"toggleShow","hideBtn","showBtn","toggleBtn","toggleShowContent");
}

function prepareVdaemonForms(){
	var el = document.getElementById("container5");
	vdaemonFormFocus(el,"vdaemonForm","vdFieldFocus","vdFieldError","vdFieldErrorFocus");
}

function prepareRollOverImg(){
	var el = document.getElementById("container5");
	initRollOverImg(el,"rollover","rollover_on", "_on", "activate");
}

function prepareStripeTables(){
	var el = document.getElementById("container5");
	stripeTables(el,"stripes","odd","even");
}

function prepareHighlightRows(){
	var el = document.getElementById("container5");
	highlightRows(el,"highlightRows","high");
}


initToggleVisibility();
addLoadEvent(prepareVdaemonForms);
addLoadEvent(prepareRollOverImg);
addLoadEvent(prepareStripeTables);
addLoadEvent(prepareHighlightRows);

