ui = {
	setcookie: function(name, value, expires) {
		$.cookie(name, value, {path: '/', 'expires': expires || 90});
	}
}

/**
 * Toggleables UI: save state in cookies.
 * There are several elements in UI where the user may switch visibility of a certain element:
 * filters, auth-panel etc. Toggleables states are kept in cookies
 */
Toggleable = {
	/* map cookies to settings */
	cookie_state_map: {
		fpb:	'filter_pane_basic',
		fpa:	'filter_pane_alphabet',
		fpe:	'filter_pane_extended',
		auth:	'auth_panel',
		bmp:	'bookmarks_panel'
	},
	/* map settings to cookies (inverted cookie_state_map) */
	state_cookie_map: {},
	state: {/* boolean flags: whether a certain setting is expanded/collapsed or enabled/disabled */
		filter_pane_basic: true,
		filter_pane_alphabet: true,
		filter_pane_extended: true,
		auth_panel: true,
		bookmarks_panel: true
	},
	getState: function(key) {
		return Toggleable.state[key];
	},
	setState: function(key, value)
	{
		Toggleable.state[key] = value;
		ui.setcookie(Toggleable.state_cookie_map[key], value);
	},
	toggle: function(key) {
		var el = $('#' + key);
		el.toggle();
		Toggleable.setState(key, el.is(':visible'));
	}
}

/**
 * Viewmode switcher: save state in cookies
 */

ViewmodeSwitcher = {
	activate: function(trigger, css_class) {
		var container = $('#viewmode-switcher');
		$('li.b-selected', container)
			.removeClass('b-selected')
			.each(function() {
				var el = $(this);
				var text = el.text();
				el.html('<a href="#" onclick="ViewmodeSwitcher.activate(this); return false;">' + text + '</a>');
			});
		
		var active = $(trigger);
		var text = active.text();
		var li = active.parent('li.b-item');
		li.addClass('b-selected')
			.html('<div class="pl-cn lt"><div></div></div>'+
				'<div class="pl-cn rt"><div></div></div>'+
				'<div class="b-wrap">' + text + '</div>'+
				'<div class="pl-cn lb"><div></div></div>'+
				'<div class="pl-cn rb"><div></div></div>');
		
		var viewmode = li.attr('viewmode');
		var stickers_container = $('#stickers-container');
		stickers_container.removeClass('b-basic-view b-map-view b-list-view');
		stickers_container.addClass('b-' + viewmode + '-view');

		ui.setcookie('viewmode', viewmode);
	}
}

/**
 * Order switcher: save state in cookies
 */

OrderSwitcher = {
	activate: function(trigger, css_class) {
		var container = $('#order-switcher');
		$('li.b-selected', container)
			.removeClass('b-selected')
			.each(function() {
				var el = $(this);
				var text = el.text();
				el.html('<a href="" onclick="OrderSwitcher.activate(this);">' + text + '</a>');
			});
		
		var active = $(trigger);
		var text = active.text();
		var li = active.parent('li.b-item');
		li.addClass('b-selected')
			.html('<div class="pl-cn lt"><div></div></div>'+
				'<div class="pl-cn rt"><div></div></div>'+
				'<div class="b-wrap">' + text + '</div>'+
				'<div class="pl-cn lb"><div></div></div>'+
				'<div class="pl-cn rb"><div></div></div>');
		
		var order = li.attr('order');
		var stickers_container = $('#stickers-container');
		ui.setcookie('tovari_order', order);
	}
}

/**
 * PageSizeSwitcher: save state in cookies
 */
PageSizeSwitcher = {
	activate: function(select, prefix) {
		prefix = prefix ? prefix : '';
		ui.setcookie(prefix + 'pagesize', select.value);
		location.href = select.getAttribute('url');
	}
}

/**
 * Open the "talk-to-us" ("Связаться с нами") window
 */
TalkToUs = {
	open: function() {
		TalkToUs.dialog = $('<div/>')
			.dialog({
				title: 'Связаться с нами',
				width: 650,
				height: 400,
				modal: true
			})
			.load('/talktous/');
	},
	sent: function() {
		alert('Ваше сообщение отправлено. Спасибо, что помогаете нам сделать наш проект лучше!');
		TalkToUs.dialog.dialog('close');
	}
}

/**
 * Open the "add-newco" ("Добавить новинку") window
 */
Newco = {
	added: function() {
		alert('Ваша новинка принята к рассмотрению модераторами. Спасибо, что помогаете нам сделать наш проект лучше!');
		$('#createnewco-form').trigger('reset');
	}
}

/**
 * Show hidden menu items
 */
Menu = {
	showHidden: function(a) {
		$(a.parentNode.parentNode).find('li').show();
		$(a.parentNode).remove();
		ui.setcookie('menu_show_all', 1, 0);
	}
}

/**
 * initialize the UI
 */
$(function() {
	for (var i in Toggleable.cookie_state_map)
	{
		var key = Toggleable.cookie_state_map[i];
		Toggleable.state_cookie_map[key] = i;
		var cookie = $.cookie(i);
		if (null !== cookie)
		{
			Toggleable.state[key] = ('true' == cookie);
		}
		if (! Toggleable.state[key])
		{
			$('#' + key).hide();
		}
	}
});

function to_array(o) {
	var a = [];
	for (var i in o) {
		a.push(o[i]);
	}
	return a;
}