function getDocumentSelector(documentid)
{
	var data = raw_documents[documentid];
	var format_list = [ createDOMNode('option', {"value" : ''}, [getText('doclib', 'original')]) ];

	if(typeof formats != "undefined")
	{
		for(var i=0; i < formats.length;i++)
		{
			format_list[i+1] = createDOMNode('option', {"value" : formats[i][0]}, [formats[i][0]+ ' (' + formats[i][1][0] + 'x' + formats[i][1][1] + ')']);
		}
	}

	var insert_as = [
		createDOMNode('dt', {}, [getText('doclib', 'insert_as')]),
		createDOMNode('dd', {}, [
			createDOMNode('input', {"value" : 'image', "name" : 'as', "type" : 'radio', "id" : 'as_image_'+documentid+'_image', 'checked' : 'checked'}, []),
			createDOMNode('label', {'for' : 'as_image_'+documentid+'_image'}, [getText('doclib', 'insert_as_image')]),
			createDOMNode('input', {"value" : 'text', "name" : 'as', "type" : 'radio', "id" : 'as_text_'+documentid+'_image'}, []),
			createDOMNode('label', {'for' : 'as_text_'+documentid+'_text'}, [getText('doclib', 'insert_as_text')])
		] )
	];

	var insert_as_link = [
		createDOMNode('dt', {}, [getText('doclib', 'insert_as_link')]),
		createDOMNode('dd', {},
			[
				createDOMNode('input', {"value" : 'link', "name" : 'link', "type" : 'checkbox', "id" : 'link_'+documentid}, []),
				createDOMNode('label', {'for' : 'link_'+documentid}, [getText('doclib', 'insert_as_thumb')])
			]
		)
	];

	var format = [
		createDOMNode('dt', {}, [getText('doclib', 'format')]),
		createDOMNode('dd', {},
			[
				createDOMNode('select', {"name" : 'format', "id" : 'format_'+documentid}, format_list)
			])
	];

	var align = [
		createDOMNode('dt', {}, [getText('doclib', 'outline')]),
		createDOMNode('dd', {},
		[
			createDOMNode('select', {"name" : 'float', "id" : 'float_'+documentid},
			[
				createDOMNode('option', {"value" : ''}, [getText('doclib', 'none')]),
				createDOMNode('option', {"value" : 'left'}, [getText('doclib', 'left')]),
				createDOMNode('option', {"value" : 'right'}, [getText('doclib', 'right')])
			]),
		])
	];

	var insert = [
		createDOMNode('dt', {}, [getText('doclib', 'insert')]),
		createDOMNode('dd', {},
		[
			createDOMNode('input', {"value" : getText('doclib', 'insert_image'), "type" : 'submit'}, []),
		])
	];

	var preview_img = createDOMNode('img', {"id" : 'image_preview', "src" : data[0] + 'square'}, []);

	if (data[5] == '1')
	{
		/* If the document is remote and doesn't have an alternative icon. Don't show the image
	 	 * related form elements */
		if (data[6] != '1')
		{
			format = [];
			align = [];
			preview_img = document.createTextNode('');
		}
		else
		{
			insert_as_link[1].childNodes[0].disabled = true;
			insert_as_link[1].childNodes[0].checked = true;
			insert_as_link[1].childNodes[0].defaultChecked = true;
		}
	}

	var form_combined = insert_as.concat(insert_as_link, format, align, insert);

	form_combined = form_combined.concat(insert_as_link);
	form_combined = form_combined.concat(format);
	form_combined = form_combined.concat(align);
	form_combined = form_combined.concat(insert);

	var form =
		createDOMNode('div', {"id" : "document-selector"},
		[
			createDOMNode('h3', {"id" : 'insert_image'}, [getText('doclib', 'insert_image')]),
			preview_img,
			createDOMNode('form', {"method" : 'POST', "action" : board_script_url, "event" : ['submit', copy2rml]},
			[
				createDOMNode('fieldset', {},
				[
					createDOMNode('input', {"value" : documentid, "name" : 'documentid', "type" : 'hidden'}, []),
					createDOMNode('input', {"value" : data[0], "name" : 'url', "type" : 'hidden'}, []),
					createDOMNode('input', {"value" : data[1], "name" : 'key', "type" : 'hidden'}, []),
					createDOMNode('input', {"value" : data[2], "name" : 'libraryid', "type" : 'hidden'}, []),
					createDOMNode('input', {"value" : '', "name" : 'alt', "type" : 'hidden'}, []),
					createDOMNode('input', {"value" : data[4], "name" : 'filename', "type" : 'hidden'}, []),

					createDOMNode('dl', {}, form_combined)
				])
			])
		]);

	return form;
};

function doclibInteraction()
{
	switch(board_action)
	{
		case 'edit_document':
			addEventToTargets(null, 'click', modifyThumbnail, 'img[longdesc]');
		break;

		case 'list_documents_small':
			var links = new DOMQuery('a[href*="list_documents"]');

			for(var i = 0, link;(link = links.get(i));i++)
			{
				if(isIE)
				{
					/*
						IE checks if the link's firstChild.nodeValue equals a "valid" url,
						if so it will swap it's value with the newly set href.

						IE considers http://, https://, ftp:// and ^www. as "valid"

						IE should really die.
					*/
					if( link.firstChild.nodeValue.match(/^(((ftp|https?):\/\/)|(www\.))/) )
					{
						link.appendChild(createDOMNode('span', {'class' : 'dummy'}, []));
					}
				}

				link.href = link.href.toString().replace(/list_documents/, 'list_documents_small');
			}

			addEventToTargets(null, 'click', doclibImageClick, 'div.document');

		//FALLTHROUGH
		case 'list_documents':
			addEventToTargets(null, 'click', selectAllDocuments, 'input#select_all_documents');
			if(board_action == 'list_documents')
				addEventToTargets(null, 'click', selectDocument, 'div.document img, body.list_documents div.document li.select input');
		break;
	}

	/* yes, it's doubtfull wether this is the best place... */
	var items = new DOMQuery('ol.messages a.doclib');
	for(var i = 0, item; (item = items.get(i)); i++)
	{
		addEvent(item, 'click', function(e) { window.open(this.href, 'popupdoclib'); e.preventDefault(); } );
	}
};


/*
	this function can be called in 3 ways:
	- by the checkbox itself
	- by a click on the image
	- by selectAllDocuments()
*/
function selectDocument(obj)
{
	var callingElement = this.tagName ?  this : obj, checkbox;
	var container = getSiblingNode(callingElement, 'up', 'div');

	/* if it's not the checkbox itself who's calling us, toggle it */
	if ( callingElement.tagName.toLowerCase() != 'input' )
	{
		checkbox = new DOMQuery('input[type=checkbox]', container).get(0);
		checkbox.checked = !checkbox.checked;
	}
	else
	{
		checkbox = callingElement;
	}

	if ( checkbox.checked )
	{
		jscss('add', container, 'selected', '');

		if( (new DOMQuery('div.document input')).length == (new DOMQuery('div.document.selected input')).length)
			(new DOMQuery('input#select_all_documents').get(0)).checked = true;
	}
	else
	{
		jscss('remove', container, 'selected', '');

		(new DOMQuery('input#select_all_documents').get(0)).checked = false;
	}
};

function selectAllDocuments()
{
	/* uncheck selected images */
	if(board_action == 'list_documents')
	{
		var img = new DOMQuery('div.document.selected img');
		for(var i = 0; i < img.length;i++)
		{
			selectDocument(img.get(i));
		}
	}

	if(!this.checked)
		return;

	if(board_action == 'list_documents')
	{
		img = new DOMQuery('div.document img');

		for(i=0; i < img.length;i++)
		{
			selectDocument(img.get(i));
		}
	}
};

function deselectAllDocuments()
{
	var selectedDocuments = new DOMQuery('div.document.selected');
	for(var i = 0, selectedDocument; (selectedDocument=selectedDocuments.get(i)); i++)
	{
		jscss('remove', selectedDocument, 'selected', '');
	}
}

function doclibImageClick(e)
{
	var x = this;
	if(x.tagName.toLowerCase() != 'img')
		x = new DOMQuery('img', this ).get(0);

	if (typeof x == 'undefined')
		return;

	var container = getSiblingNode(x, 'up', 'div');
	var documentid = container.id.replace(/^document_/, '');

	/* store for later use */
	var currentlySelected = jscss('check', container, 'selected');
	deselectAllDocuments();

	/* destroy existing */
	var currentForm = new DOMQuery("div.discussion-content div#document-selector").get(0);
	if(currentForm)
		currentForm.parentNode.removeChild(currentForm);

	/* show just one form at a time */
	var searchForm = new DOMQuery('div#search-documents').get(0);
	if(currentlySelected)
	{
		jscss('remove', searchForm, 'display-none');
		deselectAllDocuments();
		/* we're de-selecting, so no info to parent window */
		return;
	}
	else
	{
		jscss('add', container, 'selected', '');
		jscss('add', searchForm, 'display-none');
	}

	var form = getDocumentSelector( documentid );
	if(!form)
		return;

	var p = new DOMQuery("div.discussion-content").get(0);
	if(!p)
		return;

	p.insertBefore(form, p.childNodes[0]);

	// do we have to notify the document selector opener?
	if(window.opener != null && typeof window.opener.selectedDocument != 'undefined')
	{
		try
		{
			var data = raw_documents[documentid];
			window.opener.selectedDocument(documentid, window);
													/* key    ,doclibid */
			/* window.close();*/
			return;
		}
		catch(e)
		{
			;
		}
	}
};

function copy2rml(e)
{
	e.preventDefault();

	if (typeof window.opener == 'undefined' || !window.opener.document)
		return false;

	// Are we called from a FCKEditor image-selector?
	if(typeof window.opener.SetUrl == 'function')
	{
		window.opener.SetUrl(board_script_url +
				'/../download.php/download_document/' +
				new DOMQuery('input[name="documentid"]', this).get(0).value +
				'/' + new DOMQuery('input[name="key"]', this).get(0).value +
				'/' +
				new DOMQuery('select[name="format"]', this).get(0).value
		);
		window.close();
		return false;
	}

	/* find out which radio button was selected */
	var items = new DOMQuery('input[name="as"]', this), data_as;
	for(var i = 0, item; (item = items.get(i)); i++)
	{
		if(item.type == 'hidden' || item.checked)
		{
			data_as = item;
			break;
		}
	}

	if(!data_as)
		return false;

	var rml = '';
	switch( data_as.value )
	{
		case 'image':
			var float_select = new DOMQuery('select[name="float"]', this);
			var format_select = new DOMQuery('select[name="format"]', this);
			var link_input = new DOMQuery('input[name="link"]', this);

			var link = '0';

			var float = '', format='';

			if (float_select.length > 0)
				float = float_select.get(0).options[ float_select.get(0).selectedIndex ].value;

			if (format_select.length > 0)
				format = format_select.get(0).options[ format_select.get(0).selectedIndex ].value;

			if ( link_input.length > 0)
			{
				link = link_input.get(0).checked ? '1' : '0';
			}

			rml = '[doclib=' +
					new DOMQuery('input[name="documentid"]', this).get(0).value +
					',' +
					new DOMQuery('input[name="key"]', this).get(0).value +
					',' +
					new DOMQuery('input[name="libraryid"]', this).get(0).value +
					',' +
					format +
					',' +
					link +
					(float != "" ? ("," + float) : "" ) +
					']\n';
		break;
		case 'text':
			rml = '[doclib=' +
					new DOMQuery('input[name="documentid"]', this).get(0).value +
					',' +
					new DOMQuery('input[name="key"]', this).get(0).value +
					',' +
					new DOMQuery('input[name="libraryid"]', this).get(0).value +
					',,0]' +
					new DOMQuery('input[name="filename"]', this).get(0).value +
					'[/]\n';
		break;
		default:
			return;
	}
	window.opener.setCurrentTextarea(window);
	window.opener.putStr(rml);
	window.opener.focus();
	window.close();

	return false;
};
