// JavaScript Document

(function($){
    $.fn.extend({
         
        uiaa: function(url, funktion, start, done, options) {
			var defaults = {
				loader : "img/loader.gif", //relative to the page NOT to this script
				server_function : funktion,
				trigger : "click",
				url: url,
				method : "POST",
				start:start,//must return an object of parameters else there ain't no ajax request.
				params:{}, //an object with parameters which is passed to the start function
				done:done
			}
            var opts = $.extend(defaults, options);
			
			return this.each(function(){
				var el = $(this);
				var it = this;
				var caption = el.html();
				el.bind(opts.trigger, function(){					
					var p = opts.start.call(this, opts.params);					
					if(typeof(p) != "object") return;
					p.action = opts.server_function;
					p.ajax = 1;			
					$.ajax({
					  type: opts.method,
					  url: opts.url, //relative
					  data: p,
					  success: function(d){
						  el.html(caption);
						  opts.done.call(it, d);
					  }
					});
					el.html('<img src="'+opts.loader+'" alt="..." />');
				});	
				
				function newUpload(){
					var f = {
						form : $('<form class="uform" method="post" enctype="multipart/form-data" action="upload.php"></form>'),
						input: $('<input multiple="multiple" class="ufile" size="27" type="file" />'),
						frame : $('<iframe class="uframe uhidden" src=""></iframe>'),
						button : $('<a class="ubutton" href="javascript:;">Datei(en) auswählen...</a>'),
						submit : $('<input class="usubmit" name="send_file" value="Upload!" type="submit" />'),
						loader : $('<img class="uloader" src="'+opts.loader+'" alt="Datei wird hochgeladen..." />'),
						text : $('<span class="utext"></span>'),
						opts : {coid : coid, ajax : 1}, //1:CollectionID
						files : []
					}
					for(var i in f.opts) f.form.append('<input type="hidden" name="'+i+'" value="'+f.opts[i]+'" />');
					var id = generateID();
					f.form.attr("id", id);
					f.form.attr("target", "fr"+id);
					f.frame.attr("name", "fr"+id);
					f.frame.attr("id", "fr"+id);
					f.frame.attr("upid", id);
					f.frame.load(function(){
						$(this).load(function(){
							uploadDone($(this).attr("upid"));
						});
					});
					f.input.attr("name", id+"[]");
					f.input.change(function(){							
						var files = f.input.get(0).files;
						if(files !== undefined){
							for(var i in files){
								if(typeof(files[i].fileName) == "string")  {
									files[i].id = generateID();
									f.files.push(files[i]);
								}
							}
						} else f.files.push({name:f.input.val(),id:generateID()});
						f.form.find(".utext").remove();
						for(var i in f.files) {
							f.form.append("<br />");
							f.text.html(f.files[i].name);
							f.form.append(f.text.clone());							
						}
						f.form.append("<br />");
						f.form.append(f.submit);
						//window.setTimeout(function(){upload(id)}, 5000);
						//upload(id);					
					});					
					f.form.append(f.input);
					f.form.append(f.text);
					
					f.form.append(f.frame);
					f.submit.attr("upid", id);	
					f.submit.click(function(){
						upload($(this).attr("upid"));
					});																			
					div.append(f.form);
					files[id] = f;					
				}
				
				function upload(id){
					var f = files[id];
					files[id].name = f.name = f.input.val();
					if(!f.name) return false;					
					f.input.hide();
					f.submit.hide();
					f.form.find(".utext").after(f.loader.clone());
					//f.text.html(f.name);
					uploading++;
					newUpload();
				}
				
				function uploadDone(id){				
					var f = files[id];
					var r = frames[f.frame.attr("id")].document.getElementsByTagName("body")[0].innerHTML;					
					//alert(r);
					if(r.match(/}{/)) {
						r = r.replace(/}{/g, "}}{{");
						//alert(r);
						r = r.split("}{");
						var d = [];
						for(var i in r) {
							//alert(r[i]);
							d.push( eval("("+r[i]+")") );	
						}
					} else
					var d = [eval("("+r+")")];
					for(var i in d) {			
						if(d[i].success) { 					
							f.form.find(".utext:gt(0)").remove();
						  	f.form.find(".utext:first").html(d[i].success.replace(/\n/,"<br />")+' <a href="'+d[i].link+'">'+d[i].link+'</a>');
							f.text.addClass("usuccess");
						} else if(d[i].error) { 
							f.text.html(d[i].error);
							f.text.addClass("uerror");						
						}
					}
					f.form.find(".uloader").remove();	
					f.form.find("br").remove();	
					uploading--;				
				}
			});

			function generateID(){
				return Math.random().toString().substr(10);
			}			
        }
    });
     
//pass jQuery to the function,
//So that we will able to use any valid Javascript variable name
//to replace "$" SIGN. But, we'll stick to $ (I like dollar sign: ) )      
})(jQuery);
