$(document).ready(function(){

	function UploadData(name, realname, delete_url, delete_type, size)
	{
		this.name = name;
		this.realname = realname;
		this.delete_url = delete_url;
		this.delete_type = delete_type;
		this.size = size;
	}

	function UploadForm()
	{
		this.form = null;
		this.txtName = null;
		this.txtEmail = null;
		this.data = [];
	}

	UploadForm.prototype = {
		init : function(){
			var self = this;
			this.form = document.forms['frmUpload'];
			this.form.onsubmit = function(){
				return self.checkSubmit()
			};
			this.txtName = this.form.elements['Name'];
			this.txtEmail = this.form.elements['EMail'];
			this.txtName.onkeypress = this.txtEmail.onkeypress = function(e){
				if (e && e.keyCode == 13){
					return false;
				}
				return true;
			};
			this.fileupload = $('#fileupload');
			this.fileupload.fileupload({
				autoUpload: true
			});
			// Enable iframe cross-domain access via redirect page:
			var redirectPage = window.location.href.replace(
				/\/[^\/]*$/,
				'/site/phptemplates/html/uploadform/js/cors/result.html?%s'
				);
			this.fileupload.bind('fileuploadsend', function(e, data){
				if (data.dataType.substr(0, 6) === 'iframe'){
					var target = $('<a/>').prop('href', data.url)[0];
					if (window.location.host !== target.host){
						data.formData.push({
							name: 'redirect',
							value: redirectPage
						});
					}
				}
			});
			this.fileupload.bind('fileuploaddone', function(e, data){
				var result = data.result;
				if (result && result.length > 0){
					result = result[0];
					if (result.success){
						self.data.push(new UploadData(result.name, result.realname,
							result.delete_url, result.delete_type, result.size));
						self.saveUploadData();
					}
				}
			});
			this.fileupload.bind('fileuploaddestroy', function(e, data){
				var re = /file=(.+)$/.exec(data.url), name, i;
				if (re && re.length > 1){
					name = re[1];
					for (i = 0, n = self.data.length; i < n ;++i){
						if (self.data[i].realname == name){
							self.data[i] = null;
							self.data.splice(i, 1);
							self.saveUploadData();
						}
					}
				}
			});

			// Open download dialogs via iframes,
			// to prevent aborting current uploads:
			this.fileupload.find('.files').delegate(
				'a:not([rel^=gallery])',
				'click',
				function (e) {
					e.preventDefault();
					$('<iframe style="display:none;"></iframe>')
					.prop('src', this.href)
					.appendTo(document.body);
				}
				);

			this.loadUploadData();
		},

		checkSubmit : function(){
			if ($.trim(this.txtName.value) == ''){
				alert("Bitte geben Sie Ihren Namen an!");
				return false;
			}
			if ($.trim(this.txtEmail.value) == ''){
				alert("Bitte geben Sie Ihre EMail Adresse an!");
				return false;
			}
			if (this.data.length == 0){
				alert("Bitte laden Sie mindestens eine Datei hoch!");
				return false;
			}
			return true;
		},

		loadUploadData : function(){
			this.data = [];
			var data = $.cookie(uploadform_cookieName);
			if (data){
				data = $.evalJSON(data);
				if (data){
					var i, d;
					for (i in data){
						d = data[i];
						if (typeof(d) == 'object'){
							if (typeof(d.name) == 'undefined' || typeof(d.realname) == 'undefined'
								|| typeof(d.delete_url) == 'undefined' || typeof(d.delete_type) == 'undefined'
								|| typeof(d.size) == 'undefined'){
								this.data = [];
								return false;
							}
							this.data.push(new UploadData(d.name, d.realname, d.delete_url, d.delete_type, d.size));
						}
					}

					var fu = $('#fileupload').data('fileupload'), template;
					fu._adjustMaxNumberOfFiles(-this.data.length);
					template = fu._renderDownload(this.data)
					.appendTo($('#fileupload .files'));
					// Force reflow:
					fu._reflow = fu._transition && template.length &&
					template[0].offsetWidth;
					template.addClass('in');
				}
			}
			return true;
		},

		saveUploadData : function(){
			$.cookie(uploadform_cookieName, $.toJSON(this.data));
		}
	};

	new UploadForm().init();
});

