/*---------------------------------------------------------------------------------------------------
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;
}



/*---------------------------------------------------------------------------------------------------
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();
    }
  }*/
}


/*---------------------------------------------------------------------------------------------------
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, tag){
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById) return false;
	if (!containerElement.getElementsByTagName) return false;
	var imgs = containerElement.getElementsByTagName(tag);
	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(tag);
		refPreloadImg.setAttribute("src", rollSrc);
	}
}




/*---------------------------------------------------------------------------------------------------
sfHover
son of suckerfish menu script from:
http://www.htmldog.com/articles/suckerfish/dropdowns/
---------------------------------------------------------------------------------------------------*/
function sfHover(){
	if(!$("nav"))return;
	var sfEls = $("nav").getElementsByTagName("li");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			addClass(this, 'sfhover');
			this.style.zIndex=200; //this line added to force flyout to be above relatively positioned stuff in IE
		}
		sfEls[i].onmouseout=function() {
			removeClass(this, 'sfhover');
		}
	}
}

/*---------------------------------------------------------------------------------------------------
valid_phone
---------------------------------------------------------------------------------------------------*/
function valid_phone(str) {
	rx = /^(\+?\d{1,3})?[-\s\.]?(\(\d{3}\)|\d{3})[-\s\.]?\d{3}[-\s\.]?\d{4}(([-\s\.]|(\s?(x|ext\.?)))\d{1,5})?$/i;
	exp = new RegExp(rx);
	if(str.match(exp) == null)return false;
	else return true;
}


/*---------------------------------------------------------------------------------------------------
valid_email
---------------------------------------------------------------------------------------------------*/
function valid_email(str) {
	rx = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.\w{2,8}$/;
	exp = new RegExp(rx);
	if(str.match(exp) == null)return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_postalCode
---------------------------------------------------------------------------------------------------*/
function valid_postalCode(str) {
	rx = /^[a-z]\d[a-z]\s?\d[a-z]\d$/i;
	rxz = /(^\d{5}$)|(^\d{5}\-\d{4}$)/;
	exp = new RegExp(rx);
	expz = new RegExp(rxz);
	if((str.match(exp) == null) && (str.match(expz) == null))return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_numeric
---------------------------------------------------------------------------------------------------*/
function valid_numeric(str) {
	rx = /^(\d*)$/;
	exp = new RegExp(rx);
	if(str.match(exp) == null)return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_month
---------------------------------------------------------------------------------------------------*/
function valid_month(str) {
	rx = /^(\d*)$/;
	exp = new RegExp(rx);
	if((str.match(exp) == null) && (str <= 12))return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_required
---------------------------------------------------------------------------------------------------*/
function valid_required(str) {
	if(str == "" || str == " ")return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_password
---------------------------------------------------------------------------------------------------*/
function valid_password(str) {
	rx = /^(\d*)$/;
	exp = new RegExp(rx);
	if(str.match(exp) == null)return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_sameValueAs
---------------------------------------------------------------------------------------------------*/
function valid_sameValueAs(str,compareId) {
	//alert(str + "!=" + $(compareId).value);
	if(!$(compareId))return false;
	else if(str != $(compareId).value)return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_atLeast1digit
---------------------------------------------------------------------------------------------------*/
function valid_atLeast1digit(str) {
	rx = /[\d*]/;
	exp = new RegExp(rx);
	if(str.match(exp) == null)return false;
	else return true;
}

/*---------------------------------------------------------------------------------------------------
valid_minChar
---------------------------------------------------------------------------------------------------*/
function valid_minChar(str,minChar) {
	//alert(str.length + " < ? " + minChar);
	if(str.length < minChar)return false;
	else return true;
}


/*---------------------------------------------------------------------------------------------------
valid_field
---------------------------------------------------------------------------------------------------*/
function valid_field(inp){

	// required
	if(inp.className.indexOf("valid_required") != -1){
		if(!valid_required(inp.value))return false;
	}

	// postalCode
	if(inp.className.indexOf("valid_postalCode") != -1){
		if(!valid_postalCode(inp.value))return false;
	}

	// email
	if(inp.className.indexOf("valid_email") != -1){
		if(!valid_email(inp.value))return false;
	}

	// numeric
	if(inp.className.indexOf("valid_numeric") != -1){
		if(!valid_numeric(inp.value))return false;
	}

	// atLeast1digit
	if(inp.className.indexOf("valid_atLeast1digit") != -1){
		if(!valid_atLeast1digit(inp.value))return false;
	}

	// phone
	if(inp.className.indexOf("valid_phone") != -1){
		if(!valid_phone(inp.value))return false;
	}

	// checked
	if(inp.className.indexOf("valid_checked") != -1){
		if(inp.checked != true)return false;
	}

	// Password
	if(inp.className.indexOf("valid_password") != -1){
		if(!valid_password(inp.value))return false;
	}

	// sameValueAs_@id
	if(inp.className.indexOf("sameValueAs_@") != -1){
		var startSubString = inp.className.indexOf("sameValueAs_@");
		var string = inp.className.substring(startSubString);
		var param1 = string.split('@')[1];
		var param1 = param1.split(' ')[0];
		if(!valid_sameValueAs(inp.value,param1))return false;
	}

	// valid_minChar@number
	if(inp.className.indexOf("valid_minChar_@") != -1){
		var startSubString = inp.className.indexOf("valid_minChar_@");
		var string = inp.className.substring(startSubString);
		var param1 = string.split('@')[1];
		var param1 = param1.split(' ')[0];
		if(!valid_minChar(inp.value,param1))return false;
	}

	return true;
}


/*---------------------------------------------------------------------------------------------------
valid_form
---------------------------------------------------------------------------------------------------*/
function valid_form(form){
	var fields = getElementsByClassName(form, "*", "field");
	var errors = 0;
	for(var i=0; i<fields.length; i++){
		var field = fields[i];
		field.errorMsg = getElementsByClassName(field, "label", "errorMsg")[0];
		var c_input = field.getElementsByTagName("input")[0];
		var c_select = field.getElementsByTagName("select")[0];
		var c_area = field.getElementsByTagName("textarea")[0];
		if(typeof(c_input) == "object")field.clientInput = c_input;
		else if(typeof(c_select) == "object")field.clientInput = c_select;
		else if(typeof(c_area) == "object")field.clientInput = c_area;
		field.isRequired = true;

		if(field.isRequired){
			if(!valid_field(field.clientInput)){
				errors++;
				addClass(field, "error");
			}else{
				removeClass(field, "error");
			}
		}
	}
	if(errors)return false;
	else return true;
}


/*---------------------------------------------------------------------------------------------------
initRatingEffects
---------------------------------------------------------------------------------------------------*/
function initRatingEffects(container){
	if(!$(container))return;
	var ratings = $(container);
	var imgs = ratings.getElementsByTagName('img');
	for(var i=0; i< imgs.length; i++){
		var img = imgs[i];
		var startSrc    = img.getAttribute("src");
		var startSrcLen = startSrc.length;
		var filePath    = startSrc.substring(0,startSrcLen-4);
		var fileExt     = startSrc.substring(startSrcLen-4);
		var rollSrc     = filePath + '_on' + fileExt;
		img.rollSrc = rollSrc;
		img.startSrc = startSrc;
		img.i = i;
		img.imgs = imgs;

		//MouseOver
		img.onmouseover = function(){
			this.setAttribute("src", this.rollSrc);
			for(var z=0; z< this.i; z++){
				this.imgs[z].setAttribute("src", this.rollSrc);
			}
		}
		//MouseOut
		img.onmouseout = function(){
			this.setAttribute("src", this.startSrc);
			for(var z=0; z< imgs.length; z++){
				this.imgs[z].setAttribute("src", this.startSrc);
			}
		}

	}
}


//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************


function prepareRollOverImg(){
	var el = document.getElementById("container5");
	initRollOverImg(el,"rollover","rollover_on", "_on", "activate","input");
	initRollOverImg(el,"rollover","rollover_on", "_on", "activate","img");
}


function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}




/*addLoadEvent(prepareRollOverImg);
addLoadEvent(sfHover);*/