var element_ids = new Array('', '', '', '', '');
function addToUpload()
{
    var fileTitle = document.getElementById('fileTitle');
    var fileTitle = fileTitle.value;
    if (fileTitle)
    {
        var urlIdCurrent = 'url_'	 + (multi_selector.url_id - 1);
        var urlCurrent = document.getElementById(urlIdCurrent);
        var url = urlCurrent.value;

        var fileIdCurrent = 'file_'	 + (multi_selector.id - 1);
        var fileCurrent = document.getElementById(fileIdCurrent);
        var filename = fileCurrent.value;
        if (filename)
        {
        	// extenstions allowed declared in externally
            var pregmatch = filename.match(extenstions_allowed);
            if(pregmatch)
            {
    			// New file input
    			var new_element = document.createElement( 'input' );
    			new_element.type = 'file';
                new_element.size = "29";
                new_element.className = "file_0 margin_class";

    			// Add new element
    			fileCurrent.parentNode.insertBefore( new_element, fileCurrent );

    			// Apply 'update' to element
    			fileCurrent.multi_selector.addFileElement( new_element );

    			// Update list
    			fileCurrent.multi_selector.addFileListRow( fileCurrent );

    			// Hide file: we can't use display:none because Safari doesn't like it
    			fileCurrent.style.position = 'absolute';
    			fileCurrent.style.left = '-1000px';
    		}
            else
            {
                alert("Extension not allowed.");
            }
        }
        else if (url)
        {
            // New url input
    		var new_element = document.createElement( 'input' );
    		new_element.type = 'text';
    		new_element.style.width = "200px";
    		new_element.className = "margin_class input_width";

    		// Add new element
    		urlCurrent.parentNode.insertBefore( new_element, urlCurrent );

    		// Apply 'update' to element
    		urlCurrent.multi_selector.addUrlElement( new_element );

    		// Update list
    		urlCurrent.multi_selector.addUrlListRow( urlCurrent );

    		// Hide urlCurrent: we can't use display:none because Safari doesn't like it
    		urlCurrent.style.position = 'absolute';
    		urlCurrent.style.left = '-1000px';
        }
        else
        {
            alert("Please select file or enter url.");
        }
    }
    else
    {
        alert("Please enter file title.");
    }
}

function extractFileName(fullpath)
{
    var maxlength = 40;
    if (fullpath.length > maxlength)
        return '...' + fullpath.substring(fullpath.length - maxlength - 3, fullpath.length);
    else
        return fullpath;
}

function removefile(el)
{
    // Remove element from form
    el.parentNode.element.parentNode.removeChild(el.parentNode.element);

    // Remove this row from the list
    el.parentNode.parentNode.removeChild(el.parentNode);

    // Decrement counter
    el.parentNode.element.multi_selector.count--;

    // Re-enable input element (if it's disabled)
    el.parentNode.element.multi_selector.current_file_element.disabled = false;
    el.parentNode.element.multi_selector.current_url_element.disabled = false;

    // Appease Safari
    //    without it Safari wants to reload the browser window
    //    which nixes your already queued uploads
    return false;
}

function showElementIds()
{
    var elements = '';
    for (var i = 0; i < 5; i++)
    {
        var element = document.getElementById(element_ids[i]);
        var elementValue = '';
        if (element)
        {
            elementValue = element.value;
        }
        elements += (i + ': ' + element_ids[i] + ' - ' + elementValue + "\n");
    }
    alert (elements);
}

function remove(rowId)
{
    var element = document.getElementById(element_ids[rowId]);
    if (element)
    {
        element.parentNode.removeChild(element);
        element_ids[rowId] = '';

        // Decrement counter
        multi_selector.count--;

        // Re-enable input element (if it's disabled)
        multi_selector.current_file_element.disabled = false;
        multi_selector.current_url_element.disabled = false;
        var addToUploadButton = document.getElementById('addToUploadButton');
        addToUploadButton.disabled = false;

        for (var rowIdCurrent = rowId; rowIdCurrent < 5; rowIdCurrent++)
        {
            var filenameCurrent = document.getElementById('filename_' + rowIdCurrent);
            var titleCurrent = document.getElementById('title_' + rowIdCurrent);
            var tagsCurrent = document.getElementById('tags_' + rowIdCurrent);

            var filenameNext = document.getElementById('filename_' + (rowIdCurrent + 1));
            var titleNext = document.getElementById('title_' + (rowIdCurrent + 1));
            var tagsNext = document.getElementById('tags_' + (rowIdCurrent + 1));

            filenameCurrent.value = '';
            titleCurrent.value = '';
            titleCurrent.name = '';
            tagsCurrent.value = '';
            tagsCurrent.name = '';

            if (titleNext && titleNext.name.length > 0)
            {
                filenameCurrent.value = filenameNext.value;

                titleCurrent.value = titleNext.value;
                titleCurrent.name = titleNext.name;

                tagsCurrent.value = tagsNext.value;
                tagsCurrent.name = tagsNext.name;

                var fileTypeNext = titleNext.name.replace(/_title_\d{1}/i, '');
                element_ids[rowIdCurrent] = fileTypeNext + '_' + parseInt(titleNext.name.replace(/.*title_/, ''));
                element_ids[rowIdCurrent + 1] = '';
            }

        }
    }
}

function MultiSelector( list_target, max ){

	// Where to write the list
	this.list_target = list_target;
	// How many elements?
	this.count = 0;
	// How many file elements?
	this.id = 0;
	// How many url elements?
	this.url_id = 0;
	// Is there a maximum?
	if( max ){
		this.max = max;
	} else {
		this.max = -1;
	};

	/**
	 * Add a new file input element
	 */
	this.addFileElement = function( element ){

		// Make sure it's a file input element
		if( element.tagName == 'INPUT' && element.type == 'file' )
		{
			// Element name -- what number am I?
			element.tag = this.id++;
			element.id = 'file_' + element.tag;

			// Add reference to this object
			element.multi_selector = this;

			// If we've reached maximum number, disable input element
			if( this.max != -1 && this.count >= this.max ){
				element.disabled = true;
				this.current_url_element.disabled = true;
				var addToUploadButton = document.getElementById('addToUploadButton');
                addToUploadButton.disabled = true;
			};

			// File element counter
			this.count++;
			// Most recent element
			this.current_file_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.addFileListRow = function( element ){
		var rowId = (this.count - 3);
		var fileId = (this.id - 2);

		element.name = 'file_' + fileId;

		var filename = document.getElementById('filename_' + rowId);
		filename.value = element.value;

		var fileTitle = document.getElementById('fileTitle');

		var title = document.getElementById('title_' + rowId);
		title.value = fileTitle.value;
		title.name = 'file_title_' + fileId;

		var fileTags = document.getElementById('fileTags');

		var tags = document.getElementById('tags_' + rowId);
		tags.value = fileTags.value;
		tags.name = 'file_tags_' + fileId;

		element_ids[rowId] = 'file_' + fileId;
	};

	/**
	 * Add a new text input element
	 */
	this.addUrlElement = function( element ){

		// Make sure it's a text input element
		if( element.tagName == 'INPUT' && element.type == 'text' ){

			// Element name -- what number am I?
			element.tag = this.url_id++;
			element.id = 'url_' + element.tag;

			// Add reference to this object
			element.multi_selector = this;

			// If we've reached maximum number, disable input element
			if( this.max != -1 && this.count >= this.max ){
				element.disabled = true;
				this.current_file_element.disabled = true;
				var addToUploadButton = document.getElementById('addToUploadButton');
                addToUploadButton.disabled = true;
			};

			// File element counter
			this.count++;
			// Most recent element
			this.current_url_element = element;

		} else {
			// This can only be applied to file input elements!
			alert( 'Error: not a text input element' );
		};

	};

	/**
	 * Add a new row to the list of files
	 */
	this.addUrlListRow = function( element ){
		var rowId = (this.count - 3);
		var urlId = (this.url_id - 2);
		element.name = 'url_' + urlId;

		var filename = document.getElementById('filename_' + rowId);
		filename.value = element.value;

		var fileTitle = document.getElementById('fileTitle');

		var title = document.getElementById('title_' + rowId);
		title.value = fileTitle.value;
		title.name = 'url_title_' + urlId;

		var fileTags = document.getElementById('fileTags');

		var tags = document.getElementById('tags_' + rowId);
		tags.value = fileTags.value;
		tags.name = 'url_tags_' + urlId;

		element_ids[rowId] = 'url_' + urlId;
	};

};