initToggleVisibility();
prepareRollOverImg();

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


/*---------------------------------------------------------------------------------------------------
getElementsByClassName // Retourne tout les élément 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 élément 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 élément
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 élément
---------------------------------------------------------------------------------------------------*/
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 élément
---------------------------------------------------------------------------------------------------*/
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'événement onload
---------------------------------------------------------------------------------------------------*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

/*---------------------------------------------------------------------------------------------------
addUnloadEvent // Ajoute une fonction à la liste de fonction à executé lors de l'événement onUnload
---------------------------------------------------------------------------------------------------*/
function addUnloadEvent(func) {
  var oldonload = window.onunload;
  if (typeof window.onunload != 'function') {
    window.onunload = func;
  } else {
    window.onunload = function() {
      oldonload();
      func();
    }
  }
}


/*---------------------------------------------------------------------------------------------------
insertAfter // Ajoute un élément après un autre élément
---------------------------------------------------------------------------------------------------*/
function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}


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


/*---------------------------------------------------------------------------------------------------
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){
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!containerElement.getElementsByTagName) return false;
	var els = containerElement.getElementsByTagName("img");

	for(var i=0; i< els.length; i++){	
		var rollOverImg = els[i];
		if(!rollOverImg.getAttribute("src"))continue;
		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; //arrête 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;
}

/*---------------------------------------------------------------------------------------------------
toggleVisibility // Initialise les forms vdaemon (ajoute 
---------------------------------------------------------------------------------------------------*/
function toggleVisibility(containerElement,startAsHidden,classContainer,classHideBtn,classShowBtn,classToggleBtn,classContent,classContentSwitch){
	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(classContentSwitch != null){
			var contentSwitch = getElementsByClassName(container, "*", 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';
				}
				
			}
		}
	}
}


/*---------------------------------------------------------------------------------------------------
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;
}

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

function initToggleVisibility(){
	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");
	addLoadEvent(prepareToggleVisibility);
}

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

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



//******** @author Olivier Lalonde <olalonde@gmail.com>
//******** tinyMCE enable tabs
//******** usage: initTabs(); initTinyMCE();
// Global variables
var mceInstances = [];

function switchTab(textarea_id, tabIndex) {
    // Get tinyMce instance for textarea_id
    var tinyMCE_instance = tinyMCE.instances['mce_editor_' + mceInstances[textarea_id]]; 

	var textarea = document.getElementById(textarea_id);
   
    // Save current tinyMce window's value to associated textarea
    tinyMCE_instance.triggerSave(false,true);
    
    var currentIndex = textarea.currentIndex;
	var currentValue = textarea.value;
    
	// Save value of textarea to values[]
	//values[textarea_id][currentIndex] = currentValue;
	var current_textarea_tab = document.getElementById(textarea_id+'_tab'+currentIndex);
	current_textarea_tab.value = currentValue;
	
	// Set current tab index of textarea to tabIndex
	textarea.currentIndex = tabIndex;
    var textarea_tab = document.getElementById(textarea_id+'_tab'+tabIndex);
	
	// Reset content of textarea and tinyMce window
	tinyMCE_instance.setHTML(textarea_tab.value);
}

// Triggered when form is submitted
function saveTabs() {
    var textareas = getTabableTextareas();
    for (key in textareas) {
        var textarea = textareas[key];
        var textarea_id = textarea.id;
        switchTab(textarea_id, textarea.currentIndex);
        
        var hidden_textarea = document.getElementById(textarea_id + '_hidden');
        
        var i = 1;
        var tab;
        var string = '';
        while (tab = document.getElementById(textarea_id+'_tab'+i)) {
            string += '\n*** tab[' + i + '] ***\n';
            string += tab.value;
            i++;
        }
        hidden_textarea.value = string;
    }
}

function getTabableTextareas () {
        var hidden_textareas = [];
        var all_textareas = document.getElementsByTagName('textarea');
        var textareas = [];
        var i = 0;
        for (key in all_textareas) {
            if (all_textareas[key].className == "mceEditorTabable") {
                textareas[i++] = all_textareas[key];
            }
        }
		return textareas;
}

function initTabs() {
        var textareas = getTabableTextareas();
			
			// For all 'tabable' textareas
        for (key in textareas) {
            var textarea = textareas[key];
           
            var textarea_id = textarea.id;
            
            textarea.currentIndex = 1;
            
            var form = getParent(textarea, 'form');
            // Save active tab's content on form submit
            if (form) {form.onsubmit = function() {saveTabs();}}
            
            // Create hidden textarea to save content of all tabs
            var hidden_textarea_ele = document.createElement('textarea');
            // Insert before textarea
            var hidden_textarea = textarea.parentNode.appendChild(hidden_textarea_ele);
			//alert(hidden_textarea);
            // Set hidden textarea's id
            hidden_textarea.id = textarea_id + '_hidden';
            // Hide hidden textarea
            hidden_textarea.style.display = 'none';
            
            // Switch names 
            textarea_name = textarea.name;
            // Modify original name to 'name'_editor
            textarea.name = textarea_name + '_editor';
            // Set hidden textarea's name to orignial name
            hidden_textarea.name = textarea_name;

            mceInstances[textarea_id] = key;
            
            textarea.value = document.getElementById(textarea_id+'_tab1').value;
            tinyMCE.execCommand('mceAddControl', false, textarea.id);
            
        }
}

function getParent(current_ele, parent_tagName) {
    var parent = current_ele.parentNode;
    while (parent.tagName) {
        if (parent.tagName.toLowerCase()==parent_tagName.toLowerCase()) {
            return parent;
            break;
        }
        parent = parent.parentNode;
    }
    return 0;
}

function initTinyMCE(){
	tinyMCE.init({
		mode : 'textareas',
		theme : "advanced",
		plugins : "paste",
		theme_advanced_buttons1 : "paste,pastetext,pasteword,separator,bold,italic,underline,strikethrough,separator,formatselect,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,undo,redo,link,unlink,hr,code",
		theme_advanced_buttons2 : "",
		theme_advanced_buttons3 : "",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,
	
		theme_advanced_toolbar_location : "bottom",
		extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
		editor_selector : "mceEditor",
		editor_deselector : "mceNoEditor",
		content_css : "/css/css.css"
	});
}

function initTinyMCETabable(){
	tinyMCE.init({
		mode : 'none',
		theme : "advanced",
		plugins : "paste",
		theme_advanced_buttons1 : "paste,pastetext,pasteword,separator,bold,italic,underline,strikethrough,separator,formatselect,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,undo,redo,link,unlink,hr,code",
		theme_advanced_buttons2 : "",
		theme_advanced_buttons3 : "",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,
	
		theme_advanced_toolbar_location : "bottom",
		extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
		editor_selector : "mceEditorTabable",
		editor_deselector : "mceNoEditor",
		content_css : "/css/css.css"
	});
}

//******** AJAX
function simpleAJAX(url) {
    var xmlHttp = getHTTPObject();
    xmlHttp.open("get",url);
    xmlHttp.send(null);
}

//******** Confirm
function confirm_box(message, url) {
    var answer = confirm(message);
    if (answer) {
        window.location = url;
    }
}
