// ALT-QC
// @author :	SGL
// @date :		2009-05-29
// @version :	1

var checkboxes = [];
var forfait_cookie = readCookie('forfait_cookie');
var forfait_cookie_obj = extract_forfait_val(forfait_cookie);


// DOM Ready
function forfaits_ready() {
	
	Event.observe(window, 'scroll', function(event) {
		return forfait_total_position(event);
	});
	
	forfait_total_position(null);

	init_form_interactivite();	// prend en compte le cookie
	init_tab_interactivite();

	enabled_chambre_extra();
	update_forfait_total();
}


// Fonction init_tab_interactivite
// Initialisation des tab des options
function init_tab_interactivite() {

	$$(".optionstab").each(function(tab_obj) {
		var tab = tab_obj.readAttribute('id');

		Element.hide(tab);

		Event.observe('tab_'+tab, 'click', function(event) {
			forfait_tab_reset();

			select_forfait_visuel(tab);

			Event.stop(event);
			return false;
		});
	});

	var chambre_active = get_active_chambre();
	if (chambre_active) {
		select_forfait_tab(chambre_active);
	} else {
		select_forfait_tab('options_deguster');	// Defaut
	}
}


// Fonction forfait_tab_reset
// Remise a 0 des tab visuellement (over et div d'options)
function forfait_tab_reset() {
	$$("td.forfait_menutab").each(function(e) {
		e.removeClassName('forfait_menutab_over');
		var tab = e.down('a').readAttribute('id').replace(/tab_/,'');	// Cacher le contenu
		$(tab).hide();
	});
	return true;
}


// Fonction select_forfait_tab
// @param e : string ("id" de l'objet checkbox)
function select_forfait_tab(e) {
	forfait_tab_reset();
	var tab = "";
	
	switch ($(e).readAttribute('id')) {
		// case "checkbox_chambre_2":
		// case "checkbox_chambre_3":
			// tab = "options_gater";
			// break;
		default:
			tab = "options_deguster"; break;	// Defaut
	}
	
	$('checkbox43').checked = $('checkbox_chambre_3').checked;	// option obligatoire pour le toutou
	$('checkbox48').checked = $('checkbox_chambre_2').checked;	// option obligatoire pour l'enfant
	
	select_forfait_visuel(tab);
	return;
}

// Fonction select_forfait_visuel
// @param tab : string "id"
function select_forfait_visuel(tab) {

	$("tab_"+tab).up().addClassName('forfait_menutab_over');
	$(tab).show();
}


// Fonction init_form_interactivite
// Initialisation des elements du formulaire en prenant compte des valeurs du cookie
function init_form_interactivite() {
	
	$$('input, select').each(function(e){

		if(e.type == 'checkbox') {
			checkboxes.push(e);
		
			Event.observe(e, 'click', function(event) {
				update_forfait_preExecute(e);
				enabled_chambre_extra();
				return update_forfait_total();
			});

			// Valeur du cookie
			if (forfait_cookie_obj[$(e).readAttribute('id')])
				$(e).checked = forfait_cookie_obj[$(e).readAttribute('id')];
			
		} else if (e.type == 'select-one') {
			Event.observe(e, 'change', function(event) {
				return update_forfait_total();
			});
			
			// Valeur du cookie
			if (forfait_cookie_obj[$(e).readAttribute('id')])
				$(e).value = forfait_cookie_obj[$(e).readAttribute('id')];
		}
	});
	
	// Reset form
	$('remisea0').observe('click', function(event) {
		$$('input').each(function(e) {
			e.checked=false;
		});
		$$('select').each(function(e) {
			e.value = 1;
		});
		
		update_forfait_total();
		Event.stop(event);
	});
}


// Fonction update_forfait_preExecute
// Manipulation des options avant de faire quoi que ce soit.
// @param e : string ("id" de l'objet checkbox)
function update_forfait_preExecute(e) {
	if (!e || !$(e).hasAttribute('id'))
		return;

	if ($(e).readAttribute('id').match(/checkbox_chambre_[0-9]/)) {
		forfait_nuit_uncheck(e);
		select_forfait_tab(e);
	}
	if ($(e).hasAttribute('class') && $(e).readAttribute('class').match(/relation[0-9]{1,2}/)) {
		relation = $(e).readAttribute('class').replace(/(.*)relation([0-9]{1,2})$/,"relation$2");	// relation toujours a la fin de l'attribut class
		checkbox_relations[relation].each(function (r) {
			if ($(e).readAttribute('id') != r)
				$(r).checked = false;
		});
	}
}

// Fonction update_forfait_total
// Mettre a jour le prix total
function update_forfait_total() {

	chambre = get_active_chambre();
	chambre_prix = (chambre != null) ? parseInt(prix[chambre.readAttribute('id')]) : 0;
	
	if ($('checkbox_chambre_extra').checked)	// Chambre Design Plus
		chambre_prix += parseInt(prix['checkbox_chambre_extra']);

	var tot = chambre_prix * parseInt($('forfait_nuits').value) + montant_checkbox_options();
	$('forfait_total').update(format_prix(tot));
	
	save_forfait();
	return;
}


// Fonction forfait_nuit_uncheck
// Un seul choix de chambre, uncheck sauf celle qui a ete cochee
// @parame_actif : prototype objet (checkbox coche)
function forfait_nuit_uncheck(e_actif) {

	$$("#zone_forfaits_chambres input").each(function (e) {
		if (e.readAttribute('id').match(/checkbox_chambre_[0-9]/)) {
			if (e.readAttribute('id') != e_actif.readAttribute('id'))
				e.checked = false;
		}
	});
}


// Fonction get_active_chambre
// Retourner la chambre cochee
// @return chambre : prototype objet (checkbox coche)
function get_active_chambre() {
	var chambre = null;
	$$("#zone_forfaits_chambres input").each(function (e) {
		if (e.readAttribute('id').match(/checkbox_chambre_[0-9]/)) {
			if (e.checked == true)
				chambre = e;
		}
	});
	return chambre;
}


// Fonction montant_checkbox_options
// Calculer le montant total de toutes les options sans exception
// @return montant_opt : int
function montant_checkbox_options() {
	var montant_opt = 0;
	checkboxes.each(function(c) {
		if (c.readAttribute('id').match(/checkbox[0-9]{1,2}/) && c.checked == true)
			montant_opt += prix[c.readAttribute('id')];
	});
	
	return montant_opt;
}


// Fonction enabled_chambre_extra
// Rendre disponible ou non le checkbox
function enabled_chambre_extra() {
	var chambre_checked = false;
	$$("#zone_forfaits_chambres input").each(function (e) {
		if (e.readAttribute('id').match(/checkbox_chambre_[0-9]/)) {
			if (e.checked == true)
				chambre_checked = true;
		}
	});

	$('checkbox_chambre_extra').disabled = !chambre_checked;
	if (!chambre_checked)
		$('checkbox_chambre_extra').checked = false;
	return;
}


// Fonction forfait_total_position
// Positionner la zone du montant total
function forfait_total_position(event) {

	var scrollVerticalPosition = parseInt(document.viewport.getScrollOffsets().top);

	if (scrollVerticalPosition > 365) {
		// IE ne reconnait pas position:fixed
		if (Prototype.Browser.IE) {
			$('zone_forfait_total').setStyle({
				position: 'absolute',
				top: (scrollVerticalPosition+50)+'px'
			});
		} else {
			$('zone_forfait_total').setStyle({
				position: 'fixed',
				top: '50px'
			});
		}
	} else {
		$('zone_forfait_total').setStyle({
			position: 'static'
		});
	}
}


// Helpers

function extract_forfait_val(cookie_format) {
	if (!cookie_format) {
		return new Object();
	}
	return cookie_format.evalJSON();
}


function save_forfait() {
	return createCookie('forfait_cookie', serialize_forfait(), 7);	// 7 jours
}


// serialize_forfait
// Notation JSON
function serialize_forfait() {
	var ser = new Object();
	var ser = "{ ";
	$$('input').each(function(e){ 
		ser += $(e).readAttribute('id')+': '+($(e).checked ? 1:0)+',';
	});
	$$('select').each(function(e){
		ser += $(e).readAttribute('id')+': '+$(e).value+',';
	});

	// Remplacer dernier "," par la fin du JSON
	return ser.replace(/,$/," }");
}


function format_prix(prix) {
	return (langue == 'fr') ? formatInt(prix)+' $' : ' $'+formatInt(prix);
}

function formatInt(num) {
	if (typeof(num) == 'number')
		return num;
	if (!num)
		return 0;
	var num_int = parseInt(num.replace(/ /g,''));
	if (isNaN(num_int))
		return 0;
	return num_int;
}


// Donnees :
var prix = {
	checkbox_chambre_1: 129,
	checkbox_chambre_2: 129,
	checkbox_chambre_3: 129,
	checkbox_chambre_extra: 40,

// Deguster
	checkbox1: 119,		//Bonne chère, bon vin
	checkbox3: 55,		//Vin et fromages
	checkbox4: 69,		//Mousseux et fraises
	checkbox5: 30,		//Matin Calin

// Bouger
	checkbox13: 66,		//Arbre en Arbre
	checkbox2: 58,		//Village vacances Valcartier
	checkbox6: 150,		//Rafting
	checkbox7: 112,		//Ski au Massif
	checkbox8: 24,		//Carnaval de Québec

// S'émerveiller
	checkbox28: 108,		//Festival d'été
	checkbox29: 100,		//Grands Feux
	checkbox30: 195,	//Cirque du Soleil
	checkbox9: 90,		//Salle Albert-Rousseau (off)
	checkbox10: 20,		//Cinéma

// Relaxer
	checkbox12: 100,	//Massage cocooning
	checkbox14: 64,		//Le Nordique Spa
	checkbox15: 100,	//Carte cadeau Ste-Foy
	checkbox16: 125,	//Styliste de mode-1 (off)
	checkbox47: 155,	//Styliste de mode-2 (off)
	checkbox17: 90,		//Styliste d'intérieur (off)

// Gater
	checkbox18: 45,		//Service de gardiennage (off)
	checkbox48: 20,		//Lit simple sup (off)
	checkbox20: 0,		//Accessoires pour bébé (off)
	checkbox43: 30,		//Hébergement et couverture (off)
	checkbox45: 0,		//Biscuits (off)
	checkbox46: 0,		//Bols (off)
	checkbox49: 45		//Service de gardiennage (off)

}

// Checkbox inter-dependants
// Pour ajouter, il faut créer un nouvel index dans ce tableau, et ajouter la classe "relationX" a chaque checkbox lié
var checkbox_relations = {
	relation1: ['checkbox16','checkbox47']
};