var SELECT_COUNTY_CLASS_NAME = "hiddenCountyDropDown";
var HIDDEN_COUNTIES_CLASS_NAME = "hiddenCounties";

function prepareProvincesSelectOnChange() {
	var selectProvince = $('selectProvince');
	if (!selectProvince) return;
	
	selectProvince.onchange = function() {
		// Add class name hiddenCountyDropDown to county drop downs by default :
		var selectCounty = $('selectCounty');
		if (selectCounty) {
			var selectCountyDropDowns = getElementsByClassName(selectCounty, 'select', '');
			for(var i = 0; i < selectCountyDropDowns.length; i++) {
				addClass(selectCountyDropDowns[i], SELECT_COUNTY_CLASS_NAME);
			}
		}
	
		// Remove hiddenCountyDropDown from county drop down depending on selected province :
		var selectedIndex = this.options.selectedIndex;
		var selectedCountyId = this.options[selectedIndex].value;
		selectedCountyId = selectedCountyId + '_counties';
		var selectedCounty = $(selectedCountyId);
		removeClass(selectedCounty, SELECT_COUNTY_CLASS_NAME);
	}
}

function prepareProvincesHeadingOnclick() {
	var provincesContainer = $('countiesContainer');
	if (!provincesContainer) return;

	// Hide every counties ul list :
	var counties = getElementsByClassName(provincesContainer, 'ul', 'counties');
	for(var i = 0; i < counties.length; i++) {
	 addClass(counties[i], HIDDEN_COUNTIES_CLASS_NAME);
	}
	
	// Set onclick event on every h3 (show only his counties ul list) :
	var h3_provinces = getElementsByClassName(provincesContainer, 'h3', '');
	for(var i = 0; i < h3_provinces.length; i++) {
		var h3_province = h3_provinces[i];
		h3_province.onclick = function() {
			// Show his counties ul list (from parent div):
			var parentDiv = this.parentNode;
			var ul_counties = getElementsByClassName(parentDiv, 'ul', 'counties');
			if (!ul_counties) return;
			var ul_county = ul_counties[0];
			if (!ul_county) return;
			var thisClassName = ul_county.className;

			// Hide every counties ul list :
			var provincesContainer = $('countiesContainer');
			if (provincesContainer) {
				var counties = getElementsByClassName(provincesContainer, 'ul', 'counties');
				for(var i = 0; i < counties.length; i++) {
				 	addClass(counties[i], HIDDEN_COUNTIES_CLASS_NAME);
				}
			}

			if ( thisClassName.indexOf(HIDDEN_COUNTIES_CLASS_NAME) >= 0 ) removeClass(ul_county, HIDDEN_COUNTIES_CLASS_NAME);
		}
	}
}


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


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

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

function displayFormInternetSecureError(){
	var urlCurrentPage = new String(window.location);
	var isRedirect = urlCurrentPage.indexOf("#transactionForm",0);
	if(isRedirect != -1){
		var container1 = document.getElementById('inetsecureLayer');
		var internetSecureBoxContainer = document.getElementById('paymentProcessorInternetSecureContainer');
		var internetSecureBox = internetSecureBoxContainer.getElementsByTagName('input');
		//setter les bonnes valeurs aux elements
		var styleContainer = (container1.style.display != 'block')? 'block' : container1.style.display;
		var checkedStatus = (internetSecureBox.checked != true)? true : internetSecureBox.checked;
		container1.style.display = styleContainer;
		internetSecureBox.checked = checkedStatus;
		//refresh total achat
		var formPackages = document.getElementById('transactionForm');
		var formInputs = formPackages.getElementsByTagName('input');
		var lang = document.getElementById('siteLang').value;
		var typeTransaction = document.getElementById('typeTransaction').value;
		var divContainer = document.getElementById('totalAmount');
  		var divDetailPackage = document.getElementById('detailsAchats');		
		for(var i = 0; i < formInputs.length; i++){
			if((formInputs[i].type == 'radio') && (formInputs[i].name == 'forfait')){
				if(formInputs[i].checked){
					var valuesForm = formInputs[i].value.split(',');
					var price = valuesForm[3];
					var innerHTMLValue = divContainer.innerHTML;
  					var innerHTMLValue = innerHTMLValue.split(':');
					divContainer.innerHTML = innerHTMLValue[0] + ": <strong>" + price + ".00$ (+tx)</strong>";
					if(divDetailPackage.style.display == 'none') divDetailPackage.style.display = 'block';
					if(lang == 'en'){
						if(typeTransaction != 'achatPack') divDetailPackage.innerHTML = "Your choice : <strong>Renew 1 ad</strong> for a parution of " + valuesForm[0] + " months";
						else divDetailPackage.innerHTML = "Your choice : <strong>PACKAGE " + valuesForm[1] + "</strong> that means " + valuesForm[1] + " ad(s) for a parution of " + valuesForm[0] + " months each";
					}
					else{
						if(typeTransaction != 'achatPack') divDetailPackage.innerHTML = "Votre choix : <strong>Renouvellement 1 annonce</strong> pour une dur&eacute;e de parution de " + valuesForm[0] + " mois";
						else divDetailPackage.innerHTML = "Votre choix : <strong>PACKAGE " + valuesForm[1] + "</strong> soit " + valuesForm[1] + " annonce(s) pour une dur&eacute;e de parution de " + valuesForm[0] + " mois chacune";
					}					
				}	
			}
		}
		
	}
	return false;
}


initToggleVisibility();
addLoadEvent(prepareVdaemonForms);
addLoadEvent(prepareRollOverImg);
addLoadEvent(prepareStripeTables);
addLoadEvent(prepareHighlightRows);
addLoadEvent(displayFormInternetSecureError);
addLoadEvent(prepareProvincesSelectOnChange);
addLoadEvent(prepareProvincesHeadingOnclick);


