/*
Referwence of useful variables found in script.

d  : value searched for
co : Number of pages found
r  : Array of results
m  : Search for word or sentence. m=0 -> word
*/

var currLang='sv';
if(location.href.indexOf('/en/')!==-1) currLang='en';

function search_form(filterType) 
{
    //If the query isnt empty
    var tb = document.getElementById("tbSearchBox"); //namePrefix + 
	var d = unescape(tb.value).replace(/(^  *|  *$)/g, "");
	if(d.length == 0) return;
	
    var od = d; //od = value searched for

    var m = 0; //seach for a word or a full sentence
    if (d.charAt(0) == '"' && d.charAt(d.length - 1) == '"') {
	    m = 1;
    }

    var r = new Array(); //new array of results
    var co = 0;
    
    //search for word
    if (m == 0) {
	    var woin = new Array(); //array holding if a word should be included or excluded
	    var w = d.split(" ");
	    for (var a = 0; a < w.length; a++) {
		    woin[a] = 0;
		    if (w[a].charAt(0) == '-') { //exclude word if it has a '-' in front
			    woin[a] = 1;
		    }
	    }
    	
	    for (var a = 0; a < w.length; a++) { //remove odd caracters from search (remove - (minus sign) )
		    w[a] = w[a].replace(/^\-|^\+/gi, "");
	    }
    	
	    a = 0; //reset iterator to keep number of passed lines (results)
	    for (var c = 0; c < sData.length; c++) {
		    pa = 0; //number of patterns passed
		    nh = 0; //number of patterns processed
		    for (var i = 0; i < woin.length; i++) {
			    if (woin[i] == 0) {
				    nh++;
				    var pat = new RegExp(w[i], "i");
				    var line = sData[c];
				    var rn = line.search(pat); //return times this pattern is found
				    if (rn >= 0) {
					    pa++;
				    } else {
					    pa = 0;
				    }
			    }
			    if (woin[i] == 1) {
			        nh++;
				    var pat = new RegExp(w[i], "i");
				    var rn = sData[c].search(pat);
				    if (rn >= 0) {
					    pa = 0;
				    }
				    else
				    {
				        pa++;
				    }
			    }
		    }
		    if (pa == nh && isInScope(sData[c],filterType)) { //if number of patterns is equal to number of patterns passed, add line to results
			    r[a] = sData[c];
			    a++; //increment result count
		    }
	    }
	    co = a; //Set number of results
    }

    //search for sentece
    if (m == 1) 
    {
	    d = d.replace(/"/gi, "");
	    var a = 0;
	    var pat = new RegExp(d, "i");
	    for (var c = 0; c < sData.length; c++) {
		    var rn = sData[c].search(pat);
		    if (rn >= 0 && isInScope(sData[c],filterType)) {
			    r[a] = sData[c]; //add line to result
			    a++;
		    }
	    }
	    co = a;
    }
    
    printResult(r,d,m);
    return false;
}

//checks if page is in the right section depending on filter criteria
function isInScope(row,type)
{
    //type: 1 = all, 2 = section, 3 = Page
    if(type == 1) return true; //if 1, always return true (filter off)
    
    var section = "";
    var page = "";
    
    var url = window.location.toString();
    var aUrl = url.split("/");
    section = aUrl[aUrl.length -2];
    
    //if type is filter on page, fill in the page, otherwise, leave it empty.
    if(type == 3)
    {
        page = aUrl[aUrl.length -1];
        page = page.substring(0,page.indexOf("."));
    }
    
    //split the row and compare values
    var aRow = row.split("^");
    if(section != aRow[4]) 
    {
        return false;
    }
    else
    {
        if(page == "" || page == aRow[5]) return true;
        else
        { 
            return false;
        }
    }  
}

function getSearchPattern(d,m)
{
    if(m == 0)
    {
        var criteria = d.split(" ")[0];
        return new RegExp(criteria, "i");
    }
    else
    {
        return new RegExp(d, "i");
    }
}

//output the list of pages matching the criteria searched for
function printResult(r,d,m) 
{ 
    var resultPanel = document.getElementById("resultPanel"); //namePrefix + 
    resultPanel.style.display = "block";    
    
    var resultHtml = "";
     
     
   
    if (r.length == 0) 
    {
		if(currLang=='en')
			resultHtml = "Your search did not match any documents.";
		else
			resultHtml = "Din s&ouml;kning gav inga resultat.";
    }
    else
    {
        
        for (var a = 0; a < r.length; a++) 
        {
	        var os = r[a].split("^"); //os keeps an array of the searchline
    		var pattern = getSearchPattern(d,m);
    		var searchPos = os[3].search(pattern);
    		if(searchPos > -1)
    		{
    		    var stringLengtToTake = 250;
    		    var summaryText = os[3].substring(searchPos,searchPos + stringLengtToTake);   
    		}
    		else
    		{
    		    var summaryText = "";
    		}
	        
	        resultHtml += '<p>'+ (a + 1) + '. <a href="../..' + os[1] + '">' + os[0] + '</a><br>' + os[2] + '<br>' + summaryText + '</p>';
        }
    }
    
	//set result to div.
	if(currLang=='en'){
		document.getElementById("noOfResults").innerHTML = "<h2>Results</h2> <p>" + r.length + " page(s) found:</p>"; //namePrefix + 
		document.getElementById("resultList").innerHTML = resultHtml; //namePrefix + 	
	}else{
		document.getElementById("noOfResults").innerHTML = "<h2>Resultat</h2> <p>" + r.length + " sid(or) hittades:</p>"; //namePrefix + 
		document.getElementById("resultList").innerHTML = resultHtml; //namePrefix + 
	}
	
	searchFix(1);

}
function searchFix(hide) {
	var style = 'visible';
	if (hide)
		style = 'hidden';
	
	var excel_link = 	document.getElementById('excel-link');
	var popups = 	document.getElementById('popups');
	var table = document.getElementById('graph-parent');
	
	if (excel_link) excel_link.style.visibility = style;
	if (popups) popups.style.visibility =style;
	if (table) table.style.visibility = style;

}

function close_search(){
    var resultPanel = document.getElementById("resultPanel") //namePrefix + 
    resultPanel.style.display = "none";
	searchFix(0)
}

