/**
 * Copyright 2010 | Dacrydium
 * http://www.dacrydium.fr/
 *
 * This program is free software, you can redistribute it or modify
 * it under the terms of the GNU General Public License (GPL) as published
 * by the free software foundation, either version 2 of the license, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but without any warranty, without even the implied warranty of
 * merchantability or fitness for a particular purpose. See the
 * GNU General Public License (GPL) for more details.
 *
 * Configuration de JSLint
 * var start;
 * var initInFocus, lancementInFocus, changerProduit;
 * var initRecherche, listesInitiales, listesInitialesIE, trierListeModele, trierListeAnnee, supprimerTout;
 * var initPanier, plusMoinsPrix, demandeConfirmationProduit;
 * var window, config, Dialogue, Slideshow, Internationalization, Event, Effect, Ajax, VarienForm, RegionUpdater, countryRegions;
 */

var productAddToCartForm = null, contactForm = null, newsletterSubscriberForm = null, loginForm = null;
var elem = null, connexion = null, newsletter = null, inFocus = null, addressForm = null, addressRegionUpdater = null;
var i18n = null, TheDialogue = null, TheSlideshow = null;
var modeles = [], annees = [];
function number_format(number, decimals, dec_point, thousands_sep) {
	var s, n, prec, sep, dec, toFixedFix;
	s = '';
	n = !isFinite(+number) ? 0 : +number;
	prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
	sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
	dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
	toFixedFix = function (n, prec) {
		var k = Math.pow(10, prec);
		return '' + Math.round(n * k) / k;
	};
	s = ((prec) ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
	if (s[0].length > 3)
		s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
	if ((s[1] || '').length < prec) {
		s[1] = s[1] || '';
		s[1] += new Array(prec - s[1].length + 1).join('0');
	}
	return s.join(dec);
}
if (!navigator.userAgent.match(/MSIE/)) {
	window.addEventListener('load', start, false);
}
else {
	config.navigator = false;
	window.innerWidth = document.documentElement.clientWidth;
	window.innerHeight = document.documentElement.clientHeight;
	window.onload = start;
}
function start() {
	if (typeof Dialogue !== null) {
		try {
			i18n = new Internationalization();
			i18n.init();
			TheDialogue = new Dialogue();
			TheSlideshow = new Slideshow();
			TheSlideshow.init();
		}
		catch (e) { }
	}
	if (document.getElementById('productAddtocartForm')) {
		productAddToCartForm = new VarienForm('productAddtocartForm');
		productAddToCartForm.submit = function () {
			if (this.validator.validate())
				this.form.submit();
		}.bind(productAddToCartForm);
	}
	if (document.getElementById('panier')) {
		if (TheDialogue !== null)
			initPanier();
	}
	if (document.getElementById('formLogin'))
		loginForm = new VarienForm('formLogin');
	if (document.getElementById('formAddress')) {
		addressForm = new VarienForm('formAddress', false);
		addressForm.setElementsRelation('addressCountryid', 'addressRegionText', 'directory/json/childRegion', 'Select State/Province...');
		addressRegionUpdater = new RegionUpdater('addressCountryid', 'addressRegionText', 'addressRegion', countryRegions, undefined, 'addressPostcode');
		if (!navigator.userAgent.match(/MSIE/)) {
			if (document.getElementById('adresseAdd2')) {
				document.getElementById('adresseAdd2').addEventListener('click', function () {
					TheDialogue.dialogAuto('inputAddress');
					document.getElementById('addressStreet').focus();
				}, false);
			}
			document.getElementById('adresseAdd').addEventListener('click', function () {
				TheDialogue.dialogAuto('inputAddress');
				document.getElementById('addressStreet').focus();
			}, false);
			document.getElementById('formAddress').addEventListener('submit', function () {
				if ((TheDialogue.dialogue === 'auto inputAddress') && addressForm.validator.validate())
					TheDialogue.dialogPleaseWait(i18n.translate('dialogueTitleAddAddress'), i18n.translate('dialogueInProgress'));
				else if (TheDialogue.dialogue === null)
					document.getElementById('formAddress').submit();
			}, false);
		}
		else {
			if (document.getElementById('adresseAdd2')) {
				Event.observe(document.getElementById('adresseAdd2'), 'click', function () {
					TheDialogue.dialogAuto('inputAddress');
					document.getElementById('addressStreet').focus();
				});
			}
			Event.observe(document.getElementById('adresseAdd'), 'click', function () {
				TheDialogue.dialogAuto('inputAddress');
				document.getElementById('addressStreet').focus();
			});
			Event.observe(document.getElementById('formAddress'), 'submit', function () {
				if ((TheDialogue.dialogue === 'auto inputAddress') && addressForm.validator.validate())
					TheDialogue.dialogPleaseWait(i18n.translate('dialogueTitleAddAddress'), i18n.translate('dialogueInProgress'));
				else if (TheDialogue.dialogue === null)
					document.getElementById('formAddress').submit();
			});
		}
	}
	if (document.getElementById('inFocus'))
		initInFocus();
	if (document.getElementById('recherche'))
		initRecherche();
	if (document.getElementById('contactForm'))
		contactForm = new VarienForm('contactForm');
	if (document.getElementById('newsletter')) {
		newsletterSubscriberForm = new VarienForm('newsletter-validate-detail');
		Event.observe(
			document.getElementById('newsletter'),
			'focus',
			function () {
				if (newsletter === null)
					newsletter = document.getElementById('newsletter').value;
				if (document.getElementById('newsletter').value === newsletter)
					document.getElementById('newsletter').value = '';
			}
		);
		Event.observe(
			document.getElementById('newsletter'),
			'blur',
			function () {
				if (document.getElementById('newsletter').value.length === 0)
					document.getElementById('newsletter').value = newsletter;
			}
		);
	}
	if (document.getElementById('connexion') && document.getElementById('username') && document.getElementById('password')) {
		Event.observe(
			document.getElementById('connexion'),
			'submit',
			function (ev) {
				if ((connexion === null) || (document.getElementById('username').value === connexion))
					Event.stop(ev);
			}
		);
		Event.observe(
			document.getElementById('username'),
			'focus',
			function () {
				if (connexion === null)
					connexion = document.getElementById('username').value;
				if (document.getElementById('username').value === connexion)
					document.getElementById('username').value = '';
			}
		);
		Event.observe(
			document.getElementById('password'),
			'focus',
			function () {
				if (document.getElementById('password').value === '****')
					document.getElementById('password').value = '';
			}
		);
		Event.observe(
			document.getElementById('username'),
			'blur',
			function () {
				if (document.getElementById('username').value.length === 0) {
					document.getElementById('username').value = connexion;
					document.getElementById('password').value = '****';
				}
			}
		);
		Event.observe(
			document.getElementById('password'),
			'blur',
			function () {
				if (document.getElementById('password').value.length === 0)
					document.getElementById('password').value = '****';
			}
		);
	}
}
function initInFocus() {
	new Ajax.Request(document.getElementById('xml').value, {
		onComplete: function(data) {
			if (data.status === 200)
				lancementInFocus(data.responseXML);
		}
	});
}
function lancementInFocus(xml) {
	var i = 0, balise = null, elem = null, elemA = null, elemB = null;
	document.getElementById('inFocus').style.visibility = 'visible';
	document.getElementById('inFocus').appendChild(document.createElement('div'));
	inFocus = { liste: [], timer: null, numero: 0, attente: 0, transition: 0 };
	for (i = 0; i < 5; i++) {
		elem = document.createElement('button');
		elem.setAttribute('type', 'button');
		elem.setAttribute('id', 'bouton' + i);
		elem.appendChild(document.createTextNode(i + 1));
		document.getElementById('inFocus').lastChild.appendChild(elem);
		Event.observe(document.getElementById('bouton' + i), 'click', changerProduit);
	}
	for (i = 0, balise = xml.getElementsByTagName('link'); i < balise.length; i++) {
		inFocus.liste.push( {
			img_src: balise[i].getElementsByTagName('background_image')[0].firstChild.data,
			a_href: balise[i].getElementsByTagName('link_url')[0].firstChild.data
		} );
	}
	elemA = document.createElement('a');
	elemA.setAttribute('href', inFocus.liste[0].a_href);
	elemB = document.createElement('img');
	elemB.setAttribute('src', inFocus.liste[0].img_src);
	elemB.setAttribute('width', '640');
	elemB.setAttribute('height', '220');
	elemB.setAttribute('alt', 'Produit à la une');
	elemA.appendChild(elemB);
	document.getElementById('inFocus').appendChild(elemA);
	document.getElementById('bouton0').setAttribute('class', 'moi');
	inFocus.attente = parseInt(xml.getElementsByTagName('DISPLAY_DURATION')[0].firstChild.data, 10);
	inFocus.transition = parseInt(xml.getElementsByTagName('TRANSITION_DURATION')[0].firstChild.data, 10);
	inFocus.timer = changerProduit.delay(inFocus.attente);
}
function changerProduit() {
	if (typeof this === 'object') {
		window.clearTimeout(inFocus.timer);
		inFocus.timer = changerProduit.delay(inFocus.attente);
		inFocus.numero = parseInt(this.getAttribute('id').slice(6), 10);
	}
	else {
		inFocus.timer = changerProduit.delay(inFocus.attente);
		inFocus.numero = (inFocus.numero < 4) ? ++inFocus.numero : 0;
	}
	Effect.Fade(
		document.getElementById('inFocus').lastChild,
		{
			from: 1, to: 0, duration: 0.3,
			afterFinish: function () {
				document.getElementById('inFocus').lastChild.setAttribute('href', inFocus.liste[inFocus.numero].a_href);
				document.getElementById('inFocus').lastChild.lastChild.setAttribute('src', inFocus.liste[inFocus.numero].img_src);
				for (var i = 0; i < 5; i++) {
					if (document.getElementById('bouton' + i).hasAttribute('class'))
						document.getElementById('bouton' + i).removeAttribute('class', 'moi');
				}
				document.getElementById('bouton' + inFocus.numero).setAttribute('class', 'moi');
				Effect.Appear(document.getElementById('inFocus').lastChild, { from: 0, to: 1, duration: 0.3 });
			}
		}
	);
}
function initRecherche() {
	if (navigator.userAgent.match(/MSIE/))
		listesInitialesIE();
	else
		listesInitiales();
	if (document.URL.match(/marque=/)) {
		trierListeModele();
	}
	else {
		document.getElementById('marque').selectedIndex = 0;
		supprimerTout('modele');
		supprimerTout('annee');
	}
	if (document.URL.match(/modele=/))
		trierListeAnnee();
	Event.observe(document.getElementById('marque'), 'change', trierListeModele);
	Event.observe(document.getElementById('modele'), 'change', trierListeAnnee);
}
function listesInitiales() {
	var i = 0, balise = null, selected = null;
	for (i = 0, balise = document.getElementById('modele').childNodes; i < balise.length; i++) {
		if ((balise[i].nodeType === 1) && balise[i].hasAttribute('class')) {
			selected = (balise[i].hasAttribute('selected')) ? true : false;
			modeles.push( {
				style: balise[i].getAttribute('class'),
				valeur: balise[i].firstChild.nodeValue.replace(/(\&amp\;)|(^\s*)|(\s*$)/, ''),
				select: selected
			} );
		}
	}
	for (i = 0, balise = document.getElementById('annee').childNodes; i < balise.length; i++) {
		if ((balise[i].nodeType === 1) && balise[i].hasAttribute('class')) {
			selected = (balise[i].hasAttribute('selected')) ? true : false;
			annees.push( {
				style: balise[i].getAttribute('class'),
				valeur: balise[i].firstChild.nodeValue.replace(/(\&amp\;)|(^\s*)|(\s*$)/, ''),
				select: selected
			} );
		}
	}
}
function listesInitialesIE() {
	var i = 0, balise = null, selected = null;
	for (i = 0, balise = document.getElementById('modele').childNodes; i < balise.length; i++) {
		if ((balise[i].nodeType === 1) && balise[i].className) {
			selected = (balise[i].selected) ? true : false;
			modeles.push( {
				style: balise[i].className,
				valeur: balise[i].firstChild.nodeValue.replace(/(\&amp\;)|(^\s*)|(\s*$)/, ''),
				select: selected
			} );
		}
	}
	for (i = 0, balise = document.getElementById('annee').childNodes; i < balise.length; i++) {
		if ((balise[i].nodeType === 1) && balise[i].className) {
			selected = (balise[i].selected) ? true : false;
			annees.push( {
				style: balise[i].className,
				valeur: balise[i].firstChild.nodeValue.replace(/(\&amp\;)|(^\s*)|(\s*$)/, ''),
				select: selected
			} );
		}
	}
}
function trierListeModele(ev) {
	var i = 0, source = (typeof ev === 'object') ?
		new RegExp('^' + this.value + '$', 'gi') : new RegExp('^' + document.getElementById('marque').value + '$', 'gi');
	supprimerTout('modele');
	supprimerTout('annee');
	for (i = 0; i < modeles.length; i++) {
		if (modeles[i].style.match(source)) {
			elem = document.createElement('option');
			elem.setAttribute('class', modeles[i].style);
			elem.appendChild(document.createTextNode(modeles[i].valeur));
			if (modeles[i].select)
				elem.setAttribute('selected', 'selected');
			document.getElementById('modele').appendChild(elem);
		}
	}
}
function trierListeAnnee(ev) {
	var i = 0, source = (typeof ev === 'object') ?
		new RegExp('^' + this.value + '$', 'gi') : new RegExp('^' + document.getElementById('marque').value + '$', 'gi');
	supprimerTout('annee');
	for (i = 0; i < annees.length; i++) {
		if (annees[i].style.match(source)) {
			elem = document.createElement('option');
			elem.setAttribute('class', annees[i].style);
			elem.appendChild(document.createTextNode(annees[i].valeur));
			if (annees[i].select)
				elem.setAttribute('selected', 'selected');
			document.getElementById('annee').appendChild(elem);
		}
	}
}
function supprimerTout(liste) {
	while (document.getElementById(liste).childNodes) {
		if ((document.getElementById(liste).lastChild.nodeType === 1) && (document.getElementById(liste).lastChild.getAttribute('value') === ''))
			break;
		else
			document.getElementById(liste).removeChild(document.getElementById(liste).lastChild);
	}
}
function initPanier() {
	var i = 0, balise = null;
	for (balise = document.getElementsByClassName('quantiter'), i = 0; i < balise.length; i++) {
		if (config.navigator) {
			balise[i].childNodes[1].addEventListener('click', plusMoinsPrix, false);
			balise[i].childNodes[2].addEventListener('change', plusMoinsPrix, false);
			balise[i].childNodes[3].addEventListener('click', plusMoinsPrix, false);
		}
		else {
			Event.observe(balise[i].childNodes[0], 'click', plusMoinsPrix);
			Event.observe(balise[i].childNodes[2], 'click', plusMoinsPrix);
		}
	}
	for (balise = document.getElementsByClassName('liensupprimer'), i = 0; i < balise.length; i++) {
		Event.observe(balise[i], 'click', demandeConfirmationProduit);
	}
}
function plusMoinsPrix() {
	var id = null, i = 0, prixUnitaire = 0, prixTotal = 0, prix = 0, index = 0;
	id = this.getAttribute('id').slice(this.getAttribute('id').lastIndexOf('-'));
	i = parseInt(document.getElementById('qty' + id).value, 10);
	if (isNaN(i))
		document.getElementById('qty' + id).value = 1;
	else if (i < 0)
		document.getElementById('qty' + id).value = 1;
	else if ((this.getAttribute('id') === ('unPeuMoins' + id)) && (i > 0))
		document.getElementById('qty' + id).value = i - 1;
	else if ((this.getAttribute('id') === ('unPeuPlus' + id)) && (i < 99))
		document.getElementById('qty' + id).value = i + 1;
	if (document.getElementById('prix' + id).firstChild.firstChild.data.match(/^[0-9]/)) {
		prix = document.getElementById('prix' + id).firstChild.firstChild.data.replace(/(\u00a0)|(\u2009)/, '|');
		prixUnitaire = prix.slice(0, prix.lastIndexOf('|'));
		prixTotal = parseFloat(prixUnitaire.replace(',', '.'), 10) * parseFloat(document.getElementById('qty' + id).value, 10);
		prixTotal = number_format(prixTotal, 2, ',', '\u2009') + '\u00a0' + prix.slice((prix.lastIndexOf('|') + 1));
	}
	else {
		index = document.getElementById('prix' + id).firstChild.firstChild.data.search(/[0-9]/);
		prix = document.getElementById('prix' + id).firstChild.firstChild.data.slice(0, index) + '|' + document.getElementById('prix' + id).firstChild.firstChild.data.slice(index);
		prixUnitaire = prix.slice(prix.lastIndexOf('|') + 1);
		prixTotal = parseFloat(prixUnitaire.replace(',', '.'), 10) * parseFloat(document.getElementById('qty' + id).value, 10);
		prixTotal = prix.slice(0, prix.lastIndexOf('|')) + '\u2009' + number_format(prixTotal, 2, ',', '\u2009');
	}
	document.getElementById('prixtt' + id).firstChild.firstChild.replaceData(0, document.getElementById('prixtt' + id).firstChild.firstChild.data.length, prixTotal);
}
function demandeConfirmationProduit(ev) {
	Event.stop(ev);
	ev = this.getAttribute('id').slice(this.getAttribute('id').lastIndexOf('-'));
	TheDialogue.dialogConfirmation(i18n.translate('dialogueTitleDelete'), i18n.translate('dialogueDeleteCheckout'), 'produit' + ev, 'delete');
}

