/*
---
description: Asset preloader queue for MooTools.

license: MIT-style

authors:
- Christopher Pitt

requires:
- core/1.2.4: Class.Extras
- core/1.2.4: Element.Event
- core/1.2.4: Request
- preloader/0.1: Preloader

provides: [Preloader.Queue]

...
*/

if (typeof Preloader == 'undefined')
{
	Preloader = {};
}

Preloader.Queue = new Class({
	'Implements': [Events, Options],
	'initialize': function(assets, options)
	{
		var self = this,
			completed = 0,
			errors = 0;
		
		self.setOptions(options);
		
		if (self.options.length)
		{
			new Request({
				'url': self.options.length,
				'onSuccess': function(text)
				{
					self.length = text;
					self.fireEvent('onLength', [text]);
				}
			}).send();
		}
		
		for (i = 0; (asset = assets[i]); i++)
		{		
			(function() {
				var reference = asset,
					preloader = new Preloader(reference);
					
				preloader.addEvents({
					'onSuccess': function(length)
					{
						completed++;
						
						self.fireEvent('onSuccess', [reference, length, self.length]);
						
						if (completed == assets.length)
						{
							self.fireEvent('onComplete', [errors]);
						}
					},								
					'onFailure': function()
					{
						errors++;
						completed++;
						
						self.fireEvent('onFailure', [reference]);
						
						if (completed == assets.length)
						{
							self.fireEvent('onComplete', [errors]);
						}
					}
				});
			})();
		}
	}
});
