
$(document).ready(function(){
	
	// Bouton "Calculer les résultats"
	$("#computeButton").click(function (){
		if ( computeTabTotal("revenus") != 0 ) {
			compute();
		} else {
			alert("Vous devez avoir saisi vos revenus.");
		}
		return false;
	});
	
	// Bouton "Reset"
	$("#resetButton").click(function (){
		$("#budgetForm").resetForm();
		$("#budget > ul").tabs('select', 0);
		
		showSpecifiedType("revenus", "simple");
		showSpecifiedType("obligations", "simple");
		showSpecifiedType("logementServices", "simple");
		showSpecifiedType("assurances", "simple");
		showSpecifiedType("transport", "simple");
		showSpecifiedType("personnellesDivers", "simple");
		showSpecifiedType("medicalesSoinsPersonnels", "simple");
		showSpecifiedType("fraisSubsistanceEducation", "simple");
		showSpecifiedType("paiementsDettes", "simple");
		
		computeAllTotals();
		
		// Force la couleur du texte des onglets
		$("#budget > ul a").css('color', '#999');
		
		return false;
	});
	
	// Crée les onglets
	//$("#budget > ul").tabs({select:showTabs});
	$("#budget > ul").tabs({select:selectTab});
	$("#budget > ul").tabs('disable', 9);
	
	// Bouton "Précédent"
	$("#prevButton").click(function (){
		var selected = $("#budget > ul").tabs().data('selected.tabs');
		
		if (selected > 0) {
			$("#budget > ul").tabs('select', selected - 1);
		}
		
		return false;
	});
	
	// Bouton "Suivant"
	$("#nextButton").click(function (){
		var selected = $("#budget > ul").tabs().data('selected.tabs');
		
		if (selected < 8) {
			$("#budget > ul").tabs('select', selected + 1);
		}
		
		return false;
	});
	
	computeAllTotals(); // Pour supporter le refresh en gardant les totaux calculés
	
	// Crée les tooltips
	$('.tooltip').tooltip({
		track: true,
		delay: 0,
		showURL: false,
		showBody: " : "
	});
	
	// Configure les fieldset selon le type de saisie choisi (simple ou detail?)
	$("#budget > ul:first > li").each(function(){
		
		// Récupère l'id de l'onglet à partir du lien de la liste
		var idTab = $(this).children("a").attr("href").slice(1);
		
		// Obtient le type de saisie (simple ou detail) de l'onglet?
		var type = getSpecifiedType(idTab);
		
		// Affiche le fieldset correspondant seulement au type de saisie sélectionné
		showSpecifiedType(idTab, type);
		
		$("#"+idTab+" :text").keyup(function (){
			var type = getSpecifiedType(idTab);
			var fieldsetSelector = getFieldsetSelector(idTab, type);
			computeTotal($(fieldsetSelector));
			temperature();
		});
		
		$("#"+idTab+" select").change(function (){
			var type = getSpecifiedType(idTab);
			var fieldsetSelector = getFieldsetSelector(idTab, type);
			computeTotal($(fieldsetSelector));
			temperature();
		});
		
	});
	
	// Configure les boutons "Calcul simple"
	$("#budget .buttonSimple").click(function(){
		
		var idTab = $(this).parent().parent().attr("id");
		var total = computeTotal($("#"+idTab+" .fieldsetDetail"));
		
		if (total != 0) {
			$("#freq"+toUCFirst(idTab)+"Simple").val("2");
			$("#"+$(this).parent().parent().attr("id")+"Simple").val(total);
		}
		
		showSpecifiedType($(this).parent().parent().attr("id"), "simple");
		
		// Actualisation du total
		computeAllTotals();
	});
	
	// Configure les boutons "Calcul détaillé"
	$("#budget .buttonDetail").click(function(){
		showSpecifiedType($(this).parent().parent().attr("id"), "detail");
	});
	
	// Crée le thermomètre
	temperature();
	
});

function selectTab()
{
	$("#budget > ul").tabs('disable', 9);
	$("#controlButtons").css("display", "block");
}

function temperature()
{
	var revenusTotal = computeTabTotal("revenus");
	
	var idTabs = new Array();
	//idTabs[0] = 'obligations';
	idTabs[1] = 'logementServices';
	idTabs[2] = 'assurances';
	idTabs[3] = 'transport';
	idTabs[4] = 'personnellesDivers';
	idTabs[5] = 'medicalesSoinsPersonnels';
	idTabs[6] = 'fraisSubsistanceEducation';
	//idTabs[7] = 'paiementsDettes';
	
	var averagePercentage = new Array();
	//averagePercentage[0] = 5;
	averagePercentage[1] = 39.46;
	averagePercentage[2] = 3.88;
	averagePercentage[3] = 13.49;
	averagePercentage[4] = 8.09;
	averagePercentage[5] = 2.53;
	averagePercentage[6] = 32.55;
	//averagePercentage[7] = 5;
	
	var realPercentage = new Array();
	//realPercentage[0] = computeTabTotal("obligations") * 100 / revenusTotal;
	realPercentage[1] = computeTabTotal("logementServices") * 100 / revenusTotal;
	realPercentage[2] = computeTabTotal("assurances") * 100 / revenusTotal;
	realPercentage[3] = computeTabTotal("transport") * 100 / revenusTotal;
	realPercentage[4] = computeTabTotal("personnellesDivers") * 100 / revenusTotal;
	realPercentage[5] = computeTabTotal("medicalesSoinsPersonnels") * 100 / revenusTotal;
	realPercentage[6] = computeTabTotal("fraisSubsistanceEducation") * 100 / revenusTotal;
	//realPercentage[7] = computeTabTotal("paiementsDettes") * 100 / revenusTotal;
	
	var difference = 0;
	
	if (revenusTotal != 0) {
		for (var i=0; i<averagePercentage.length; i++) {
			if (realPercentage[i] != 0) {
				difference = realPercentage[i] - averagePercentage[i];
			} else {
				difference = 0;
			}
			
			if (realPercentage[i] != 0) {
				$("a[href='#" + idTabs[i] + "']").css('color', '#'+computeTempColor(difference));
			} else {
				$("a[href='#" + idTabs[i] + "']").css('color', '#CCCCCC');
			}
		}
	}
	
}

/*
function tabAverageDifference(idTab)
{
	var indexTab = 0;
	var revenusTotal = computeTabTotal("revenus");
	
	var idTabs = new Array();
	idTabs[0] = 'obligations';
	idTabs[1] = 'logementServices';
	idTabs[2] = 'assurances';
	idTabs[3] = 'transport';
	idTabs[4] = 'personnellesDivers';
	idTabs[5] = 'medicalesSoinsPersonnels';
	idTabs[6] = 'fraisSubsistanceEducation';
	idTabs[7] = 'paiementsDettes';
	
	var averagePercentage = new Array();
	averagePercentage[0] = 5;
	averagePercentage[1] = 25;
	averagePercentage[2] = 15;
	averagePercentage[3] = 20;
	averagePercentage[4] = 10;
	averagePercentage[5] = 5;
	averagePercentage[6] = 15;
	averagePercentage[7] = 5;
	
	var realPercentage = computeTabTotal(idTab) * 100 / revenusTotal;
	
	for (var i=0; i < idTabs.length; i++)
	{
		if (idTabs[i] == idTab) {
			indexTab = i;
		}
	}
	
	if (realPercentage != 0) {
		return realPercentage - averagePercentage[indexTab];
	} else {
		return 0;
	}
}
*/

function computeTempColor(difference)
{	
	if (difference < -5) {
		return '00ff00';
	} else if (difference >= -5 && difference <= -1) {
		return '90df90'; 
	} else if (difference == 0) {
		return 'ffde00';
	} else if (difference >= 1 && difference <= 5) {
		return 'ff9000';
	} else if (difference > 5) {
		return 'ff0000';
	}
}

function print()
{
	var revenusTotal = computeTabTotal("revenus");
	
	var obligationsTotal = computeTabTotal("obligations");
	var logementServicesTotal = computeTabTotal("logementServices");
	var assurancesTotal = computeTabTotal("assurances");
	var transportTotal = computeTabTotal("transport");
	var depPersoTotal = computeTabTotal("personnellesDivers");
	var depMedTotal = computeTabTotal("medicalesSoinsPersonnels");
	var fraisSubEduTotal = computeTabTotal("fraisSubsistanceEducation");
	var paiementsDettesTotal = computeTabTotal("paiementsDettes");
	
	var url = "resultats.php4?r="+revenusTotal;
	
	url = url + "&o=" + obligationsTotal;
	url = url + "&l=" + logementServicesTotal;
	url = url + "&a=" + assurancesTotal;
	url = url + "&t=" + transportTotal;
	url = url + "&p=" + depPersoTotal;
	url = url + "&m=" + depMedTotal;
	url = url + "&f=" + fraisSubEduTotal;
	url = url + "&d=" + paiementsDettesTotal;
	
	url = url + "&printable=yes";
	
	window.open(url, "Imprimez votre budget", "width=600, height=400, resizable=1, scrollbars=1, status=1, toolbar=1, menubar=1");
}

function compute()
{
	var revenusTotal = computeTabTotal("revenus");
	
	var obligationsTotal = computeTabTotal("obligations");
	var logementServicesTotal = computeTabTotal("logementServices");
	var assurancesTotal = computeTabTotal("assurances");
	var transportTotal = computeTabTotal("transport");
	var depPersoTotal = computeTabTotal("personnellesDivers");
	var depMedTotal = computeTabTotal("medicalesSoinsPersonnels");
	var fraisSubEduTotal = computeTabTotal("fraisSubsistanceEducation");
	var paiementsDettesTotal = computeTabTotal("paiementsDettes");
	
	var url = "resultats.php4?r="+revenusTotal;
	
	url = url + "&o=" + obligationsTotal;
	url = url + "&l=" + logementServicesTotal;
	url = url + "&a=" + assurancesTotal;
	url = url + "&t=" + transportTotal;
	url = url + "&p=" + depPersoTotal;
	url = url + "&m=" + depMedTotal;
	url = url + "&f=" + fraisSubEduTotal;
	url = url + "&d=" + paiementsDettesTotal;
	
	if (print) {
		url = url + "&printable=true";
	}
	
	url = getUrlDetailValues(url, "revenusDetailFieldset", "revenusDetail", "freqRevenusDetail");
	url = getUrlDetailValues(url, "obligationsDetailFieldset", "obligationsDetail", "freqObligationsDetail");
	url = getUrlDetailValues(url, "logementServicesDetailFieldset", "logementServicesDetail", "freqLogementServicesDetail");
	url = getUrlDetailValues(url, "transportDetailFieldset", "transportDetail", "freqTransportDetail");
	
	url = getUrlDetailValues(url, "assurancesDetailFieldset", "assurancesDetail", "freqAssurancesDetail");
	url = getUrlDetailValues(url, "personnellesDiversDetailFieldset", "personnellesDiversDetail", "freqPersonnellesDiversDetail");
	url = getUrlDetailValues(url, "medicalesSoinsPersonnelsDetailFieldset", "medicalesSoinsPersonnelsDetail", "freqMedicalesSoinsPersonnelsDetail");
	url = getUrlDetailValues(url, "fraisSubsistanceEducationDetailFieldset", "fraisSubsistanceEducationDetail", "freqFraisSubsistanceEducationDetail");
	url = getUrlDetailValues(url, "paiementsDettesDetailFieldset", "paiementsDettesDetail", "freqPaiementsDettesDetail");	
	
	$("#budget > ul").tabs("url", 9, url);
	$("#budget > ul").tabs("enable", 9);
	$("#budget > ul").tabs("select", 9);
	
	$("#controlButtons").css("display", "none");
}

function getUrlDetailValues(url, fieldsetName, param1, param2) 
{

	url = url + "&"+param1+"=";
	$("#"+fieldsetName).find(":text").each(function(){
	
		if($(this).val() != "")
		{
			url = url + $(this).val() + "_";
		}
		else
		{
			url = url + "0_";
		}

	});	
	
	url = url + "&"+param2+"=";
	$("#"+fieldsetName).find("option:selected").each(function(){
	
		url = url + $(this).text() + "_";

	});
	
	return url;
	
}

/**
 * Calcule et affiche le total de toutes les sections
 * et de tous les types.
 */
function computeAllTotals()
{
	$("p.total").each(function() {
		computeTotal($(this).parent("fieldset"));
	});
}

/**
 * Calcule le total d'une section selon son type
 * (simple ou détaillé).
 */
function computeTabTotal(idTab)
{
	if (getSpecifiedType(idTab) == "simple") {
		return computeTotal($("#"+idTab+" .fieldsetSimple"));
	} else {
		return computeTotal($("#"+idTab+" .fieldsetDetail"));
	}
}

/**
 * Calcule et affiche le total d'une section et du 
 * type sélectionné (simple ou détaillé?).
 */
function computeTotal(fieldsetElement)
{
	var total = 0;
	var factor = new Array(4, 26/12, 1, 1/12, 1/3, 1/6); //Transformation vers mensuel selon la fréquence
	
	fieldsetElement.find(":text").each(function(){
		if ( !isNaN(parseFloat($(this).val())) ) {
			if ( $("#freq"+toUCFirst($(this).attr("id"))).length != 0 ) {
				total += parseFloat($(this).val()) * factor[$("#freq"+toUCFirst($(this).attr("id"))).val()];
			} else {
				total += parseFloat($(this).val());
			}
		}
	});
	
	total = roundNumber(total, 3)
	
	fieldsetElement.find(".total").html("<strong>Total mensuel</strong>: " + total + " $");
	
	return total;
}

/**
 * Arrondi un nombre en gardant une précision de x ("dec") décimales.
 */
function roundNumber(num, dec) {
	//var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	var result = num.toFixed(2);
	return result;
}

/**
 * Retourne la chaîne reçue en paramètre avec la première 
 * lettre en majuscule.
 */
function toUCFirst(string)
{
	return string.substring(0, 1).toUpperCase() + string.slice(1);
}

/**
 * Retourne le sélecteur d'une section d'un onglet.
 */
function getFieldsetSelector(idTab, type)
{
	return "#"+idTab+" .fieldset" + toUCFirst(type);
}

/**
 * Retourne le type de saisie d'un onglet.
 */
function getSpecifiedType(idTab)
{
	return $("#"+idTab+"TypeSaisie input:checked").attr("value");
}

/**
 * Affiche la bonne section d'un onglet selon le type de saisie.
 */
function showSpecifiedType(idTab, type)
{
	if (type == "simple") {
		showSimpleType(idTab);
	} else {
		showDetailType(idTab);
	}
}

/**
 * Affiche la section simple d'un onglet.
 */
function showSimpleType(idTab)
{
	$("#"+idTab).children(".fieldsetSimple").css("display", "block");
	$("#"+idTab).children(".fieldsetDetail").css("display", "none");
}

/**
 * Affiche la section détaillée d'un onglet.
 */
function showDetailType(idTab)
{
	$("#"+idTab).children(".fieldsetDetail").css("display", "block");
	$("#"+idTab).children(".fieldsetSimple").css("display", "none");
}
