jQuery.behaviors.register(function (node) {
	
	var uploadAcceptedTypes = {
		"image": ['gif', 'jpg', 'jpe', 'jpeg', 'pdf', 'png'],
		"pdf": ['pdf'],
		"archive": ['zip'],
		"document-msoffice-classic": ['doc', 'xls', 'ppt'],
		"document-msoffice-xml": ['docx', 'xlsx', 'pptx'],
		"document-msoffice-all": ['doc', 'xls', 'ppt', 'docx', 'xlsx', 'pptx'],
		"document-opendocuments": ['odt', 'ods', 'odp']
	}
	
	jQuery("a.jqUploadDialog", node).click(function(event) {
		var options = {},
			anchor = this;
		anchor.rel = "nofollow";
		options.popupAutoResize = false;
		options.popupHeight = 300;
		options.popupWidth  = 400;
		options.popupDialogClass = 'jqDialogSimple jqDialog-UploadDialog';
		
		// Création de la popup
		var popupBody = jqPopup(event.currentTarget, null, {}, function(responseText, textStatus, XMLHttpRequest) {
			
			var jForm = jQuery('form.uploadForm', this),
				form  = jForm.get(0),
				uploadParams = App.Forms.Uploads[form.id],
				jInputFileContainer = jQuery(".inputFile", this),
				inputFileContainer  = jInputFileContainer.get(0),
				jFileList = jQuery("ol.fileList", this),
				fileList  = jFileList.get(0),
				liTemplate = jQuery(".fileItemTemplate li").get(0),
				popupBody = this;
			
			form.action  = uploadParams.uploadFormAction;
			form.method  = 'POST';
			form.enctype = "multipart/form-data";

			var parseFileExtension = function(filename) {
				return filename.split('.').pop().toLowerCase()
			}
			
			var checkFileType = function(filename) {
				var fileExt = parseFileExtension(filename);
				for (var i = 0, iMax = uploadParams.uploadAcceptType.length; i < iMax; i++) {
					var type = uploadParams.uploadAcceptType[i];
					var validExtensions = uploadAcceptedTypes[type];
					for (var j = 0, jMax = validExtensions.length; j < jMax; j++) {
						if (fileExt == validExtensions[j])
							return true;
					}
				}
				return false;
			}
			
			// Ajoute un autre fichier dans la liste
			var appendFile = function(input) {
				var jFileItems = jFileList.children('li');
				
				if (jFileItems.length >= uploadParams.maxFileCount)
					return;
				
				input = input.target || appendFile;
				var frag  = document.createDocumentFragment(),
					li    = document.createElement('LI'),
					supp  = document.createElement('SPAN'),
					label = document.createElement('SPAN');
				
				var fileIsAccepted = checkFileType(input.value);
				
				// Nouveau champ de selection
				var newInput = document.createElement('INPUT');
				newInput.type	= "file";
				
				if (fileIsAccepted) {
					
					li.className = "fileEntry";
					var innerHTML = liTemplate.innerHTML;
					innerHTML = innerHTML.replace(/##filename##/g, input.value);
					innerHTML = innerHTML.replace(/##fileext##/g, parseFileExtension(input.value));
					li.innerHTML = innerHTML;
					
					li.appendChild(inputFileContainer.removeChild(input));
					input.name	= "file[]";
					input.style.display = "none";
					jQuery('input', li).each(function() { this.disabled = false; });
					frag.appendChild(li);
					
					fileList.appendChild(frag);
					
					jQuery.behaviors.apply(li);
					
				}
				else {
					alert(App.trad("Le fichier n'a pas une extension valide."));
					return;
				}
				
				if (jFileItems.length + 1 >= uploadParams.maxFileCount) {
					jInputFileContainer.parent('div').addClass('disabled');
				}
				else {
					inputFileContainer.appendChild(newInput);
					jQuery(newInput).change(appendFile);
				}
			}
			
			jQuery("input", inputFileContainer).change(appendFile);
			
			// Gestion des clics sur le popup
			jQuery(this).click(function(event) {
				var target = event.target,
					jTarget = jQuery(target);
				if (jTarget.hasClass('btnRemove')) {
					jTarget.parent('li').remove();
					var newInput = document.createElement('INPUT');
					newInput.type	= "file";
					newInput.name	= "file[]";
					inputFileContainer.appendChild(newInput);
					jInputFileContainer.parent('div').removeClass('disabled');
					jQuery(newInput).change(appendFile);
				}
			});
			
			// Gestion de la soumition des fichiers
			jForm.submit(function(event) {
				var jInputFileItems = jQuery('input[type=file]', jFileList);
				if (jInputFileItems.length < uploadParams.minFileCount) {
					alert(App.trad("Vous devez sélectionner au moins %s fichiers", uploadParams.minFileCount.toString()));
					event.stopPropagation();
					return false;
				}
				
				submitOptions = {
					beforeSubmit: function() {
						Utile.fullScreenModalAjax(true);
					},
					success: function() {
						jQuery(popupBody).dialog('close');
						jQuery.behaviors.apply(uploadParams['updateDOMIdOnSuccess']);
						Utile.fullScreenModalAjax(false);
					}
				};
				if (uploadParams['updateDOMIdOnSuccess'])
					submitOptions.target = uploadParams.updateDOMIdOnSuccess;
				jForm.ajaxSubmit(submitOptions);
				event.stopPropagation();
				return false;
				
			});
		}, options);
		event.stopPropagation();
		return false;
	})
	
});