/*
 Stylish Select 0.4.1 - $ plugin to replace a select drop down box with a stylable unordered list
 http://scottdarby.com/
 Requires: jQuery 1.3 or newer
 Contributions from Justin Beasley: http://www.harvest.org/ & Anatoly Ressin: http://www.artazor.lv/
 Dual licensed under the MIT and GPL licenses.
 */
(function(a) {
    a("html").addClass("stylish-select");
    Array.prototype.indexOf = function(c, d) {
        for (var b = (d || 0); b < this.length; b++) {
            if (this[b] == c) {
                return b
            }
        }
    };
    a.fn.extend({
        getSetSSValue: function(b) {
            if (b) {
                a(this).val(b).change();
                return this
            } else {
                return a(this).find(":selected").val()
            }
        },
        resetSS: function() {
            var b = a(this).data("ssOpts");
            $this = a(this);
            $this.next().remove();
            $this.unbind(".sSelect").sSelect(b)
        }
    });
    a.fn.sSelect = function(b) {
        return this.each(function() {
            var i = {
                defaultText: "Please select",
                animationSpeed: 0,
                ddMaxHeight: "",
                containerClass: ""
            };
            var l = a.extend(i, b), e = a(this), j = a('<div class="selectedTxt"></div>'), r = a('<div class="newListSelected ' + l.containerClass + '"></div>'), z = a('<ul class="newList" style="visibility:hidden;"></ul>'), t = -1, d = -1, m = [], w = false, v = false, x;
            a(this).data("ssOpts", b);
            r.insertAfter(e);
            r.attr("tabindex", e.attr("tabindex") || "0");
            j.prependTo(r);
            z.appendTo(r);
            e.hide();
            j.data("ssReRender", !j.is(":visible"));
            if (e.children("optgroup").length == 0) {
                e.children().each(function(B) {
                    var C = a(this).html();
                    var A = a(this).val();
                    m.push(C.charAt(0).toLowerCase());
                    if (a(this).attr("selected") == true) {
                        l.defaultText = C;
                        d = B
                    }
                    z.append(a('<li><a href="JavaScript:void(0);">' + C + "</a></li>").data("key", A))
                });
                x = z.children().children()
            } else {
                e.children("optgroup").each(function() {
                    var A = a(this).attr("label"), C = a('<li class="newListOptionTitle">' + A + "</li>");
                    C.appendTo(z);
                    var B = a("<ul></ul>");
                    B.appendTo(C);
                    a(this).children().each(function() {
                        ++t;
                        var E = a(this).html();
                        var D = a(this).val();
                        m.push(E.charAt(0).toLowerCase());
                        if (a(this).attr("selected") == true) {
                            l.defaultText = E;
                            d = t
                        }
                        B.append(a('<li><a href="JavaScript:void(0);">' + E + "</a></li>").data("key", D))
                    })
                });
                x = z.find("ul li a")
            }
            var o = z.height(), n = r.height(), y = x.length;
            if (d != -1) {
                h(d, true)
            } else {
                j.text(l.defaultText)
            }
            function p() {
                var B = r.offset().top, A = jQuery(window).height(), C = jQuery(window).scrollTop();
                if (o > parseInt(l.ddMaxHeight)) {
                    o = parseInt(l.ddMaxHeight)
                }
                B = B - C;
                if (B + o >= A) {
                    z.css({
                        top: "-" + o + "px",
                        height: o
                    });
                    e.onTop = true
                } else {
                    z.css({
                        top: n + "px",
                        height: o
                    });
                    e.onTop = false
                }
            }
            p();
            a(window).bind("resize.sSelect scroll.sSelect", p);
            function s() {
                r.css("position", "relative")
            }
            function c() {
                r.css("position", "static")
            }
            j.bind("click.sSelect", function(A) {
                A.stopPropagation();
                if (a(this).data("ssReRender")) {
                    o = z.height("").height();
                    n = r.height();
                    a(this).data("ssReRender", false);
                    p()
                }
                a(".newList").not(a(this).next()).hide().parent().css("position", "static").removeClass("newListSelFocus");
                z.toggle();
                s();
                x.eq(d).focus()
            });
            x.bind("click.sSelect", function(B) {
                var A = a(B.target);
                d = x.index(A);
                v = true;
                h(d);
                z.hide();
                r.css("position", "static")
            });
            x.bind("mouseenter.sSelect", function(B) {
                var A = a(B.target);
                A.addClass("newListHover")
            }).bind("mouseleave.sSelect", function(B) {
                var A = a(B.target);
                A.removeClass("newListHover")
            });
            function h(A, E) {
                x.removeClass("hiLite").eq(A).addClass("hiLite");
                if (z.is(":visible")) {
                    x.eq(A).focus()
                }
                var D = x.eq(A).html();
                var C = x.eq(A).parent().data("key");
                if (E == true) {
                    e.val(C);
                    j.text(D);
                    return false
                }
                try {
                    e.val(C)
                } catch (B) {
                    e[0].selectedIndex = A
                }
                e.change();
                j.text(D)
            }
            e.bind("change.sSelect", function(A) {
                $targetInput = a(A.target);
                if (v == true) {
                    v = false;
                    return false
                }
                $currentOpt = $targetInput.find(":selected");
                d = $targetInput.find("option").index($currentOpt);
                h(d, true)
            });
            function q(A) {
                a(A).unbind("keydown.sSelect").bind("keydown.sSelect", function(D) {
                    var C = D.which;
                    v = true;
                    switch (C) {
                        case 40:
                        case 39:
                            u();
                            return false;
                            break;
                        case 38:
                        case 37:
                            k();
                            return false;
                            break;
                        case 33:
                        case 36:
                            g();
                            return false;
                            break;
                        case 34:
                        case 35:
                            f();
                            return false;
                            break;
                        case 13:
                        case 27:
                            z.hide();
                            c();
                            return false;
                            break
                    }
                    keyPressed = String.fromCharCode(C).toLowerCase();
                    var B = m.indexOf(keyPressed);
                    if (typeof B != "undefined") {
                        ++d;
                        d = m.indexOf(keyPressed, d);
                        if (d == -1 || d == null || w != keyPressed) {
                            d = m.indexOf(keyPressed)
                        }
                        h(d);
                        w = keyPressed;
                        return false
                    }
                })
            }
            function u() {
                if (d < (y - 1)) {
                    ++d;
                    h(d)
                }
            }
            function k() {
                if (d > 0) {
                    --d;
                    h(d)
                }
            }
            function g() {
                d = 0;
                h(d)
            }
            function f() {
                d = y - 1;
                h(d)
            }
            r.bind("click.sSelect", function(A) {
                A.stopPropagation();
                q(this)
            });
            r.bind("focus.sSelect", function() {
                a(this).addClass("newListSelFocus");
                q(this)
            });
            r.bind("blur.sSelect", function() {
                a(this).removeClass("newListSelFocus")
            });
            a(document).bind("click.sSelect", function() {
                r.removeClass("newListSelFocus");
                z.hide();
                c()
            });
            j.bind("mouseenter.sSelect", function(B) {
                var A = a(B.target);
                A.parent().addClass("newListSelHover")
            }).bind("mouseleave.sSelect", function(B) {
                var A = a(B.target);
                A.parent().removeClass("newListSelHover")
            });
            z.css({
                left: "0",
                display: "none",
                visibility: "visible"
            })
        })
    }
})(jQuery);

