var searchInterval = null;
var searchInterval_time = 1000;

var search_searchString = "";
var search_searchType = "";
var search_customParameters = "";
var search_anyEntry = true;

function ShowSearchDiv(innerHtml)
{
    var divSearch = document.getElementById("divSearch");
    
    if (innerHtml != undefined && innerHtml != null && innerHtml != '')
    {
        var divSearchResults = document.getElementById("divSearchResults");
        divSearchResults.innerHTML = innerHtml;
    }
    
    if (typeof onShowSearchDiv == 'function')
    {
        onShowSearchDiv();
    }
    
    divSearch.style.display = "block";
}

function HideSearchDiv()
{
    var divSearch = document.getElementById("divSearch");
    divSearch.style.display = "none";
}

function ShowMoreResultsDiv()
{
    var divMoreResults = document.getElementById("divMoreResults");
    divMoreResults.style.display = "block";
}

function HideMoreResultsDiv()
{
    var divMoreResults = document.getElementById("divMoreResults");
    divMoreResults.style.display = "none";
}


function StartSearchInterval()
{
    if (searchInterval != null)
    {
        clearInterval(searchInterval);
    }

    search_searchType = document.getElementById("inpSearchType").value;
   
    if (typeof onSearchIntervalStart == 'function')
    {
        onSearchIntervalStart();
    }
    
    searchInterval = setInterval(RunMiniSearch, searchInterval_time);
}

function StopSearchInterval()
{
    clearInterval(searchInterval);
}

function RunMiniSearch()
{
    clearInterval(searchInterval);
    if (search_searchString == "")
    {
        HideSearchDiv();
    }
    else
    {
        Forbrugerliv.Search.FrontEnd.Search((search_anyEntry ? "%" : "") + search_searchString+"%", search_searchType, search_customParameters, RunMiniSearch_Callback);
    }
}

function RunMiniSearch_Callback(response)
{
    var resultHtml = "";
    var resultsList = response.value;
    
    if (resultsList == undefined || resultsList == null || resultsList.length <= 0)
    {
        HideSearchDiv();
    }
    else
    {
        HideMoreResultsDiv();
        for (var i=0; i<resultsList.length; i++)
        {
            var currentItem = resultsList[i];
            var itemHtml = searchItemTemplate;
            
            var allValuesEmpty = true;
            for (var j=0; j<currentItem.keys.length; j++)
            {
                var variableName = currentItem.keys[j];
                var variableValue = currentItem.getValue(variableName);
                
                if (variableValue != null && variableValue != "")
                {
                    allValuesEmpty = false;
                }
                
                var itemHtml = itemHtml.replace("<!--@"+variableName+"-->", variableValue);
            }
            
            if (allValuesEmpty)
            {
                ShowMoreResultsDiv();
            }
            else
            {
                resultHtml += itemHtml;
            }
        }
        
        ShowSearchDiv(resultHtml.replace(/\\"/g, "\"").replace(/\\'/g, "'"));
    }
}

function RunSearch(searchString)
{
    searchString = EscapePatternCharacters(searchString.trim());
    if (searchString != '')
    {
        clearInterval(searchInterval);
        HideSearchDiv();
        if (typeof RunSearchAjax == 'function')
        {
            RunSearchAjax((search_anyEntry ? "%" : "") + searchString +"%");
        }
    }
}



var isSearchInputChanged = false;

function inpSearch_OnKeyPress(e)
{
    if (getKeyCode(e) == 13)
    {
        RunSearch(document.getElementById('inpSearch').value);
    }
}

function inpSearch_OnKeyDown(e)
{
    StopSearchInterval();
}

function inpSearch_OnKeyUp(e)
{
    isSearchInputChanged = true;

    if (getKeyCode(e) != 13)
    {
        StartSearchInterval();
    }
}

function btnSearch_OnClick(e)
{
    if (isSearchInputChanged == true)
    {
        RunSearch(document.getElementById('inpSearch').value);
    }
}

