/***********************

	Script: whileClick.js
	License: Creative Commons
	Copyright : whileClick for Mootools copyright (c) 2008 Youssef Boubia, <http://youssef.boubia.com>
	Documentation : http://youssef.boubia.com/
	
	Usage:
		
		Fran�ais :
			L'evenement whileClick d�t�rmine un long clic sur un �l�ment dom
			vous pouvez gerer votre evenement whileClick de la m�me mani�re que les autres evenements avec mootools ( Event.js)  
			Mootools Documentation pour Event.js : http://docs.mootools.net/Element/Element-Event.js
			Exemple:
				//Montre l'evolution du temps tant qu'on clique sur l'�l�ment
				element.addEvent( 'whileClick', function( ) {
					var currentTime = new Date();
					var hours = currentTime.getHours();
					var minutes = currentTime.getMinutes();
					var seconds = currentTime.getSeconds();
					$('box').setText(hours+':'+minutes+':'+seconds);
				});
		English :
			whileClick event determines a long click over a dom element
			you can manage your whileClick event the same way as any other event in mootools whith Event.js Functions
			Mootools Documentation for Event.js : http://docs.mootools.net/Element/Element-Event.js
			Example:
				//Displays while clicking current time evolving
				element.addEvent( 'whileClick', function( ) {
					var currentTime = new Date();
					var hours = currentTime.getHours();
					var minutes = currentTime.getMinutes();
					var seconds = currentTime.getSeconds();
					$('box').setText(hours+':'+minutes+':'+seconds);
				});
			
	Note : 
		Fran�ais: Mootools est une libraire javascript de Valerio Proietti, vous pouvez retrouver cette libraire sur l'adresse http://mootools.net
		English: Mootools is a javascript based library by Valerio Proietti, it's can be found at http://mootools.net
		
		
	La classe whileClick retient deux paramètres principaux :

    * Element : L'élément auquel s'appliquera l'évènement.
    * bindFunction : la fonction qu'on désire exécuter lors du lancement de l'évènement
    * Méthodes :
    * launch : Lance l'exécution périodique de la fonction
    * mousedown : la variable qui reçoit la fonction bindFunction à exécuter lors du lancement de l'évènement mousedown
    * mouseup : Initialise l'arrêt de l'exécution de la fonction bindFunction lors du lancement de l'un des évènements mousedown ou mouseleave
    * stop : vide le timer de l'exécution périodique ( voir periodical )
    * Valeurs :
    * events : objet retenant les évènements mousedown et mouseup ou mouseleave de la classe ( { up, down } )
    * bindFunction : contient la Fonction attachée à l'évènement, elle est initialisée lors de la création d'un objet whileClick
    * element : contient l'élément auquel on attache l'évènement
    * timer : contient le timer de l'exécution périodique de la fonction bindFunction

Mouse

La classe whileClick est totalement paramétrable et extensible, vous pourrez donc l'étendre et la paramétrer selon votre cas d'utilisation
	
***********************/


/************************************************************
	whileClick class
*************************************************************/
var whileClick = new Class ({
		
	events : { down:null, up:null },
	bindFunction: null,
	element: null,
	timer: null,	
	ms: 200,	
	initialize: function(element,bindFunction) {
		this.element = element;
		this.bindFunction = bindFunction;
		var mainObj = this;
		this.element.addEvent('mousedown',function(event){ mainObj.launch(event); });
	},	
	launch: function(event) {
		this.events.down = new Event(event);
		//this.mousedown = this.bindFunction;
		this.timer = this.bindFunction.periodical(this.ms);		
		var mainObj = this;
		document.addEvent('mouseup', function(event) { mainObj.mouseup(event); });
		this.element.addEvent('mouseleave',function(event){ mainObj.mouseup(event); });
	},	
	//mousedown: function(){},	
	mouseup: function(event) {
		this.events.up = new Event(event);
		this.stop();
	},	
	stop: function() {
		$clear(this.timer);
	}	
});
/******************************************************/

/******************* Mootools Patch *******************/

Element.Events.whileClick = {	
		base: 'mousedown',
		onAdd:{ call: function (element,fn){		
		new whileClick( element, fn );}
		}
	};

// Element.Events['whileClick'] = {
	// type: 'mousedown',
	// add: {
		// call: function (element,fn) { new whileClick( element, fn ); }
	// }
// };

// Element.NativeEvents.push('whileClick');
/**************************************************/
	
