﻿(function($) {
    KeywordField = function(selector, trigger, prompt) {
        this.prompt = prompt;
        var txt = $(selector);
        if (txt.attr('value') == '') {
            txt.attr('value', prompt).bind('focus.k', function(e) {
                var t = $(e.target);
                t.attr('value', '').unbind('focus.k');
            });
        }
        $(trigger)
            .click(function() {
                var value = txt.attr('value');
                if (value == prompt) {
                    txt.attr('value', '');
                }
            });
    }

    FilterBase = function(sl, p, event, valueSource) {
        var r = new RegExp('([?]?)(&?' + p + '=)([^&]*)(&?)');
        $(sl).bind(event, function(e) {
            var v = escape($(valueSource).get(0).value);
            var s = window.location.search;
            if (r.test(s)) {
                s = s.replace(r, (v.length == 0 ? '$1$4' : '$2' + v + '$4'));
            }
            else if (v.length > 0) {
                if (window.location.search.length == 0) {
                    s = '?' + p + '=' + v;
                }
                else {
                    s += '&' + p + '=' + v;
                }
            }
            window.location.search = s;
        });
    }

    DropDownFilter = function(selector, paramName) {
        this.base = FilterBase;
        this.base(selector, paramName, 'change', selector);
    }

    InputFilter = function(inputSelector, triggerSelector, paramName) {
        this.base = FilterBase;
        this.base(triggerSelector, paramName, 'click', inputSelector);
        $(inputSelector).keypress(function(e) {
            if (e.which == 13) {
                $(triggerSelector).click();
                return false;
            }
        });
    }
})(jQuery);
