// ===================================================
// Fonctions d'initialisation qui gèrent le JQuery
// ===================================================

// Plage des années
var actuel = new Date();
var an1 = actuel.getFullYear();
var an0 = an1 - 90;
var an2 = an1 + 10;

// Fonctions JQuery
$(document).ready(function(){
	// Affichage des publicites
	$("#pubs").cycle( {
		fx:		 'fade',
		speed:   2000,
		timeout: 6000,
		width:	 460, // Dimension de l'image la plus grande
		center:  true
	});
	
	// Affichage des differents documents
	$(".docPDF").colorbox({width:"85%", height:"85%", iframe:true, close: "Fermer", opacity:0.75});
	$(".docMap").colorbox({width:"90%", height:"90%", iframe:true, close: "Fermer", opacity:0.75});
	$(".docIMG").colorbox({width:"80%", height:"80%", close: "Fermer", opacity:0.75});
	$(".enLigne1").colorbox({width:"55%", inline:true, close: "Fermer", href:"#enLigne1", opacity:0.50});
	$(".enLigne2").colorbox({width:"55%", inline:true, close: "Fermer", href:"#enLigne2", opacity:0.50});
	$(".enLigne3").colorbox({width:"55%", inline:true, close: "Fermer", href:"#enLigne3", opacity:0.50});
	$(".enLigne4").colorbox({width:"55%", inline:true, close: "Fermer", href:"#enLigne4", opacity:0.50});
	$("#monCarousel").jcarousel({scroll:2});
	
	// Selecteur de date
	$(".choixDate").datepicker({
		dateFormat: 'yy-mm-dd', 
		monthNames:["Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet",
				    "Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre"],
		monthNamesShort:["Jan","F&eacute;v","Mar","Avr","Mai","Jui","Jul",
						 "Ao&ucirc;","Sep","Oct","Nov","D&eacute;c"],
		dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","vendredi","Samedi"],
		dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],
		dayNamesMin:["Di","Lu","Ma","Me","Je","Ve","Sa"],
		prevText:"Pr&eacute;c", nextText:"Suiv",
		closeText:"OK", currentText:"Aujourd\'hui",
		changeMonth:true, changeYear:true, yearRange:an0+":"+an2
	});

	// Calendrier pour des evenements
	$("#fCald").fullCalendar({
		theme: true, 
		header: {left: "prev, next, today", center: "", right: "title"}, 
		weekMode: "variable",
		editable: false, 
		monthNames: ["Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet",
					 "Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre"],
		monthNamesShort: ["Jan","F&eacute;v","Mar","Avr","Mai","Jui","Jul",
						  "Ao&ucirc;","Sep","Oct","Nov","D&eacute;c"],
		dayNames: ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],
		dayNamesShort: ["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],
		buttonText: {today: "Aujourd'hui"},
		events: "jsonFc.php",
		eventClick: function(calEv){
		    if (calEv.url) {
			    $('#fCald a[href]').colorbox({width:"85%", height:"85%", iframe:true, 
			    							  close: "Fermer", opacity:0.75});
			}
		},
	    eventRender: function(calEv, elem) {
	        elem.qtip({ 
		        content: { text: calEv.qTip },
				position: { my: 'bottom middle', at: 'top middle' },
				style: { classes: 'ui-tooltip-dark qtip' }
     		});
	    }
	}); 
	
	// Affichage des ToolTips
	var commun = { // Proprietes communes aux tooltips
  		position: {
			my: 'top left',
			target: 'mouse',
			viewport: $(window), // Keep it on-screen at all times if possible
			adjust: { x: 15,  y: 15	}
		},
		hide: { fixed: true, delay: 250 }
	};
	// ToolTip pour le bottin des membres
	$('#frmBottin').qtip( $.extend({}, commun, { 
		content: 'Votre crit&egrave;re de recherche doit '+
				 'inclure au moins 2 caract&egrave;res.<br /><br />' +
				 'Cliquez dans la zone de recherche...',
		style: 'ui-tooltip-bulleBottin'
	}));
	// ToolTip pour l'activation des comptes des membres
	var txtAM = '<p>Un membre actif est un membre qui a pay&eacute; son inscription '+
		     	'pour la saison en cours:</p>'+
			 	'<ul><li>Il peut modifier ses informations personnelles.</li>'+
			 	'<li>Il a acc&egrave;s au bottin des membres.</li>'+
			 	'<li>Il peut enfin s\'inscrire sur la liste des rempla&ccedil;ants et consulter cette liste.</li></ul>'; 
	$('#enteteActive1').qtip( $.extend({}, commun, { 
		content: txtAM,
		style: 'ui-tooltip-aideActive'
	}));
	// ToolTip pour l'inscription manuelle des membres
	var txtIM = '<p>Il faut effectuer une inscription manuelle d\'une personne '+
		     	'dans les conditions suivantes:</p>'+
			 	'<ul><li>Elle est d&eacutej&agrave; membre du club de curling.</li>'+
			 	'<li>Elle a rempli son formulaire d\'inscription manuellement.</li>'+
			 	'<li>Son compte sera activ&eacute; lorsqu\'on aura re&ccedil;u le paiement.</li></ul>'; 
	$('#enteteActive2').qtip( $.extend({}, commun, { 
		content: txtIM,
		style: 'ui-tooltip-aideActive'
	}));
	// ToolTip pour la destruction des comptes des membres
	var txtDM = '<p>On peut d&eacute;truire le compte d\'un membre '+
		     	'dans les conditions suivantes:</p>'+
			 	'<ul><li>Ce membre est inscrit dans notre base de donn&eacute;es.</li>'+
			 	'<li>Il ne s\'inscrit plus comme membre actif depuis quelques ann&eacute;es.</li>'+
			 	'<li>Ce membre nous est inconnu.</li></ul>'; 
	$('#enteteActive3').qtip( $.extend({}, commun, { 
		content: txtDM,
		style: 'ui-tooltip-aideActive'
	}));
	// ToolTip pour la liste des remplacants
	var txtRM = '<p>Les membres de cat&eacute;gorie &laquo; REMPLA&Ccedil;ANT &raquo; et '+
		     	'&laquo; PRATIQUE &raquo; doivent payer 12,00 $ pour effectuer un remplacement.</p>';
	$('.clsP0,.clsP1').qtip( $.extend({}, commun, { 
		content: txtRM,
		style: 'ui-tooltip-bulleBottin'
	}));

// ================================================================== 
// Diverses fenetres de dialogue
// ================================================================== 
	$('#modale').dialog({
		autoOpen: false, modal: true, resizable: false, width: 400,
		draggable: false, title: "Erreur!  Membre existant", position: 'center',
		beforeclose: function(event, ui) {return false; }
	});
	$('#frmErr').dialog({ 
		autoOpen: true, title: "Erreurs dans les donn&eacute;es du formulaire", position: 'center',
		modal: true, draggable: false, resizable: false, width: 450,
		buttons: { "Quitter": function() { $(this).dialog("close"); } }
	});
	$('#param').dialog({ 
		autoOpen: true, title: "Op&eacute;ration r&eacute;ussie!", position: 'center',
		modal: true, draggable: false, resizable: false, width: 450,
		buttons: { "Quitter": function() { $(this).dialog("close"); } }
	});
	$('#erreur').dialog({ 
		autoOpen: true, title: "Erreur!", position: 'center',
		modal: true, draggable: false, resizable: false, width: 450,
		buttons: { "Quitter": function() { $(this).dialog("close"); } }
	});
	$('#frmInc').dialog({ 
		autoOpen: false, title: "Formulaire incomplet!", position: 'center',
		modal: true, draggable: false, resizable: false, width: 400,
		buttons: { "Quitter": function() { $(this).dialog("close"); } }		
	});
// ================================================================== 
// Pour la modification du mot de passe
// ================================================================== 
	$('#modifMP').each(function() {
		var $link = $(this);
		var $dialog = $('<div id="dlgMP"></div>')
			.load($link.attr('href') + ' #frmMP')
			.dialog({
				autoOpen: false, title: "Modifier votre mot de passe", position: 'center',
				modal: true, draggable: false, resizable: false, width: 480,
				buttons: { 
					"Quitter": function() { $(this).dialog("close"); },
					"Annuler": function() { 
						$("#vieuxMPc").val("");
						$("#nouvMP1c").val("");
						$("#nouvMP2c").val("");
						$("#vieuxMPc").focus();
					 },
					"Modifier votre mot de passe": function() {
						var chgMPc   = $("#chgMPc").val();
						var vieuxMPc = $("#vieuxMPc").val();
						var nouvMP1c = $("#nouvMP1c").val();
						var nouvMP2c = $("#nouvMP2c").val();
						// Fonction AJAX pour la modification du mot de passe
						$.post("modif_pass.php", 
							{chgMPs: chgMPc, vieuxMPs: vieuxMPc,
					 		 nouvMP1s: nouvMP1c, nouvMP2s: nouvMP2c},
							function (result){ 
								// Tableau des resultats [ 0 - code, 1 - Titre, 2 - Message]
								var tbl = result.split("|"); 
								// code = 0 -> Erreur *** code = 1 -> OK
								if (tbl[0] == 1) { $dialog.dialog('close'); }
								$('<div id="repMP"></div>')
									.html(tbl[2])
									.dialog({
										autoOpen: true, modal: true, position: 'center',
										draggable: false, resizable: false, width: 400,
										title: tbl[1],
										beforeclose: function(event, ui) {
											$("#vieuxMPc").val("");
											$("#nouvMP1c").val("");
											$("#nouvMP2c").val("");
											$("#vieuxMPc").focus();
										}
									});
							})
					} 
				}
			});
		// Ouvrir la fenetre au clic sur le lien...
		$link.click(function() {
			$dialog.dialog('open');
			return false;
		});
	});
// ================================================================== 
// Pour l'historique des championnats
// ================================================================== 

	// Affichage de l'historique
	$('.affich').click(function() {
		var param = arguments[0].currentTarget.href;
		var tblParam = param.split("#"); 
		// Fonction AJAX qui recupere les donnees a afficher
		$.post (tblParam[0],
			{ pas: tblParam[1] },
			function (result) {
				$('#affclub').html(result);
				$.fn.colorbox({width:"85%", height: "85%", overflow: "auto", inline: true, close: "Fermer",
							   href:"#affclub", opacity:0.75,
							   onComplete: function() { 
									$('.extc').click(function() {
								   	    // Permet d'afficher les resultats en ordre [croissant / decroissant] 
								        // par rapport aux annees
										var par  = arguments[0].currentTarget.href;
										var tblpar = par.split("#"); 
										var result = (tblpar[1] == "a") ? "ascending" : "descending";
										$("#tblClub").transform({xml:"champions/historique/histo-club.xml",
																 xsl:"champions/historique/histo-club.xsl",
																 xslParams:{cls:tblParam[1], tri:result}});
							   		 });
									$('.extq').click(function() {
								   	    // Permet d'afficher les resultats en ordre [croissant / decroissant] 
								        // par rapport aux annees
										var par  = arguments[0].currentTarget.href;
										var tblpar = par.split("#"); 
										var result = (tblpar[1] == "a") ? "ascending" : "descending";
										$("#tblQuart").transform({xml:"champions/historique/histo-quart.xml",
																  xsl:"champions/historique/histo-quart.xsl",
																  xslParams:{jou:tblParam[1], tri:result}});
							   		 });
							   		/* // Faire disparaitre les tirets
							   		$("td").each(function() {
								   		 if ($(this).text() == "-")
									   		 $(this).css("color", $(this).css("background-color"));
									   	 else
									   	 	 $(this).css("color", "black");
							   		 }); 
									*/
							   		},
							   onClosed: function() {
								    $('#recipient').css("display", "none");
								    }
				})
			})
	});
	
	// Gestion - Remplissage des champs des joueurs VIA l'annee
	$("#anHist").blur(function() {
		var an = $(this).val();
		var cat = $("#catHist").val();
		var nch = $(':input[type=hidden]').val();
		if (cat == "x") 
			$("#catHist").focus();
		else {
			// Les deux champs sont selectionnes
			// Recherche des noms des joueurs associes a ces valeurs
			$.post("historique.php",
			      {'an': an, 'cat': cat, 'nch': nch},
			      function(result) { 
				      var tbl = result.split('|'); 
				      $("#lstJ :input[type=text]").each(function(i) { $(this).val($.trim(tbl[i])); });
			      })
		}
	});
	
	// Gestion - Remplissage des champs des joueurs VIA la categorie
	$("#catHist").blur(function() {
		var cat = $(this).val();
		var an = $("#anHist").val();
		var nch = $(':input[type=hidden]').val();
		if (an == 0) 
			 $("#anHist").focus();
		else {
			// Les deux champs sont selectionnes
			// Recherche des noms des joueurs associes a ces valeurs
			$.post("historique.php",
			      {'an': an, 'cat': cat, 'nch': nch},
			      function(result) {  
				      var tbl = result.split('|');
				      $("#lstJ :input[type=text]").each(function(i) { $(this).val($.trim(tbl[i])); });
			      })
		}
	});

});

// ===================================================
// Méthode qui vérifie que certains champs du 
// formulaire d'inscription sont remplis
//
// Elle retourne TRUE / FALSE
// ===================================================
function activInscription(){
	var categ = document.getElementById("categ").value;
	if (((categ == 'A') || (categ == 'E')) && (nbreFois == 0)) {
		$('#frmInc').html('<p>Vous devez faire un choix d\'horaire!<br />' +
			'Pour chaque choix effectu&eacute;, indiquez:</p>' +
			'<ol><li>Type de la ligue (Comp&eacute;tition / Participation)</li>' +
			'<li>Choix du jour (Soir / Jour)</li>' +
			'<li>Nom des membres de l\'&eacute;quipe</li></ol>');
		$('#frmInc').dialog('open');
		return false;
	}
	
	var frm = document.getElementById("monForm");
	var enga = frm.engagement.checked;
	var lect = frm.lecture.checked;
	if (!enga || !lect) {
		$('#frmInc').html('<ol>' +
			'<li>Vous devez vous engager envers le club de curling de Boucherville!</li>' +
			'<li>Vous devez lire les documents concernant votre inscription!</li></ol>');
		$('#frmInc').dialog('open');
		return false;
	}
	return true;
}

// ===================================================
// Méthode AJAX qui permet de verifier qu'un 
// membre existe dans la BD lorsqu'il n'est
// pas connecte au site
// ===================================================
function fnVerifMbre() {
	// Association et encodage des donnees
	var nomC       = escape(document.getElementById("nom").value);
	var prenomC    = escape(document.getElementById("prenom").value);
	var choixDateC = escape(document.getElementById("dateNaiss").value);
	var login = document.getElementById("login").value;
	
	if (!login) {
		$.post("testMembre.php", 
			{ nomS: nomC, prenomS: prenomC, choixDateS: choixDateC },
			function (result){ 
				if (result != 0) $('#modale').dialog('open');
			}
		);
	}
	document.getElementById('adresse').focus();
}

// ===================================================
// Méthode qui permet d'afficher les erreurs lors
// du remplissage du formulaire
// ===================================================
function affichErr(errChn) { 
	var tblErr = errChn.split('|');

	msg = '<p class="pa">Erreurs trouv&eacute;es:</p><ol>'; 
	for (var i=0; i<tblErr.length; i++) 
		msg += '<li>' + tblErr[i] + '</li>';
	msg += '</ol>'; 
	document.getElementById('frmErr').innerHTML = msg;
}

// ===================================================
// Méthode qui permet de formater un champ de 
// formulaire en fonction d'un certain patron
//
// Paramètres d'entrée: ch1 - Champ source
//					    lst - liste des delimiteurs
// ===================================================
function ucMots(ch1, lst) {
	var chn = ch1.value.toLowerCase(); // Mettre la chaine en minuscule
	
	// Analyser la chaine avec tous les separateurs
	for (var j=0; j<lst.length; j++) {
		var car = lst.charAt(j);       // Separateur
		var tbl = chn.split(car);      // Separation des mots en table
									   // selon le separateur
		for (var i=0; i<tbl.length; i++) {
			var mot = tbl[i];          // Formatage du mot
			mot = mot.charAt(0).toUpperCase() + mot.substring(1);
			tbl[i] = mot;
		}
		chn = tbl.join(car); // Reconstruction de la chaine
    }
    ch1.value = chn;         // Retourner la chaine
}
  
// ===================================================
// Méthode qui permet de quitter automatiquement 
// un champ suivant dans un formulaire
//
// Paramètres d'entrée: ch1 - Champ source
// ===================================================
function champSuiv(ch1) {
	if (ch1.value.length > ch1.size-1) {
		ch1.blur();
	}
}

// ===================================================
// Méthode qui permet d'ajuster un champ de 
// formulaire en fonction d'un certain patron
//
// Paramètres d'entrée: ch1  - Champ source
// ===================================================
function ajustChamp(ch1) {
	var err = false;
	
	// Pour les noms des joueurs
	var typJ = ch1.id.substr(0,3);
	if ((typJ == "pos") || (typJ == "sub")) { 
		if ((ch1.id.substr(0,4) == "pos4") && (ch1.value == ""))
			ch1.value = "INCONNU";
		else { 
			ucMots(ch1, " -");
			return;
		}
	}
	// Validation des autres champs
	else if (ch1.value == "") 
		return;
}

// ===================================================
// Méthode qui permet de valider un champ de 
// formulaire en fonction d'un certain patron
//
// Paramètres d'entrée: ch1  - Champ source
//					    code - Patron de validation
//						ch2  - Champ destination
// ===================================================
function validChamp(ch1, code, ch2) {
	var err = false;
	
	// Validation des autres champs
	if (ch1.value == "") 
		return;

	// Mettre la valeur du champ en majuscule
	var chn = ch1.value.toUpperCase();
	ch1.value = chn; 
 	// Validation selon le type de champ
	switch (code) {
		case  1: err = (chn.match(/^[A-Z]\d[A-Z]$/)) ? false : true; break; // Code postal p.1
		case  2: err = (chn.match(/^\d[A-Z]\d$/)) ? false : true; break;	// Code postal p.2
		case  3: err = (chn.match(/^\d{3}$/)) ? false : true; break;		// Telephone p.1
		case  4: err = (chn.match(/^\d{4}$/)) ? false : true; break;		// Telephone p.2
		case  5: err = (chn.match(/^\d{3,}$/)) ? false : true; break;		// Telephone p.3
	} 
	if (err) {
		ch1.value = ""; 
		ch1.focus();
	}
	else
		document.getElementById(ch2).focus();
}

// ===================================================
// Méthode qui affiche les bonnes sections du 
// formulaire pour le tableau d'honneur
//
//	  - sect: Section du formulaire
// ===================================================
function voirTH(sect){ 
	var frm = document.getElementById("frmTH"); 
	if (sect == "1") { // Section de l'entete
		if (frm.ch1[0].checked) {
			document.getElementById("classeTH").style.display = "block";
			document.getElementById("texteTH").style.display = "none";
		}
		else {
			document.getElementById("classeTH").style.display = "none";
			document.getElementById("texteTH").style.display = "block";
		}
	}
	else { // Section des joueurs
		if (frm.ch2[0].checked)
			document.getElementById("joueurTH").style.display = "block";
		else
			document.getElementById("joueurTH").style.display = "none";
	}
}

// ===================================================
// Méthode qui récupère le style CSS d'un élément
// HTML
//
// Elle retourne la valeur de la propriété CSS
//
// Paramètres d'entrée: obj  - Objet HTML
//					    prop - Propriété CSS 
// ===================================================
function obtenirStyle(obj, prop){
	var chnCSS = "";
	if(document.defaultView) { // W3C
		var gcs = document.defaultView.getComputedStyle(obj, "");
		chnCSS = gcs.getPropertyValue(prop);
	}
	else if(obj.currentStyle){  // IE
		// Conversion d'une propriété CSS en propriété JavaScript
		// Remplacement de « -x » par « X » 
		prop = prop.replace (/\-(\w)/g, 
							 function (chn, par1) {return par1.toUpperCase();} );
		// Remplacement de « : x | :x » par « X » 
		prop = prop.replace (/: ?(\w)/g, 
							 function (chn, par1) {return par1.toUpperCase();} );
		chnCSS = obj.currentStyle[prop]; 
	}
	return chnCSS;
}

// ===================================================
// Méthode qui ajoute une propriété de style à
// une feuille de style 
//
// Paramètre d'entrée  : e - Événement produit
// ===================================================
function ajouterStyle(sel, prop) {
	var ds = document.styleSheets[0]; // Feuille de style à modifier
	var regle;
	
	if (ds.addRule)             // IE
		ds.addRule(sel, prop);
	else if (ds.insertRule) {   // W3C
		regle = sel + "{ " + prop + " }";
		ds.insertRule(regle, ds.cssRules.length);
	}
}

// ===================================================
// Méthode qui colle un objet à la poursuite
// du curseur
//
// Paramètre d'entrée  : e - Événement produit
// ===================================================
function poursuiteCurseur(e) {
	var ev;					   // Événement détecté
	var objDepl;			   // Objet qui subit l'événement
	var obj;				   // Objet à déplacer...
	var deplX;				   // Déplacement en x
	var deplY;				   // Déplacement en y
	
	// Si l'événement « e » n'existe pas, alors alors c'est la méthode « window.event »
	ev = (!e) ? window.event : e;
	
	// Qui a subit l'événement ?
	objDepl = (ev.target) ? ev.target : ((ev.srcElement) ? ev.srcElement : null);
	// Pour le bug Safari
	if (objDepl.nodeType == 3) objDepl = objDepl.parentNode;
	
	switch (objDepl.id) {
		case "enteteActive": obj = document.getElementById('aideActive');
							 deplX = 20; deplY = -75;
							 break;
		default: obj = document.getElementById('bulleBottin');
				 deplX = -100; deplY = 20;
				 break;
	}
	
	if (obj != null) { // L'objet existe...
		obj.style.top  = (ev.clientY + document.documentElement.scrollTop  + deplY) + "px"; 
		obj.style.left = (ev.clientX + document.documentElement.scrollLeft + deplX) + "px"; 
    }
}

// ---------------------------------------------------------------
// Méthode qui fait apparaître ou disparaître une bulle d'aide
// ---------------------------------------------------------------
function pop(objet, texte) {
	var obj = document.getElementById(objet); 
	if (texte.length != 0) {
		obj.innerHTML = texte; // Afficher la bulle d'aide
		obj.style.visibility = "visible";
	}
	else {
		obj.innerHTML = ""; // Enlever la bulle d'aide
		obj.style.visibility = "hidden";
	}
}

// ---------------------------------------------------------------
// Méthode qui ouvre le sous-menu
// ---------------------------------------------------------------
function afficheMenu(obj) {
	document.getElementById(obj).style.display = 'block';;
}

// ---------------------------------------------------------------
// Méthode qui ferme le sous-menu
// ---------------------------------------------------------------
function cacheMenu(obj) {
	document.getElementById(obj).style.display = 'none';;
}

// ---------------------------------------------------------------
// Méthode qui fait apparaître ou disparaître une section lors
// de la gestion des champions de la saison précédente
// ---------------------------------------------------------------
function afficheCacheDiv() {
	var type = document.getElementById('type').value;
	if(type == 'saison') {
		document.getElementById('jt_div').style.display = 'none';
	}
	else {
		document.getElementById('jt_div').style.display = 'block';
	}
}

