﻿// Fonctions des boîte de messages

function MessageBox(htmlNames) {
	if(this == window || this == document) {alert("MessageBox is a constructor function!"); return;}
	
	// ---- Propriétés ----
	this.messages = new Object(); // Objets de messages
	this.htmlElements = htmlNames; // ID html des éléments (buttonA, buttonB, title, body, hiddenField, messageBox)
	this.shown = false;
	this.messageID = null;
	this.linkedField = null;
	this.ignoreCloseOnce = false;
	
	// ---- Événements ----
	this.onShow = null;
	this.onClose = null;
	
	// PopUp BG
	if(!document.getElementById('popupBG')) document.write('<div id="popupBG" class="popupBG" style="display:none;"></div>');
	
	if(this.htmlElements.messageBox) document.fullscreenCenteredElement.push(this.htmlElements.messageBox);
	
	// ---- Fonctions ----
	
		// Affichage du message demandé
		this.show = function(messageID, linkedField) {
			if(this.messages[messageID]) {
				this._setStyleProp("popupBG", "display", "block");
				
				document.getElementById(this.htmlElements.title).innerHTML = this.messages[messageID].title;
				document.getElementById(this.htmlElements.body).innerHTML = this.messages[messageID].text;
				var focusOn = null;
				
				// Bouton YES
				this.messages[messageID].labelYesUsable = false;
				var btn = document.getElementById(this.htmlElements.buttonYes);
				if(btn) {
					if(this.messages[messageID].buttonYes == null) { // No button
						this._setStyleProp(btn, "display", "none");
					} else {
						this._setStyleProp(btn, "display", "");
						btn.innerHTML = this.messages[messageID].buttonYes;
						if(focusOn == null) focusOn = this.htmlElements.buttonYes;
						// Label seul
						var lbl = document.getElementById(this.htmlElements.labelYes);
						if(lbl) {
							if(this.messages[messageID].buttonYes != null) {
								lbl.innerHTML = this.messages[messageID].buttonYes;
								this.messages[messageID].labelYesUsable = true;
							}
							this._setStyleProp(lbl, "display", "none");
						}
					}
				}
				
				// Bouton NO
				this.messages[messageID].labelNoUsable = false;
				var btn = document.getElementById(this.htmlElements.buttonNo);
				if(btn) { 
					if(this.messages[messageID].buttonNo == null) { // No button
						this._setStyleProp(btn, "display", "none");
					} else {
						this._setStyleProp(btn, "display", "");
						btn.innerHTML = this.messages[messageID].buttonNo;
						if(focusOn == null) focusOn = this.htmlElements.buttonNo;
						// Label seul
						var lbl = document.getElementById(this.htmlElements.labelNo);
						if(lbl) {
							if(this.messages[messageID].buttonNo != null) {
								lbl.innerHTML = this.messages[messageID].buttonNo;
								this.messages[messageID].labelNoUsable = true;
							}
							this._setStyleProp(lbl, "display", "none");
						}
					}
				}
				
				// Bouton CANCEL
				this.messages[messageID].labelCancelUsable = false;
				var btn = document.getElementById(this.htmlElements.buttonCancel);
				if(btn) { 
					if(this.messages[messageID].buttonCancel == null) { // No button
						this._setStyleProp(btn, "display", "none");
					} else {
						this._setStyleProp(btn, "display", "");
						btn.innerHTML = this.messages[messageID].buttonCancel;
						if(focusOn == null) focusOn = this.htmlElements.buttonCancel;
						// Label seul
						var lbl = document.getElementById(this.htmlElements.labelCancel);
						if(lbl) {
							if(this.messages[messageID].buttonCancel != null) {
								lbl.innerHTML = this.messages[messageID].buttonCancel;
								this.messages[messageID].labelCancelUsable = true;
							}
							this._setStyleProp(lbl, "display", "none");
						}
					}
				}
				
				var pnl = document.getElementById(this.htmlElements.messageBox);
				this._setStyleProp(pnl, "display", "block");
				
				if(typeof(window.supersleight) == "object") window.supersleight.run(this.htmlElements.messageBox);
				
				// Enregistrement du message affiché
				var hdn = document.getElementById(this.htmlElements.hiddenField);
				if(hdn) hdn.value = messageID;
				
				this.shown = true;
				this.messageID = messageID;
				this.linkedField = linkedField;
				
				if(this.onShow) this.onShow();
				
				if(focusOn != null) document.getElementById(focusOn).focus();
			}
		}
		
		
		// Fermeture du message actif
		this.close = function() {
			if(!this.shown) return;
			
			if (this.ignoreCloseOnce) {
				this.ignoreCloseOnce = false;
				return; 
			}
			
			var pnl = document.getElementById(this.htmlElements.messageBox);
			this._setStyleProp("popupBG", "display", "none");
			this._setStyleProp(pnl, "display", "none");
			
			var hdn = document.getElementById(this.htmlElements.hiddenField);
			if(hdn) hdn.value = "";
			
			this.shown = false;
			this.messageID = null;
			
			if(this.onClose) this.onClose();
			
			if(this.linkedField) {
				this.linkedField.focus();
			}
		}
		
		
		// Désactivation des boutons (suite à un clic)
		// Pour empêcher des actions multiples ou répétées
		this.disableButtons = function() {
			var btn = document.getElementById(this.htmlElements.buttonYes);
			if(btn && this.messages[this.messageID].labelYesUsable) { // button Yes
				var lbl = document.getElementById(this.htmlElements.labelYes);
				if(lbl) {
					this._setStyleProp(btn, "display", "none");
					this._setStyleProp(lbl, "display", "");
				}
			}
			var btn = document.getElementById(this.htmlElements.buttonNo);
			if(btn && this.messages[this.messageID].labelNoUsable) { // button Yes
				var lbl = document.getElementById(this.htmlElements.labelNo);
				if(lbl) {
					this._setStyleProp(btn, "display", "none");
					this._setStyleProp(lbl, "display", "");
				}
			}
			var btn = document.getElementById(this.htmlElements.buttonCancel);
			if(btn && this.messages[this.messageID].labelCancelUsable) { // button Yes
				var lbl = document.getElementById(this.htmlElements.labelCancel);
				if(lbl) {
					this._setStyleProp(btn, "display", "none");
					this._setStyleProp(lbl, "display", "");
				}
			}
		}
		
		
		
		// DHTML: modification du style de l'objet HTML
		this._setStyleProp = function(obj, propName, newVal) {
			if(typeof(obj) == "string") obj = document.getElementById(obj);
			if(!obj) return;
			try {
				if(!obj.style) obj[propName] = newVal; // Old browser
				else obj.style[propName] = newVal; // Recent browser
			} catch(e) {
				return;
			}
		}
}