/**
 * @todo catch enter key in search form
 */
if (jQuery.Digitalbite) {
	jQuery.Digitalbite.Search = {
		/**
		 * @var Object
		 */
		options: {
			itemsPerPage: 8,
			page: 0,
			element: undefined,
            messageLength: 200
		},

		/**
		 * @var string
		 */
		searchUrl : '/services/search/json/',

		/**
		 * init
		 *
		 * The main initializer
		 *
		 * @param formEl DomElement
		 * @param resultEl DomElement
		 * @param options Object
		 */
		init: function(formEl, resultEl, options) {
			jQuery.Digitalbite.Search.options.element = resultEl;
			if (typeof(options) == 'object') {
				$.extend(jQuery.Digitalbite.Search.options, options);
			} else {
				jQuery.Digitalbite.Search.options.page = 0;
			}

			jQuery.Digitalbite.Search.renderSearchForm(formEl);
			$('#searchButton').click(function() {
				jQuery.Digitalbite.Search.search(resultEl);
			});
		},

		/**
		 * search
		 *
		 * The search function
		 *
		 * @param el DomElement
		 * @param options Object
		 */
		search: function(el, options) {
			jQuery.Digitalbite.Search.options.element = el;

			if (typeof(options) == 'object') {
				$.extend(jQuery.Digitalbite.Search.options, options);
			} else {
				jQuery.Digitalbite.Search.options.page = 0;
			}
			var searchQuery = $('#searchQuery').val();
			var searchType = $('#searchType').val();

			$(el).html('<span class="searchResultsLoading"><img src="/img/search-loading.gif" class="searchLoader" /><span class="searchMessage">De resultaten worden opgehaald</span></span>')
			$.post(
					jQuery.Digitalbite.Search.searchUrl,
					{
						type: searchType,
						query: searchQuery,
						items: jQuery.Digitalbite.Search.options.itemsPerPage,
						page: jQuery.Digitalbite.Search.options.page
					},
					function(data) {
						$(el).html('');
						var ul = ($('<ul></ul>'));
                        var resultContent = '';

						if (data.results) {
                           for (i in data.results) {
                                resultContent = data.results[i].content;
                                if (jQuery.Digitalbite.Search.options.messageLength > 0) {
                                    resultContent = data.results[i].content.substring(0, jQuery.Digitalbite.Search.options.messageLength);
                                }
								ul.addClass('searchResults')
									.append($('<li></li>')
									.append($('<div></div>').addClass('searchResultTitle').html(data.results[i].title))
									.append($('<div></div>').addClass('searchResultContent').html(resultContent))
									.append($('<div></div>').addClass('searchResultUrl')
										.append($('<a></a>').attr('href', data.results[i].url).html(data.results[i].url)))
								);
							}
						} else {
							ul.addClass('noSearchResults')
								.append($('<li></li>')
									.html('Er zijn geen resultaten gevonden')
							);
						}

						var pagination = ($('<div></div>').addClass('searchResultsPagination'));
						for (var i = 0; i <= (data.total / jQuery.Digitalbite.Search.options.itemsPerPage); i++) {
							pagination.append($('<a></a>')
								.addClass('searchResultsPaginationElement')
								.html((i + 1))
							);
						}

						var resultContainer = ($('<div></div>').addClass('searchResultContainer')
								.append(ul)
								.append(pagination)
						);
						$(el).html(resultContainer);
						$('.searchResultTitle, .searchResultContent').highlight(searchQuery);

						$('.searchResultsPaginationElement').click(function() {
							jQuery.Digitalbite.Search.search(jQuery.Digitalbite.Search.options.element, {page: parseInt($(this).html()) -1});
						});
					},
					'json'
			);
		},

		/**
		 * renderSearchForm
		 *
		 * @param el DomElement
		 */
		renderSearchForm: function(el) {
			$(el)
				.html('')
				.append(
					$('<form></form>')
						.attr('action', jQuery.Digitalbite.Search.searchUrl)
						.attr('method', 'post')
						.attr('id', 'searchForm')
						.append($('<input type="text">')
							.attr('id', 'searchQuery')
							.attr('name', 'searchQuery')
						)
						.append($('<select></select>')
							.attr('id', 'searchType')
							.attr('name', 'searchType')
							.append($('<option></option>')
								.attr('value', 'page')
								.html('Pagina\'s')
							)
							.append($('<option></option>')
								.attr('value', 'news')
								.html('Nieuws')
							)
						)
						.append($('<input type="button">')
							.attr('id', 'searchButton')
							.attr('name', 'searchButton')
							.attr('value', '')
						)
			);

			$('#searchForm').submit(function() {
				return false;
			});

			$('#searchQuery').keyup(function(e) {
				if (e.keyCode == '13') {
					$('#searchButton').click();
				}
				return false;
			});

            $("#searchQuery").toggleVal({
				populateFrom: "custom",
				text: "Zoeken..."
			});
		}
	};
}
