// Prototype JavaScript Document //

Event.observe(window, 'load', page_loaded); 

function page_loaded (evt) {
	
	// Obtenir la liste des checkbox
	var boxes = $('selection').select('[type="checkbox"]');
	
	// Pour chaque box
	for (var i=0; i<boxes.length; i++) {
		
		// Affecter un handler
		Event.observe(boxes[i], 'click', manageSelection);
		boxes[i].checked = false;
	}
	
	// Validation du formulaire
	Event.observe($('submit'), 'click', checkForm);
}

function manageSelection (evt) {
	
	var box = Event.element(evt);
	var line = box.up();
	var name = box.readAttribute('name');
	
	// Déterminer si l'élément est coché
	if (box.hasClassName('checked'))
	{
		// L'élément est déjà séléctionné
		line.removeClassName('selected');
		box.removeClassName('checked');
			 
		 // Mettre à jour tous les prix
		 refreshPrices(evt);
		
		// Supprimer le fieldset associé
		$(name+'form').remove();
	}
	else
	{
		// Séléctionner l'élément
		line.addClassName('selected');
		box.addClassName('checked');
		
		// Ajouter les options au formulaire avec Ajax
		var url = '../paiement-securise/options.php';
		new Ajax.Request(url,
		{
			 method: 'get',
			 parameters: "name="+name+"",
			 onComplete: function(xhr) {
				 // Ajouter le texte renvoyé
			 	 $('ajax').insert({before:'<fieldset id="'+name+'form"><legend>'+line.select('div')[0].innerHTML+'</legend>'+xhr.responseText+'</fieldset>'});
				 
				 // Attacher les listeners
				 var selecs = $(name+'form').select('select');
				 for (var l=0; l<selecs.length; l++) { Event.observe(selecs[l], 'change', refreshPrices); }
				 
				 // Mettre à jour tous les prix
				 refreshPrices(evt);
			 }
		});
	}
}

function refreshPrices(evt) {
	
	// Calculer les couts
	var url = '../paiement-securise/total.php';
	var parms = new Hash();
	
	// Liste des <select> dynamiques
	var values = $$('select');
	
	for (var i=0; i<values.length; i++)
		parms.set(values[i].readAttribute('name'),values[i].getValue());
		
	// Liste des éléments à calcler
	var els = $('formulaire').getInputs('checkbox');
	
	for (var i=0; i<els.length; i++)
		parms.set(els[i].readAttribute('name'), els[i].checked);
	
	var myAjax = new Ajax.Request(
      url,
      {
        method: 'get',
		parameters: parms,
        onComplete: displayPrices
      });
}

function displayPrices (xhr, prix) {
	
	// Afficher chaque prix en regard du formulaire associé
	prix.each(
		function (total)
		{
			$(total.key+"form").getElementsByClassName('price')[0].update("<h3 style='text-align: right;'>Prix : " + total.value + "&euro;</h3>");
		});
}

function checkForm (evt) {
	
	// Vérifier le formulaire
	var url = '../paiement-securise/valider.php';
	var parms = new Hash();
	
	/*
	// Liste des <input> statiques
	var values = $('formulaire').getInputs('text');
	
	for (var i=0; i<values.length; i++)
	{
		parms.set(values[i].readAttribute('name'),values[i].getValue());
	}
	*/
	
	var errs = $$('p.error');
	for (var j=0; j<errs.length; j++)
	{
		errs[j].remove();
	}
		
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: $('formulaire').serialize(),
			onComplete: displayErrors
		});
}

function displayErrors (xhr, erreurs)
{
	// Traiter le cas particulier de 'pas d'erreurs'
	if (erreurs.length == 0)
	{
		// Envoyer le formulaire
		var recharge = new Ajax.Updater('content-act', 'call_request.php', {
										method: 'post',
										parameters: $('formulaire').serialize(true)
										});
	}
	else
	{	
		// Afficher les erreurs en regard de chaque champ
		erreurs.each(
			function (err)
			{
				$('formulaire').select('[name="'+err.name+'"]')[0].ancestors()[0].insert('<p class="error">'+err.erreur+'</p>');
			}
		);
	}
}