﻿
var customSearch;
var resultText;
var resultTitle;
var searchingText;
var latestSearchControl;
var results;
var currentPageIndex;
var pageSize = 5;

function Search(resText, resTitle, sText) {

    resultText = resText;
    resultTitle = resTitle;
    searchingText = sText;

    google.load('search', '1');
    google.setOnLoadCallback(function() {

        // create a drawOptions object
        var drawOptions = new google.search.DrawOptions();
        drawOptions.setInput('searchInputElement');


        customSearch = new google.search.CustomSearchControl('008851139134339941706:uenhogxksd0');
        customSearch.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);

        customSearch.setSearchCompleteCallback(this,
                            function(searchControl, searcher) {

                                for (var i = 0; i < searcher.results.length; i++) {
                                    results[results.length] = searcher.results[i];
                                }

                                if (!searcher.cursor || searcher.cursor.currentPageIndex == 0) {
                                    showResultsPage(0);
                                } else {
                                    setResultsCount();
                                }

                                if (searcher.cursor && searcher.cursor.pages.length - 1 != searcher.cursor.currentPageIndex) {
                                    searcher.gotoPage(searcher.cursor.currentPageIndex + 1);
                                }
                            });

        customSearch.draw(null, drawOptions);
    }, true);
}

var setResultsCount = function() {
    var searchText = document.getElementById('searchInputElement').value;
    var resultsHeader = document.getElementById('resultsHeader');
    var pageLinks = document.getElementById('pageLinks');
    var text = resultText;
    var content = "<div class='navigation'>";
    text = text.replace('{0}', results.length);
    text = text.replace('{1}', searchText);
    resultsHeader.innerHTML = text;
    
    var numPages = (results.length + 1) / pageSize;

    if (numPages >= 2) {

        var firstIndex = 0;
        var lastIndex = numPages - 1;

        if (numPages > 10) {
            //if there are 11 or more pages

            //show previous 5
            if (currentPageIndex > 5) {
                firstIndex = currentPageIndex - 5;
            }

            //show next 5
            if (currentPageIndex < numPages - 6) {
                lastIndex = currentPageIndex + 5;
            }

            //makes sure there is always 11 pages showing
            if (lastIndex < 10) {
                lastIndex = 10;
            }

            while (lastIndex - firstIndex < 10) {

                if (firstIndex > 0) {
                    firstIndex--;
                } else {
                    break;
                }
            }
        }

        if (firstIndex != 0) {
            content += "<a class='active' href='javascript:void(0)' onclick='showResultsPage(" + (firstIndex - 1) + ")'>&lt;&lt;</a>";
        }

        for (var i = firstIndex; i <= lastIndex; i++) {
            if (i == currentPageIndex) {
                content += "<a href='javascript:void(0)' onclick='showResultsPage(" + i + ")'>" + (i + 1) + "</a>";
            }
            else {
                content += "<a class='active' href='javascript:void(0)' onclick='showResultsPage(" + i + ")'>" + (i + 1) + "</a>";
            }
        }

        if (lastIndex != numPages - 1) {
            content += "<a class='active' href='javascript:void(0)' onclick='showResultsPage(" + (lastIndex + 1) + ")'>&gt;&gt;</a>";
        }

        content += "<div class='clear'></div></div>";
        pageLinks.innerHTML = content;

        try {
            //ie
            pageLinks.style.setAttribute("cssText", "display:block");
        }
        catch (ex) {
            pageLinks.setAttribute("style", "display:block");
        }
    }
    else {
        pageLinks.innerHTML = "";

        try {
            //ie
            pageLinks.style.setAttribute("cssText", "display:none");
        }
        catch (ex) {
            pageLinks.setAttribute("style", "display:none");
        }
    }
}

var showResultsPage = function(pageIndex) {

    currentPageIndex = pageIndex;

    var elementWeb = document.getElementById('Search');
    var searchText = document.getElementById('searchInputElement').value;

    var content = "";

    var text = resultText;
    text = text.replace('{0}', results.length);
    text = text.replace('{1}', searchText);

    content = '<div class="page searchResult">';
    content += ('<h2 class="headline">' + resultTitle + '</h2>');
    content += '<div class="header">';
    content += '<img src="/media/images/icons/iconSearch.png" alt="' + resultTitle + '" />';
    content += '<span id="resultsHeader"></span>';
    content += '</div>';

    var curResult;
    for (var i = pageIndex * pageSize; i < results.length && i < (pageIndex + 1) * pageSize; i++) {

        curResult = results[i];

        if (searchText == "...") {
            if (curResult.content.endsWith("<b>...</b>")) {
                curResult.content = curResult.content.substring(0, curResult.content.length - 11) + "...";
            }
        } else {

            var temp = curResult.content;
            curResult.content = curResult.content.replace('<b>...</b>', '...');
            curResult.content = curResult.content.replace('<b>....</b>', '....');

            while (curResult.content != temp) {
                temp = curResult.content;
                curResult.content = curResult.content.replace('<b>...</b>', '...');
                curResult.content = curResult.content.replace('<b>....</b>', '....');
            }
        }

        var linkText = curResult.unescapedUrl;

        content += "<a href='" + curResult.unescapedUrl + "'>" + curResult.titleNoFormatting + "</a>";
        content += "<div class='clear'></div>";
        content += "<p>" + curResult.content + "</p>";
        content += "<a class='link' href='" + curResult.unescapedUrl + "'>" + linkText + "</a>";
        content += "<div class='clear'></div>";

        if (i != ((pageIndex + 1) * pageSize) - 1 && i != results.length - 1) {
            content += "</div>";
            content += "<div class='page searchResult'>";
        }
    }

    content += "</div>";
    content += "<div id='pageLinks' class='page searchResult'></div>";

    elementWeb.innerHTML = content;

    setResultsCount();

    return false;
}


Search.prototype.startSearchOptional = function(event) {
    //Enter clicked
    if (event.keyCode == 13) {
        this.startSearch();
        window.location.hash = "#Search";
        return false;
    }

    return true;
}

Search.prototype.startSearch = function() {

    var searchText = document.getElementById('searchInputElement').value;

    if (this.trim(searchText, " ").length == 0) {
        return false;
    }

    results = new Array();
    currentPageIndex = 0;

    var text = searchingText;
    text = text.replace('{0}', searchText);

    document.getElementById('Search').innerHTML = '<div class="page searchResult"><h2 class="headline">' + resultTitle + '</h2><div class="header"><img src="/media/images/icons/iconSearch.png" alt="' + resultTitle + '" />' + text + '</div></div>';
    document.getElementById('originalContentContainer').innerHTML = '';

    customSearch.execute(searchText);

    return true;
}

Search.prototype.trim = function(str, chars) {
    return this.ltrim(this.rtrim(str, chars), chars);
}

Search.prototype.ltrim = function(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

Search.prototype.rtrim = function(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

String.prototype.endsWith = function(str)
{ return (this.match(str + "$") == str) }

String.prototype.startsWith = function(str)
{ return (this.match("^" + str) == str) }