/*
	Upload v2.2 2010-03-27

	Made in Imperavi. All rights reserved.

	http://www.imperavi.com

	Code is released under a GNU General Public Licens http://www.opensource.org/licenses/gpl-license.php
*/
var Upload = Class.extend({
	init: function(element, options)
	{
		/*
			Options
		*/
		this.options = {
			url: false,
			success: false,
			start: false,
			trigger: false,
			auto: false,
			input: false
		}
  
		$.extend(this.options, options);

		/*
			Test input or form
		*/		
		if ($('#' + element).get(0).tagName == 'INPUT')
		{
			this.options.input = $('#' + element);
			this.element = $($('#' + element).get(0).form);
		}
		else
		{
			this.element = $('#' + element);
		}
		

		this.element_action = this.element.attr('action');

		/*
			Auto or trigger
		*/
		if (this.options.auto)
		{
			this.element.submit(function(e) { return false; });
			this.submit();
		}
		else if (this.options.trigger)
		{
			$('#' + this.options.trigger).click(function() { this.submit(); }.bind(this)); 
		}
	},
	submit : function()
	{
		this.form(this.element, this.frame());
	},	
	frame : function()
	{	
		this.id = 'f' + Math.floor(Math.random() * 99999);
	
		var d = document.createElement('div');
		var iframe = '<iframe style="display:none" src="about:blank" id="'+this.id+'" name="'+this.id+'"></iframe>';
		d.innerHTML = iframe;
		document.body.appendChild(d);

		/*
			Start
		*/
		if (this.options.start) this.options.start();

		$('#' + this.id).load(function () { this.loaded() }.bind(this));

		return this.id;
	},
	form : function(f, name)
	{
		if (this.options.input)
		{
			var formId = 'jUploadForm' + this.id;
			var fileId = 'jUploadFile' + this.id;
			this.form = $('<form  action="' + this.options.url + '" method="POST" target="' + name + '" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');	

			var oldElement = this.options.input;
			var newElement = $(oldElement).clone();
			$(oldElement).attr('id', fileId);
			$(oldElement).before(newElement);
			$(oldElement).appendTo(this.form);
			$(this.form).css('position', 'absolute');
			$(this.form).css('top', '-1200px');
			$(this.form).css('left', '-1200px');
			$(this.form).appendTo('body');	
			
			this.form.submit();
		}
		else
		{
			f.attr('target', name);
			f.attr('method', 'POST');
			f.attr('enctype', 'multipart/form-data');		
			f.attr('action', this.options.url);

			this.element.submit();
		}

	},
	loaded : function()
	{
	
		var i = $('#' + this.id);
		
		if (i.contentDocument) var d = i.contentDocument;
		else if (i.contentWindow) var d = i.contentWindow.document;
		else var d = window.frames[this.id].document;

		if (d.location.href == "about:blank") return true;



		/*
			Success
		*/
		this.options.success(d.body.innerHTML);

		this.element.attr('action', this.element_action);
		this.element.attr('target', '');
		this.element.unbind('submit');
		
		if (this.options.input) $(this.form).remove();
	}

})


