/* this could be done so much faster using: http://wiki.script.aculo.us/scriptaculous/show/Builder */
function writeDocumentSelector()
{
	var items = cssQuery('body.list_documents_small div.document');

	if(items.length > 0)
	{
		var documentid, data, form, fieldset, input, dl, dt, dd, label, select, option, j;
		for(var i = 0; i < items.length;i++)
		{
			documentid = items[i].id.substr(9);
			data = raw_documents[documentid];
			form = document.createElement('form');

			form.setAttribute('method', 'POST');
			form.setAttribute('action', board_script_url);

			fieldset = document.createElement('fieldset');

			input = document.createElement('input');
			input.setAttribute('type', 'hidden');
			input.setAttribute('name', 'data[documentid]');
			input.setAttribute('value', documentid);
			fieldset.appendChild(input);

			input = document.createElement('input');
			input.setAttribute('type', 'hidden');
			input.setAttribute('name', 'data[url]');
			input.setAttribute('value', data[0]);
			fieldset.appendChild(input);

			input = document.createElement('input');
			input.setAttribute('type', 'hidden');
			input.setAttribute('name', 'data[key]');
			input.setAttribute('value', data[1]);
			fieldset.appendChild(input);

			input = document.createElement('input');
			input.setAttribute('type', 'hidden');
			input.setAttribute('name', 'data[libraryid]');
			input.setAttribute('value', data[2]);
			fieldset.appendChild(input);

			input = document.createElement('input');
			input.setAttribute('type', 'hidden');
			input.setAttribute('name', 'data[alt]');
			input.setAttribute('value', '');
			fieldset.appendChild(input);

			dl = document.createElement('dl');
			/* insert as... */
				dt = document.createElement('dt');
				dt.appendChild(document.createTextNode(getText('doclib', 'insert_as')));
				dl.appendChild(dt);

				dd = document.createElement('dd');
				/* as image */
				try
				{
					input = document.createElement('<input type="radio" name="data[as]" value="image" id="as_image_"+documentid+"_image" />');
				}
				catch(err)
				{
					input = document.createElement('input');
					input.setAttribute('name', 'data[as]');
					input.setAttribute('type', 'radio');
					input.setAttribute('value', 'image');
					input.setAttribute('id', 'as_image_'+documentid+'_image');
				}


				dd.appendChild(input);

				label = document.createElement('label');
				label.setAttribute('for', 'as_image_'+documentid+'_image');
				label.appendChild(document.createTextNode(getText('doclib', 'insert_as_image')));
				dd.appendChild(label);
				/* as text */

				try
				{
					input = document.createElement('<input type="radio" name="data[as]" value="text" id="as_text_"+documentid+"_text" />');
				}
				catch(err)
				{
					input = document.createElement('input');
					input.name = 'bla';
					input.setAttribute('name', 'data[as]');
					input.setAttribute('type', 'radio');
					input.setAttribute('value', 'text');
					input.setAttribute('id', 'as_text_'+documentid+'_text');
				}
				dd.appendChild(input);

				label = document.createElement('label');
				label.setAttribute('for', 'as_text_'+documentid+'_text');
				label.appendChild(document.createTextNode(getText('doclib', 'insert_as_text')));
				dd.appendChild(label);

				dl.appendChild(dd);
			/* link */
				dt = document.createElement('dt');
				dt.appendChild(document.createTextNode(getText('doclib', 'insert_as_link')));
				dl.appendChild(dt);

				dd = document.createElement('dd');

				input = document.createElement('input');
				input.setAttribute('type', 'checkbox');
				input.setAttribute('name', 'data[link]');
				input.setAttribute('id', 'link_'+documentid);
				dd.appendChild(input);

				label = document.createElement('label');
				label.setAttribute('for', 'link_'+documentid);
				label.appendChild(document.createTextNode(getText('doclib', 'insert_as_thumb')));
				dd.appendChild(label);

				dl.appendChild(dd);
			/* size */
				dt = document.createElement('dt');
				dt.appendChild(document.createTextNode(getText('doclib', 'format')));
				dl.appendChild(dt);

				dd = document.createElement('dd');

				select = document.createElement('select');
				select.setAttribute('name', 'data[format]');
				select.setAttribute('id', 'format_'+documentid);

				option = document.createElement('option');
				option.setAttribute('value', '');
				option.appendChild(document.createTextNode(getText('doclib', 'original')));
				select.appendChild(option);

				if(typeof formats != "undefined")
				{
					for(j=0; j < formats.length;j++)
					{
						option = document.createElement('option');
						option.setAttribute('value', formats[j][0]);
						option.appendChild(document.createTextNode(formats[j][0]+ ' (' + formats[j][1][0] + 'x' + formats[j][1][1] + ')'));
						select.appendChild(option);
					}
				}

				dd.appendChild(select);

				dl.appendChild(dd);
			/* alignment */
				dt = document.createElement('dt');
				dt.appendChild(document.createTextNode(getText('doclib', 'outline')));
				dl.appendChild(dt);

				dd = document.createElement('dd');

				select = document.createElement('select');
				select.setAttribute('name', 'data[float]');
				select.setAttribute('id', 'float_'+documentid);

				option = document.createElement('option');
				option.value = '';
				option.appendChild(document.createTextNode(getText('doclib', 'none')));
				select.appendChild(option);

				option = document.createElement('option');
				option.setAttribute('value', 'left');
				option.appendChild(document.createTextNode(getText('doclib', 'left')));
				select.appendChild(option);

				option = document.createElement('option');
				option.setAttribute('value', 'right');
				option.appendChild(document.createTextNode(getText('doclib', 'right')));
				select.appendChild(option);

				dd.appendChild(select);

				dl.appendChild(dd);
			/* submit */
				dt = document.createElement('dt');
				dt.appendChild(document.createTextNode(getText('doclib', 'insert')));
				dl.appendChild(dt);

				dd = document.createElement('dd');

				input = document.createElement('input');
				input.setAttribute('type', 'submit');
				input.setAttribute('value', getText('doclib', 'insert_image'));
				dd.appendChild(input);

				dl.appendChild(dd);

			fieldset.appendChild(dl);

			form.appendChild(fieldset);

			items[i].appendChild(form);
		}
	}
};

function doclibInteraction()
{
	var select_all_docs = document.getElementById('select_all_documents');

	if(typeof select_all_docs != 'undefined')
	{
		addEvent(select_all_docs, 'click', selectAllDocuments);
	}

	var img = cssQuery("body.list_documents div.document img");

	for(var i = 0; i < img.length; i++)
	{
		addEvent(img[i], 'mouseover', showDocumentLinks);
		addEvent(img[i].parentNode, 'click', selectDocument);
	}

	var img = cssQuery("body.list_documents div.document li.select input");

	for(var i = 0; i < img.length; i++)
	{
		//addEvent(img[i], 'click', selectDocument);
	}


	img = cssQuery("body.list_documents_small div.document img");

	for(i = 0; i < img.length;i++)
	{
		// added parentNode, gives greater click-area!
		addEvent(img[i].parentNode, 'click', doclibImageClick);
	}

	var keywords = document.getElementById('keywordselector');
	if(keywords)
	{
		addEvent(keywords, 'change', addKeyword);
	}

	var loc = window.location.toString();

	if(loc.indexOf('list_documents_small') > 0)
	{
		links = cssQuery("ul.folders li a[href]");

		for(i = 0; i < links.length;i++)
		{
			url = links[i].href.toString();

			if(url.indexOf('list_documents_small') == -1)

			{
				links[i].href = url.replace(/list_documents/, 'list_documents_small');
			}
		}
	}

	var thumbnails = cssQuery("img[longdesc]");

	for(i = 0; i < thumbnails.length;i++)
	{
		addEvent(thumbnails[i], 'click', modifyThumbnail);
	}
};


function selectDocument(ev, ob)
{
	var x = getObj(ev, ob);

	var el = x;//.previousSibling;

	var img_div = x;

	while( img_div.tagName.toLowerCase() != 'div' && img_div.parentNode )
		img_div = img_div.parentNode;

	var checkbox = document.getElementById('document_select_'+img_div.id.split('_')[1]);

	if ( el.tagName.toLowerCase() != 'input' )
		checkbox.checked = !checkbox.checked;

	if ( checkbox.checked )
		jscss('add', img_div, 'selected', '');
	else
		jscss('remove', img_div, 'selected', '');
};

function doclibImageClick(ev, ob)
{
	var x = getObj(ev, ob);

	if(x.tagName.toLowerCase() != 'img')
	{
		while(x.tagName.toLowerCase() != 'div')
		{
			x = x.parentNode;
		}
		var items = cssQuery('img', x);
		x = items[0];
	}

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

	var image = cssQuery('input[type="hidden"]', x.parentNode);
	var document_id = image[0];

	// do we have to notify the document selector opener?
	try
	{
		if(typeof window.opener != 'undefined' && typeof window.opener.selectedDocument != 'undefined')
		{
			window.opener.selectedDocument(document_id.value);
			window.close();
		}
	}
	catch(e)
	{
		;
	}

	var forms = cssQuery('form', x.parentNode);
	var header = document.getElementById('insert_image');

	if(forms.length == 1)
	{
		var form = forms[0];

		copy = form.cloneNode(true);

		copy.onsubmit = copy2rml;

		var p = cssQuery("div.discussion-content");

		if(header != null)
		{
			var doc = document.getElementById('document_' + header.nextSibling.document_id);
			doc.appendChild(header.nextSibling.cloneNode(true));

			header.parentNode.removeChild(header.nextSibling);
			header.parentNode.removeChild(header);
		}

		form.parentNode.removeChild(form);
		p[0].insertBefore(copy, p[0].childNodes[1]);
		copy.document_id = document_id.value;

		//var insert_as = document.getElementById('as_image_' + document_id.value);
		//var labels = cssQuery('input[name="data[as]"]');
		//alers(labels.length);
		//insert_as.onchange = toggleInsertImageOptions;

		//insert_as.document_id = document_id.value;

		//toggleInsertImageOptions(null, insert_as);

		var h3 = document.createElement('H3');
		h3.id = 'insert_image';
		h3.appendChild(document.createTextNode(getText('doclib', 'insert_image')));

		p[0].insertBefore(h3, p[0].childNodes[1]);

		// append image preview:
		var current_ip = document.getElementById('image_preview');

		if(current_ip != null)
		{
			current_ip.parentNode.removeChild(current_ip);
		}

		var image_preview = document.createElement('IMG');
		image_preview.id = 'image_preview';
		p[0].style.position = 'relative';
		image_preview.src = cssQuery('input[type="hidden"]', copy)[1].value + 'small';

		p[0].insertBefore(image_preview, p[0].childNodes[3]);
	}
};

function addKeyword(ev, ob)
{
	var el = getObj(ev, ob);

	var value = unhtmlspecialchars(el.options[el.selectedIndex].text);

	if(el.options[el.selectedIndex].value == '')
		return;

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

	if(keywords.value.length > 0)
	{
		var current_keywords = keywords.value.split(' ');

		for(var i = 0; i < current_keywords.length;i++)
		{
			if(current_keywords[i] == value)
			{
				delete current_keywords[i];
				keywords.value = current_keywords.join(' ');
				el.options.selectedIndex = 0;
				return;
			}
		}

		keywords.value = keywords.value.replace(/^\s+|\s*$/g,"") + ' ' + value;
	}
	else
	{
		keywords.value = value;
	}

	el.options.selectedIndex = 0;
};

function selectAllDocuments(ev, ob)
{
	var x = getObj(ev, ob);

	if(x.tagName.toLowerCase() == 'label')
	{
		x = document.getElementById(x.getAttribute('for'));
	}

	var img = cssQuery('body.list_documents div.document.selected img');

	for(var i = 0; i < img.length;i++)
	{
		selectDocument(ev, img[i]);
	}

	if(x.checked)
	{
		img = cssQuery('body.list_documents div.document img');

		for(var i=0; i < img.length;i++)
		{
			selectDocument(ev, img[i]);
		}
	}
};

function toggleInsertImageOptions(ev, obj)
{
	var x = getObj(ev, obj);

	if(x.tagName.toLowerCase() == 'label')
	{
		x = document.getElementById(x.getAttribute('for'));
	}

	var link = document.getElementById('link_' + x.document_id);
	var format = document.getElementById('format_' + x.document_id);
	var floating = document.getElementById('float_' + x.document_id);

	if(x.checked)
	{
		link.disabled = '';
		format.disabled = '';
		floating.disabled = '';
	}
	else
	{
		format.disabled = 'disabled';
		link.disabled = 'disabled';
		floating.disabled = 'disabled';
	}
};

function hideDocumentLinks(ev, ob)
{
	var x = getObj(ev, ob);

	var target = window.event ? window.event.srcElement:ev.target;

	if(target.tagName.toLowerCase() != 'ul')
		return;

	var element = ev.relatedTarget;

	while(element)
	{
		if(element.parentNode == x)
			return;
		else
			element = element.parentNode;
	}

	//target.style.display = 'none';
};

function showDocumentLinks(ev, ob)
{
	var img = cssQuery("body.list_documents div.document img");

	for(var i = 0; i < img.length; i++)
	{
		//img[i].nextSibling.style.display = 'none';
	}

	var x = getObj(ev, ob);

	x.nextSibling.style.display = 'block';
	x.nextSibling.onclick = selectDocument;

	//x.nextSibling.onmouseout = hide_document_links;
	addEvent(x.nextSibling, 'mouseout', hideDocumentLinks, true);
};

function copy2rml(ev, ob)
{
	var form = getObj(ev, ob);
	var rml;
	var fields = Array();

	for(var i = 0; i < form.length;i++)
	{
		if(form[i].type == 'radio' && !form[i].checked)
		{
			continue;
		}
		else
		{
			fields[form[i].name] = form[i];
		}
	}

	form = fields;

	if(form['data[as]'].value == 'image')
	{
		i = form['data[format]'].selectedIndex;
		var size = form['data[format]'].options[i].label.split('x');
		rml = '[doclib=' + form['data[documentid]'].value + ',' + form['data[key]'].value + ',' + form['data[libraryid]'].value + ',' + form['data[format]'].value + ',' + (form['data[link]'].checked ? '1':'0') + ']\n';
	}
	else if(form['data[as]'].value == 'text')
		rml = '[br][br][doclib=' + form['data[documentid]'].value + ',' + form['data[key]'].value + ',' + form['data[libraryid]'].value + ',,0][/]\n';

	if(window.opener.document && rml != '')
	{
		window.opener.setCurrentTextarea(window);
		window.opener.putStr(rml);
	}

	return false;
};