/**
 * Convert a single input element into a "multiple" input list
 */
function MultiSelector( list_target, max_items, item_type, name ){

	// Where to write the list
	this.list_target = list_target;
	// Type of the input
	this.item_type = item_type;
	// Name to use for new entries
	this.name = name;
	// How many elements?
	this.count = 0;
	// How many elements?
	this.id = 0;
	// Is there a maximum?
	if( max_items ){
		this.max_items = max_items;
	} else {
		this.max_items = -1;
	};
	
	/**
	 * Add a new file input element
	 */
	this.addElement = function( element ){

		// Make sure it"s the correct input type
		if( element.tagName == "INPUT" && element.type == this.item_type ){

			// Element name -- what number am I?
			this.id++;
			element.name = this.name+"[]";

			// Add reference to this object
			element.multi_selector = this;

			// What to do when a file is selected
			element.onchange = function(){

				// New input
				var new_element = document.createElement( "input" );
				new_element.type = this.multi_selector.item_type;

				// Add new element
				this.parentNode.insertBefore( new_element, this );

				// Apply "update" to element
				this.multi_selector.addElement( new_element );

				// Update list
				this.multi_selector.addListRow( this );

				// Hide this: we can"t use display:none because Safari doesn"t like it
				this.style.position = "absolute";
				this.style.left = "-1000px";

			};
			// If we"ve reached maximum number, disable input element
			if( this.max_items != -1 && this.count >= this.max_items ){
				element.disabled = true;
			};

			// File element counter
			this.count++;
			// Most recent element
			this.current_element = element;
			
		} else {
			// This can only be applied to text input elements!
			alert( "Error: not the correct element type. Element Type:"+element.type+" Needs to be:"+this.item_type);
		};

	};

	/**
	 * Add a new row to the list of inputs
	 */
	this.addListRow = function( element ){

		// 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;

			// Appease Safari
			//    without it Safari wants to reload the browser window
			//    which nixes your already queued uploads
			return false;
		};

		// Set row value
		new_row.innerHTML = element.value;

		// Add button
		new_row.appendChild( new_row_button );

		// Add it to the list
		this.list_target.appendChild( new_row );
		
	};

};