var searchResultsPath;
var currentQuery = null;
var categories=[];
var currentPage = 1;

function searchContent(query) {
	if (query == undefined)
		query = $("#query").val();
	var newLocation = searchResultsPath + '?query=' + encodeURIComponent(query);
	window.location = newLocation;
	return false; // dla onsubmit
}

function searchContent2(q) {
	if (q == undefined || q == null)
		q = $("#q").val();
	performSearchContent(q);
	return false;
}

function initSearchEngine() {
	var query = compGetQueryFromURL();
	$("#query").val(query);
	$("#q").val(query);
	performSearchContent(query);
}

function performSearchContent(q) {
	if (q == null || q == "") return;
	currentQuery = null;
	showSearchResultsPage(q, 1);
}

function showPage(pg) {
	showSearchResultsPage(currentQuery, pg);
}

/**
 * Zwraca zapytanie z urla
 */
function compGetQueryFromURL() {
	var params = getUrlVars();
	for(var x in params){
		if(x == "query") {
			return params[x];
		}
	}
	return "";
}

function showSearchResultsPage(query, page) {
	var searchResultsPerPage = getResultsPageSize();
	var pageStart = (page-1) * searchResultsPerPage;
	var pageEnd = pageStart + searchResultsPerPage;
	var resultTxt = '<ul class="searchList"><li><h2><a title="{title}" href="{url}">{title}</a></h2><p>{summary}<a class="linkPointer" title="{title}" href="{url}"><span>więcej</span></a></p><p><a href="{url}">{url}</a></p></li></ul>';
	var msgTxt = '<h3>Znaleziono {totalResults} wyników wyszukiwania dla frazy &quot;{origQuery}&quot;.</h3>';
	params = {query: query, start: pageStart, end: pageEnd };
	var msg = "query: "+query+", pageSize: "+searchResultsPerPage;
	$.each(categories, function(i, c) {
		params["cat"+i]=c;
		msg+=", cat"+i+"="+c;
	});
	if ($("#doctypePdf").val() == 'on') {
		params["doctype1"]=".pdf";
		msg+=", doctype1=.pdf";
	}
	if ($("#doctypeSite").val() == 'on') {
		params["doctype2"]=".html";
		msg+=", doctype2=.html";
	}
	//alert(msg);
		
	$.ajax({
		url: gWebportalContext+'Search',
	        method: 'get',
	        async: true,
	        dataType: 'xml',
	        data: params, 
	        success: function(resp) {
		        root = resp.getElementsByTagName("search-results")[0];
		        var origQuery = getDOMChildText(root, "original-query");
		        currentQuery = origQuery;
		        var totalCount = getDOMChildText(root, "total-results");
		        var results = root.getElementsByTagName("result");
		        var txt = "";
		        $.each(results, function(i,r) {
		        	txt += replaceVars(resultTxt, {
		        		title: getDOMChildText(r, "title"),
		        		summary: getDOMChildText(r, "summary"),
		        		url: getDOMChildText(r, "url")
		        	});
		        });
		        window.xmlResp = resp;
		        $("#searchResultsList").html(txt);
		        txt = "";
		        if (totalCount > 0) {
			        txt = replaceVars(msgTxt, {
			        	totalResults: totalCount,
			        	origQuery: origQuery
			        });
		        }
		        $("#searchMsg").html(txt);
		        updatePagePanel(page, totalCount, searchResultsPerPage);
	        },
	        error: function(request, status, error) {
	        	var txt= request.responseText;
	        	var script= txt.substring("<script type=\"text/javascript\">".length, txt.length - "</script>".length);
	        	eval(script);
	        }
	});	
}

/** Aktualizuje panel stronicowania */
function updatePagePanel(page, totalCount, pageSize) {
	currentPage = page;
	var txtBegin='<ul class="pagination">';
	var txtCount='<li class="counter">{currentPage} z {pageCount}</li>';
	var txtPrev='<li class="prev"><a title="Poprzednia" href="javascript:showPage({currentPage}-1)"><span>Poprzednia</span></a></li>';
    var txtPage='<li {pageClass}><a title="{page}" href="javascript:showPage({page})"><span>{page}</span></a></li>';
    var selClass='class="selected"';
    var txtNext='<li class="next"><a title="Następna" href="javascript:showPage({currentPage}+1)"><span>Następna</span></a></li>';
    var txtEnd='</ul>';
    var emptyDiv = $("#emptySearchResults")[0];
    
    var rest = totalCount % pageSize;
    var pgCount = ((totalCount - rest) / pageSize) + (rest != 0 ? 1 : 0);
    
    var txt= "";
    if (totalCount > 0) {
	    txt += txtBegin;
	    var params = {currentPage: currentPage, pageCount: pgCount, pageClass: "", page: page};
	    txt += replaceVars(txtCount, params);
	    if (page > 1) txt += replaceVars(txtPrev, params);
	    for (var l=1; l<=pgCount; l++) {
	    	params.pageClass = l == page ? selClass : "";
	    	params.page = l;
	    	txt += replaceVars(txtPage, params);
	    }
	    if (page < pgCount) txt += replaceVars(txtNext, params);
	    txt += txtEnd;
	    
	    emptyDiv.style.display="none";
    } else {
    	emptyDiv.style.display="block";
    }
    $("#searchResultsPages").html(txt);
}

/** Aktualizacja wybrnych kategorii. */
function updateCategories(a, cat) {
	categories = (cat == null) ? [] : cat;
	searchContent2(currentQuery);
}

function updateSearchResults() {
	searchContent2(currentQuery);
}

function getResultsPageSize() {
	var x = $("resultsPageSize");
	if (x[0] == null) return 10;
	return parseInt(x.val());
}

/** Replace variables in text. Variable format: "{"+var_name+"}". */
function replaceVars(txt, vars) {
	for (var x in vars) {
		var key = "{"+x+"}";
		var val = vars[x];
		var orig;
		do {
			orig = txt;
			txt = txt.replace(key, val);
		} while (orig != txt)
	}
	return txt;
}
