function MultiSelector( list_target, max ){
	
		// Where to write the list
		this.list_target = list_target;
		// How many elements?
		this.count = 0;
		// Is there a maximum?
		if( max ){
			this.max = max;
		} else {
			this.max = -1;
		};
	
		/**
		 * Add a new file input element
		 */
		this.addElement = function( element ){
	
			// Make sure it's a file input element
			if( element.tagName == 'INPUT' && element.type == 'file' ){
	
				// Element name -- what number am I?
				element.name = element.name + '_' + this.count;
	
				// Add reference to this object
				element.multi_selector = this;
	
				// What to do when a file is selected
				element.onchange = function(){
	
					// New file input
					var new_element = document.createElement( 'input' );
					new_element.type = 'file';
					new_element.size = '30';
					
					var name = this.name;
					var name_split = name.split("_");
					name = name_split[0];
					
					new_element.name = name;
	
					// Add new element
					this.parentNode.insertBefore( new_element, this );
	
					// Apply 'update' to element
					this.multi_selector.addElement( new_element );
	
					// Hide this
					this.style.display = 'none';
	
					// Update list
					this.multi_selector.addListRow( this );
				};
				// If we've reached maximum number, disable input element
				if( this.max != -1 && this.count >= this.max ){
					element.disabled = true;
				};
	
				// File element counter
				this.count++;
				// Most recent element
				this.current_element = element;
	
			} else {
				// This can only be applied to file input elements!
				alert( 'Error: not a file input element' );
			};
		};
	
		/**
		 * Add a new row to the list of files
		 */
		this.addListRow = function( element ){
		
			if (document.getElementById('queued_none')){ hidediv('queued_none'); }
			
			// Row div
			var new_row = document.createElement( 'div' );
	
			// Delete button
			var new_row_button = document.createElement( 'input' );
			new_row_button.type = 'button';
			new_row_button.value = 'Delete';
	
			// References
			new_row.element = element;
	
			// Delete function
			new_row_button.onclick= function(){
				// Remove element from form
				this.parentNode.element.parentNode.removeChild( this.parentNode.element );
				// Remove this row from the list
				this.parentNode.parentNode.removeChild( this.parentNode );
				// Decrement counter
				this.parentNode.element.multi_selector.count--;
				// Re-enable input element (if it's disabled)
				this.parentNode.element.multi_selector.current_element.disabled = false;
				// hide queuedfiles if there are none
				if (this.parentNode.element.multi_selector.count == 1){
					if (document.getElementById('queued_none')){ showdiv('queued_none'); }
					if (document.getElementById('files_list')){ hidediv('files_list'); }
					if (document.getElementById('photos_list')){ hidediv('photos_list'); }
				}
			};
	
			// Set row value
			
			// get just the last part of the path
			var filename = element.value;
			var filename_split = Array();
			filename_split = filename.split("\\");
			if (filename_split.length > 0){
				var lastpos = filename_split.length - 1;
				filename = filename_split[lastpos];
			} else {
				filename = element.value;	
			}
			
			new_row.innerHTML = filename + "&nbsp;";
			
			// Add button
			new_row.appendChild( new_row_button );
			
			//new_row.innerHTML = new_row.innerHTML + "FOO<br>";
	
			// Add it to the list
			this.list_target.style.display = 'block';
			this.list_target.appendChild( new_row );
			
			if (document.getElementById('files_list')){ showdiv('files_list'); }
		};
	
	};
