var m_strSite = '';
var m_strUserIp = '';
var m_strGoogleSearchKey = '';
var m_strSearchString = '';

function InitSearch(p_strSearchTerm, p_strSite, p_strUserIp, p_strGoogleSearchKey) {
    m_strSite = p_strSite;
    m_strUserIp = p_strUserIp;
    m_strGoogleSearchKey = p_strGoogleSearchKey;
    m_strSearchString = p_strSearchTerm;
    Search(p_strSearchTerm);
}

function Search(p_strSearchTerm, p_intStart) {
    if (p_strSearchTerm == null || p_strSearchTerm.length == 0) return;
    if (p_intStart == null) p_intStart = 0;
    var l_objOldScript = document.getElementById('googleSearch');
    if (l_objOldScript != null) {
        l_objOldScript.parentNode.removeChild(l_objOldScript);
    }
    
    document.getElementById('SearchedAtString').innerHTML = "" + p_strSearchTerm + "";
    $('#SearchQuery').val(p_strSearchTerm);
    $('#SearchQueryLarge').val(p_strSearchTerm);
    
    l_objScript = document.createElement('script')
    l_objScript.id = 'googleSearch';

    var l_strSrc = "http://ajax.googleapis.com/ajax/services/search/web";
    l_strSrc += "?q=" + p_strSearchTerm + " site:" + m_strSite; /*inurl:w3s.nl/project*/
    l_strSrc += "&v=1.0"; /*protocol version number*/
    l_strSrc += "&userip=" + m_strUserIp; /*ip address of end-user*/
    l_strSrc += "&rsz=large"; /*small == 4 results, large == 8 results*/
    l_strSrc += "&hl=nl"; /*host language*/
    l_strSrc += "&key=" + m_strGoogleSearchKey; /*application's key for referer header*/
    l_strSrc += "&start=" + p_intStart; /*start index of the first search result*/
    l_strSrc += "&callback=GoogleSearchCallback"; /*javascript function to call*/
    /* l_strSrc += "&context=" + p_strContext; */
    l_objScript.src = l_strSrc;

    document.getElementsByTagName('head')[0].appendChild(l_objScript);
}

function GoogleSearchCallback(p_objJSON) {
    document.getElementById('NextButton').style.display = 'inline';
    document.getElementById('ResultsContainer').style.display = 'block';
    BindElementToJSON(document.getElementById("Result"), p_objJSON.responseData.results);
    AmountResults(p_objJSON)
}

function AmountResults(p_objJSON) {
    var l_intCurrentPage = p_objJSON.responseData.cursor.currentPageIndex + 1;
    var l_intCount = 1
    var l_intResults = p_objJSON.responseData.cursor.estimatedResultCount;
    m_strMoreResults = p_objJSON.responseData.cursor.moreResultsUrl.replace('start=0', 'start=64');
    if (l_intResults != 0 && l_intResults != undefined)
        document.getElementById('aantalResultaten').innerHTML = "" + l_intResults + "";
    else
        document.getElementById('aantalResultaten').innerHTML = "geen";
    if (l_intResults > 8) {
        document.getElementById('PreviousNext1').style.display = 'block';
        document.getElementById('PreviousNext2').style.display = 'block';
    }
    if (l_intResults > 16)
        document.getElementById('PreviousNext3').style.display = 'block';
    if (l_intResults > 24)
        document.getElementById('PreviousNext4').style.display = 'block';
    if (l_intResults != 0 && ((m_intPage + 4) > l_intResults)) {
        document.getElementById('NextButton').style.display = 'block';
    }
}
var m_intPage = 0;
var m_strMoreResults = '';

function More() {
    m_intPage += 4;
    if (m_intPage == 64) {
        document.location = m_strMoreResults;
    } else if (m_intPage == 60) {
        document.getElementById('NextButtonGoogle').style.visibility = 'visible';
    } else {
        Search(m_strSearchString, m_intPage);
    }
}

function BindElementToJSON(p_objElement, p_jsonData) {
    p_objElement.style.display = 'block';
    var l_objParentNode = p_objElement.parentNode;
    for (var l_intIndex = l_objParentNode.childNodes.length - 1; l_intIndex >= 0; l_intIndex--) {
        var l_objChildNode = l_objParentNode.childNodes[l_intIndex];
        if (l_objChildNode.tagName == p_objElement.tagName && l_objChildNode.id == p_objElement.id && l_objChildNode != p_objElement) l_objParentNode.removeChild(l_objChildNode);
    }
    for (l_Key in p_jsonData) {
        var l_jsonRecord = p_jsonData[l_Key];
        var l_objElement = p_objElement.cloneNode(true);
        l_objParentNode.insertBefore(l_objElement, p_objElement);
        SetNodeValuesFromJSON(l_objElement, l_jsonRecord);
    }
    document.getElementById('resultatenRegel').style.display = 'block';
    p_objElement.style.display = 'none';
}

function SetNodeValuesFromJSON(p_objNode, p_jsonData) {
    SetNodeValueFromJSON(p_objNode, p_jsonData);
    var l_intLength = p_objNode.childNodes.length;
    for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
        var l_objNode = p_objNode.childNodes[l_intIndex];
        SetNodeValuesFromJSON(l_objNode, p_jsonData);
    }
}

function SetNodeValueFromJSON(p_objNode, p_jsonData) {
    var l_strId = p_objNode.id;
    if (l_strId != null) {
        var l_objMatch = /^(.+)_\d+$/.exec(l_strId);
        if (l_objMatch != null) {
            if (document.getElementById(l_objMatch[1]) != null) {
                l_strId = l_objMatch[1];
            }
        }
        var l_jsonData = GetJSONValue(p_jsonData, l_strId)
        if (l_jsonData != null) {
            var l_strTagname = p_objNode.tagName;
            if (l_strTagname != null) {
                l_strTagname = l_strTagname.toLowerCase();
                switch (l_strTagname) {
                    case "a":
                        p_objNode.href = l_jsonData;
                        break;
                    case "div":
                    case "span":
                        p_objNode.innerHTML = l_jsonData.replace('<b>...</b>','...').replace('<b>...</b>','...');
                        break;
                    case "img":
                        p_objNode.src = l_jsonData;
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

function GetJSONValue(p_jsonData, p_strKey) {
    if (p_jsonData == null || p_strKey == null) return null;
    var l_arrKey = p_strKey.split('.');
    var l_jsonData = p_jsonData;
    for (l_strKey in l_arrKey) {
        l_strKey = l_arrKey[l_strKey];
        if (l_jsonData == null) break;
        if (l_strKey.length == 0) {
            l_jsonData = l_jsonData[0];
        } else if (/#\d+/.test(l_strKey)) {
            l_jsonData = l_jsonData[parseInt(l_strKey.substr(1))];
        } else {
            l_jsonData = l_jsonData[l_strKey];
        }
    }
    return l_jsonData;
}

