function updateUI() {
	var params = Ajaxify.parseQueryString(window.location.hash.substr(1));

	// select model by name
	var $select = $('#select-form select[name=id]').val('');
	if (params.action === 'show' && params.id) {
		$select.val(params.id);
	}

	// model filters
	var types = ['countries', 'hairs', 'years', 'tits', 'tags'],
		$form = $('#model-filters');
	for (var i = 0; i < types.length; i++) {
		var type = types[i],
			key = type + '[]',
			$options = $form.find('input[type=checkbox][name="' + type + '[]"]'),
			$optionAll = $form.find('#all-' + type);
		$options.attr('checked', '');
		if (params[key] && params[key].length) {
			for (var k = 0; k < params[key].length; k++) {
				$options.filter('[value="' + params[key][k] + '"]').attr('checked', 'checked');
			}
		}
		$optionAll.attr('checked', $options.filter(':checked').length > 0 ? '' : 'checked');
	}
}


function attachEllipsis() {
	if ($.browser.msie && $.browser.version < 7) {
		return;
	}
	$('.gallery-small h4').each(function() {
		truncateToFit(this);
	});
}


function attachCameFromEvent() {
	$('.set-came-from').click(function(e){
		$(this).attr("href", setUrlParam('back', encodeURIComponent(window.location.href), $(this).attr("href")));
		return true;
	});
}

$(document).bind('#models-wrapper-success', function () {
	attachEllipsis();
	attachCameFromEvent();
});

$(document).bind('#galleries-wrapper-success', function () {
	attachEllipsis();
	attachCameFromEvent();
});


$(function () {
	attachCameFromEvent();

	// ajaxify the pagination
	$('.pagination a').live('click', Ajaxify.handleEvent);

	// "show all" functionality
	$('#filter-form input.show-all-checkbox').change(function (e) {
		e.stopImmediatePropagation();
		var groupName = this.name.replace(/^all-/, '') + '[]';
		this.checked = true;
		$('#filter-form input[name="' + groupName + '"]').attr('checked', '');
		$(this.form).trigger('submit');
	});

	// forms autosubmission
	$('#model-filters form').find('input[type=checkbox], select').change(function (e) {
		var showAllName = 'all-' + this.name.replace(/\[\]$/, ''),
			$showAll = $('#' + showAllName),
			showAllState = !this.checked && $('#model-filters input[name="' + this.name + '"]:checked').length == 0 ? 'checked' : '';
		$showAll.attr('checked', showAllState);
		$(this.form).trigger('submit');
	});

	// register our URL patterns in order to support onload and back/forward navigation
	Ajaxify.registerRoutes({
		'#models-wrapper': [
			{ url: '/models/show', required: ['id', 'action'] },
			{ url: '/models', parameters: ['countries[]', 'hairs[]', 'tits[]', 'tags[]', 'models_sort', 'models_page'] }
		],
		'#galleries-wrapper': {
			url: '/models/galleries',
			parameters: ['galleries_sort', 'galleries_page']
		},
		'#films-wrapper': {
			url: '/models/films',
			parameters: ['films_sort', 'films_page']
		}
	});

	// UI state updates
	$(document).bind('ajaxify-url-changed', updateUI);

});

