﻿var isOpera = (navigator.userAgent.indexOf('Opera') != -1)? true : false;
var isIE = (document.all && !isOpera && navigator.platform == "Win32")? true : false;
var isIE7 = (navigator.userAgent.indexOf('MSIE 7') != -1)? true : false ;

function init(){
 	
	if($("navTop")){
		myNavTop = new NavTop();
	}
	
	if($("navLeft")){
		myNavLeft = new NavLeft();
	}
	
	if ($("popMore")) {
		var nodes = $$("#contentRight .boxRaison a");
		for (var i=0;i<nodes.length;i++) {
			Event.observe(nodes[i],"click",viewMore.bindAsEventListener(this));
		}
	}
	
	var bottomNavNodes = $$("#contentCenter .boxProdInfo li a");
	if (bottomNavNodes.length>0) {
		var bottomNavContNodes = $$("#contentCenter .boxProdInfo .cont");
		var myBoxProdInfo = new BoxProdInfo(bottomNavNodes,bottomNavContNodes);
	}
	/*
	if ($("flashRightContent")) {
//		flashRight.resize(300,100);
		var v = $$('#flashRight');
		for(var i=0; i<v.length; i++) {
			v[i].resize(300, 100);
		}
	}
	*/
}

function viewAdvancedSearch () {
	if ($("advancedSearch")) {
		Event.observe($$("#advancedSearch .close")[0],"click",function () { 
			$("advancedSearch").style.visibility = "hidden";
			removeRescueFrame($("advancedSearch"));			
		});
			
		$("advancedSearch").style.left = (screen.width/2) - ($("advancedSearch").offsetWidth/2) + "px";
		$("advancedSearch").style.visibility = "visible";
		rescueFrame($("advancedSearch"));
	}
}

function viewMore (o) {
	$("popMore").style.left = Position.cumulativeOffset(Event.element(o))[0] - 50 + "px";
	$("popMore").style.top = Position.cumulativeOffset(Event.element(o))[1] + 20 + "px";
	$("popMore").style.visibility = "visible";
	Event.observe($$("#popMore .close")[0],"click",function () { $("popMore").style.visibility = "hidden"; });
}

var viewProductInterval = -1;
function viewProductTools2 (linkId,link1,link2,link3,link4) {
	if ($("productTools")) {
		var imgHTML = $(linkId).innerHTML;
		var linkClass = "";
		if (imgHTML.indexOf("outils-jaune.gif")!=-1) { linkClass = "Yellow"; }
		else if (imgHTML.indexOf("outils-bleu.gif")!=-1) { linkClass = "Blue"; }
		else if (imgHTML.indexOf("outils-orange.gif")!=-1) { linkClass = "Orange"; }
		else if (imgHTML.indexOf("outils-vert.gif")!=-1) { linkClass = "Green"; }
		else if (imgHTML.indexOf("outils-rouge.gif")!=-1) { linkClass = "Red"; }
		var str = '';
		str += '<div class="bgRight">';
			str += imgHTML;
			str += '<ul>';
				if(link1 != null) str += '<li><a href="'+link1+'" class="fd fd'+linkClass+'">Voir le produit</a></li>';
				if(link2 != null) str += '<li><a href="'+link2+'" class="fd fd'+linkClass+'">Envoyer par email</a></li>';
				if(link3 != null) str += '<li><a href="'+link3+'" class="fd fd'+linkClass+'">Ajouter au comparateur</a></li>';
				if(link4 != null) str += '<li><a href="'+link4+'" class="fd fd'+linkClass+'">Voir le comparateur</a></li>';
			str += '</ul>';
		str += '</div>';
		str += '<div class="bgBot"></div>';
		Event.observe($("productTools"),"mouseover",function () { $("productTools").style.visibility = "visible"; });
		Event.observe($("productTools"),"mouseout",hideProductTools);
		$("productTools").style.left = Position.cumulativeOffset($(linkId))[0] + 8 + 'px';
		$("productTools").style.top = Position.cumulativeOffset($(linkId))[1] + 6 + 'px';
		$("productTools").innerHTML = str;
		$("productTools").style.visibility = "visible";
	}
}

var viewProductInterval = -1;
function viewProductTools (linkId,link1,link2,link3,link4,linkClass) {
	if ($("productTools")) {
		var imgHTML = $(linkId).innerHTML;
		var str = '';
		str += '<div class="bgRight">';
		str += imgHTML;
		str += '<ul>';
		if(link1 != null && link1 != '') str += '<li><a href="javascript:'+link1+(link1.indexOf('(')<0?'()':'')+'" class="fd fd'+linkClass+'">Voir le produit</a></li>';
		if(link2 != null && link2 != '') str += '<li><a href="javascript:'+link2+(link2.indexOf('(')<0?'()':'')+'" class="fd fd'+linkClass+'">Envoyer par email</a></li>';
		if(link3 != null && link3 != '') str += '<li><a href="javascript:'+link3+(link3.indexOf('(')<0?'()':'')+'" class="fd fd'+linkClass+'">Ajouter au comparateur</a></li>';
		if(link4 != null && link4 != '') str += '<li><a href="javascript:'+link4+(link4.indexOf('(')<0?'()':'')+'" class="fd fd'+linkClass+'">Voir le comparateur</a></li>';
		str += '</ul>';
		str += '</div>';
		str += '<div class="bgBot"></div>';
		Event.observe($("productTools"),"mouseover",function () { $("productTools").style.visibility = "visible"; });
		Event.observe($("productTools"),"mouseout",hideProductTools);
		$("productTools").style.left = Position.cumulativeOffset($(linkId))[0] + 8 + 'px';
		$("productTools").style.top = Position.cumulativeOffset($(linkId))[1] + 6 + 'px';
		$("productTools").innerHTML = str;
		$("productTools").style.visibility = "visible";
	}
}

function hideProductTools () {
	$("productTools").style.visibility = "hidden";
}

function zoomImg (linkId,imgURL,param) {
	var x = Position.cumulativeOffset($(linkId))[0] + $(linkId).offsetWidth + 5;
	var y = Position.cumulativeOffset($(linkId))[1];
	if (navigator.appName!="Microsoft Internet Explorer"&&$$(".recherche").length==0) {
		if (param=="consult") { y -= "21"; }
		else { y -= "69"; }
	}
	if (param=="gagnezTemps") {
		x -= 167;
	}
	$("myImgZoomPop").style.left =  x + 'px';	
	$("myImgZoomPop").style.top =  y + 'px';	
	$("myImgZoomPop").innerHTML = '<img src="'+imgURL+'" alt="" />';
	$("myImgZoomPop").style.visibility = "visible";
}

function unzoomImg () {
	$("myImgZoomPop").style.visibility = "hidden";
}

function resizeRightFlash (type) {
	if (type=="open") { flashRight.resize(300,300); }
	else if (type=="close") { flashRight.resize(300,100); }
}

function seeBasketProduct (linkId,product,quantity,basketLink) {
	var target = $("seeBasketProduct");
	var str ='';
	str += '<div class="bgRight">';
		str += '<a href="#0" class="close"><img src="img/btn/fermer.gif" alt="Fermer" /></a>';
		str += '<strong>Le produit suivant a bien ?t? ajout? ? votre panier :</strong>';
		str += '<div class="highlight">'+product+'<br />Quantit? : <strong>'+quantity+'</strong></div>';
		str += '<a href="#0" title="Continuer mes achats" class="back">Continuer mes achats</a>';
		str += '<a href="'+basketLink+'" class="viewBasket"><img src="img/btn/voir-mon-panier.gif" alt="Voir mon panier" /></a>';
		str += '<div class="clear"></div>';
	str += '</div>';
	target.innerHTML = str;
	//target.style.left = Position.cumulativeOffset($(linkId))[0] - 200 + 'px';
	target.style.top = Position.cumulativeOffset($(linkId))[1] + 30 + 'px';
	Event.observe($$("#seeBasketProduct .close")[0],"click",function (){ $("seeBasketProduct").style.visibility = "hidden"; });
	Event.observe($$("#seeBasketProduct .back")[0],"click",function (){ $("seeBasketProduct").style.visibility = "hidden"; });
	target.style.visibility = "visible";	
}

function showBonAchat(){
	$("bda1").style.display = "none";
	$("bda2").style.display = "block";
}

function showSupLivraison(){
	$("livraisonSup").style.visibility = "visible";
	Event.observe($$("#livraisonSup .close")[0],"click",function () { $("livraisonSup").style.visibility = "hidden"; });
}

/***** rescueFrame *****/

var idRescue = 1;
function rescueFrame(obj){
	if(isIE && !isIE7){	

		if(!obj.id) {
			obj.id = "divId"+idRescue;
			idRescue+=1;
		}
		
		if($('rescueFrame'+obj.id)){
			removeRescueFrame(obj);
		}
		
		if(!$('rescueFrame'+obj.id)){
			var rescueObj = document.createElement('iframe');
			var rescueElement = obj.appendChild(rescueObj);
			rescueElement.id = 'rescueFrame'+obj.id;
			rescueElement.style.position = 'absolute';

			rescueElement.style.top = 0+'px'; 
			rescueElement.style.left = 0+'px';
			rescueElement.style.width = obj.offsetWidth+'px'; 
			rescueElement.style.height = obj.offsetHeight+'px';
			rescueElement.style.border = '10px';
			rescueElement.style.filter = 'alpha(opacity=0);';
			rescueElement.style.zIndex = -20;
		}
	}
}
function removeRescueFrame(obj){
	if(isIE && !isIE7){
		if($('rescueFrame'+obj.id) && obj.id){
			obj.removeChild($('rescueFrame'+obj.id));
		}
	}
}


Event.observe(window, 'load',init);




///////////////////// Flash.js
Flash = Class.create();
Flash.prototype = {
	
	initialize: function (url,name,width,height,params,noFlashImgUrl) {
		this.url = url;
		this.name = name;
		this.width = width;
		this.height = height;
		this.params = params;
		this.noFlashImgUrl = noFlashImgUrl;
	},
	
	write: function (target) {
		var str = '<object id="'+this.name+'" type="application/x-shockwave-flash" data="'+this.url+'" width="'+this.width+'" height="'+this.height+'">';
			str += '<param name="movie" value="'+this.url+'" />';
			if (this.params!="") { for (var i=0;i<this.params.length;i++) {
			str += '<param name="'+this.params[i].name+'" value="'+this.params[i].value+'" />';
			}}
			if (this.noFlashImgUrl!="") { str += '<a href="http://www.adobe.com/products/flashplayer/" alt="Vous n\'avez pas le flash player"><img src="http://www.adobe.com/solutions/professionalvideo/images/flplyr_50x50.jpg" />Vous n\'avez pas le flash player</a>'; }
//			if (this.noFlashImgUrl!="") { str += '<img src="'+this.noFlashImgUrl+'" alt="Vous n\'avez pas le flash player" />'; }
		str += '</object>';
		$(target).innerHTML = str;
	},
	
	resize: function (width,height) {
		$(this.name).width = width;
		$(this.name).height = height;
	}
	
}






////////////////// NumberExtra.js

NumberExtra = Class.create();

NumberExtra.prototype = {
	
	initialize: function () {  },
	
	get2NumberNextComma: function (str) {
		var index = str.indexOf(".");
		if (index==-1) { str = str + ".00"; }
		else if (str.length-(index+1)==1) { str = str + "0"; }
		return str;
	},
	
	getSpecialFormat: function (str) {
		str = this.get2NumberNextComma(str);
		var toFormat = str.substring(0,str.indexOf("."));
		var temp = new Array();
		var cnt = 0;
		for (var i=toFormat.length-1;i>=0;i--) {
			temp.push(toFormat.charAt(i));
			if (cnt==2) { temp.push(" "); }
			cnt = (cnt!=2) ?cnt+1 :0;
		}
		return temp.reverse().join("")+str.substring(str.indexOf("."),str.length).replace(".",",");
	}

}







////////////////////// Roll.js
Roll = Class.create();

Roll.prototype = {
	
	initialize: function (a) {
		this.img = a.getElementsByTagName("img")[0];
		this.locked = false;
		this.firstRun = true;
		Event.observe(this.img, "mouseover", this.change.bindAsEventListener(this));
		Event.observe(this.img, "mouseout", this.change.bindAsEventListener(this));
	},
	
	change: function (e) {
		if (e&&this.firstRun) this.firstRun = false;
		if (!this.locked) {
			this.behavior = (!Number(this.img.src.charAt(this.img.src.length-5))&&!this.firstRun) ?1 :0;
			this.img.src = this.img.src.substring(0,this.img.src.length-5) + this.behavior + "." + this.img.src.substring(this.img.src.length-3,this.img.src.length);
		}
	},
	
	manual: function (state) {
		this.img.src = this.img.src.substring(0,this.img.src.length-5) + state + "." + this.img.src.substring(this.img.src.length-3,this.img.src.length);
	},
	
	changeTypeNavOn: function () { 
		this.firstRun = false; this.change(); this.lock(); 
	},
	
	lock: function () { 
		this.locked = true; 
	},
	
	unlock: function () { 
		this.locked = false; 
	}
	
}














////////////////// FormValidation.js

FormValidation = Class.create();
FormValidation.prototype = {
	
	initialize: function () {
		this.inputs = [];
		this.inputsMandatory = [];
		this.inputsMandatoryEmail = [];
		this.inputsNumeric = [];
	},
	
	validEmail: function (email) {
		var reg = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]{2,}[.][A-Za-z]{2,3}$/;
  		return (reg.exec(email)!=null);
	},
	
	registerInputText: function (input) {
		this.inputs[this.inputs.length] = {input:input,startValue:input.value};
		Event.observe(input,"focus",this.inputTextCheck.bindAsEventListener(this,"focus"));
		Event.observe(input,"blur",this.inputTextCheck.bindAsEventListener(this,"blur"));
	},
	
	inputTextCheck: function (e,type) {
		var itemInput = this.inputs[this.getInputInfosId(Event.element(e))];
		if (type=="focus") { if (itemInput.startValue==Event.element(e).value) { itemInput.input.value = ""; } }
		else if (type=="blur") { if (Event.element(e).value=="") { itemInput.input.value = itemInput.startValue; } }
	},
	
	getInputInfosId: function (input) {
		for (var i=0;i<this.inputs.length;i++) { if (this.inputs[i].input==input) { return i; } }
		for (var i=0;i<this.inputsMandatory.length;i++) { if (this.inputsMandatory[i].input==input) { return i; } }
	}
	
}






///////////////////// Cookies.js

function saveCookie(name, value)
{
   document.cookie = name + "=" + escape(value) + "; path=/";
}

function getCookieVal(offset)
{
   var endstr=document.cookie.indexOf (";", offset);
   if (endstr==-1) endstr=document.cookie.length;
   return unescape(document.cookie.substring(offset, endstr));
}

function loadCookie(name)
{
   var arg=name+"=";
   var alen=arg.length;
   var clen=document.cookie.length;
   var i=0;
   while (i<clen)
   {
      var j=i+alen;
      if (document.cookie.substring(i, j)==arg) return getCookieVal(j);
      i=document.cookie.indexOf(" ",i)+1;
      if (i==0) break;
   }
   return null;
}







///////////////// sendMail.js


function sendMail() {
	window.location.href = urlEncode('mailto:?subject=Venez découvrir cette page du site lapeyrepro.com&body=Bonjour%0A%0AVeuillez consulter le lien suivant : ' + window.location.href + '%0A%0AÀ bientôt sur http://www.lapeyrepro.com');
}




/////////////// printPage.js

function printPage() {
	window.print();
}






/////////////////// RollCMS.js
RollCMS = Class.create(Roll, {
	
	initialize: function (a) { 
		this.img = a.getElementsByTagName("img")[0];
		
		this.img1 = this.img.src;
		this.img2 = this.img.lang;
		
		this.locked = false;
		this.firstRun = true;
		
		Event.observe(this.img, "mouseover", this.change.bindAsEventListener(this));
		Event.observe(this.img, "mouseout", this.change.bindAsEventListener(this));
		
	},
	
	change: function (e) {
		if (e&&this.firstRun) this.firstRun = false;
		if (!this.locked) {
			this.img.src = (this.img.src == this.img1 ? this.img2 : this.img1);
		}
	},
	
	manual: function (state) {
		this.img.src = (state == '1' ? this.img2 : this.img1);
	}
	
});








///////////////// Checkbox.js

var Checkbox = Class.create({

	initialize: function (checkGroupContainerId,onGroupChange) {
		this.group = checkGroupContainerId;
		this.onGroupChange = onGroupChange;
		this.itemsNodes = $$("#"+this.group+" .checkRadio");
		var change = -1;
		for (var i=0;i<this.itemsNodes.length;i++) {
			var input = this.itemsNodes[i].parentNode.getElementsByTagName("input")[0];
			this.itemsNodes[i].id = i+this.group+"MyItem";
			this["roll"+i] = new RollCMS(this.itemsNodes[i]);
			this["roll"+i].lock();
			if (input.value==1) { change =i; }
			Event.observe(this.itemsNodes[i],"click",this.change.bindAsEventListener(this));
		}
		if (change!=-1) { this.change(this.itemsNodes[change]); }
	},
	
	change: function (o) {
		if (o.tagName&&o.tagName.toLowerCase()=="a") {
			this.a = o;
		}
		else {
			var node = Event.element(o);
			while (node.tagName.toLowerCase()!="a") { node = node.parentNode; }
			this.a = node;
		}		
		this.input = this.a.getElementsByTagName("input")[0];
		var n = (this.input.value==0||Event.element(o)=="") ?1 :0;
		var id = parseInt(this.a.id);
		this.input.value = n;
		this["roll"+id].manual(n);
		if (this.onGroupChange) { this.onGroupChange(this,id); }
	}

});








///////////////////// RadioGroup.js

var RadioGroup = Class.create(Checkbox, {   
	
	change: function($super,o) {
		$super(o);
		if (this.active) {
			var n = (this.active.input.value==0) ?1 :0;
			this.active.input.value = n;
			this["roll"+parseInt(this.active.a.id)].manual(n);
		}
		this.active = {a:this.a,input:this.input};
	} 
	
});








///////////////// FormError.js

var FormError = Class.create({

	initialize: function (onRollFunction) {
		this.onRollFunction = onRollFunction;
	},
	
	set: function (id,msg,status) {
		
		var label = id.substring(id.indexOf("_")+1,id.length);
		
		if (status) {
			var str = '';
			str += '<div class="popDyn alertError" id="errorPop'+label+'">';
				str += '<div class="bgRight">';
					str += '<img src="'+ RootUrlOn +' " alt="Erreur" class="warn" />';
					str += '<div class="innerError">'+msg+'</div>';
				str += '</div>';
				str += '<div class="bgBot"></div>';
			str += '</div>';
			$(id).parentNode.innerHTML = $(id).parentNode.innerHTML + str;			
			Event.observe($(id),'mouseover',this.show.bindAsEventListener(this,'visible'));
			Event.observe($(id),'mouseout',this.show.bindAsEventListener(this,'hidden'));
			Event.observe($('errorPop'+label),'mouseover',this.show.bindAsEventListener(this,'visible',id));
			Event.observe($('errorPop'+label),'mouseout',this.show.bindAsEventListener(this,'hidden',id));
		}
		else
		{
			if ($('errorPop'+label)) 
			{
				$('errorPop'+label).remove();
			}
		}
	},
	
	show: function (o,visibility,popId) {
		try {
			var id = -1;
			if (popId) { id = popId; }
			else { id = Event.element(o).id; }
			if (id!=-1) {
			var label = id.substring(id.indexOf("_")+1,id.length);
			var errorPop = $('errorPop'+label);
			errorPop.style.left = (Position.cumulativeOffset($('imgFormCheck_'+label).parentNode)[0] + 17) + 'px';
			errorPop.style.top = (Position.cumulativeOffset($('imgFormCheck_'+label).parentNode)[1] + 7) + 'px';
			if (this.onRollFunction) { this.onRollFunction(errorPop); }
			if(visibility == "visible"){
				rescueFrame($('imgFormCheck_'+label));
			} else {
				removeRescueFrame($('imgFormCheck_'+label));
			}
			errorPop.style.visibility = visibility;
			}
		}
		catch(e) {}
	}

});







////////////////// RemoveAccents.js

// Remplace toutes les occurences d'une chaine
function replaceAll(str, search, repl) {
	while (str.indexOf(search) != -1)
	str = str.replace(search, repl);
	return str;
}

// Remplace les caractères accentués
function removeAccents(str) {
	var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
	var spec = new Array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I', 'D','N','O','O','O','0','O','O','U','U','U','U','Y','b','s', 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n', 'o','o','o','o','o','o','u','u','u','u','y','y','b','y');
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
}


// Remplace les caractères accentués en urlencode iso
function urlEncode(str) {
	var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
	var spec = new Array('%C0','%C1','%C2','%C3','%C4','%C5','%C6','%C7','%C8','%C9','%CA','%CB','%CC','%CD','%CE','%CF','%D0','%D1','%D2','%D3','%D4','%D5','%D6','%D8','%D9','%DA','%DB','%DC','%DD','%DE','%DF','%E0','%E1','%E2','%E3','%E4','%E5','%E6','%E7','%E8','%E9','%EA','%EB','%EC','%ED','%EE','EF','%F0','%F1', '%F2','%F3','%F4','%F5','%F6','%F7','%F8','%F9','%FA','%FB','%FC','%FD','%FE','%FF');
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
}


function htmlEncode(str) {
	var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î'
					    ,'Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ'
						,'ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í'
						,'î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý'
						,'ý','þ','ÿ');
						
	var spec = new Array('&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Acirc;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&iacute;','&Icirc;',
						 '&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&thorn;',
						 '&szlig;','&agrave;','&aacute;', '&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;',
						 '&icirc;','&iuml;','&eth;','&ntilde;', '&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;'
						,'&yacute;','&THORN;','&yuml;');
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
}

function removeHTMLAccents(str) {
	var norm = new Array('&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Acirc;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&iacute;','&Icirc;',
						 '&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&thorn;',
						 '&szlig;','&agrave;','&aacute;', '&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;',
						 '&icirc;','&iuml;','&eth;','&ntilde;', '&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;'
						,'&yacute;','&THORN;','&yuml;');
	
	var spec = new Array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I', 'D','N','O','O','O','0','O','O','U','U','U','U','Y','b','s', 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n', 'o','o','o','o','o','o','u','u','u','u','y','y','b','y');
	
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
}






////////////////////// webtoolkit.utf8.js

/**
*
*  UTF-8 data encode / decode
*  http://www.webtoolkit.info/
*
**/

var Utf8 = {

	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}
function LapAlert(str) { alert(Utf8.decode(str)); }
function LapConfirm(str) { return confirm(Utf8.decode(str)); }







//////////////////// webtoolkit.url.js

/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/

var Url = {

	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},

	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}











/////////////// ProductFilter.js

var ProductFilter = Class.create({
	
	initialize: function (url, imgPlus, imgMoins, imgPanier, isHT) {
		this._imgPlus = imgPlus;
		this._imgMoins = imgMoins;
		this._imgPanier = imgPanier;
		this.isHT = isHT;
		
		this._serviceUrl = url;
		this._idCategory = $("productIdToFilter").value;
		
		// current selected values
		this._lastValues = new Array();
		
		// FCA
		this._orderCriterias = new Array();
		// FCA
		
		// initialize data and get criterias
		$('searchResults').hide();
		$('searchLoad').show();
		
		
		//this._reinitializeChoices();
		
		this._initializeData();
	},
	
	_removeHTMLBoxes : function() {
		$("productListFilter").innerHTML = '';		
	},
	
	_initializeData : function() {
		var that = this;
		
		new Ajax.Request(that._serviceUrl, {
			parameters : {
				'idCategorie' : this._idCategory
			},
			onSuccess : function (response) {
				var data = response.responseText.strip().evalJSON()[0];
				that._datas = data;
				
				that._removeHTMLBoxes();
				
				that._datasInit = data;
				that._datas = data;
				
				that._setHTMLBoxes();
				
				that._updateProducts();
				
				$('searchResults').show();
				$('searchLoad').hide();
			},
			onFailure : function () {
				this._removeHTMLBoxes();
			},
			on404 : function () {
				this._removeHTMLBoxes();
			}
		});
	},
	
	_updateData : function() {
		var that = this;
		var criterias = $('productListFilter').getElementsBySelector("select");
		var parameters = 'idCategorie='+this._idCategory;
		$('divProducts').hide();
		var orderCriteriasIndex = 0;
		var reinitialize = false;
		var reinitializeAll = false;		
		that._lastValues.clear();
		
		// Une premiere boucle pour savoir si on a réinitialisé une combo
		for(var i=0; i<criterias.length; i++) {
			var criteria = criterias[i];
			var id = criteria.id;
			var value = criteria.value;
			// 'Annuler choix' a été sélectionné. Il faut trouver la position dans l'ordre de sélection de la combo annulée
			if (value=='#'){
				reinitialize = true;
				for(var j=0; j< that._orderCriterias.length; j++){
					if(that._orderCriterias[j]==id){
						orderCriteriasIndex = j;
						if (j==0){
							reinitializeAll = true;
						}
					}
				}
			}
		}
		
		// une annulation de choix a été faite, il faut annuler les choix des combos suivantes
		if (orderCriteriasIndex!=0 || reinitializeAll){
			var orderCriteriasLength = that._orderCriterias.length;
			// boucle sur les critères
			for(var i=0; i<criterias.length; i++) {
				var criteria = criterias[i];
				var id = criteria.id;	
				var isInOrderCriterias = false;
				// Les combos sélectionnées après la combo annulée doivent etre réinitialisées
				for(var j=0; j< orderCriteriasLength; j++){
					if(that._orderCriterias[j]==id){
						isInOrderCriterias = true;
						if(j>=orderCriteriasIndex){
							criterias[i].value = '#';
						}
					}
				}
				// si le critère courant n'est pas dans le tableau des ordres de criteres il faut également le réinitialisé (cas d'une combo suivante ayant été automatiquement chargée et sélectionnée
				if(!isInOrderCriterias){
					criterias[i].value = '#';
				}
			}
			
			// Mise à jour du tableau des ordres de saisie des critères - suppression des criteres apres celui annulé
			for(var j=orderCriteriasIndex; j< orderCriteriasLength; j++){
				that._orderCriterias.pop();
			}
		}
		
		// Consitution de la requette		
		var paramValues = "";
		for(var i=0; i<criterias.length; i++) {
			var index = i+1;
			var criteria = criterias[i];
			var id = criteria.id;
			var value = criteria.value;
			
			// Ajout dans le tableaux des ordres de saisie des critères, le critère sélectionné
			if (!reinitialize && value!=''){
				var addCriteria = true;
				// contrôle si l'id est déjà dans le tableau
				for(var j=0; j< that._orderCriterias.length; j++){
					if(that._orderCriterias[j]==id){
						addCriteria = false;
					}
				}
				if(addCriteria){
					// ajout de l'ID sélectionnée
					that._orderCriterias.push(id);
				}
			}
			
			if (value=='#'){
				value = '';
			}
			that._lastValues.push(value);
			
			paramValues += "&critere" + index + "=" + id;
			paramValues += "&valeur" + index + "=" + value;
			
		}
		
		new Ajax.Request(that._serviceUrl, {
			postBody :  parameters + paramValues,
			onSuccess : function (response) {
				var data = response.responseText.strip().evalJSON()[0];
				
				that._datas = data;
				
				that._setHTMLBoxes();
				
				that._updateProducts();
				
				$('searchLoad').hide();
			},
			onFailure : function () {
				$('listProducts').update("<strong class='error'>Nous n'avons pas pu r&eacute;cup&eacute;rer les informations</strong>");
				
				$('divProducts').show();
				$('tableMenu').style.display = "none";
				$('searchLoad').style.display = "none";
			},
			on404 : function () {
				$('listProducts').update("<strong class='error'>Nous n'avons pas pu r&eacute;cup&eacute;rer les informations</strong>");
				
				$('divProducts').show();
				$('tableMenu').style.display = "none";
				$('searchLoad').style.display = "none";
			}
		});
	},
	
	_updateProducts: function() {
		var products = this._datas.produits;
		
		if(products.length > 0) {
			var str = '';
			
			for(var i=0; i<products.length; i++) {
				var product = products[i];
				
				str += this._getHTMLProduct(product);
			}
			
			$('listProducts').update(str);
			
			$('divProducts').show();
			$('tableMenu').style.display = "block";
		} else {
		
			//Vérifions si toutes les listes ne sont pas à 0, c'est à dire aucune LastValue pour les selectBox.
			var lesselects = this._datas.criteres;
			var oneLastValue = false;
			for (var i=0;i<lesselects.length;i++) {
													 var lesvalues = this._lastValues[i];
													 if ((lesvalues!='undefined') && (lesvalues!=null) && (lesvalues!='')) { oneLastValue = true; }
												  }
		
			if (oneLastValue)
			{
				$('listProducts').update("<ul class='contlist contTab' style='display: block;'><li style='width: 450px;'>Aucun produit ne correspond aux crit&egrave;res</li></ul>");
				$('divProducts').show();
				$('tableMenu').style.display = "none";
			}
		}
	},
	
	_getHTMLProduct: function(product) {
		var str = '';
		
		str += '<div class="cont contData">';
		str += '<div class="title">';
		str += product.libelle;
		str += '</div>';
		str += '<div class="quantitechoix">';
		str += '	<div class="quantite" id="quantiteProduit">';
		str += '		<a href="#0" onclick="javascript:removeProduct(\''+product.idProduit+'\');"><img src="'+this._imgMoins+'" alt="moins" /></a>';
		str += '		<input onblur="javascript:updatePrice(\''+product.idProduit+'\');"  name="quantite" type="text" id="quantite'+product.idProduit+'" title="Quantit&eacute;" value="1" class="myInput" />';
		str += '		<a href="#0" onclick="javascript:addProduct(\''+product.idProduit+'\');"><img src="'+this._imgPlus+'" alt="plus" /></a>';
		str += '	</div>';
		str += '	<script type="text/javascript">';
		str += '		Event.observe(window,"load",function (){';
		str += '			var myProductQuantity = new ProductQuantity($("quantiteProduit"));';
		str += '		});';
		str += '	</script>';
		str += '</div>';
		str += '<div class="prix">';
		str += '	<input type="hidden" id="price'+product.idProduit+'" value="'+product.prixVenteTtc+'" />';
		str += '	<input type="hidden" id="priceHt'+product.idProduit+'" value="'+product.prixVenteHt+'" />';		
		str += '	<input type="hidden" id="label'+product.idProduit+'" value="'+product.libelle+'" />';
		if(this.isHT) {
			str += '	<span class="txtprod" id="productFilterPrice'+product.idProduit+'">'+product.prixVenteHt.toFixed(2)+' &euro;</span></strong>';
		} else {
			str += '	<span class="txtprod" id="productFilterPrice'+product.idProduit+'">'+product.prixVenteTtc.toFixed(2)+' &euro;</span></strong>';
		}
		str += '</div>';
		str += '<div class="ajouter"><a href="javascript:addArticle(\''+product.idProduit+'\')"><img id="btn'+product.idProduit+'" src="'+this._imgPanier+'" alt="Ajouter panier" /></a></div>';
		str += '<div class="popDyn" id="seeBasketProduct"></div>';
		str += '<div class="clear"></div>';
		str += '</div>';
		
		return str;
	},
	
	_setHTMLBoxes: function () {
		$("productListFilter").innerHTML = '';		
		var selects = this._datas.criteres;
		var str = '';
		
		for (var i=0;i<selects.length;i++) {
			str += this._getHTMLBox(i);
		}
		$("productListFilter").update(str + '<div class="clear"></div>');
		
		$$('#productListFilter select').each(this._addSelectEvent.bindAsEventListener(this));
	},
	
	_getHTMLBox: function(index) {
		var label = this._datas.criteres[index].libelle;
		var criteria = this._datas.criteres[index].idCritere;
		var values = this._datas.criteres[index].valeurs;
		
		str = '';
		
		str += '<div class="list">';
			str += '<label for="filter'+index+'">'+label+' :</label>';
			str += '<select id="'+criteria+'" name="'+criteria+'" title="'+label+'" class="inp">';
				if(values.length > 1) {
					str += '<option value="">Choisissez...</option>';
				} else {
//					if(values.length < this._datasInit.criteres[index].valeurs.length) {
						str += '<option value="#">Annuler le choix...</option>';
//					}
				}
				
				for(var i=0; i<values.length; i++){
					if(this._lastValues[index] == values[i] || values.length == 1) {
						str += '<option value="'+values[i]+'" selected="selected">'+values[i]+'</option>';
					} else {
						str += '<option value="'+values[i]+'">'+values[i]+'</option>';
					}
				}
			str += '</select>';
		str += '</div>';
		
		return str;
	},
	
	_addSelectEvent: function (o) {
		Event.observe(o,"change",this._onSelectChange.bindAsEventListener(this));
	},
	
	_onSelectChange: function (o) {
		$('searchLoad').show();
		
		this._updateData();
	},
	
	_saveFilter: function (id,value) {
		this._datas.currentFilter[id] = value;
	},
	
	_addResetFilterEvent: function (o) {
		Event.observe(o,"click",this._onResetFilter.bindAsEventListener(this));
	},
	
	_onResetFilter: function (o) {
		var id = parseInt(Event.element(o).id);
		this._datas.selectboxes[id] = this._datas.selectboxesOriginal[id];
		this._getSelectBoxesContent();
	}
	
});








//////////////////// CheckRadio.js

var CheckRadio = Class.create({
	
	initialize : function() {
		this._elements = $$('.checkRadioGroup');
		
		for(var i=0; i<this._elements.length; i++) {
			var root = this._elements[i];
			
			var elements = root.getElementsBySelector("[type=checkbox]");
			for(var j=0; j<elements.length; j++) {
				var element = elements[j];
				
				element.observe("click", this._onClick.bindAsEventListener(this));
				
				this._manualCheck(element, false);
			}
		}
	},
	
	_onClick : function(event) {
		var element = event.element();
		
		var parent = element.parentNode;
		while(parent != null && !parent.hasClassName("checkRadioGroup")) {
			parent = parent.parentNode;
		}
		
		if(parent != null) {
			var elements = parent.getElementsBySelector("[type=checkbox]");
			
			for(var i=0; i<elements.length; i++) {
				var child = elements[i];
				
				if(child != element) {
					this._manualCheck(child, false);
				} else {
					this._manualCheck(child, child.checked);
				}
			}
		}
	},
	
	_manualCheck : function(e, isChecked) {
		if(isChecked) {
			e.checked = true;
			e.value = 1;
		} else {
			e.checked = false;
			e.value = 0;
		}
	}
	
});
