$(function() {
    $('#btnSearch').click(function() {
        Search();
    });
   
    var AppId = "AppId=31F3C13DC5D41C42D4A18F9E04DE1DEA73762186";
    var Query = "Query="
    var Sources = "Sources=Web";
    var Version = "Version=2.0";
    var Market = "Market=zh-cn"; // I'm a Kiwi.  You may want to change your localisation.
    var Options = "Options=EnableHighlighting";
    var WebCount = 10;
    var WebOffset = 0;


    function Search() {
		if($.trim($("#txtQuery").val())=="")
		{
			$("#txtQuery").focus();
			return;
		}
        var searchTerms = $('#txtQuery').val().replace(" ", "+");
		searchTerms = encodeURI(searchTerms);   
        var arr = [AppId, Query + searchTerms, Sources, Version, Market, Options, "Web.Count=" + WebCount, "Web.Offset=" + WebOffset, "JsonType=callback", "JsonCallback=?"];
        var requestStr = "http://api.search.live.net/json.aspx?" + arr.join("&");

        $.ajax({
            type: "GET",
            url: requestStr,
            dataType: "jsonp",
            success: function(msg) {
                SearchCompleted(msg);
            },
            error: function(msg) {
                alert("Something hasn't worked\n" + msg.d);
            }
        });
    }

    function SearchCompleted(response) {

        var errors = response.SearchResponse.Errors;
        if (errors != null) {            
            DisplayErrors(errors);
        }
        else {            
            DisplayResults(response);
        }
    }

    function DisplayResults(response) {
        $("#result-list").html("");                                
        $("#result-navigation li").filter(".nav-page").remove();   
        $("#result-aggregates").children().remove();               

        var results = response.SearchResponse.Web.Results;
       
        $('#result-aggregates').prepend("<p>检索词： " + response.SearchResponse.Query.SearchTerms + "</p>");
        $('#result-aggregates').prepend("<p id=\"result-count\">当前显示 " + StartOffset(results)
            + " 至 " + EndOffset(results)
            + "&nbsp;&nbsp;总共:" + parseInt(response.SearchResponse.Web.Total) + "</p>");

        
        var link = [];                                  
        var regexBegin = new RegExp("\uE000", "g");     
        var regexEnd = new RegExp("\uE001", "g");       
        for (var i = 0; i < results.length; ++i) {            
            link[i] = "<li><a href=\"" + results[i].Url + "\" title=\"" + results[i].Title + "\">"
                + results[i].Title + "</a>"
                + "<p>" + results[i].Description + "<p>"
                + "<p class=\"result-url\">" + results[i].Url + "</p></li>";
            
            link[i] = link[i].replace(regexBegin, "<strong>").replace(regexEnd, "</strong>");
        }
        $("#result-list").html(link.join(''));
        
        CreateNavigation(response.SearchResponse.Web.Total, results.length);
    }

    function StartOffset(results) {
        if (WebOffset == 0) {
            return 1;
        }
        else {
            return (WebOffset * results.length) + 1;
        }
    }

    function EndOffset(results) {
        if (WebOffset == 0) {
            return results.length;
        }
        else {
            return (WebOffset + 1) * results.length;
        }
    }

    function CreateNavigation(totalHits, pageSize) {
        var totalPages = (totalHits / pageSize > 10) ? 10 : parseInt(totalHits / pageSize);
        var nav = [];
        for (var i = 0; i < totalPages; i++) {
            nav[i] = "<li class=\"nav-page\">" + (i + 1) + "</li>";
        }
        $("#result-navigation li:first").after(nav.join(''));
        
        $("#result-navigation li.nav-page").click(function() {
            WebOffset = parseInt($(this).html()) - 1;
            Search();
        });
        
        $("#result-navigation").show();
    }

    $("#prev").click(function() {
        if (WebOffset > 1) WebOffset--;
        Search();
    });

    $("#next").click(function() {
        WebOffset++;
        Search();
    });

    function DisplayErrors(errors) {
        var errorHtml = [];

        for (var i = 0; i < errors.length; ++i) {
            errorHtml[i] = "<li>" + errors[i] + "</li>";
        }
        $('#error-list').append(errorHtml.join(''));
    }
});