var documents_data = Array();

function scrollToAnchor()
{
	if (!location.hash)
		return;

	var link          = location.hash.substr(1);

	if (!link.match(/^[0-9a-z]+$/))
	{
		return;
	}

	var element       = new DOMQuery("a#" +link );
	var scrollElement = element.get(0);

	if (!scrollElement)
		return;

	addEvent(
		window,
		'load',
		function() { scrollElement.scrollIntoView(); }
	);
}

function loginForm()
{
	/* checks if field isn't filled by browser's autocomplete feature */
	var f = new DOMQuery('input#quick-login-form-user').get(0);

	if(f && f.value == '')
	{
		f.value = getText('forms', 'username');
		addEvent(f, 'focus', _clearFieldSetTypePassword);
	}

	f = new DOMQuery('input#quick-login-form-password').get(0);

	if(f && f.value == '')
	{
		try
		{
			f.type = 'text';
		}
		catch(e)
		{
			;
		}
		f.defaultValue = getText('forms', 'password');

		addEvent( f, 'click', _clearFieldSetTypePassword);
		addEvent( f, 'focus', _clearFieldSetTypePassword);
	}
};

function _clearFieldSetTypePassword()
{
	var password_input = new DOMQuery('input#quick-login-form-password').get(0);
	var username_input = new DOMQuery('input#quick-login-form-user').get(0);

	if ( username_input.value != getText('forms', 'username') )
		return;

	try
	{
		 password_input.value = ''; password_input.type = 'password';
	}
	catch(e)
	{
		;
	}
	username_input.value = '';
};

function boardForumPulldown()
{
	if(this.tagName.toLowerCase() != 'select')
		return;

	if(Number(this.value) > 0)
	{
		document.location.href =  board_script_url +'/list_topics/' + this.value;
	}
	else if(this.value != '')
	{
		document.location.href = this.value;
	}
};

function createFooter()
{
	var footer = new DOMQuery('div#footer').get(0);

	if (!footer)
		return;

	/* Add RSS link */
	var item = new DOMQuery('head link[type="application/rss+xml"]');

	if(item.length > 0)
	{
		var rss = item.get(0);

		var a = createDOMNode('a', {"href" : rss.href, "type" : rss.type, "title" : rss.title, "class" : 'rss-link'}, ['RSS']);

		footer.insertBefore(a, footer.firstChild);
	}

	var form = new DOMQuery('div#navigation form');
	if(form.length > 0)
	{
		footer.insertBefore(form.get(0).cloneNode(true), footer.firstChild);
	}
};

function topicNavigationPulldown(targets)
{
	addEventToTargets(targets, 'submit', function(){ return _handleTopicNavigationPulldown(this);}, 'form.topic-navigation');
	addEventToTargets(targets, 'change', function(){ return _handleTopicNavigationPulldown(this.form);}, 'form.topic-navigation select');
};

function _handleTopicNavigationPulldown(form)
{
	document.location.href = form.attributes['action'].value + form.elements['action'].value +'/'+ form.elements['data[topicid]'].value +'/'+ form.elements['data[offset]'].value;
	return false;
};

function pulldownAutoSubmits(targets)
{
	addEventToTargets(targets, 'change', _handlePullDowns, 'select.faq-list, form.topic-navigation select, form#more-topic select, select#calendar-select-date, select.page-dropdown');
	addEventToTargets(null, 'change', boardForumPulldown, 'select.jump-to-action');
};

function _handlePullDowns()
{
	if(this.tagName.toLowerCase() == 'select')
		this.form.submit();
};

function toggleAuthorLinks(targets)
{
	var items = getTargets(targets, 'ol.messages div.author-nickname');

	if(items.length == 0)
		return;

	for(var i = 0, item; (item=items.get(i)); i++)
	{
		addEvent(item, 'click', _toggleAuthorLinks);
		jscss('add', item, 'author-links-toggle', '');
	}
};

function _toggleAuthorLinks()
{
	var item = new DOMQuery('ul.author-links', getSiblingNode(this, 'up', 'li')).get(0);

	if (item)
	{
		jscss('toggle', item, 'author-links-expanded');
	}
	jscss('toggle', this, 'author-links-toggle-open');
};

function followTopicLinks()
{
	var subitems = new DOMQuery('a', this);
	if(subitems.length == 1)
	{
		window.location.href = subitems.get(0).href;
	}
}

var toggleVisibilityCookie;
function toggleVisibility(targets)
{
	var items = getTargets(
		targets,
		'h3[id] + fieldset, h3[id] + dl.property-list, tr[id].category-name td, div.extra-actions ul li#forum-tagcloud, div.discussion-folders ul.folders li[id]'
	);

	if(items.length == 0)
		return;

	getToggleVisibilityCookie();

	for(var i = 0, item;(item=items.get(i));i++)
	{
		switch(item.tagName.toLowerCase())
		{
			case 'li':
			case 'td':
				addEvent(item, 'click', _toggleVisibility);
				jscss('add',item,'toggle-icon','');

				if(toggleVisibilityCookie.indexOf(item.tagName.toLowerCase() == 'li' ? item.id : item.parentNode.id) > -1)
					_toggleVisibility(true, item);
			break;
			default:
				addEvent(item.previousSibling, 'click', _toggleVisibility);
				jscss('add',item.previousSibling,'toggle-icon','');

				if(toggleVisibilityCookie.indexOf(item.previousSibling.id) > -1)
					_toggleVisibility(true, item.previousSibling);
			break;
		}
	}
};

function _toggleVisibility(init, x)
{
	if(typeof x == 'undefined')
		x = this;

	/* don't toggle when the user clicks a link */
	if(typeof init == 'object')
	{
		var target = init.srcElement || init.target;
		if(target.tagName.toLowerCase() == 'a')
			return;
	}

	var tagname = x.tagName.toLowerCase();

	if(tagname == 'td')
	{
		if(init != true)
			storeToggleVisibility(x.parentNode.id, jscss('check', x, 'toggle-alternate-icon'));

		var node = x.parentNode;

		while( node.nextSibling && (node = node.nextSibling) && !jscss('check', node, 'category-name') )
		{
			jscss('toggle', node, 'display-none','');
		}
	}
	else
	{
		if(init != true)
		{
			storeToggleVisibility(x.id, jscss('check', x, 'toggle-alternate-icon'));
		}

		if(tagname == 'li')
		{
			jscss('toggle', x, 'display-no-childs');
		}
		else
		{
			jscss('toggle', x.nextSibling, 'display-none','');
		}
	}

	if(typeof init == 'object')
	{
		init.stopPropagation();
	}

	jscss('toggle', x, 'toggle-alternate-icon','');

	return;
};

function storeToggleVisibility(x, del)
{
	toggleVisibilityCookie = toggleVisibilityCookie.getUnique();

	if(toggleVisibilityCookie.indexOf(x) > -1 && del)
	{
		var newCookie = [];
		for(var i=0, item;(item=toggleVisibilityCookie[i]);i++)
		{
			if( item != x )
				newCookie.push(item);
		}

		toggleVisibilityCookie = newCookie;
	}
	else
	{
		if (toggleVisibilityCookie.indexOf(x) == -1)
			toggleVisibilityCookie.push(x);
	}

	setCookie('toggle', toggleVisibilityCookie.join(':'));
};

function getToggleVisibilityCookie()
{
	var c = getCookie('toggle');
	toggleVisibilityCookie = [];

	if(c)
		toggleVisibilityCookie = c.split(':');
};

function disabledOption()
{
	if(jscss('check', this.options[this.selectedIndex], 'disabled', ''))
	{
		this.selectedIndex = -1;
		alert(getText('normal', 'disabled_option'));
	}
};

function fixBrowserIssues()
{
	var i = 0, items, item;

	if(board_action == 'error_general')
	{
		var reference = new DOMQuery('ul.error-links li.home').get(0);
		if(reference)
		{
			reference.parentNode.appendChild(
				createDOMNode('li', {"class" : "back"}, [
					createDOMNode('span', {"class" : "clickable", "event" : ['click', function() { history.go(-1);}] }, [ getText('normal', 'back') ])
				])
			);
		}
	}

	if(isIE)
	{
		items = new DOMQuery('dt.required');
		var req = null;
		for(i = 0;(item=items.get(i));i++)
		{
			req = createDOMNode('span', {"class" : 'required'}, [' *']);
			item.appendChild(req);
		}

		items = new DOMQuery('button');
		for(i = 0 ; (item=items.get(i));i++)
		{
			addEvent(item, 'click', function() { this.value = this.attributes['value'].value; });
		}

		/* IE has problems with unicode characters in forms with 'multipart' encoding
		   It 'ignores' the first input field, so we add a bogus one for IE to forget */
		items = new DOMQuery('form');
		for(i = 0 ; (item=items.get(i));i++)
		{
			if(typeof item == 'undefined')
				continue;

			if ( typeof item.enctype != 'undefined' && item.enctype == 'multipart/form-data' )
			{
				var input = createDOMNode('input', {"type" : 'hidden', "name" : 'ie-dummy'}, []);

				if ( item.elements[0] )
					item.insertBefore(input, item.elements[0]);
				else
					item.insertBefore(input);
			}
		}

		var disabled = new DOMQuery("option[disabled]"), j, parent, parents = [];
		for(i = 0;(item=disabled.get(i));i++)
		{
			jscss('add', item, 'disabled', '');
			parent = getSiblingNode(item, 'up', 'select');

			if(parents.indexOf(parent) < 0)
			{
				addEvent(parent, 'change', disabledOption);

				if(jscss('check', parent.options[parent.selectedIndex], 'disabled'))
					parent.selectedIndex = -1;

				parents.push(parent);
			}
		}
		parents = null;
	}

	if(isIE && isNotIE7)
	{
		// MSIE can't handle first-child/last-child, so let's fix it ourselfs,
		// including some other selectors ander :after fixes
		addClassToTargets('div.action-header ol li:first-child, div#navigation li:first-child, div#welcome-text li:first-child, ul.calendar-navigation-up li:first-child', 'first-child');
		addClassToTargets('form .advanced-option + *, form dt.advanced-option + * + dd.dd-sequence, form dt.advanced-option + * + dd.dd-sequence + dd.dd-sequence', 'advanced-option-adjacent');
		addClassToTargets('div.rmltoolbar + textarea#rml_textarea', 'adjacent');

		items = new DOMQuery('input');
		for(i=0; (item=items.get(i));i++)
		{
			jscss('add', item, item.type);
		}

		addClassToTargets('dd.poll-result span > span', 'sub');
		addClassToTargets('dt:first-child + dd + dd.poll-result span', 'first');

		var _toggleAdvancedOptions = toggleAdvancedOptions;
		/* prevent repaint problems in IE6 */
		toggleAdvancedOptions = function()
		{
			document.body.style.display = 'none';
			 _toggleAdvancedOptions();
			document.body.style.display = 'block';
		}
	}
	else if(isWebKit)
	{
		// fancyfy the searchfields; make 'm pretty
		items = new DOMQuery('input.searchfield');
		var a = createDOMNode('a', {"href" : board_script_url}, []);
		for(i = 0; (item=items.get(i));i++)
		{
			item.setAttribute('type', 'search');

			// apple prefers a nl.react.www.search syntax
			item.setAttribute('autosave', a.host.split('.').reverse().join('.')+'.search');
			item.setAttribute('results', 5);
			item.setAttribute('placeholder', getText('normal', 'search_webkit') );
		}

		// Fix a flow-render problem
		items = new DOMQuery('div#content, div#footer');
		for(i = 0; (item=items.get(i));i++)
			item.style.overflow = 'visible';
	}
};

function attachRMLToolbar(targets)
{
	var rmltextareas = getTargets(targets, 'textarea#rml_textarea');

	if(rmltextareas.length == 0)
		return;

	for(var i = 0, item; (item=rmltextareas.get(i));i++)
	{
		item.parentNode.insertBefore(getToolbar(board_documentlibrary_allowed), item);
		if(isIE)
		{
			addEvent(item, 'click', storeCursor);
			addEvent(item, 'keyup', storeCursor);
			addEvent(item, 'select', storeCursor);
		}
	}

	/* dirty IE hack to force reflow */
	if(rmltextareas.length > 0 && isIE)
	{
		document.body.style.display = 'none';
		document.body.style.display = 'block';
	}
};

function logoutSessions(targets)
{
	if(board_action != 'logout')
		return;

	var sessions = getTargets(targets, 'input[type="checkbox"]');

	for(var i=0, item; (item=sessions.get(i)); i++)
	{
		addEvent(item, 'change', _logoutSessions);
		addEvent(item, 'click', _logoutSessions);
	}
};

function _logoutSessions()
{
	var logoutOptions = new DOMQuery('form#form-logout input[type="radio"]'), logoutBySession = new DOMQuery('input#logout_by_session');

	for(var i=0, item; (item=logoutOptions.get(i));i++)
	{
		item.checked = false;
	}

	logoutBySession.get(0).checked = true;
};

function setupToggleFolders()
{
	var menu = new DOMQuery('div.discussion-folders li');

	if(menu.length == 1)
	{
		addEvent(menu.get(0), 'click', toggleFolders);
	}
};

function toggleFolders(e)
{
	e.stopPropagation();

	var childs = new DOMQuery('ul', this);

	if(childs.length > 0)
	{
		jscss('toggle', this, 'active');
	}
};

function toggleTagcloudOverflow(e)
{
	var tagcloud = new DOMQuery('li.forum-tagcloud div').get(0);
	if(!tagcloud)
		return;

	if (new DOMQuery('a', tagcloud).length < 10)
		return;

	var more = createDOMNode('span', {'event' : ['click', function(e) { jscss('toggle', tagcloud, 'show-all'); e.stopPropagation(); }] }, [ getText('normal', 'more') ]);

	tagcloud.appendChild(more);
};

