var AS1 = {
    server: "http://as.asp.kbmj.com",
    service: null,

    config: function(config) {
        $.extend(true, this, config);
    },

    htmlEscape: function(str) {
        if (str) {
            return String(str).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
        } else {
            return "";
        }
    },

    _encodeQuery: function(query) {
        if (query) {
            return encodeURIComponent(query.replace(/[\/~]/g, 
                                                    function(s) {
                                                        return "~" + s.charCodeAt(0).toString(16);
                                                    }));
        } else {
            return "";
        }
    },

    Form: {
        init: function(config) {
            var self = this;
            this.searchPage = config.page;
            this.queryElement = config.query;
            this.qf = config.qf;
            $(config.form).submit(function(event) {
                var qf = null;
                if (config.qf) {
                    qf = $(this).find(config.qf).attr("value");
                }
                self.searchFromForm($(this).find(config.query).attr("value"), qf);
                event.preventDefault();
            });
            $(config.query).suggest(AS1.server + '/' + AS1.service + '/suggest.json', {minchars: 2});
        },
        
        searchFromForm: function(query, qf) {
            $(this.queryElement).attr('value', query);
            if (AS1.Searcher) {
                AS1.Searcher.searchFromForm(query, qf);
            } else {
                var url = this.searchPage + "#q=" + AS1._encodeQuery(query);
                if (qf) {
                    url += "/qf=" + AS1._encodeQuery(qf);
                }
                location.href = url;
            }
        }
    }
}
