// Temp - debugging
var out = function(msg) {
	if($('outMsg') == null) {
		var out = new Element('div',{'id': 'outMsg','style': 'background:#FFF; color:#000;'});
		out.inject($('all'),'top');
	}
	$('outMsg').appendText(msg);
	var br = new Element('br');
	$('outMsg').grab(br);
};
var outError = function(msg) {
	if($('outMsg') == null) {
		var out = new Element('div',{'id': 'outMsg','style': 'background:#FFF; color:#000;'});
		out.inject($('all'),'top');
	}
	var ht = $('outMsg').get('html');
	$('outMsg').set('html',ht+'<span style="display:block; padding:4px 0; text-align:center; background:#000; border-bottom:2px solid #fff; color:#FFF; font-size:13px; font-weight:bold;">'+msg+'</span>');
};

// Shop - Liste
var Page = new Class({
	Implements: Options,
	options: {
		numero: 0,
		visible: true,
		laPage: null,
		nbActifs: 0,
		lesArticles: []
	},
	initialize: function(options) {
		this.setOptions(options);
	},
	ajouterArticle: function(article) {
		this.options.lesArticles.include(article);
	},
	cloner: function(article,actif,pageArticle) {
		if((article.options.visible) && (!article.options.isClone)) {
			var cloneBox = article.options.lArticle.clone().inject(this.options.laPage,'bottom');
			var clone = new Article({lArticle: cloneBox,prop: article.options.prop});
			this.ajouterArticle(clone);
			article.options.clone=clone;
			article.options.visible=false;
			clone.options.isClone=true;
			clone.options.original=article;
			clone.options.ancienNumPage=clone.options.numPage;
			clone.options.numPage=this.options.numero;
			var pageUne = (this.options.numero == 1);
			if(actif) {
				clone.afficher(pageUne);
			} else {
				clone.cacher(pageUne);
			}
		} else if(article.options.isClone) {
			var articleOrig = article.options.original;
			var cloneBox = articleOrig.options.lArticle.clone().inject(this.options.laPage,'bottom');
			var clone = new Article({lArticle: cloneBox,prop: articleOrig.options.prop});
			this.ajouterArticle(clone);
			articleOrig.options.clone=clone;
			articleOrig.options.visible=false;
			clone.options.isClone=true;
			clone.options.original=articleOrig;
			var pageUne = (this.options.numero == 1);
			if(actif) {
				clone.afficher(pageUne);
			} else {
				clone.cacher(pageUne);
			}
			article.options.lArticle.dispose();
			pageArticle.options.lesArticles.erase(article);
		}
	},
	decloner: function(article) {
		this.options.lesArticles.erase(article);
		article.options.original.options.visible=true;
		article.options.original.clone = null;
		article.options.lArticle.dispose();
		//article.dispose();
	}
});
var Article = new Class({
	Implements: Options,
	options: {
		actif: true,
		objArticle: null,
		objInDom: null,
		pageUne: false,
		prop: {
			cat: [],
			f: [],
			t: [],
			c: []
		}
	},
	initialize: function(options) {
		this.setOptions(options);
		this.options.objArticle = this.options.objInDom.clone();
		this.options.objInDom.getElement('a').addEvent('click', lienSharpClick);
		//this.fxArticle = new Fx.Tween(this.options.objArticle.getElement('a'), {property: 'opacity'});
		//this.fxBox = new Fx.Tween(this.options.objArticle, {property: 'margin-left'});
		this.margeLeft = -1*(this.options.objArticle.getSize().x+1);
		this.margeLeftBase = 1;
	},
	isActif: function(filtresActifs) {
		var actif = true;
		
		// Les catégories
		if(!this.isActifGeneric(filtresActifs.cat,this.options.prop.cat)) {
			actif = false;
		}
		// Les familles
		if(!this.isActifGeneric(filtresActifs.f,this.options.prop.f)) {
			actif = false;
		}
		// Les tailles
		if(!this.isActifGeneric(filtresActifs.t,this.options.prop.t)) {
			actif = false;
		}
		// Les couleurs
		if(!this.isActifGeneric(filtresActifs.c,this.options.prop.c)) {
			actif = false;
		}
		this.options.actif = actif;
		return actif;
	},
	isActifGeneric: function(filtre,prop) {
		var nFiltre = filtre.map(function(item, index){
			return item.toInt();
		});
		var nProp = prop.map(function(item, index){
			return item.toInt();
		});
		var actif = true;
		var t = Array(); // création d'un tableau temporaire
		t.extend($A(nFiltre)); // On y ajouter les filtres actifs
		t.combine($A(nProp)); // Puis on combine avec les prop de l'article en cours
		// Si le tableau contient le total des 2 tableaux, il est donc inactif
		if(t.length == (filtre.length + prop.length)) {
			actif = false;
		}
		return actif;
	},
	afficher: function(effet) {
		this.fxBox.cancel();
		this.fxArticle.cancel();
		if(effet) {
			this.fxBox.start(this.margeLeftBase).chain(function() {
				this.fxArticle.start(1);
			}.bind(this));
			this.options.lArticle.setStyle('display','block');
		} else {
			this.fxBox.set(this.margeLeftBase);
			this.fxArticle.set(1);
			this.options.lArticle.setStyle('display','block');
		}
		//var span = new Element('span', {'class':'special'});
		//span.inject(this.options.lArticle.getElement('a'), 'bottom');
		//span.set('html','famille:'+this.options.prop.f[0]+'<br />couleur:'+this.options.prop.c[0]+'<br />page:'+this.options.numPage+'<br />anciennePage:'+this.options.ancienNumPage+'<br />isClone:'+this.options.isClone+'<br />');
	},
	cacher: function() {
		if(this.options.pageUne) {
			this.options.objInDom.dispose();
			this.options.pageUne = false;
			/*this.fxArticle.start(0).chain(function() {
				this.fxBox.start(this.margeLeft).chain(function() {
					this.options.objInDom.dispose();
					this.fxArticle = null;
					this.fxBox = null;
					this.options.pageUne = false;
				}.bind(this));
			}.bind(this));*/
		}
	},
	injectIn: function(element, pageUne) {
		this.options.objInDom = this.options.objArticle.clone();
		this.options.objInDom.inject(element, 'bottom');
		if(pageUne) {
			/*this.fxArticle = new Fx.Tween(this.options.objArticle.getElement('a'), {property: 'opacity'}).set(0);
			this.fxBox = new Fx.Tween(this.options.objArticle, {property: 'margin-left'}).set(this.margeLeft);
			this.fxBox.start(this.margeLeftBase).chain(function() {
				this.fxArticle.start(1);
			}.bind(this));*/
		} else {
			
		}
		this.options.objInDom.getElement('a').addEvent('click', lienSharpClick);
		this.options.pageUne = pageUne;
		return this.options.objInDom;
	},
	injectAfter: function(element, pageUne) {
		this.options.objInDom = this.options.objArticle.clone();
		this.options.objInDom.inject(element, 'after');
		if(pageUne) {
			/*this.fxArticle = new Fx.Tween(this.options.objArticle.getElement('a'), {property: 'opacity'}).set(0);
			this.fxBox = new Fx.Tween(this.options.objArticle, {property: 'margin-left'}).set(this.margeLeft);
			this.fxBox.start(this.margeLeftBase).chain(function() {
				this.fxArticle.start(1);
			}.bind(this));*/
		} else {
			
		}
		this.options.objInDom.getElement('a').addEvent('click', lienSharpClick);
		this.options.pageUne = pageUne;
		return this.options.objInDom;
	}
});
var lienSharpClick = function(e) {
	var loc = ''+window.location;
	var posSharp = loc.indexOf('#');
	if(posSharp != -1) {
		posSharp = posSharp+1;
		var params = loc.substr(posSharp, loc.length);
		e.target = e.target + '#' + params;
	}
};
var Filtres = new Class({
	Implements: Options,
	options: {
		filtresBase: null,
		filtresActifs: null
	},
	initialize: function(options) {
		this.setOptions(options);
		this.filtresBase = new Hash({
			'cat': [],
			'f': [],
			't': [],
			'c': []
		});
		this.filtresActifs = new Hash({
			'cat': [],
			'f': [],
			't': [],
			'c': []
		});
	},
	addFiltreBase: function(type,id) {
		this.filtresBase[type].include(id);
	},
	initFiltresActifs: function() {
		this.filtresActifs.cat.combine(this.filtresBase.cat);
		this.filtresActifs.f.combine(this.filtresBase.f);
		this.filtresActifs.t.combine(this.filtresBase.t);
		this.filtresActifs.c.combine(this.filtresBase.c);
	},
	checkFiltre: function(type,id,lien) {
		if(id=='all') {
			this.allFiltre(type);
		} else {
			var li = lien.getParent();
			if(li.hasClass('actif')) {
				this.removeFiltre(type,id);
				li.removeClass('actif');
			} else {
				this.addFiltre(type,id);
				li.addClass('actif');
			}
		}
		this.setUrl();
	},
	calculerFiltres: function(lesArticles) {
		var calculCat=Array();
		var calculF = Array();
		var calculT = Array();
		var calculC = Array();
		// On garde que les filtres actifs :
		lesArticles.each(function(iArticle, indexArticle) {
			if(iArticle.isActif(this.filtresActifs)) {
				calculCat.combine($A(iArticle.options.prop.cat));
				calculF.combine($A(iArticle.options.prop.f));
				calculT.combine($A(iArticle.options.prop.t));
				calculC.combine($A(iArticle.options.prop.c));
			}
		}.bind(this));
		this.filtresActifs.cat.empty();
		this.filtresActifs.f.empty();
		this.filtresActifs.t.empty();
		this.filtresActifs.c.empty();
		this.filtresActifs.cat.combine(calculCat);
		this.filtresActifs.f.combine(calculF);
		this.filtresActifs.t.combine(calculT);
		this.filtresActifs.c.combine(calculC);
		var liensFiltres=$('user_heidi_filtre').getElements('ul.filtre li a');
		liensFiltres.each(function(lien, index) {
			var rel=lien.get('rel');
			var type=rel.substring(0,rel.indexOf('['));
			var id=rel.substr(rel.indexOf('[')+1,10);
			id=id.substring(0,id.indexOf(']'));
			var li = lien.getParent();
			li.removeClass('actif');
			id=id.toInt();
			
			li.removeClass('actif')
			if(this.filtresActifs[type].contains(id)) {
				li.addClass('actif')
			}
		}.bind(this));
	},
	addFiltre: function(type, id) {
		if(!this.filtresActifs[type].contains(id)) {
			this.filtresActifs[type].include(id);
		}
	},
	removeFiltre: function(type, id) {
		if(this.filtresActifs[type].contains(id)) {
			this.filtresActifs[type].erase(id);
		}
	},
	allFiltreGeneric: function(liensFiltre, filtresActifs, filtres) {
		// Si tout est actif, on désactive tout
		if(filtresActifs.length == filtres.length) {
			filtresActifs.empty();
			liensFiltre.each(function(item) {
				item.removeClass('actif');
			});
		} else { // Sinon, on active tout
			filtresActifs.combine(filtres);
			liensFiltre.each(function(item) {
				item.addClass('actif');
			});
		}
	},
	allFiltre: function(type) {
		switch(type) {
			case 'cat':
				var liensFiltre=$('user_heidi_filtre').getElements('ul.categories li');
				this.allFiltreGeneric(liensFiltre,this.filtresActifs.cat,this.filtresBase.cat);
				break;
			case 'f':
				var liensFiltre=$('user_heidi_filtre').getElements('ul.familles li');
				this.allFiltreGeneric(liensFiltre,this.filtresActifs.f,this.filtresBase.f);
				break;
			case 't':
				var liensFiltre=$('user_heidi_filtre').getElements('ul.tailles li');
				this.allFiltreGeneric(liensFiltre,this.filtresActifs.t,this.filtresBase.t);
				break;
			case 'c':
				var liensFiltre=$('user_heidi_filtre').getElements('ul.couleurs li');
				this.allFiltreGeneric(liensFiltre,this.filtresActifs.c,this.filtresBase.c);
				break;
		}
	},
	getUrlPage: function() {
		var loc = ''+window.location;
		var posSharp = loc.indexOf('#')+1;
		var params = loc.substr(posSharp, loc.length);
		var tTmp = params.split('/');
		var page = 1;
		$A(tTmp).each(function(item,index) {
			var tab = item.split('-');
			if(tab.length > 0) {
				var type = tab[0];
				if(type=='page') {
					page = tab[1].toInt();
					if(page<1) {
						page = 1;
					}
				}
			}
		});
		return page;
	},
	getUrl: function() {
		var loc = ''+window.location;
		var posSharp = loc.indexOf('#')+1;
		/*if(posSharp == 0) {
			return;
		}*/
		var params = loc.substr(posSharp, loc.length);
		var tTmp = params.split('/');
		var tParams = new Hash({
			'cat': [],
			'f': [],
			't': [],
			'c': []
		});
		var tOk = new Hash({
			'cat': 0,
			'f': 0,
			't': 0,
			'c': 0
		});
		var page = 1;
		$A(tTmp).each(function(item,index) {
			var tab = item.split('-');
			if(tab.length > 0) {
				var type = tab[0];
				tOk[type] = 1;
				if(type=='cat' || type=='f' || type=='t' || type=='c') {
					if(tab[1]=='all') {
						tParams[type].combine(this.filtresBase[type]);
					} else {
						var nb = tab.length;
						for(var i=1; i<nb; i++) {
							var val = tab[i].toInt();
							val = ''+val;
							tParams[type].include(val);
						}
					}
				} else if(type=='page') {
					page = tab[1].toInt();
					if(page<1) {
						page = 1;
					}
				}
			}
		}.bind(this));
		if(tOk['cat'] == 1 && tOk['f'] == 1 && tOk['t'] == 1 && tOk['c'] == 1) {
			this.filtresActifs['cat'].empty();
			this.filtresActifs['f'].empty();
			this.filtresActifs['t'].empty();
			this.filtresActifs['c'].empty();
			this.filtresActifs['cat'].combine(tParams['cat']);
			this.filtresActifs['f'].combine(tParams['f']);
			this.filtresActifs['t'].combine(tParams['t']);
			this.filtresActifs['c'].combine(tParams['c']);
			this.majLiensFiltres();
		}
	},
	setUrl: function(pObj) {
		var loc = ''+window.location;
		var posSharp = loc.indexOf('#');
		if(posSharp > 0) {
			loc = loc.substr(0, posSharp);
		}
		loc = loc+'#';
		var pCat = 'cat';
		var pF = 'f';
		var pT = 't';
		var pC = 'c';
		var page = 1;
		if(pObj) {
			page = pObj.indexPage;
		}
		if(page < 1) {
			page = 1;
		}
		var pPage = 'page-'+page;
		if(this.filtresActifs['cat'].length == this.filtresBase['cat'].length) {
			pCat=pCat+'-all';
		} else {
			this.filtresActifs['cat'].each(function(item, index) {
				pCat=pCat+'-'+item;
			});
		}
		if(this.filtresActifs['f'].length == this.filtresBase['f'].length) {
			pF=pF+'-all';
		} else {
			this.filtresActifs['f'].each(function(item, index) {
				pF=pF+'-'+item;
			});
		}
		if(this.filtresActifs['t'].length == this.filtresBase['t'].length) {
			pT=pT+'-all';
		} else {
			this.filtresActifs['t'].each(function(item, index) {
				pT=pT+'-'+item;
			});
		}
		if(this.filtresActifs['c'].length == this.filtresBase['c'].length) {
			pC=pC+'-all';
		} else {
			this.filtresActifs['c'].each(function(item, index) {
				pC=pC+'-'+item;
			});
		}
		loc=loc+pCat+'/'+pF+'/'+pT+'/'+pC+'/'+pPage;
		window.location = loc;
	},
	majLiensFiltres: function() {
		var liensFiltres=$('user_heidi_filtre').getElements('ul.filtre li a');
		liensFiltres.each(function(lien, index) {
			var rel=lien.get('rel');
			var type=rel.substring(0,rel.indexOf('['));
			var id=rel.substr(rel.indexOf('[')+1,10);
			id=id.substring(0,id.indexOf(']'));
			var li = lien.getParent();
			li.removeClass('actif');
			//id=id.toInt();
			
			li.removeClass('actif')
			if(this.filtresActifs[type].contains(id)) {
				li.addClass('actif')
			}
		}.bind(this));
	}
});
var lienSharpClick = function(e) {
	var loc = ''+window.location;
	var posSharp = loc.indexOf('#');
	if(posSharp != -1) {
		posSharp = posSharp+1;
		var params = loc.substr(posSharp, loc.length);
		var newLoc = this.href;
		var posSharp2 = newLoc.indexOf('#');
		if(posSharp2 != -1) {
			newLoc = newLoc.substr(0, posSharp-1);
		}
		newLoc = newLoc + '#' + params;
		this.href=newLoc;
	}
};
var heidiAFiltres = new Class({
	initialize: function() {
		
	},
	desactiverFiltres: function() {
		var liensFiltre=$('user_heidi_filtre').getElements('ul.filtre li a');
		liensFiltre.extend($('user_heidi_filtre').getElements('span.tout a'));
		liensFiltre.each(function(lien,index) {
			var rel=lien.get('rel');
			var type=rel.substring(0,rel.indexOf('['));
			var id=rel.substr(rel.indexOf('[')+1,10);
			id=id.substring(0,id.indexOf(']'));
			if(id!='all') {
				//this.filtres[type].include(id);
			}
			lien.getParent().addClass('actif');
			lien.addEvent('click', function(e) {
				e.stop();
				
			});
		});
		var cacheFiltre = new Element('div', {'id':'user_heidi_filtre_desactive'});
		cacheFiltre.inject($('user_heidi_filtre'), 'top');
	},
	addAFiltresEvents: function() {
		
	}
});
var heidiListe = new Class({
    Implements: Chain,
    initialize: function(){
		// Les différents éléments
		this.heidiListe = $('user_heidi_liste');
		this.conteneurPages = this.heidiListe.getElement('.conteneurPages');
		var tPages = this.conteneurPages.getElements('div.page');
		this.bPrec = $('user_heidi_precedent');
		this.bSuiv = $('user_heidi_suivant');
		this.bPrecLien = this.bPrec.getElement('a');
		this.bSuivLien = this.bSuiv.getElement('a');
		
		var tailleConteneur = 0;
		var taillePage=0;
		var nbPages = 0;
		tPages.each(function(item, index) {
			var s = item.getSize();
			taillePage=s.x;
			tailleConteneur += s.x;
			nbPages++;
		});
		this.tailleConteneur = tailleConteneur;
		this.taillePage = taillePage;
		this.indexPage = 1;
		this.nbPages = nbPages;
		this.conteneurPages.setStyle('width',this.tailleConteneur+'px');
		this.heidiListe.setStyle('overflow','hidden');
		this.heidiListe.setStyle('width',this.taillePage+'px');
		this.bPrecLien.addClass('jsok');
		this.bSuivLien.addClass('jsok');
		
		// slides
		this.fxConteneurPages = new Fx.Tween(this.conteneurPages, {'property':'margin-left','duration':700,'transition':Fx.Transitions.Quad.easeInOut});
		
		this.bPrecLien.addEvent('click', function(e) {
			e.stop();
			this.changerPage(this.indexPage-1);
		}.bind(this));
		this.bSuivLien.addEvent('click', function(e) {
			e.stop();
			this.changerPage(this.indexPage+1);
		}.bind(this));
		
		// Récup json
		var tProp = new Hash();
		if(typeof(jsonData) != 'undefined') {
			this.jsonArticles = JSON.decode(jsonData);
		}
		//this.listeArticlesFx=new Array();
		this.nbArticlesPage = 12;
		this.lesPages = new Array();
		this.lesArticles = new Array();
		var num=0;
		var i=0;
		tPages.each(function(item,index) {
			num++;
			var tA = item.getElements('.box');
			tA.each(function(itemA,indexA) {
				var p = this.jsonArticles[i];
				var a = new Article({objInDom: itemA,prop: {cat:p.cat,f:p.f,t:p.t,c:p.c}});
				this.lesArticles.include(a);
				i++;
			}.bind(this));
			var p = new Page({numero:num,laPage:item});
			this.lesPages.include(p);
		}.bind(this));
		
		// Init objet Filtres
		this.lesFiltres = new Filtres();
		
		// On récupère le num de la page
		var page = this.lesFiltres.getUrlPage();
		
		// Liens filtre
		var liensFiltre=$('user_heidi_filtre').getElements('ul.filtre li a');
		liensFiltre.extend($('user_heidi_filtre').getElements('span.tout a'));
		liensFiltre.each(function(lien,index) {
			var rel=lien.get('rel');
			var type=rel.substring(0,rel.indexOf('['));
			var id=rel.substr(rel.indexOf('[')+1,10);
			id=id.substring(0,id.indexOf(']'));
			if(id!='all') {
				this.lesFiltres.addFiltreBase(type, id);
			}
			lien.getParent().addClass('actif');
			lien.addEvent('click', function(e) {
				e.stop();
				this.changerPage(1);
				this.lesFiltres.checkFiltre(type,id,lien);
				this.calculerArticles();
				
			}.bind(this));
		}.bind(this));
		this.lesFiltres.initFiltresActifs();
		
		// onClick sur les liens pour ajouter #filtres
		var lienAttentionUrl = $('user_heidi_liste').getElements('.box a');
		lienAttentionUrl.extend($('user_heidi_panier_mini').getElements('.panier a.voirPanier'));
		lienAttentionUrl.each(function(lien,index) {
			lien.addEvent('click', lienSharpClick);
		}.bind(this));
		
		this.lesFiltres.getUrl();
		this.calculerArticles();
		
		// Init pages
		this.changerPage(page);
    },
	changerPage: function(page) {
		if(this.indexPage != page) {
			if(page >= 1 && page <= this.nbPages) {
				this.indexPage = page;
				this.sliderPage();
				this.lesFiltres.setUrl(this);
			}
		}
		if(this.indexPage <= 1) {
			this.bPrecLien.addClass('gris');
		} else {
			this.bPrecLien.removeClass('gris');
		}
		if(this.indexPage >= this.nbPages) {
			this.bSuivLien.addClass('gris');
		} else {
			this.bSuivLien.removeClass('gris');
		}
	},
	sliderPage: function() {
		this.fxConteneurPages.cancel();
		this.fxConteneurPages.start('-'+((this.indexPage-1)*this.taillePage)+'px');
	},
	calculerArticles: function() {
		this.changerPage(1);
		// On vide toutes les pagesg après la une
		this.lesPages.each(function(iPage,indexPage,lesPages) {
			iPage.options.laPage.getElements('.box').each(function(iBox,indexBox) {
				iBox.dispose();
			});
		}.bind(this));
		var nbPages = 0;
		//var indexPageLibre = 0;
		var i=0;
		var nbPages=0;
		var maxI=this.lesArticles.length;
		this.lesPages.each(function(iPage,indexPage,lesPages) {
			var pageUne = false;
			if(indexPage==0) {
				pageUne = true;
			}
			var nb=0;
			var objPrec=null;
			while((i<maxI) && (nb<this.nbArticlesPage)) {
				if(this.lesArticles[i].isActif(this.lesFiltres.filtresActifs)) {
					if(pageUne && nb>0) {
						objPrec=this.lesArticles[i].injectAfter(objPrec, pageUne);
					} else {
						objPrec=this.lesArticles[i].injectIn(iPage.options.laPage, pageUne);
					}
					nb++;
				} else {
					this.lesArticles[i].cacher();
				}
				i++;
			}
			if(nb>0) {
				nbPages++;
			}
		}.bind(this));
		// Calcul du nombre de pages actives
		if(nbPages==0) {
			nbPages=1;
		}
		this.nbPages = nbPages;
		this.changerPage(1); // permet de recalculer les boutons gris
		//this.lesFiltres.calculerFiltres(this.lesArticles);
	}
});

// Shop - détail
var heidiDetail = new Class({
    initialize: function(){
		// Les éléments du DOM
        this.heidiDetail = $('user_heidi_detail');
		this.detailImage = this.heidiDetail.getElement('div.conteneur div.image');
		this.detailZoom  = this.heidiDetail.getElement('div.conteneur div.zoom');
		
		// Création et injection des 2 nouveaux divs pour le drag et l'affichage
		var cadreZoomLoupe = new Element('div', {id:'heidi-zoom-loupe'});
		cadreZoomLoupe.inject(this.detailImage,'top');
		this.cZoomLoupe = $('heidi-zoom-loupe');
		var cadreLoupe = new Element('div', {id:'heidi-loupe'});
		cadreLoupe.inject(this.cZoomLoupe,'top');
		var cLoupe = $('heidi-loupe');
		
		// Gestion de l'erreur no taille
		var heidiForm = this.heidiDetail.getElement('form');
		var heidiFormValidate = new FormValidator(heidiForm, {
			useTitles: true
		});
		
		// Récup les tailles et positions
		var posImage = this.detailImage.getCoordinates();
		var dimLoupe = cLoupe.getSize();
		
		// Ajout d'un effet Fade sauf sur IE ou le png transparent plante
		if(!Browser.Engine.trident) {
			this.cZoomLoupe.fade('hide');
			this.cZoomLoupe.fade(0.2);
			this.detailImage.addEvent('mouseenter', function(e) {
				this.cZoomLoupe.fade('in');
			}.bind(this));
			this.detailImage.addEvent('mouseleave', function(e) {
				this.cZoomLoupe.fade(0.2);
			}.bind(this));
		}
		// Ajout éventuel d'un effet lors du clic sur l'image zoom
		
		
		// Données de base pour les positions
		this.dragTopBase = posImage.top;
		this.dragLeftBase = posImage.left;
		this.cadreTopBase = -259;
		this.cadreLeftBase = -200;
		
		// Affichage cadre loupe
		this.cZoomLoupe.setStyle('background-position',this.cadreLeftBase+'px '+this.cadreTopBase+'px');
		
		// Zooooom (drag)
		var myDrag = new Drag(cLoupe, {
			style: true,
			invert: false,
			limit: {x:[0,(posImage.width-dimLoupe.x)],y:[0,(posImage.height-dimLoupe.y)]},
			modifiers: {x: 'margin-left', y: 'margin-top'},
			onDrag: function(el,e) {
				// Calcul de la position du drag actuelle
				var topTmp = el.getStyle('margin-top').toInt();
				var leftTmp = el.getStyle('margin-left').toInt();
				// On déplace :
				this.moveZoom(leftTmp, topTmp);
			}.bind(this)
		});
		
		// Position initiale
		var tmpLeft = (posImage.width/3)-(dimLoupe.x/2);
		var tmpTop = (posImage.height/3)-(dimLoupe.y/2);
		cLoupe.setStyle('margin-left',tmpLeft+'px');
		cLoupe.setStyle('margin-top',tmpTop+'px');
		this.moveZoom(tmpLeft,tmpTop);
	},
	moveZoom: function(left,top) {
		// Ici on déplace le cadre
		var topCadre = this.cadreTopBase+top;
		var leftCadre = this.cadreLeftBase+left;
		this.cZoomLoupe.setStyle('background-position',leftCadre+'px '+topCadre+'px');
		// Ici le zoom
		topZoom = top * -3;
		leftZoom = (0-left) * 3;
		this.detailZoom.setStyle('background-position',leftZoom+'px '+topZoom+'px');
	}
});

// Initialisation de la couche JS :
function heidiInit() {
	// Onglet newsletter
	if($('newsletter') != null) {
		var menuNewsletter = $('newsletter');//.getElement('a.newsletter');
		var menuNewsletterLink = $('newsletter').getElement('a.newsletter');
		var menuNewsletterInput = $('newsletter').getElement('input#email');
		if(menuNewsletter != null) {
			var margeBase = menuNewsletterLink.getStyle('margin-top').toInt();
			var margeOver = 8;
			var margeClick = 40;
			var fxNewsletter = new Fx.Tween(menuNewsletterLink, {'property': 'margin-top','duration': 300,'transition': Fx.Transitions.Back.easeOut});
			menuNewsletter.addEvent('mouseenter',function(e) {
				if(!this.hasClass('up')) {
					fxNewsletter.cancel();
					fxNewsletter.start((margeBase-margeOver)+'px');
				}
			});
			menuNewsletter.addEvent('mouseleave',function(e) {
				if(!this.hasClass('up')) {
					fxNewsletter.cancel();
					fxNewsletter.start(margeBase+'px');
				}
			});
			document.addEvent('click',function(e) {
				fxNewsletter.cancel();
				fxNewsletter.start(margeBase+'px');
				$('newsletter').removeClass('up');
			});
			menuNewsletter.addEvent('click',function(e) {
				fxNewsletter.cancel();
				fxNewsletter.start((margeBase-margeClick)+'px');
				this.addClass('up');
				var obj = $(e.target);
				if(obj == null || obj.getProperty('type') != 'submit') {
					e.stop();
				}
			});
			if(menuNewsletterInput != null) {
				var inTexte = menuNewsletterInput.getProperty('value');
				menuNewsletterInput.addEvent('focus', function(e) {
					var txt=this.getProperty('value');
					if(txt==inTexte) {
						this.setProperty('value', '');
					}
				});
				menuNewsletterInput.addEvent('blur', function(e) {
					var txt=this.getProperty('value');
					if(txt=='') {
						this.setProperty('value', inTexte);
					}
				});
			}
		}
	}
	// Streetwear
	if($('streetwear') != null) {

	}
	// Shop liste
	if($('user_heidi_liste') != null) {
		var myHeidiListe = new heidiListe();
	}
	// Shop detail produit
	if($('user_heidi_detail') != null) {
		var myHeidiDetail = new heidiDetail();
		var myHeidiAFiltres = new heidiAFiltres();
		myHeidiAFiltres.desactiverFiltres();
		var lienAttentionUrl = $('user_heidi_detail').getElements('.fermer a');
		lienAttentionUrl.extend($('user_heidi_panier_mini').getElements('.panier a.voirPanier'));
		lienAttentionUrl.each(function(lien,index) {
			lien.addEvent('click', lienSharpClick);
		}.bind(this));
	}
	if($('user_heidi_panier') != null) {
		var myHeidiAFiltres = new heidiAFiltres();
		myHeidiAFiltres.desactiverFiltres();
		var lienAttentionUrl = $('user_heidi_panier').getElements('.fermer a');
		lienAttentionUrl.extend($('user_heidi_panier_mini').getElements('.panier a.voirPanier'));
		lienAttentionUrl.each(function(lien,index) {
			lien.addEvent('click', lienSharpClick);
		}.bind(this));
	}
	// Suggestion d'articles
	var divSuggestion = $('user_heidi_suggestions_articles');
	if(divSuggestion != null) {
		if(divSuggestion.hasClass('new')) {
			var wrap = new Element('div',{id: 'user_heidi_suggestions_articles_wrap'});
			wrap.wraps(divSuggestion);
			var fxSugg = new Fx.Slide(divSuggestion,{mode:'vertical',duration: 500}).hide().slideOut().wait(100).chain(function() {
				fxSugg.slideIn();
			});
		}
	}
	// Ajouté au panier
	var divAjoute = $('user_heidi_article_ajoute');
	if(divAjoute != null) {
		var wrap = new Element('div',{id: 'user_heidi_article_ajoute_wrap'});
		wrap.wraps(divAjoute);
		var fxAjoute = new Fx.Slide(divAjoute,{mode:'vertical',duration: 500}).hide().slideOut().wait(100).chain(function() {
			fxAjoute.slideIn();
		});
	}
	
	// Google map
	if ($('main').getElement('.tx-rggooglemap-pi1')) {
		makeMap();
		tx_rggooglemap_pi1getCities(getCountryVal());
    	tx_rggooglemap_pi1getShops(getCountryVal(),getCityVal());
	}
	
	// Gestion avertissement no cookie
	var loc = ''+window.location;
	var msgLL = 'In order to work properly, this website needs cookies. We reccomend you to activate the cookies of your Internet browser.';
	if(loc.indexOf('heidi.com/fr/') != -1) {
		msgLL = 'Attention : Ce site a besoin des cookies du navigateur pour fonctionner correctement. Nous vous conseillons d\'activer les cookies de votre navigateur Internet.';
	} else if(loc.indexOf('heidi.com/de/') != -1) {
		msgLL = 'Diese Seite benötigt Browser Cookies, um ordnungsgemäß zu funktionieren. Wir empfehlen, dass Sie die Cookies in Ihrem Browser aktivieren.';
	}
	var theHeidiCookie = Cookie.write('theheiditestcookie', '83694859');
	var theHeidiCookieRead = Cookie.read('theheiditestcookie');
	if(theHeidiCookieRead == null || theHeidiCookieRead != '83694859') {
		outError(msgLL);
	}
	var old = Cookie.dispose('theheiditestcookie');
	
	// Message si IE < 8
	/*if(Browser.Engine.name == 'trident') {
		if(Browser.Engine.version < 5 || navigator.userAgent.indexOf('MSIE 7') != -1) {
			out('Votre navigateur semble obsolète. Vous pourriez profiter d\'une meilleure expérience de notre site web avec <a href="http://navigateurs.gasser-projets.ch/" target="_blank">un navigateur internet plus récent</a> ;-)');
		}
	}*/
	
	// Automcomplete form off
	try {
		var inputs = $$('input');
		inputs.each(function(item, index) {
			if(item.getProperty('type') == 'text' && item.hasClass('autocompoff')) {
				item.setAttribute('autocomplete', 'off');
			}
		});
	} catch (e) {}

}
function heidiBgInit() {
	// Bg Image
	if($('user_heidi_bg_img')) {
		var imgUrl = $('user_heidi_bg_img').getProperty('rel');
		var bgImages = new Asset.images([imgUrl], {onComplete: function() {
			var bgImage = new Element('img', {'class':'bgHd', 'src':imgUrl});
			bgImage.inject($('user_heidi_bg_img'), 'before').fade('hide');
			bgImage.fade('in');
		}});
	}
}
window.addEvent('domready',function() {
	heidiInit();
});
window.addEvent('load',function() {
	heidiBgInit();
});