
YUI().use('node', 'dump', 'io-base', 'json', /*'yui2-uploader',*/ function(Y)
{
	/*var YAHOO = Y.YUI2;*/

	var urls = Uploader.URLs;

	YAHOO.widget.Uploader.SWFURL = "/js/uploader.swf";

	Uploader.factory = function(o)
	{
		var that = this,
			URLs = urls,
			uploader = null,
			container = null,
			overlay = null,
			facade = null,
			input = null,
			fileId = null,
			filename = null,
			tempField = null,
			isUpdatedField = null,
			filenameField = null,
			progressDiv = null,
			progressBar = null;

		var init = function(container)
		{
			tempField = container.one('.tmp-name');
			filenameField = container.one('.name');
			isUpdatedField = container.one('.is-updated');
			facade = container.one('.uploader-facade');
			overlay = container.one('.uploader-overlay');
			progressDiv = container.one('.uploader-progress');
			progressBar = progressDiv.one('.uploader-progress-bar');
			setPositions();
			addSwf();

			Y.log('Uploader init finished');
		};

		var setPositions = function()
		{
			var region = facade.get('region');
				
			overlay.setStyle('width', region.width+'px');
			overlay.setStyle('height', region.height+'px');

			var region = filenameField.get('region');

			progressDiv.setStyle('width', region.width+'px');
			progressDiv.setStyle('height', region.height+'px');
			progressBar.setStyle('height', region.height+'px');
		};

		var contentReady = function()
		{
			Y.log('uploader ready!');

			uploader.setAllowMultipleFiles(false);
			
			uploader.setFileFilters([{
				description:	'MS Word',
				extensions:		'*.doc;*.docx'
			}]);
		};

		var rollOver = function() 
		{

		};

		var rollOut = function()
		{
			
		};

		var click = function()
		{
			Y.log('uploader clicked');
		};

		var send = function(e)
		{
			Y.log('uploader send: '+URLs.upload);

			if(fileId != false)	{
				uploader.upload(
					fileId,
					URLs.upload,
					'POST'
				);
			}
		};

		var fileSelect = function(event)
		{
			Y.log('uploader file select');

			for(var file in event.fileList)	{
				if(YAHOO.lang.hasOwnProperty(event.fileList, file))	{
					fileId = event.fileList[file].id;
					filenameField.set('value', event.fileList[file].name);
					isUpdatedField.set('value', 'yes');
					Y.log('Found file to upload: '+event.fileList[file].name);
				}
			}

			send({});
		};

		var start = function(event)
		{
			Y.log('Starting upload...');

			progressDiv.addClass('active');
			progressBar.one('p').set('innerHTML', 'Uploading...');
		};

		var progress = function(event)
		{
			var prog = Math.round(100*(event['bytesLoaded']/event['bytesTotal']));

			progressBar.setStyle('width', prog+'%');

			if(prog == 100)
				Y.log('Processing image...');
			else
				Y.log(prog + '% uploaded...');
		};

		var complete = function(event)
		{
			progressDiv.addClass('finished');
			progressBar.one('p').set('innerHTML', 'Upload Finished');

			Y.later(2000, that, function()
			{				
				progressDiv.removeClass('active');
				progressDiv.removeClass('finished');
				progressBar.setStyle('width', '0%');

			});

			Y.log('Upload complete.');
		};

		var error = function(event)
		{
			Y.log('Upload error.');
		};

		var cancel = function(event)
		{
			Y.log('Upload cancelled.');
		};

		var response = function(event)
		{
			Y.log('uploaderResponse');

			var data = event.data;
			Y.log('Response: '+data);

			var files = Y.JSON.parse(event.data);

			tempField.set('value', files.join(','));
		};

		var addSwf = function()
		{
			Y.log('uploader addSwf: '+overlay.get('id'));

			uploader = new YAHOO.widget.Uploader(overlay.get('id'));

			uploader.addListener('contentReady', contentReady);
			uploader.addListener('fileSelect', fileSelect)
			uploader.addListener('uploadStart', start);
			uploader.addListener('uploadProgress', progress);
			uploader.addListener('uploadCancel', cancel);
			uploader.addListener('uploadComplete', complete);
			uploader.addListener('uploadCompleteData', response);
			uploader.addListener('uploadError', error);
			uploader.addListener('rollOver', rollOver);
			uploader.addListener('rollOut', rollOut);
			uploader.addListener('click', click);
			fileId = false;
		};

		init(o);
	};

	Y.on('domready', function()
	{
		Y.all('.yui-uploader').each(function()
		{
			new Uploader.factory(this)
		});
	})
});
