/*****************************************
			   Auteur :	
	  Gael du Plessix - Neweb Design
			Copyright 2008
	Tous droits réservés à Neweb Design
*****************************************/

//Classe de gestion des champs éditables par simple clic

var Editable = Class.create({

	initialize: function(options)
		{
		this.options = Object.extend({
			width: 300,
			height: 300,
			defautMode: 'inner' // ou 'alert'
			},options);
		this.elements = {};
		this.observing = false;
		},
		
	observe: function(elements)
		{
		this.elements = elements;
		this.bStartEdit = this.startEdit.bindAsEventListener(this);
		//Parcours de l'objet transmis (grâce à $H().each()) et bind des éléments
		$H(this.elements).each(function(e){
				var element = $(e.key);
				Event.observe(element,'click',this.bStartEdit);				
			}.bind(this));
		this.observing = true;
		},
	
	startEdit: function(e)
		{
		var elementClic = e.element();
		this.element = false;
		//Récup de l'élément texte éditable, si on est dans un sous élément
		$H(this.elements).each(function(e){
				var id = e.key;
				if(elementClic.up('#'+id) || elementClic.id == id)
					{
					this.element = {e:$(id),
								width:e.value.dim[0],
								height:e.value.dim[1],
								mode: e.value.mode || this.options.defautMode,
								content: $(id).innerHTML
								};
					}
			}.bind(this));

		//Si jamais on n'a rien trouvé, on s'arrête là
		if(!this.element)
			return false;
			
		//Enregistrement du contenu
		this.elements[this.element.e.id].content = this.element.content;

		Event.stopObserving(this.element.e,'click',this.bStartEdit);	//Pour pas rappeler la fonction avant la fin de l'édition
		
		if(this.element.mode == 'inner')
			{
			var idArea = 'area_'+this.element.e.id;
			var textarea = new Element('textarea',{'id':idArea,
													style:'width:'+(this.element.width-20)+'px;height:'+(this.element.height-30)+'px'
													});
			textarea.update(this.element.content);
			this.element.e.update(textarea);
			tinyMCE.execCommand('mceAddControl',false,idArea);
			}
		else if(this.element.mode == 'alert')
			{
			var idEdit = 'edit_'+this.element.e.id;
			var textarea = new Element('textarea',{'id':idEdit,
													style:'width:'+(this.element.width-20)+'px;height:'+(this.element.height-30)+'px'
													});
			textarea.update(this.element.content);
			this.alert = new Alert(textarea,{width:this.element.width,
								height:this.element.height+85,
								colorFenetre:'#556655',
								clickOverlay:false,
								boutonFermer: false
								});
			tinyMCE.execCommand('mceAddControl',false,idEdit);
			}
		},
		
	annuler: function(editor)
		{
		var idArea = editor.id;	
		var idElement = idArea.substring(5);
		var e = this.elements[idElement];
		//Récup du contenu
		this.element = {e:$(idElement),
						width:e.dim[0],
						height:e.dim[1],
						mode: e.mode || this.options.defautMode,
						content: e.content
								};
						
		tinyMCE.execCommand('mceRemoveControl',false,idArea);
		this.element.e.update(this.element.content);
		
		Event.observe(this.element.e,'click',this.bStartEdit);
		
		if(this.element.mode == 'alert')
			{			
			this.alert.content.update('');
			this.alert.fermer();
			}
		},
		
	enregistrer: function(editor,newContent)
		{
		var idArea = editor.id;
		tinyMCE.execCommand('mceRemoveControl',false,idArea);
		var idElement = idArea.substring(5);
		var e = this.elements[idElement];
		//Récup du contenu
		this.element = {e:$(idElement),
						width:e.dim[0],
						height:e.dim[1],
						mode: e.mode || this.options.defautMode,
						content: e.content
						};
		
		this.element.e.update('Enregistrement en cours...');
		
		new Ajax.Request('ajax/editable.php',{
			method: 'post',
			parameters: {idElement: idElement,newContent: newContent},
			onSuccess: function(content)
				{
				if(content.responseText !== '--/error/--')
					{
					//On enlève les slashs en trop
					this.element.content = content.responseText.replace(/\\/g, '');
					this.element.e.update(this.element.content);
					Event.observe(this.element.e,'click',this.bStartEdit);
					}
				else
					{
					this.element.e.update('Une erreur est survenue, si elle persiste, veuillez contacter le service technique.');
					}
				
				}.bind(this),
			onFailure: function()
				{
				this.element.e.update('Une erreur est survenue, si elle persiste, veuillez contacter le service technique.');
				}.bind(this)
		});
		
		if(this.element.mode == 'alert')
			{			
			this.alert.content.update('');
			this.alert.fermer();
			}	
		}
});
