﻿;
(function($) {

    $.siteSearch = {
        timer: null,
        setup: function(settings) {
            var container = $('<div />');
            $(container).attr("id", settings.id);
            $(container).attr("class", settings.cssclass);

            var label = $("<label></label>").attr("for", "site_search_phrase");
            label.html("Search");

            label.appendTo(container);

            var span = $("<span></span>")

            var textBox = $(document.createElement("input")).attr("type", "text");
            textBox.attr("id", "site_search_phrase");
            textBox.attr("name", "phrase");
            textBox.appendTo(container);

            var save = $("<a/>").attr("href", settings.url);
            $(save).bind("click", this.search);
            save.appendTo(container);

            $(textBox).bind("keypress", function(e) {
                var code = e.charCode || e.keyCode;
                if (code == 13) { /*Enter keycode*/
                    $(save).click(); return false;
                }
            });

            span.appendTo(container);

            var result = $("<span></span>").attr("class", "result");
            result.hide();
            result.appendTo(container);

            var el = $(settings.container);
            container.appendTo(el);

            return container;
        },
        search: function(e) {
            var url = $(this).attr("href");
            var id = "#" + $(this).closest("div").attr("id");
            $.siteSearch.notify(id, 'Searching...<img src="/assets/images/ajax-progress.gif" alt="Searching..." style="vertical-align:text-top;" />', '');
            try {
                $.ajaxPost({
                    url: url,
                    selector: id,
                    success: function(response) {
                        var data = $.evalJSON(response);
                        if (data.found == true) {
                            $.siteSearch.notify(id, 'Redirecting...<img src="/assets/images/ajax-progress.gif" alt="Redirecting..." style="vertical-align:text-top;" />', '');
                            setTimeout(function() { $.siteSearch.redirect(data.url); }, 3000);
                        }
                        else {
                            $.siteSearch.notify(id, 'No result found.', 'attention');
                        }
                    },
                    error: function(xhr, errorStatus, errorResponse) {
                        $.siteSearch.notify(id, "Error: " + errorResponse.Message, "attention");
                    }
                });
            }
            catch (e) {
                alert(e);
            }

            return false;
        },
        redirect: function(url) {
            window.location = url;
        },
        notify: function(id, message, cssClass) {
            if ($.siteSearch.timer)
            { clearTimeout($.siteSearch.timer); }

            var result = $(id).children("span.result");
            result.hide();
            result.html(message);
            result.attr('class', 'result');
            result.addClass(cssClass);
            result.show();

            $.siteSearch.timer = setTimeout(function() { $(result).fadeOut('slow'); }, 4000);
        }
    };

    $.fn.siteSearch = function(options) {

        var defaults = { url: '/ws/SiteSearchProxy.asmx/Search', id: 'site_search', cssclass: 'site_search', container: '#page' };
        var settings = $.extend({}, defaults, options);
        var form = $.siteSearch.setup(settings);

    }
})(jQuery);