var SiteSearch = {
    init : function () {
        SiteSearch.page = 0;
        SiteSearch.state = 'inactive';
        SiteSearch.results.count = 0;
        
        SiteSearch.getVars = SiteSearch.getUrlVars();
        
        $('#load-more').click(SiteSearch.loadMoreResults);

        if (SiteSearch.getVars['q'] != undefined && SiteSearch.getVars['q'].length > 0) {
            $('#search-box').val(unescape(SiteSearch.getVars['q'].replace(/\+/g, ' ')));
            SiteSearch.search();
        }
    },
    
    loadMoreResults : function() {
        if (SiteSearch.state == 'inactive') {
            SiteSearch.search();
        }
        return false;
    },
        
    getUrlVars : function () {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    },
 
    displayResults : function(data, textStatus, xhr) {
        $('#loading').hide();

        SiteSearch.state = 'inactive';

        SiteSearch.results.totalResults = $(data).find("M").text();
        SiteSearch.results.searchTerms = $(data).find("PARAM[name=q]").attr("js_escaped_value");
        if (SiteSearch.page++ == 0) {
            if ($(data).find('Suggestion').length > 0) {
                $('#cse').append('<h3>Did you mean: <a href="?q=' + 
                    escape($(data).find('Suggestion').attr('q').replace(/\s/g, '+')) + '">' + 
                    $(data).find('Suggestion').text() + '</a></h3>');
            }
        
            $('#cse').append('<h3>Results for: <strong>' + SiteSearch.results.searchTerms + '</strong></h3>' + 
                '<p id="results-summary">Showing results 1 to <span id="result-count"></span>  of  <span id="total-results"></span></p>'
            );
        }
   
        if ($(data).find('RES').find('R').length > 0) {
            $('#cse').append('<p class="page">Page '+SiteSearch.page+'</p>');
    
            $(data).find('RES').find('R').each(function() {
                $('#cse').append('<div class="search-results">' +
                    '<h3>'+ ($(this).attr('MIME') =="application/pdf" ? '<span>[PDF]</span> ' : '' )+'<a href="'+$(this).find('U').text() +'">'+$(this).find('T').text()+'</a></h3>'+
                    '<p class="snippet">'+ $(this).find('S').text() + '</p>' + 
                    '<p class="link">'+ $(this).find('U').text() + '</p>' + 
                    '</div>'
                );
                SiteSearch.results.count++;
            });
        }

        if (SiteSearch.results.count > 0) {
                $('#result-count').html(SiteSearch.results.count+ ' '); // space fix for ie8
                $('#total-results').html(SiteSearch.results.totalResults);
        } else {
                $('#results-summary').text("No results found");
        }
        
        if ($(data).find("NU").length == 0) {
            SiteSearch.status = 'done';
        } else {
            $('#load-more').show();
        }
    },
    
    displayError : function(msg) {
        $('#cse').append('<div class="error">Unable to load search results</div>');
        SiteSearch.status = 'error';
        $('#loading').hide();
        $('#load-more').hide();
    },
        
    search : function() {
        SiteSearch.state = 'searching';
        $('#loading').show();
        $('#load-more').hide();

        $.ajax({
            url : "/cse/",
            type : "GET",
            data : 'q='
                  + SiteSearch.getVars['q'] + '&start=' + (SiteSearch.page*10),
            dataType : "xml", 
            success : SiteSearch.displayResults,
            error : SiteSearch.displayError
        }); 
    },

    results :{}
};
