/**
 * @Description: this function is the jsonp callback that returns the site search result.
 * i
 */
var efu = efu || {};
efu.w = efu.w || {};

efu.w.se = function (options) {
	var search_container = "#wp_content_data";
	if( typeof options.MODULE_SEARCH_CONTAINER_ID != "undefined" ) {
		search_container = '#' + options.MODULE_SEARCH_CONTAINER_ID;
	}
	var search$ = $("#search"),
		searchRes$ = $(search_container),
		searchBox$ = $("#searching_box");

		search$.find('input[name="str"]').focus(function () {
			if (options.MODULE_SEARCH_TITLE + '...' === $(this).val()) {
				$(this).val('');
			}
		}).blur(function(){
				if ('' === $(this).val()) {
					$(this).val(options.MODULE_SEARCH_TITLE + '...');
				}
		});

	$(document).ready(function() {
	  $(window).keydown(function(event){
		if(event.keyCode == 13 && search$.find('input[type="text"]').is(":focus")) {
		  event.preventDefault();
		  search$.find('input[type="submit"]').click();
		  return false;
		}
	  });
	});

	function searchResult(data) {
		searchBox$.hide();
		// if you're in static export, fix the links by adding '.shtml'
		var exported = "";
		if (typeof _static_export != "undefined") {
			exported = ".shtml";
		}

		var i = 0;
		resultsHtml = [];
		/*add the header to search results*/
		resultsHtml[i] = '<h2 class=\"titles results-title\">' + options.LANG_SEARCHRESULTS + '</h2>';
		if (typeof data === 'string') {
			resultsHtml[i] += data;
		}
		else {
			var n = 1;
			//iterates threw the pages array
			for (var item in data) {
				resultsHtml[i] += '<div class="result-item">';

				if (data[item].alias.length > 0) {
					var url = data[item].alias + exported;

					//builds the link with export logic
					resultsHtml[i] += '<a class="page-name" href="' + url + '">' + data[item].pagetitle + '</a><small><em> (' + data[item].pagetype + ')</em></small>';
				}
				else {
					var url = data[item].url + exported;
					if (typeof _static_export != "undefined" && data[item].url && typeof data[item].url != "undefined") {
						var act = getURLParam("act", data[item].url);
						if (act && typeof act != "undefined") {
							url = "/a" + act + "/index.shtml";
						}
					}
					resultsHtml[i] += '<a class="page-name" href="' + url + '" target="' + data[item].act + '">' + data[item].pagetitle + '</a><small><em> (' + data[item].pagetype + ')</em></small>';
				}

				var text = data[item].data;
				var keys = $.parseJSON(data[item].keywords);
				for (var k = 0; k < keys.length; k++) {
					var regEx = new RegExp("("+ keys[k] +")", "ig");
					text = text.replace(regEx, '<mark>$1</mark>');
				};

				resultsHtml[i] += '<p>' + text + '</p>';
				resultsHtml[i] += '</div>';
				if ((n % 10 == 0) && (n != 0) && (n != data.length)) {
					i++;
					resultsHtml[i] = "";
				}
				n++;
			}
		}

		//pagination starts
		searchRes$.html("<div id='resultsBox'></div>")

		var resBox$ = $('#resultsBox');
		resBox$.html(resultsHtml[0]);
		showing = "";
		if( typeof data !== 'string'){
			var init_items = (data.length > 10) ? 10 : data.length;
			var showing_message = options.LANG_SHOWING +" 1-"+ init_items +" "+ options.LANG_OF + " "+ data.length +" "+ options.LANG_ITEMS;
			showing = "<span id='showing_pagination'>"+ showing_message + "</span>";
			$(showing).appendTo(searchRes$);
		}

		if (i > 0) {
			var k = 1;
			numbers = "";
			while (k <= i + 1) {
				numbers += "<span class='paging_number' id='resultsGroup" + k + "'> " + k + " </span>";
				k++;
			}
			prev = "<label id='prev_results' style='display:none;'><span> « " + options.LANG_PREV + "</span></label>";
			next = "<label id='next_results'><span>" + options.LANG_NEXT + " » </span></label>";

			pagination$ = $("<div id='pagination'></div>").appendTo(searchRes$);
			prevRes$ = $(prev).appendTo(pagination$);
			pagingNum$ = $(numbers).appendTo(pagination$);
			nextRes$ = $(next).appendTo(pagination$);
			//creating pagination events for next and previous
			nextRes$.click(function () {
				var j = 0;
				while ((resBox$.text().indexOf($(resultsHtml[j]).text())) && (resultsHtml[j])) {
					j++;
				}
		        resBox$.html(resultsHtml[j + 1]);
		        var init_items = ((j+2)*10 > data.length) ? data.length : (j+2)*10;
				showing_message = options.LANG_SHOWING +" "+ (1+ (j+1)*10)+"-"+ init_items +" "+ options.LANG_OF + " "+ data.length +" "+ options.LANG_ITEMS;
				$("#showing_pagination").text(showing_message);

				if (resultsHtml[j + 2]) {
					nextRes$.show();
				}
				else {
					nextRes$.hide();
				}
				prevRes$.show();
				pagingNum$.css("color", "black");
				$("#resultsGroup" + j).css("color", "purple");
			});
			prevRes$.click(function () {
				var j = 0;
				while ((resBox$.text().indexOf($(resultsHtml[j]).text()) == -1) && (resultsHtml[j])) {
					j++;
				}
				resBox$.html(resultsHtml[j-1]);
				var init_items = (j*10 > data.length) ? data.length : j*10;
				showing_message = options.LANG_SHOWING +" "+ (1+ (j-1)*10)+"-"+ init_items +" "+ options.LANG_OF + " "+ data.length +" "+ options.LANG_ITEMS;
				$("#showing_pagination").text(showing_message);

				if (resultsHtml[j - 2]) {
					prevRes$.show();
				}
				else {
					prevRes$.hide();
				}
				nextRes$.show();
				pagingNum$.css("color", "black");
				$("#resultsGroup" + j).css("color", "purple");
			});
			pagingNum$.click(function () {
				var resultsNum = $(this).attr('id');
				var preId = "resultsGroup";
				resultsNum = resultsNum.replace(preId, '');
				resultsNum = parseInt(resultsNum, 10);
				resBox$.html(resultsHtml[resultsNum - 1]);
				var init_items = (resultsNum*10 > data.length) ? data.length : resultsNum*10;
				showing_message = options.LANG_SHOWING +" "+ (1+ (resultsNum-1)*10)+"-"+ init_items +" "+ options.LANG_OF + " "+ data.length +" "+ options.LANG_ITEMS;
				$("#showing_pagination").text(showing_message);
				pagingNum$.css("color", "black");
				$("#resultsGroup" + resultsNum).css("color", "purple");
				resBox$.html(resultsHtml[resultsNum - 1]);
				if (resultsHtml[resultsNum]) {
					nextRes$.show();
				}
				else {
					nextRes$.hide();
				}
				if (resultsHtml[resultsNum - 2]) {
					prevRes$.show();
				}
				else {
					prevRes$.hide();
				}
			});
		}
	}

	function getURLParam(parameter, url) {
		var querySTR = url.substr(url.indexOf("?") + 1);
		var params = querySTR.split('&');
		for (var i = 0; i < params.length; i++) {
			var pair = params[i].split('=');
			if (pair[0] == parameter) {
				return pair[1];
			}
		}
	}

	search$.submit(function (event) {
		/* stop form from submitting normally */
		event.preventDefault();
		var form = $(this);
		if ('' === search$.find('input[name="str"]').val() || search$.find('input[name="str"]').val() == options.MODULE_SEARCH_TITLE + '...') {
			/* empty value  - do nothing */
			return;
		}
		var request = $.ajax({
			url: form.attr('action'),
			data: form.serialize(),
			dataType: "json",
			beforeSend: function (xhr) {
				xhr.setRequestHeader("X-Requested-With", "GET REQUEST");
			}
		});

		request.done(function (data) {
			searchResult((data.status == 'ok') ? data.results : data.messages);
		});

		request.fail(function (jqXHR, textStatus) {
			alert("Request failed: " + textStatus);
		});
	});
};
