

/**
 * Closure oo0 !_! 0oo
 */
(function() {
	var window = this,
			ev = window.ev,
			LOG = ev && ev.log;

	if (!ev){
		throw 'XHRMethod#<init>: needs ev.core module!';
	}

	// on teste d'abord l'existance des classes nécessaires
	window.Classe.checkDefined('XHRMethod');

	/**
 * Objet XHRTimeline utilisable pour effectuer toute
 * requête asynchrone de la page.
 *
 * Cet objet n'accepte que des écouteur de timeline
 * de type requête (XHRMethod).
 *
 * @param {number} _delay : délai entre chaque évènement de timeline.
 */
	window.XHRTimeline = function(_delay) {
		var timeline = new window.Timeline(_delay);
		timeline.start();

		this.stop = function() {
			timeline.stop();
		};

		/**
	 * Permet d'ajouter un écouteur de timeline.
	 *
	 * Cet écouteur doit être de type XHRMethod.
	 *
	 * @param _timelineListener un écouteur de timeline (type requête).
	 * @throws si _timelineListener est indefini
	 * @throws si _timelineListener est nul
	 * @throws si _timelineListener n'est pas une instance de XHRMethod
	 */
		this.addTimelineListener = function(_timelineListener) {
			if (!_timelineListener) { throw new Error('timelineListener should not be null'); }
			if (!window.Classe.isInstanceOf(_timelineListener, window.XHRMethod)) { throw new Error('_timelineListener is not an XHRMethod instance'); }
			timeline.addTimelineListener(_timelineListener);
		};

		/**
	 * overrides Object#toString()
	 */
		this.toString = function() {
			return 'XHRTimeline{'+ timeline.toString() + '}';
		};
	};

	LOG.info('XHRTimeline.js ok');
}());

