// JavaScript Document

//You need an anonymous function to wrap around your function to avoid conflict
(function($){
    //Attach this new method to jQuery
    $.fn.extend({
         
        //This is where you write your plugin's name
        uploader: function(options) {
 			var defaults = {
				script : "upload.php", //relative to the server script
				loader : "img/loader.gif", //relative to the page NOT to this script
				checkmark : "img/checkmark.png", //relative to the page NOT to this script
				target : "", //Target for the returned fileupload link: _blank, _parent etc.
				coid : generateID(),
				done : function(d){} //All JSON Objects from the server are passed one by one to this function.
			}
            var opts = $.extend(defaults, options);
			var files = [];
			var div = $(this);
			var uploading = 0;
			$(window).bind("beforeunload", function(d, event){
				if(uploading > 0) alert(1);
			});
			var coid = opts.coid; //CollectionID
			return this.each(function(){
				newUpload();
				
				function newUpload(){
					var f = {
						form : $('<form class="uform" method="post" enctype="multipart/form-data" action="'+opts.script+'"></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+'" title="Datei wird hochgeladen..." alt="Datei wird hochgeladen..." />'),
						checkmark : $('<img class="ucheckmark" src="'+opts.checkmark+'" title="Datei wurde hochgeladen!" alt="Datei wurde hochgeladen!" />'),
						text : $('<span class="utext"></span>'),
						entry : $('<div class="uentry"></div>'),
						cancel : $('<a class="ucancel">Abbrechen</a>'),
						opts : {coid : coid, ajax : 1}, //1:CollectionID
						files : [], 
						selected : false
					}
					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.cancel.click(function(){
						f.form.remove();
						newUpload();
					});
					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(".uentry").remove();						
						f.form.find("br").remove();
						for(var i in f.files) {
							f.text.html(f.files[i].name);
							f.form.append(f.entry.clone());							
						}
						f.input.hide();
						f.form.append(f.submit);
						f.form.append(f.cancel);
						//window.setTimeout(function(){upload(id)}, 5000);
						//upload(id);					
					});					
					f.form.append(f.input);
					f.entry.append(f.text);
					f.form.append(f.entry);
					
					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);
					//echo(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) { 	
							var s = "s";										  						
						} else if(d[i].error) { 
							var s ="e";
							f.text.html(d[i].error);
							f.text.addClass("uerror");					
						}
						opts.done.call(this, d[i]);
					}
					if(s == "s") {
						f.form.find(".utext").after(f.checkmark.clone());
						f.form.append('<div><a target="'+opts.target+'" href="'+d[i].link+'">'+d[i].link+'</a></div>');	
					}
					f.form.find(".uloader,.ucancel").remove();	
					uploading--;				
				}
			});

			function generateID(){
				return Math.random().toString().substr(7);
			}			
        }
    });
     
//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);
