function DocumentUploader(container, id, name) {
	this.name = name;
	this.id = id;
	this.documents = {};
	this.submitted = null;
	
	var self = this;
	
	var onAllSuccess = function() {
		$('#ajaxLoader').hide();
		
		if (self.submitted) {
			Profiles[self.name + self.id].validate();
		}
		self.submitted = false;
	};
	
	var onSuccess = function(fileRef, fileInfo) {
		var id = fileInfo.document_id;
		var idElt = document.createElement('input');
		idElt.type = 'hidden';
		idElt.name = self.name + '[' + self.id + '][document_ids][]';
		idElt.value = id;
		$('#' + self.name + self.id).append(idElt);
		
		self.documents[id] = idElt;
		
		fileRef.setFilename(fileInfo.name);
	};
	
	var onFailure = function(fileRef, fileInfo){
		fileRef.remove();
		alert('An error occured while uploading self file. The file might be too big');
		$('#ajaxLoader').hide();
		self.submitted = false;
	};
	
	var onLoading = function(fileRef){
		$('#' + self.name + self.id + ' div.submit a.save').each(function() {
			this.onclick = function() {
				if (self.submitted == null)
					self.autoSubmit();
				else if (self.submitted == false)
					Profiles[self.name + self.id].validate();
				return false;
			}
		});
	};
	
	var onRemove = function(fileInfo){
		if (fileInfo) {
			ajax('/document/delete/ajax/true/id/' + fileInfo.document_id);
			var input = self.documents[fileInfo.document_id];
			input.parentNode.removeChild(input);
		}
	};
	
	this.uploader = new INTRIGO.Uploader(container, '/document/upload/ajax/true/profileName/' + name + '/id/' + id);
	this.uploader.setLoadingFunction(onLoading).setSuccessFunction(onSuccess).setGlobalSuccessFunction(onAllSuccess).setErrorFunction(onFailure).setRemoveFunction(onRemove)
	
	return this;
}
DocumentUploader.prototype = {
	autoSubmit: function() {
		if (!this.submitted) {
			this.submitted = true;
			$('#ajaxLoader').show();
		}
	},
	
	getUploader: function() {
		return this.uploader;
	}
};