/******************************************************************************
*
* 		GESTION DES MESSAGES UTILISATEURS
*
******************************************************************************/

/******************************************************************************
* Variables globales
******************************************************************************/
// Délai de fermeture automatique des messages de confirmation
var _messageAutoCloseDelay = 1000;
var _messageAutoCloseTimer = null;

// Types de message
var _messageTypeInfo = 10; // Message d'info avec un bouton OK
var _messageTypeErreur = 20; // Message d'erreur avec un bouton OK
var _messageTypeConfirm = 30; // Message de confirmation avec un bouton OK
var _messageTypeConfirmOKAnnuler = 40; // Message de demande de confirmation avec des boutons OK et Annuler
var _messageTypeConfirmOuiNonAnnuler = 50; // Message de demande de confirmation avec des boutons Oui, Non et Annuler
var _messageTypeConfirmOuiNon = 60; // Message de confirmation avec traitement special sur les deux boutons

/******************************************************************************
* Variables temporaires	
******************************************************************************/
var _messageType = 0; // Type du message affiché

var _messageFormName = ''; // Nom du formulaire à envoyer en cas de confirmation
var _messageFieldName = ''; // Nom du champ de formName à modifier en cas de confirmation
var _messageFieldValue = ''; // Valeur à affecter au champ fieldName en cas de confirmation
var _messageFieldNameConfirm = ''; // Nom du champ de formName à affecter à la valeur 1 en cas de confirmation
var _messageCallbackFunction = ''; // Fonction JS appelée en cas de confirmation (OK, Oui, Non)

/******************************************************************************
* Raccourcis - le libellé messageKey à afficher doit être présent dans la page dans un champ caché qui porte la clé comme id
*	ex : <input type="hidden" id="generique_erreur_champs_obligatoires" value="<?php displayLabel('generique_erreur_champs_obligatoires'); ?>"/>
******************************************************************************/
// Affichage d'un message d'info
function messageInfo(messageKey) {
	messageShow(_messageTypeInfo, messageKey, '', '', '', '', '', '');
}
function messageInfoText(messageHTML) {
	messageShow(_messageTypeInfo, '', messageHTML, '', '', '', '', '');
}

// Affichage d'un message d'erreur
function messageErreur(messageKey) {
	messageShow(_messageTypeErreur, messageKey, '', '', '', '', '', '');
}
function messageErreurText(messageHTML) {
	messageShow(_messageTypeErreur, '', messageHTML, '', '', '', '', '');
}

// Affichage d'un message de confirmation
function messageConfirm(messageKey) {
	messageShow(_messageTypeConfirm, messageKey, '', '', '', '', '', '');
}
function messageConfirmText(messageHTML) {
	messageShow(_messageTypeConfirm, '', messageHTML, '', '', '', '', '');
}
function messageConfirmText2(messageHTML, callbackFunction) {
	messageShow(_messageTypeConfirmOKAnnuler, '', messageHTML, '', '', '', '', callbackFunction);
}

//Affichage d'une demande de confirmation de suppression
function messageConfirmDelete(formName, fieldName, fieldValue) {
	messageShow(_messageTypeConfirmOKAnnuler, 'generique_confirmer_supprimer', '', formName, fieldName, fieldValue, '', '');
}

//Affichage d'une demande de confirmation
function messageConfirmOKAnnuler(messageKey, formName, fieldName, fieldValue) {
	messageShow(_messageTypeConfirmOKAnnuler, messageKey, '', formName, fieldName, fieldValue, '', '');
}

function messageConfirmOKAnnulerText(messageHTML, formName, fieldName, fieldValue) {
	messageShow(_messageTypeConfirmOKAnnuler, '', messageHTML, formName, fieldName, fieldValue, '', '');
}

//Affichage d'un message Oui-Non
function messageConfirmOuiNon(messageKey, formName, fieldNameConfirm, callbackFunction){
	messageShow(_messageTypeConfirmOuiNon, messageKey, '', formName, '', '', fieldNameConfirm, callbackFunction);
}

function messageConfirmTextOuiNon(messageHTML, formName, fieldNameConfirm, callbackFunction){
	messageShow(_messageTypeConfirmOuiNon, '', messageHTML, formName, '', '', fieldNameConfirm, callbackFunction);
}


/******************************************************************************
* Affichage du message
* 	- messageType : type de message (cf Variables globales)
* 	- messageKey : clé du libellé à afficher - le libellé à afficher doit être présent dans la page dans un champ caché qui porte la clé comme id
*		ex : <input type="hidden" id="generique_erreur_champs_obligatoires" value="<?php displayLabel('generique_erreur_champs_obligatoires'); ?>"/>
* 	- messageHTML : texte html à afficher si aucun messageKey n'est défini
* 	- formName : nom du formulaire à envoyer en cas de confirmation
* 	- fieldName : nom du champ de formName à modifier en cas de confirmation
* 	- fieldValue : valeur à affecter au champ fieldName en cas de confirmation
* 	- fieldNameConfirm : nom du champ de formName à affecter à la valeur 1 en cas de confirmation (afin de différencier le Oui du Non dans le cas du type _messageTypeConfirmOuiNonAnnuler)
*	- callbackFunction : fonction JS appelé en cas de confirmation (boutons OK, Oui, Non)
******************************************************************************/
function messageShow(messageType, messageKey, messageHTML, formName, fieldName, fieldValue, fieldNameConfirm, callbackFunction) {
	// Annulation de la fermetture automatique d'un message précédent
	if (_messageAutoCloseTimer != null) {
		clearTimeout(_messageAutoCloseTimer);
	}
	
	/*var params = '';
	params += 'messageType : ' + messageType + '\n';
	params += 'messageKey : ' + messageKey + '\n';
	params += 'messageHTML : ' + messageHTML + '\n';
	params += 'formName : ' + formName + '\n';
	params += 'fieldName : ' + fieldName + '\n';
	params += 'fieldValue : ' + fieldValue + '\n';
	params += 'fieldNameConfirm : ' + fieldNameConfirm + '\n';
	params += 'callbackFunction : ' + callbackFunction + '\n';
	alert(params);*/
	
	// Réinitialisation du message
	messageReset();
	
	// Paramètres temporaires
	_messageType = messageType;
	_messageFormName = (formName) ? formName : '';
	_messageFieldName = (fieldName) ? fieldName : '';
	_messageFieldValue = (fieldValue) ? fieldValue : '';
	_messageFieldNameConfirm = (fieldNameConfirm) ? fieldNameConfirm : '';
	_messageCallbackFunction = (callbackFunction) ? callbackFunction : '';
	
	// Styles CSS
	switch (_messageType) {
		case _messageTypeInfo :
		case _messageTypeConfirmOKAnnuler :
		case _messageTypeConfirmOuiNonAnnuler :
		case _messageTypeConfirmOuiNon :
			$('messageBG').className = 'info';
			$('messageWin').className = 'info';
			break;
		case _messageTypeErreur :
			$('messageBG').className = 'error';
			$('messageWin').className = 'error';
			break;
		case _messageTypeConfirm :
			$('messageBG').className = 'confirm';
			$('messageWin').className = 'confirm';
			break;
		default :
			$('messageBG').className = '';
			$('messageWin').className = '';
			alert('1 - Le paramètre "type" est obligatoire');
			break;
	}
	
	// Message
	if (messageKey != '') {
		$('messageHTML').innerHTML = $(messageKey).value;
	} else if (messageHTML != '') {
		$('messageHTML').innerHTML = messageHTML;
	} else {
		alert('2 - Le paramètre "messageKey" ou "messageHTML" doit être renseigné');
	}

	// Boutons
	switch (_messageType) {
		case _messageTypeInfo :
		case _messageTypeErreur :
		case _messageTypeConfirm :
			$('messageButtonOK').style.display = '';
			break;
		case _messageTypeConfirmOKAnnuler :
			$('messageButtonOK').style.display = '';
			$('messageButtonAnnuler').style.display = '';
			break;
		case _messageTypeConfirmOuiNon :
			$('messageButtonOui').style.display = '';
			$('messageButtonNon').style.display = '';
			break;
		case _messageTypeConfirmOuiNonAnnuler :
			$('messageButtonOui').style.display = '';
			$('messageButtonNon').style.display = '';
			$('messageButtonAnnuler').style.display = '';
			break;
		default :
			alert('3 - Le paramètre "type" est obligatoire');
			break;
	}

	// Affichage du div
	$('messageOut').style.display = '';
	messageSetFirstButtonFocus();

	// Fermeture automatique des messages de confirmation
	if (_messageType == _messageTypeConfirm) {
		_messageAutoCloseTimer = setTimeout('messageClose()', _messageAutoCloseDelay);
	}
}

/******************************************************************************
* Actions des boutons
******************************************************************************/
// Bouton OK ou Oui
function messageOui() {
	switch (_messageType) {
		case _messageTypeInfo :
		case _messageTypeErreur :
		case _messageTypeConfirm :
			// Fermeture du message
			messageClose();
			break;
		case _messageTypeConfirmOKAnnuler :
		case _messageTypeConfirmOuiNon :
		case _messageTypeConfirmOuiNonAnnuler :
			messageSubmit(true);
			break;
		default :
			alert('4 - Le paramètre "type" est obligatoire');
			break;
	}
}
// Bouton Non
function messageNon() {
	messageSubmit(false);
}
// Bouton Annuler
function messageAnnuler() {
	messageClose();
}
// Submit du form ou callback function
function messageSubmit(ok) {
	messageClose();
	if (_messageFormName != '') {
		if (_messageFieldNameConfirm != '' && ok) {
			// Mise à jour du champ de confirmation
			eval("document." + _messageFormName + "." + _messageFieldNameConfirm + ".value = 1");
		}
		if (_messageFieldName != '') {
			// Mise à jour de la valeur du champ de donnée
			eval("document." + _messageFormName + "." + _messageFieldName + ".value = " + _messageFieldValue);
		}
	}
	if (_messageCallbackFunction != '') {
		// Appel de la fonction javascript
		eval(_messageCallbackFunction);
		
		// Pas de fermeture du message pour ne pas fermer un éventuel message affiché par la fonction _messageCallbackFunction 
		//messageClose();
	} else if (_messageFormName != '') {
		// Submit du formulaire
		eval("document." + _messageFormName + ".submit()");
	}
}
/******************************************************************************
* Fermeture du message
******************************************************************************/
function messageClose() {
	$('messageOut') .style.display = 'none';
	
	// Pas de reset ici pour pouvoir accéder aux données dans l'éventuelle callbackFunction
	//messageReset();
}

/******************************************************************************
* Réinitialisation du message
******************************************************************************/
function messageReset() {
	$('messageHTML').innerHTML = '';
	$('messageButtonOK').style.display = 'none';
	$('messageButtonOui').style.display = 'none';
	$('messageButtonNon').style.display = 'none';
	$('messageButtonAnnuler').style.display = 'none';

	_messageType = 0;
	_messageFormName = '';
	_messageFieldName = '';
	_messageFieldValue = '';
	_messageFieldNameConfirm = '';
	_messageCallbackFunction = '';
}

/******************************************************************************
* Focus sur le premier bouton
******************************************************************************/
function messageSetFirstButtonFocus() {
	var input;
	for (var i = 0; i < $('messageButton').getElementsByTagName('input').length; i++) {
		input = $('messageButton').getElementsByTagName('input')[i];
		if (input.type == 'button') {
			input.focus();
			break;
		}
	}
}

/******************************************************************************
* Anciennes fonctions - Deprecated
******************************************************************************/
function confirmForm(formName, fieldName, fieldValue) {
	messageConfirmDelete(formName, fieldName, fieldValue);
}
function confirmOuiNonForm(formName, fieldName, fieldValue, fieldNameConfirm, text) {
	messageShow(_messageTypeConfirmOuiNonAnnuler, '', text, formName, fieldName, fieldValue, fieldNameConfirm, '');
}

