$(document).ready(function() {

	var template = '<div class="jsSearchParam bwSearchTag">'
					+ '<span class="jsParam bwSearchTagHidden">%1</span>'
					+ '<span class="bwSearchTagValue">%2</span>'
					+ '<span class="jsClose bwSearchTagClose bwIcon bwIconRight bwIcon16 icCloseSmall"></span>'
					+ '</div>';

	var inputWidth = $('#jsSearchInput').width();

	$('body').delegate('#jsSearch', 'submit', function(e) {
		var $input = $(this).find('#jsSearchInput');
		var val = $input.val();
		$input.val('');
		$('.jsSearchParam').each(function() {
			var text = $(this).find('.jsParam').text();
			val = val.replace(text, '');
			$input.val($input.val() + text + ' ');
		});
		$('#jsSearchTags').html('');
		recountInput();
		$input.val($input.val() + val);
	});

	$('body').delegate('.jsSearchParam .jsClose', 'click', function(e) {
		e.preventDefault();
		$(this).closest('.jsSearchParam').remove();
		recountInput();
		$('#jsSearchInput').focus();
	});

	$('body').delegate('#jsSearchInput', 'keyup', function(e) {
		if (e.keyCode == 32) {
			parseTag($(this));
		}
	});

	$(window).resize(function() {
		inputWidth = $('.bwSearch').width() - $('.bwButtonSearch').width() - 15;
		recountInput();
	});

	var parseTag = function($ele)
	{
		if (!regexps) return;

		for (var i in regexps) {
			if ($ele.val().search(regexps[i]) > -1) {
				var match = $ele.val().match(regexps[i]);
				match = match[0].split(' ');
				var param = match[0].split(':');
				var label = param[1];
				$('.jsParam:contains("' + param[0] + '")').closest('.jsSearchParam').remove();
				var tag = template.replace('%1', match[0]).replace('%2', label);
				$('#jsSearchTags').append(tag);
				// replace parameter from query
				$ele.val($.trim($ele.val().replace(match[0], '')));
				recountInput();
			}
		}
	}

	var recountInput = function()
	{
		var $input = $('#jsSearchInput');
		var width = 2 + $('#jsSearchTags').width();

		// recount parameters width to fit in half of input
		if (width > inputWidth / 2) {
			var maxWidth = Math.round(inputWidth / (2 * $('.jsSearchParam').length));
			$('.jsSearchParam').css('max-width', maxWidth);
			$('.jsSearchParam').css('overflow', 'hidden');
			$('.jsSearchParam .bwSearchTagValue').css('max-width', maxWidth - 16);
			$('.jsSearchParam .bwSearchTagValue').truncate({
				width: 'auto',
				after: '&hellip;',
				center: false,
				addclass: 'jsTruncate',
				addtitle: true
			});
		}
		// recount after truncate
		width = 2 + $('#jsSearchTags').width();
		// move input text to make room for tag
		$input.css('padding-left', width);
		$input.width(inputWidth - $('#jsSearchTags').width());
	}

	parseTag($('#jsSearchInput'));
	recountInput();
});


