songcentral.uploader=Class.create
(
	s3core.uploader,
	{
		initialize: function($super,config)
		{
			var defaultConfig=
			{
				instance:					'filedata',
				container:					'songForm',
				button:						'doUpload',
				initialStatusCheckDelay:	10,
				statusCheckDelay:			3,
				listeners:
				{
					'on:select': function()
					{
						this.onSelect();
						return;
					},
					'on:upload': function()
					{
						if (!this.config.instance.present())
						{
							alert('Please select a song to upload.');
						}
						else
						{
							this.onUpload();
						}
						return;
					},
					'on:waiting': function()
					{
						this.onWaiting();
						return;
					},
					'on:complete': function(response)
					{
						this.onComplete(response);
						return;
					},
					'on:error': function(response)
					{
						this.onError(response);
						return;
					}
				}
			};
			Object.extend(defaultConfig.listeners,config.listeners);
			Object.extend(config,defaultConfig);
			$super(config);
			this.config.button.disabled=true;
			this.config.button.removeClassName('actionBtn');
			return;
		},
		onSelect: function()
		{
			this.config.button.addClassName('actionBtn');
			this.config.button.disabled=false;
			return;
		},
		onUpload: function()
		{
			$('upload_indicator').show();
			this.config.button.hide();
			return;
		},
		onWaiting: function()
		{
			return;
		},
		onComplete: function(response)
		{
			$('upload_indicator').hide();
			if (response.status==2)
			{
				if($('uploadResponseErrors')) $('uploadResponseErrors').update('&nbsp;');
				$('songfile_upload_fields').replace('<p class="message"><b>Uploading has completed successfully</b>.</p><p class="note">Click &ldquo;Next&rdquo; to continue.</p>');
			}
			else
			{
				this.config.button.show();
				//Display returned message.
				if($('uploadResponseErrors')) $('uploadResponseErrors').update(response.message);
				this.handleFormVars(response);
			}
			this.handleFormVars(response);
			return;
		},
		onError: function(response)
		{
			$('upload_indicator').hide();
			//Display returned message.
			if($('uploadResponseErrors')) $('uploadResponseErrors').update(response.message);
			if (response.status=-2) //...then has uploaded successfully but was invalid file.
			{
				this.config.button.show();
				this.handleFormVars(response);
			}
			return;
		},
		handleFormVars: function(response)
		{
			if (!Object.isUndefined(response.formVars))
			{
				for (var field in response.formVars)
				{
					if ($(field)!=null && response.formVars[field].length) // && !$(field).present())
					{
						if (field=='version_length')
						{
							if ($(field).disabled) $(field).disabled=false; //...so will get posted.
							$(field).value=response.formVars[field];
							if (/^\d+:\d+$/.test($F(field))) $(field).value = '0:'+$F(field);
							$(field).readOnly=true; //...so that user can't change value.
						}
						else if (!$(field).disabled)
						{
							$(field).value=response.formVars[field];
							$(field).fire('on:valueChange');
						}
					}
				}
			}
			return;
		}
	}
);