/*
Stylish Select 0.4.1 - $ plugin to replace a select drop down box with a stylable unordered list
http://github.com/sko77sun/Stylish-Select

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.indexOff=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.indexOff(keyPressed);if(typeof B!="undefined"){++d;d=m.indexOff(keyPressed,d);if(d==-1||d==null||w!=keyPressed){d=m.indexOff(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);*/

/*
Stylish Select 0.4.1 - $ plugin to replace a select drop down box with a stylable unordered list
http://github.com/sko77sun/Stylish-Select

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.indexOff = 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: '27px',
                        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.indexOff(keyPressed);
                    if (typeof B != "undefined") {
                        ++d;
                        d = m.indexOff(keyPressed, d);
                        if (d == -1 || d == null || w != keyPressed) {
                            d = m.indexOff(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);
