(function (a) {
    a.uniform = {
        options: {
            selectClass: "selector",
            radioClass: "radio",
            checkboxClass: "checker",
            fileClass: "uploader",
            filenameClass: "filename",
            fileBtnClass: "action",
            fileDefaultText: "No file selected",
            fileBtnText: "Choose File",
            checkedClass: "checked",
            focusClass: "focus",
            disabledClass: "disabled",
            activeClass: "active",
            hoverClass: "hover",
            useID: true,
            idPrefix: "uniform",
            resetSelector: false
        }, elements: []
    };
    if (a.browser.msie && a.browser.version < 7) {
        a.support.selectOpacity = false
    } else {
        a.support.selectOpacity = true
    }
    a.fn.uniform = function (c) {
        c = a.extend(a.uniform.options, c);
        var e = this;
        if (c.resetSelector != false) {
            a(c.resetSelector).mouseup(function () {
                function i() {
                    a.uniform.update(e)
                }
                setTimeout(i, 10)
            })
        }
        function b(k) {
            var l = a("<div />"),
                i = a("<span />");
            l.addClass(c.selectClass);
            if (c.useID) {
                l.attr("id", c.idPrefix + "-" + k.attr("id"))
            }
            var j = k.find(":selected:first");
            if (j.length == 0) {
                j = k.find("option:first")
            }
            i.html(j.text());
            k.css("opacity", 0);
            k.wrap(l);
            k.before(i);
            l = k.parent("div");
            i = k.siblings("span");
            k.change(function () {
                i.text(k.find(":selected").text());
                l.removeClass(c.activeClass)
            }).focus(function () {
                l.addClass(c.focusClass)
            }).blur(function () {
                l.removeClass(c.focusClass);
                l.removeClass(c.activeClass)
            }).mousedown(function () {
                l.addClass(c.activeClass)
            }).mouseup(function () {
                l.removeClass(c.activeClass)
            }).click(function () {
                l.removeClass(c.activeClass)
            }).hover(function () {
                l.addClass(c.hoverClass)
            }, function () {
                l.removeClass(c.hoverClass)
            }).keyup(function () {
                i.text(k.find(":selected").text())
            });
            if (a(k).attr("disabled")) {
                l.addClass(c.disabledClass)
            }
            a.uniform.noSelect(i);
            h(k)
        }
        function d(j) {
            var k = a("<div />"),
                i = a("<span />");
            k.addClass(c.checkboxClass);
            if (c.useID) {
                k.attr("id", c.idPrefix + "-" + j.attr("id"))
            }
            a(j).wrap(k);
            a(j).wrap(i);
            i = j.parent();
            k = i.parent();
            a(j).css("opacity", 0).focus(function () {
                k.addClass(c.focusClass)
            }).blur(function () {
                k.removeClass(c.focusClass)
            }).click(function () {
                if (!a(j).attr("checked")) {
                    i.removeClass(c.checkedClass)
                } else {
                    i.addClass(c.checkedClass)
                }
            }).mousedown(function () {
                k.addClass(c.activeClass)
            }).mouseup(function () {
                k.removeClass(c.activeClass)
            }).hover(function () {
                k.addClass(c.hoverClass)
            }, function () {
                k.removeClass(c.hoverClass)
            });
            if (a(j).attr("checked")) {
                i.addClass(c.checkedClass)
            }
            if (a(j).attr("disabled")) {
                k.addClass(c.disabledClass)
            }
            h(j)
        }
        function f(j) {
            var k = a("<div />"),
                i = a("<span />");
            k.addClass(c.radioClass);
            if (c.useID) {
                k.attr("id", c.idPrefix + "-" + j.attr("id"))
            }
            a(j).wrap(k);
            a(j).wrap(i);
            i = j.parent();
            k = i.parent();
            a(j).css("opacity", 0).focus(function () {
                k.addClass(c.focusClass)
            }).blur(function () {
                k.removeClass(c.focusClass)
            }).click(function () {
                if (!a(j).attr("checked")) {
                    i.removeClass(c.checkedClass)
                } else {
                    a("." + c.radioClass + " span." + c.checkedClass + ":has([name='" + a(j).attr("name") + "'])").removeClass(c.checkedClass);
                    i.addClass(c.checkedClass)
                }
            }).mousedown(function () {
                if (!a(j).is(":disabled")) {
                    k.addClass(c.activeClass)
                }
            }).mouseup(function () {
                k.removeClass(c.activeClass)
            }).hover(function () {
                k.addClass(c.hoverClass)
            }, function () {
                k.removeClass(c.hoverClass)
            });
            if (a(j).attr("checked")) {
                i.addClass(c.checkedClass)
            }
            if (a(j).attr("disabled")) {
                k.addClass(c.disabledClass)
            }
            h(j)
        }
        function g(n) {
            var l = a(n);
            var o = a("<div />"),
                m = a("<span>" + c.fileDefaultText + "</span>"),
                j = a("<span>" + c.fileBtnText + "</span>");
            o.addClass(c.fileClass);
            m.addClass(c.filenameClass);
            j.addClass(c.fileBtnClass);
            if (c.useID) {
                o.attr("id", c.idPrefix + "-" + l.attr("id"))
            }
            l.wrap(o);
            l.after(j);
            l.after(m);
            o = l.closest("div");
            m = l.siblings("." + c.filenameClass);
            j = l.siblings("." + c.fileBtnClass);
            if (!l.attr("size")) {
                var i = o.width();
                l.attr("size", i / 10)
            }
            var k = function () {
                var p = l.val();
                if (p === "") {
                    p = c.fileDefaultText
                } else {
                    p = p.split(/[\/\\]+/);
                    p = p[(p.length - 1)]
                }
                m.text(p)
            };
            k();
            l.css("opacity", 0).focus(function () {
                o.addClass(c.focusClass)
            }).blur(function () {
                o.removeClass(c.focusClass)
            }).mousedown(function () {
                if (!a(n).is(":disabled")) {
                    o.addClass(c.activeClass)
                }
            }).mouseup(function () {
                o.removeClass(c.activeClass)
            }).hover(function () {
                o.addClass(c.hoverClass)
            }, function () {
                o.removeClass(c.hoverClass)
            });
            if (a.browser.msie) {
                l.click(function () {
                    setTimeout(k, 0)
                })
            } else {
                l.change(k)
            }
            if (l.attr("disabled")) {
                o.addClass(c.disabledClass)
            }
            a.uniform.noSelect(m);
            a.uniform.noSelect(j);
            h(n)
        }
        function h(i) {
            i = a(i).get();
            if (i.length > 1) {
                a.each(i, function (j, k) {
                    a.uniform.elements.push(k)
                })
            } else {
                a.uniform.elements.push(i)
            }
        }
        a.uniform.noSelect = function (i) {
            function j() {
                return false
            }
            a(i).each(function () {
                this.onselectstart = this.ondragstart = j;
                a(this).mousedown(j).css({
                    MozUserSelect: "none"
                })
            })
        };
        a.uniform.update = function (i) {
            if (i == undefined) {
                i = a(a.uniform.elements)
            }
            i = a(i);
            i.each(function () {
                var k = a(this);
                if (k.is("select")) {
                    var j = k.siblings("span");
                    var m = k.parent("div");
                    m.removeClass(c.hoverClass + " " + c.focusClass + " " + c.activeClass);
                    j.html(k.find(":selected").text());
                    if (k.is(":disabled")) {
                        m.addClass(c.disabledClass)
                    } else {
                        m.removeClass(c.disabledClass)
                    }
                } else {
                    if (k.is(":checkbox")) {
                        var j = k.closest("span");
                        var m = k.closest("div");
                        m.removeClass(c.hoverClass + " " + c.focusClass + " " + c.activeClass);
                        j.removeClass(c.checkedClass);
                        if (k.is(":checked")) {
                            j.addClass(c.checkedClass)
                        }
                        if (k.is(":disabled")) {
                            m.addClass(c.disabledClass)
                        } else {
                            m.removeClass(c.disabledClass)
                        }
                    } else {
                        if (k.is(":radio")) {
                            var j = k.closest("span");
                            var m = k.closest("div");
                            m.removeClass(c.hoverClass + " " + c.focusClass + " " + c.activeClass);
                            j.removeClass(c.checkedClass);
                            if (k.is(":checked")) {
                                j.addClass(c.checkedClass)
                            }
                            if (k.is(":disabled")) {
                                m.addClass(c.disabledClass)
                            } else {
                                m.removeClass(c.disabledClass)
                            }
                        } else {
                            if (k.is(":file")) {
                                var m = k.parent("div");
                                var l = k.siblings(c.filenameClass);
                                btnTag = k.siblings(c.fileBtnClass);
                                m.removeClass(c.hoverClass + " " + c.focusClass + " " + c.activeClass);
                                l.text(k.val());
                                if (k.is(":disabled")) {
                                    m.addClass(c.disabledClass)
                                } else {
                                    m.removeClass(c.disabledClass)
                                }
                            }
                        }
                    }
                }
            })
        };
        return this.each(function () {
            if (a.support.selectOpacity) {
                var i = a(this);
                if (i.is("select")) {
                    if (i.attr("multiple") != true) {
                        if (i.attr("size") == undefined || i.attr("size") <= 1) {
                            b(i)
                        }
                    }
                } else {
                    if (i.is(":checkbox")) {
                        d(i)
                    } else {
                        if (i.is(":radio")) {
                            f(i)
                        } else {
                            if (i.is(":file")) {
                                g(i)
                            }
                        }
                    }
                }
            }
        })
    }
})(jQuery);
