/**
 * Initializes the forum toolbar
 *
 * @return	void
 */
function initToolbar() {
	// Create items
	var tbitems = [
		createSearchBox(),
		'->', '-'
	];
	appendFavoritesMenu(tbitems);
	appendOtherLinks(tbitems);
//	tbitems[tbitems.length] = '->';

	// Create the toolbar
	var toolbar = new Ext.Toolbar({
		items: tbitems,
		renderTo: 'top-nav'
	});
}

/**
 * Creates a search box.
 *
 * @return	Ext.form.ComboBox	Combo box for search
 */
function createSearchBox() {
	// Create a data store
	var ds = new Ext.data.Store({
		proxy: new Ext.data.HttpProxy({
			url: 'action_search.php'
		}),
		reader: new Ext.data.JsonReader({
			root: 'results',
			totalProperty: 'total_results',
			id: 'id'
		}, [
			{ name: 'id' },
			{ name: 'subject' },
			{ name: 'author' },
			{ name: 'forum' },
			{ name: 'tstamp' },
			{ name: 'url' },
			{ name: 'excerpt' }
		])
	});

	// Create a rendering template
	var template = new Ext.XTemplate(
		'<tpl for="."><div class="search-item">',
			'<table border="0" width="100%"><tr><td valign="top"><h3>{subject}</h3></td><td align="right">[{forum}]&nbsp;</td>',
			'<td width="100" valign="top" rowspan="2">{tstamp}<br />{author}</td></tr>',
			'<tr><td colspan="2">{excerpt}</td></tr></table>',
		'</div></tpl>'
	);

	// Create combobox
	var search = new Ext.form.ComboBox({
		displayField: 'title',
		emptyText: forumLabels.enterSearchTextHere,
		hideTrigger: true,
		id: 'search',
		itemSelector: 'div.search-item',
		loadingText: forumLabels.searching,
		listWidth: 570,
		minChars: 4,
		onSelect: function(record) { window.open(record.data.url, '_blank', ''); },
		pageSize: 10,
		queryDelay: 1500,
		store: ds,
		style: 'height: 22px; font-size: 12px',
		tpl: template,
		typeAhead: false,
		width: 200
	});

	return search;
}

/**
 * Creates a button that shows favorite topics for the user
 *
 * @param	array	tbitems	Array with toolbar items
 * @return	void
 */
function appendFavoritesMenu(tbitems) {
	var result = {
		xtype: 'tbbutton',
		id: 'favorite-threads',
		menu: []
	};

	if (typeof favoriteTopics != 'undefined') {
		if (favoriteTopics.length > 0) {
			// Walk items and create the menu
			for (var i = 0; i < favoriteTopics.length; i++) {
				// Create a menu item
				result.menu[i] = {
					handler: favoritesButtonClicked,
					// TODO Normal topic icon class
					iconCls: '',
					id: 'ft' + favoriteTopics[i].id,
					text: favoriteTopics[i].title,
					url: 'thread.php?id=' + favoriteTopics[i].id + '&page=' + favoriteTopics[i].pages
				};
				// Set the icon according to the state of the thread
				switch (favoriteTopics[i].state) {
					case 'c':
						// TODO Closed
						result.menu[i].iconCls = '';
						break;
					case 'p':
						// TODO Pinned
						result.menu[i].iconCls = '';
						break;
				}
			}
			result.text = String.format(forumLabels.favoritesButton, result.menu.length);
		}
		else {
			// Show "About"
			result.menu[0] = getFavoriteThreadsHelpItem();
			result.text = String.format(forumLabels.favoritesButton, 0);
		}
	}

	if (result.menu.length > 0) {
		tbitems[tbitems.length] = result;
		tbitems[tbitems.length] = '-';
	}
}

/**
 * Appends all other links to the toolbar item array.
 *
 * @param	array	tbitems	Toolbar items
 * @return	void
 */
function appendOtherLinks(tbitems) {
	for (var i = 0; i < tbarLinks.length; i++) {
		var t = tbarLinks[i];
		t.handler = (typeof(t.externalLink) != 'undefined' && t.externalLink) ? openToolbarUrl : favoritesButtonClicked;
		tbitems[tbitems.length] = t;
		if (i != tbarLinks.length - 1) {
			tbitems[tbitems.length] = '-';
		}
	}
}

/**
 * Handles click event for the button in topic favorites. Launches a new window
 * for such case.
 *
 * @param	Ext.Toolbar.Button	button	Button to ahndle the event for
 * @return	void
 */
function openToolbarUrl(button) {
	window.open(button.url);
}

/**
 * Handles click event for the button in topic favorites. Launches a new window
 * for such case.
 *
 * @param	Ext.Toolbar.Button	button	Button to ahndle the event for
 * @return	void
 */
function favoritesButtonClicked(button) {
	document.location.href = button.url;
}

/**
 * Creates a help item for thread favorites
 *
 * @return	object	Menu item config
 */
function getFavoriteThreadsHelpItem() {
	return {
		handler: function() { Ext.MessageBox.alert(forumLabels.whatIsThreadFavoritesTitle, forumLabels.whatIsThreadFavoritesDetails); },
		id: 'favorite-threads-help',
		text: forumLabels.whatIsThreadFavorites
	};
}

