// + --------------------------------------------------------------------------------------
// + ExtrArea
// + V1.0
// + Thanh Nguyen, http://www.sutekidane.net
// + 30.12.2005
// + http://creativecommons.org/licenses/by-nc-sa/2.0/fr/deed.fr
// + --------------------------------------------------------------------------------------
function ExtrArea () {
	
	pClass = this.constructor;
	
	if(pClass.pSingleton == undefined) {
		
		pClass.pSingleton = this;
		// + --------------------------------------------------------------------------------------
		// + buildExtrArea
		// + Définition des comportements
		// + Entrée
		// + 		scontainer		string		Identifie le conteneur
		// + 		stag			string		Les tags à capturer et à traiter
		// + 		saction			string		La page de traitement pour la soumission des données
		// + --------------------------------------------------------------------------------------
		pClass.pSingleton.buildExtrArea = function (scontainer, stag, saction) {
			container = scontainer;
			tag = stag;

			if (saction == undefined) {
				saction = null;
			}

			if ((typeof container) != 'undefined' && (typeof tag) != 'undefined') {
				try{
					var tab = document.getElementById(container).getElementsByTagName(tag);
					for (i = 0; i < tab.length; i++) {
						if (tab.item(i).getAttribute('id') != null) {
							tab.item(i).onclick = function() {
								pClass.pSingleton.setEditable(this.getAttribute('id'), saction);
							};
						}
					}
				}
				catch(e) {
					alert('\nMauvais paramètrage, veuillez vérifier les valeurs de : \n - container (le conteneur des balises à capturer) \n - tag (les balises à capturer)!');
					return false;
				}
			}
			return true;
		}
		
		// + --------------------------------------------------------------------------------------
		// + setEditField
		// + Rend une zone éditable
		// + Entrée
		// + 		id		string		Identifie la zone destinée à se transformer en champ éditable
		// + 		saction		string/function
		// + 					La page de traitement pour la soumission des données
		// + 					ou la fonction à appeler avant envoi des données
		// + --------------------------------------------------------------------------------------
		pClass.pSingleton.setEditable = function (id, saction) {
			if ((typeof document.getElementById(id)) == 'object') {
				var data = document.getElementById(id).innerHTML;
				document.getElementById(id).innerHTML = '<input type="text" id="f' + id + '" name="f' + id + '" value="' + data + '" />';
				document.getElementById(id).innerHTML += '<a href="#" onclick="pClass.pSingleton.cancel(\'' + id + '\', \'' + data + '\', \'' + saction + '\'); return false;" title="cliquez pour annuler"><img src="' + imgCancel + '" alt="annuler" class="btimage" /></a>';
				document.getElementById(id).innerHTML += '<a href="#" onclick="pClass.pSingleton.accept(\'' + id + '\', \'' + saction + '\'); return false;" title="cliquez pour valider"><img src="' + imgAccept + '" alt="accepter" class="btimage" /></a>';
				document.getElementById('f' + id).focus();
				document.getElementById(id).onclick = null;
				return true;
			}
			return false;
		}
		
		// + --------------------------------------------------------------------------------------
		// + setView
		// + Rend une zone cliquable pour édition et lui affecte la valeur éditée
		// + Entrée
		// + 		id		string		Zone destinée à afficher le contenu précédemment éditable
		// + 		saction		string/function
		// + 					La page de traitement pour la soumission des données
		// + 					ou la fonction à appeler avant envoi des données
		// + --------------------------------------------------------------------------------------
		pClass.pSingleton.setClickable  = function (id, saction) {
			if ((typeof document.getElementById(id)) == 'object') {
				document.getElementById(id).onclick = function() {
					pClass.pSingleton.setEditable(id, saction);
				}
				return true;
			}
			return false;
		}
		
		// + --------------------------------------------------------------------------------------
		// + 
		pClass.pSingleton.accept = function (id, saction) {
			if ((typeof document.getElementById(id)) == 'object') {
				var data = document.getElementById('f' + id).value;
				document.getElementById(id).innerHTML = data;
			
				pClass.pSingleton.setClickable(id, saction);
				pClass.pSingleton.sendData(id, data, saction);
			}
			return true;
		}
		
		// + --------------------------------------------------------------------------------------
		pClass.pSingleton.cancel = function (id, data, saction) {
			if ((typeof document.getElementById(id)) == 'object') {
				document.getElementById(id).innerHTML = data;
				pClass.pSingleton.setClickable(id, saction);
			}
			return true;
		}
		
		// + --------------------------------------------------------------------------------------
		// + sendData
		// + Entrée
		// + 		id		string		Le nom du champ
		// + 		data		string		Valeur à envoyer
		// + 		saction			string/function
		// + 				La page de traitement pour la soumission des données
		// + 				ou la fonction à appeler avant envoi des données
		// + --------------------------------------------------------------------------------------
		pClass.pSingleton.sendData = function (id, data, saction) {
			var XHR = new XHRConnection();
			XHR.appendData('toDo', 'update');
			XHR.appendData('id', id);
			XHR.appendData('data', data);
			XHR.sendAndLoad(saction, "POST");
		}
	}
	else {
		return pClass.pSingleton;
	}
}
