Prado.WebUI.TActiveFileUpload = Base.extend(
{
	constructor : function(options)
	{
		this.options = options || {};
		Prado.WebUI.TActiveFileUpload.register(this);

		this.input = $(options.inputID);
		this.flag = $(options.flagID);
		this.form = $(options.formID);

		this.indicator = $(options.indicatorID);
		this.complete = $(options.completeID);
		this.error = $(options.errorID);

		Prado.Registry.set(options.inputID, this);

		// set up events
		if (options.autoPostBack){
			Event.observe(this.input,"change",this.fileChanged.bind(this));
		}
	},

	fileChanged : function(){
		// show the upload indicator, and hide the complete and error indicators (if they areSn't already).
		this.flag.value = '1';
		this.complete.style.display = 'none';
		this.error.style.display = 'none';
		this.indicator.style.display = '';

		// set the form to submit in the iframe, submit it, and then reset it.
		this.oldtargetID = this.form.target;
		this.form.target = this.options.targetID;
    this.oldformAction = this.form.action;
    this.form.action += '?MTActiveFileUpload_Input_ID='+this.options.inputID+'&MTActiveFileUpload_Target_ID='+this.options.targetID;
		this.form.submit();
		this.form.target = this.oldtargetID;
    this.form.action = this.oldformAction;
	},

	finishUpload : function(options){
		// hide the display indicator.
		this.flag.value = '';
		this.indicator.style.display = 'none';
		if (this.options.targetID == options.targetID){
			// show the complete indicator.
			if (options.errorCode == 0){
				this.complete.style.display = 'none'; // Hack JB
				this.input.value = '';
			} else {
				this.error.style.display = 'none'; // Hack JB
			}
			Prado.Callback(this.options.EventTarget, options, null, this.options);
		}
	}
},
{
// class methods
	controls : {},

	register : function(control)
	{
		Prado.WebUI.TActiveFileUpload.controls[control.options.ID] = control;
	},

	onFileUpload : function(options)
	{
		Prado.WebUI.TActiveFileUpload.controls[options.clientID].finishUpload(options);
	},

	fileChanged : function(controlID){
		Prado.WebUI.TActiveFileUpload.controls[controlID].fileChanged();
	}
});

