1(function($){
2
3    var discoursesearchprovider = {
4        'anchor': null,
5        'successHandler': null,
6        'term': '',
7        'config': JSINFO['plugins']['discoursesearch']
8    };
9
10    (function(_){
11
12        _.addEntry = function() {
13            var entry = this;
14            var $node = $('<dl/>').addClass('search_results').appendTo( _.$root );
15
16            var $link = $('<a/>').attr({
17               'href': entry.url,
18               'target': '_blank'
19            }).text( entry.fancy_title ).addClass('externalurl wikilink1');
20
21            $('<dt/>').appendTo( $node ).append( $link);
22            $('<dd/>').text( entry.blurb ).appendTo( $node );
23        };
24
25        _.filter = function( array, id ) {
26            var $return = null;
27            $.each( array, function() {
28                if ( this.topic_id && this.topic_id == id ) {
29                    $return = this;
30                    return false;
31                }
32            } );
33            return $return;
34        };
35
36        _.loadResults = function( url ) {
37
38            _.$root = $('<div/>').appendTo( _.anchor );
39
40            $.getJSON( url + "/search/query.json?term=" + _.term ).done( function( data ) {
41
42                if ( !data.topics ) { return; }
43
44                $('<h3/>').text( _.config.title ).appendTo( _.$root );
45                $.each( data.topics, function() {
46                    var post = _.filter( data.posts, this.id );
47                    this.blurb = post ? post.blurb : "";
48                    this.url = url + "/t/" + this.slug + "/" + this.id;
49                    _.addEntry.call( this );
50                } );
51
52            } ).always( function() {
53                _.finishedResults();
54            });
55        };
56
57        _.finishedResults = function() {
58            if ( _.successHandler ) {
59                _.successHandler.call( _.anchor );
60            }
61        };
62
63    })(discoursesearchprovider);
64
65    if ( !discoursesearchprovider.config || discoursesearchprovider.config.url.length == 0 ) {
66        return;
67    }
68
69    $.asyncsearch.addProvider(function( term, successHandler ) {
70        discoursesearchprovider.anchor = this;
71        discoursesearchprovider.successHandler = successHandler;
72        discoursesearchprovider.term = term;
73        discoursesearchprovider.loadResults( discoursesearchprovider.config.url );
74    });
75})(jQuery);
76