(function() {
    Function.prototype.inheritFrom = function(b, c) {
        var d = function() {};
        d.prototype = b.prototype;
        this.prototype = new d();
        this.prototype.constructor = this;
        this.prototype.baseConstructor = b;
        this.prototype.superClass = b.prototype;
        if (c) {
            for (var a in c) {
                this.prototype[a] = c[a]
            }
        }
    };
    Number.prototype.jSliderNice = function(l) {
        var o = /^(-)?(\d+)([\.,](\d+))?$/;
        var d = Number(this);
        var j = String(d);
        var k;
        var c = "";
        var b = " ";
        if ((k = j.match(o))) {
            var f = k[2];
            var m = (k[4]) ? Number("0." + k[4]) : 0;
            if (m) {
                var e = Math.pow(10, (l) ? l : 2);
                m = Math.round(m * e);
                sNewDecPart = String(m);
                c = sNewDecPart;
                if (sNewDecPart.length < l) {
                    var a = l - sNewDecPart.length;
                    for (var g = 0; g < a; g++) {
                        c = "0" + c
                    }
                }
                c = "," + c
            } else {
                if (l && l != 0) {
                    for (var g = 0; g < l; g++) {
                        c += "0"
                    }
                    c = "," + c
                }
            }
            var h;
            if (Number(f) < 1000) {
                h = f + c
            } else {
                var n = "";
                var g;
                for (g = 1; g * 3 < f.length; g++) {
                    n = b + f.substring(f.length - g * 3, f.length - (g - 1) * 3) + n
                }
                h = f.substr(0, 3 - g * 3 + f.length) + n + c
            }
            if (k[1]) {
                return "-" + h
            } else {
                return h
            }
        } else {
            return j
        }
    };
    this.jSliderIsArray = function(a) {
        if (typeof a == "undefined") {
            return false
        }
        if (a instanceof Array || (!(a instanceof Object) && (Object.prototype.toString.call((a)) == "[object Array]") || typeof a.length == "number" && typeof a.splice != "undefined" && typeof a.propertyIsEnumerable != "undefined" && !a.propertyIsEnumerable("splice"))) {
            return true
        }
        return false
    }
})();
(function() {
    var a = {};
    this.jSliderTmpl = function b(e, d) {
        var c = !(/\W/).test(e) ? a[e] = a[e] || b(e) : new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('" + e.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');");
        return d ? c(d) : c
    }
})();
(function(a) {
    this.Draggable = function() {
        this._init.apply(this, arguments)
    };
    Draggable.prototype = {
        oninit: function() {},
        events: function() {},
        onmousedown: function() {
            this.ptr.css({
                position: "absolute"
            })
        },
        onmousemove: function(c, b, d) {
            this.ptr.css({
                left: b,
                top: d
            })
        },
        onmouseup: function() {},
        isDefault: {
            drag: false,
            clicked: false,
            toclick: true,
            mouseup: false
        },
        _init: function() {
            if (arguments.length > 0) {
                this.ptr = a(arguments[0]);
                this.outer = a(".draggable-outer");
                this.is = {};
                a.extend(this.is, this.isDefault);
                var b = this.ptr.offset();
                this.d = {
                    left: b.left,
                    top: b.top,
                    width: this.ptr.width(),
                    height: this.ptr.height()
                };
                this.oninit.apply(this, arguments);
                this._events()
            }
        },
        _getPageCoords: function(b) {
            if (b.targetTouches && b.targetTouches[0]) {
                return {
                    x: b.targetTouches[0].pageX,
                    y: b.targetTouches[0].pageY
                }
            } else {
                return {
                    x: b.pageX,
                    y: b.pageY
                }
            }
        },
        _bindEvent: function(e, c, d) {
            var b = this;
            if (this.supportTouches_) {
                e.get(0).addEventListener(this.events_[c], d, false)
            } else {
                e.bind(this.events_[c], d)
            }
        },
        _events: function() {
            var b = this;
            this.supportTouches_ = (a.browser.webkit && navigator.userAgent.indexOf("Mobile") != -1);
            this.events_ = {
                click: this.supportTouches_ ? "touchstart" : "click",
                down: this.supportTouches_ ? "touchstart" : "mousedown",
                move: this.supportTouches_ ? "touchmove" : "mousemove",
                up: this.supportTouches_ ? "touchend" : "mouseup"
            };
            this._bindEvent(a(document), "move", function(c) {
                if (b.is.drag) {
                    c.stopPropagation();
                    c.preventDefault();
                    b._mousemove(c)
                }
            });
            this._bindEvent(a(document), "down", function(c) {
                if (b.is.drag) {
                    c.stopPropagation();
                    c.preventDefault()
                }
            });
            this._bindEvent(a(document), "up", function(c) {
                b._mouseup(c)
            });
            this._bindEvent(this.ptr, "down", function(c) {
                b._mousedown(c);
                return false
            });
            this._bindEvent(this.ptr, "up", function(c) {
                b._mouseup(c)
            });
            this.ptr.find("a").click(function() {
                b.is.clicked = true;
                if (!b.is.toclick) {
                    b.is.toclick = true;
                    return false
                }
            }).mousedown(function(c) {
                b._mousedown(c);
                return false
            });
            this.events()
        },
        _mousedown: function(b) {
            this.is.drag = true;
            this.is.clicked = false;
            this.is.mouseup = false;
            var c = this.ptr.offset();
            var d = this._getPageCoords(b);
            this.cx = d.x - c.left;
            this.cy = d.y - c.top;
            a.extend(this.d, {
                left: c.left,
                top: c.top,
                width: this.ptr.width(),
                height: this.ptr.height()
            });
            if (this.outer && this.outer.get(0)) {
                this.outer.css({
                    height: Math.max(this.outer.height(), a(document.body).height()),
                    overflow: "hidden"
                })
            }
            this.onmousedown(b)
        },
        _mousemove: function(b) {
            this.is.toclick = false;
            var c = this._getPageCoords(b);
            this.onmousemove(b, c.x - this.cx, c.y - this.cy)
        },
        _mouseup: function(b) {
            var c = this;
            if (this.is.drag) {
                this.is.drag = false;
                if (this.outer && this.outer.get(0)) {
                    if (a.browser.mozilla) {
                        this.outer.css({
                            overflow: "hidden"
                        })
                    } else {
                        this.outer.css({
                            overflow: "visible"
                        })
                    }
                    if (a.browser.msie && a.browser.version == "6.0") {
                        this.outer.css({
                            height: "100%"
                        })
                    } else {
                        this.outer.css({
                            height: "auto"
                        })
                    }
                }
                this.onmouseup(b)
            }
        }
    }
})(jQuery);
(function(b) {
    b.slider = function(f, e) {
        var d = b(f);
        if (!d.data("jslider")) {
            d.data("jslider", new jSlider(f, e))
        }
        return d.data("jslider")
    };
    b.fn.slider = function(h, e) {
        var g, f = arguments;

        function d(j) {
            return j !== undefined
        }

        function i(j) {
            return j != null
        }
        this.each(function() {
            var k = b.slider(this, h);
            if (typeof h == "string") {
                switch (h) {
                    case "value":
                        if (d(f[1]) && d(f[2])) {
                            var j = k.getPointers();
                            if (i(j[0]) && i(f[1])) {
                                j[0].set(f[1]);
                                j[0].setIndexOver()
                            }
                            if (i(j[1]) && i(f[2])) {
                                j[1].set(f[2]);
                                j[1].setIndexOver()
                            }
                        } else {
                            if (d(f[1])) {
                                var j = k.getPointers();
                                if (i(j[0]) && i(f[1])) {
                                    j[0].set(f[1]);
                                    j[0].setIndexOver()
                                }
                            } else {
                                g = k.getValue()
                            }
                        }
                        break;
                    case "prc":
                        if (d(f[1]) && d(f[2])) {
                            var j = k.getPointers();
                            if (i(j[0]) && i(f[1])) {
                                j[0]._set(f[1]);
                                j[0].setIndexOver()
                            }
                            if (i(j[1]) && i(f[2])) {
                                j[1]._set(f[2]);
                                j[1].setIndexOver()
                            }
                        } else {
                            if (d(f[1])) {
                                var j = k.getPointers();
                                if (i(j[0]) && i(f[1])) {
                                    j[0]._set(f[1]);
                                    j[0].setIndexOver()
                                }
                            } else {
                                g = k.getPrcValue()
                            }
                        }
                        break;
                    case "calculatedValue":
                        var m = k.getValue().split(";");
                        g = "";
                        for (var l = 0; l < m.length; l++) {
                            g += (l > 0 ? ";" : "") + k.nice(m[l])
                        }
                        break;
                    case "skin":
                        k.setSkin(f[1]);
                        break
                }
            } else {
                if (!h && !e) {
                    if (!jSliderIsArray(g)) {
                        g = []
                    }
                    g.push(slider)
                }
            }
        });
        if (jSliderIsArray(g) && g.length == 1) {
            g = g[0]
        }
        return g || this
    };
    var c = {
        settings: {
            from: 1,
            to: 10,
            step: 1,
            smooth: true,
            limits: true,
            round: 0,
            value: "5;7",
            dimension: ""
        },
        className: "jslider",
        selector: ".jslider-",
        template: jSliderTmpl('<span class="<%=className%>"><table><tr><td><div class="<%=className%>-bg"><i class="l"><i></i></i><i class="r"><i></i></i><i class="v"><i></i></i></div><div class="<%=className%>-pointer"><i></i></div><div class="<%=className%>-pointer <%=className%>-pointer-to"><i></i></div><div class="<%=className%>-label"><span><%=settings.from%></span></div><div class="<%=className%>-label <%=className%>-label-to"><span><%=settings.to%></span><%=settings.dimension%></div><div class="<%=className%>-value"><span></span><%=settings.dimension%></div><div class="<%=className%>-value <%=className%>-value-to"><span></span><%=settings.dimension%></div><div class="<%=className%>-scale"><%=scale%></div></td></tr></table></span>')
    };
    this.jSlider = function() {
        return this.init.apply(this, arguments)
    };
    jSlider.prototype = {
        init: function(e, d) {
            this.settings = b.extend(true, {}, c.settings, d ? d : {});
            this.inputNode = b(e).hide();
            this.settings.interval = this.settings.to - this.settings.from;
            this.settings.value = this.inputNode.attr("value");
            if (this.settings.calculate && b.isFunction(this.settings.calculate)) {
                this.nice = this.settings.calculate
            }
            if (this.settings.onstatechange && b.isFunction(this.settings.onstatechange)) {
                this.onstatechange = this.settings.onstatechange
            }
            this.is = {
                init: false
            };
            this.o = {};
            this.create()
        },
        onstatechange: function() {},
        create: function() {
            var d = this;
            this.domNode = b(c.template({
                className: c.className,
                settings: {
                    from: this.nice(this.settings.from),
                    to: this.nice(this.settings.to),
                    dimension: this.settings.dimension
                },
                scale: this.generateScale()
            }));
            this.inputNode.after(this.domNode);
            this.drawScale();
            if (this.settings.skin && this.settings.skin.length > 0) {
                this.setSkin(this.settings.skin)
            }
            this.sizes = {
                domWidth: this.domNode.width(),
                domOffset: this.domNode.offset()
            };
            b.extend(this.o, {
                pointers: {},
                labels: {
                    0: {
                        o: this.domNode.find(c.selector + "value").not(c.selector + "value-to")
                    },
                    1: {
                        o: this.domNode.find(c.selector + "value").filter(c.selector + "value-to")
                    }
                },
                limits: {
                    0: this.domNode.find(c.selector + "label").not(c.selector + "label-to"),
                    1: this.domNode.find(c.selector + "label").filter(c.selector + "label-to")
                }
            });
            b.extend(this.o.labels[0], {
                value: this.o.labels[0].o.find("span")
            });
            b.extend(this.o.labels[1], {
                value: this.o.labels[1].o.find("span")
            });
            if (!d.settings.value.split(";")[1]) {
                this.settings.single = true;
                this.domNode.addDependClass("single")
            }
            if (!d.settings.limits) {
                this.domNode.addDependClass("limitless")
            }
            this.domNode.find(c.selector + "pointer").each(function(e) {
                var g = d.settings.value.split(";")[e];
                if (g) {
                    d.o.pointers[e] = new a(this, e, d);
                    var f = d.settings.value.split(";")[e - 1];
                    if (f && new Number(g) < new Number(f)) {
                        g = f
                    }
                    g = g < d.settings.from ? d.settings.from : g;
                    g = g > d.settings.to ? d.settings.to : g;
                    d.o.pointers[e].set(g, true)
                }
            });
            this.o.value = this.domNode.find(".v");
            this.is.init = true;
            b.each(this.o.pointers, function(e) {
                d.redraw(this)
            });
            (function(e) {
                b(window).resize(function() {
                    e.onresize()
                })
            })(this)
        },
        setSkin: function(d) {
            if (this.skin_) {
                this.domNode.removeDependClass(this.skin_, "_")
            }
            this.domNode.addDependClass(this.skin_ = d, "_")
        },
        setPointersIndex: function(d) {
            b.each(this.getPointers(), function(e) {
                this.index(e)
            })
        },
        getPointers: function() {
            return this.o.pointers
        },
        generateScale: function() {
            if (this.settings.scale && this.settings.scale.length > 0) {
                var f = "";
                var e = this.settings.scale;
                var g = Math.round((100 / (e.length - 1)) * 10) / 10;
                for (var d = 0; d < e.length; d++) {
                    f += '<span style="left: ' + d * g + '%">' + (e[d] != "|" ? "<ins>" + e[d] + "</ins>" : "") + "</span>"
                }
                return f
            } else {
                return ""
            }
            return ""
        },
        drawScale: function() {
            this.domNode.find(c.selector + "scale span ins").each(function() {
                b(this).css({
                    marginLeft: -b(this).outerWidth() / 2
                })
            })
        },
        onresize: function() {
            var d = this;
            this.sizes = {
                domWidth: this.domNode.width(),
                domOffset: this.domNode.offset()
            };
            b.each(this.o.pointers, function(e) {
                d.redraw(this)
            })
        },
        limits: function(d, g) {
            if (!this.settings.smooth) {
                var f = this.settings.step * 100 / (this.settings.interval);
                d = Math.round(d / f) * f
            }
            var e = this.o.pointers[1 - g.uid];
            if (e && g.uid && d < e.value.prc) {
                d = e.value.prc
            }
            if (e && !g.uid && d > e.value.prc) {
                d = e.value.prc
            }
            if (d < 0) {
                d = 0
            }
            if (d > 100) {
                d = 100
            }
            return Math.round(d * 10) / 10
        },
        redraw: function(d) {
            if (!this.is.init) {
                return false
            }
            this.setValue();
            if (this.o.pointers[0] && this.o.pointers[1]) {
                this.o.value.css({
                    left: this.o.pointers[0].value.prc + "%",
                    width: (this.o.pointers[1].value.prc - this.o.pointers[0].value.prc) + "%"
                })
            }
            this.o.labels[d.uid].value.html(this.nice(d.value.origin));
            this.redrawLabels(d)
        },
        redrawLabels: function(j) {
            function f(l, m, n) {
                m.margin = -m.label / 2;
                label_left = m.border + m.margin;
                if (label_left < 0) {
                    m.margin -= label_left
                }
                if (m.border + m.label / 2 > e.sizes.domWidth) {
                    m.margin = 0;
                    m.right = true
                } else {
                    m.right = false
                }
                l.o.css({
                    left: n + "%",
                    marginLeft: m.margin,
                    right: "auto"
                });
                if (m.right) {
                    l.o.css({
                        left: "auto",
                        right: 0
                    })
                }
                return m
            }
            var e = this;
            var g = this.o.labels[j.uid];
            var k = j.value.prc;
            var h = {
                label: g.o.outerWidth(),
                right: false,
                border: (k * this.sizes.domWidth) / 100
            };
            if (!this.settings.single) {
                var d = this.o.pointers[1 - j.uid];
                var i = this.o.labels[d.uid];
                switch (j.uid) {
                    case 0:
                        if (h.border + h.label / 2 > i.o.offset().left - this.sizes.domOffset.left) {
                            i.o.css({
                                visibility: "hidden"
                            });
                            i.value.html(this.nice(d.value.origin));
                            g.o.css({
                                visibility: "visible"
                            });
                            k = (d.value.prc - k) / 2 + k;
                            if (d.value.prc != j.value.prc) {
                                g.value.html(this.nice(j.value.origin) + "&nbsp;&ndash;&nbsp;" + this.nice(d.value.origin));
                                h.label = g.o.outerWidth();
                                h.border = (k * this.sizes.domWidth) / 100
                            }
                        } else {
                            i.o.css({
                                visibility: "visible"
                            })
                        }
                        break;
                    case 1:
                        if (h.border - h.label / 2 < i.o.offset().left - this.sizes.domOffset.left + i.o.outerWidth()) {
                            i.o.css({
                                visibility: "hidden"
                            });
                            i.value.html(this.nice(d.value.origin));
                            g.o.css({
                                visibility: "visible"
                            });
                            k = (k - d.value.prc) / 2 + d.value.prc;
                            if (d.value.prc != j.value.prc) {
                                g.value.html(this.nice(d.value.origin) + "&nbsp;&ndash;&nbsp;" + this.nice(j.value.origin));
                                h.label = g.o.outerWidth();
                                h.border = (k * this.sizes.domWidth) / 100
                            }
                        } else {
                            i.o.css({
                                visibility: "visible"
                            })
                        }
                        break
                }
            }
            h = f(g, h, k);
            if (i) {
                var h = {
                    label: i.o.outerWidth(),
                    right: false,
                    border: (d.value.prc * this.sizes.domWidth) / 100
                };
                h = f(i, h, d.value.prc)
            }
            this.redrawLimits()
        },
        redrawLimits: function() {
            if (this.settings.limits) {
                var f = [true, true];
                for (key in this.o.pointers) {
                    if (!this.settings.single || key == 0) {
                        var j = this.o.pointers[key];
                        var e = this.o.labels[j.uid];
                        var h = e.o.offset().left - this.sizes.domOffset.left;
                        var d = this.o.limits[0];
                        if (h < d.outerWidth()) {
                            f[0] = false
                        }
                        var d = this.o.limits[1];
                        if (h + e.o.outerWidth() > this.sizes.domWidth - d.outerWidth()) {
                            f[1] = false
                        }
                    }
                }
                for (var g = 0; g < f.length; g++) {
                    if (f[g]) {
                        this.o.limits[g].fadeIn("fast")
                    } else {
                        this.o.limits[g].fadeOut("fast")
                    }
                }
            }
        },
        setValue: function() {
            var d = this.getValue();
            this.inputNode.attr("value", d);
            this.onstatechange.call(this, d)
        },
        getValue: function() {
            if (!this.is.init) {
                return false
            }
            var e = this;
            var d = "";
            b.each(this.o.pointers, function(f) {
                if (this.value.prc != undefined && !isNaN(this.value.prc)) {
                    d += (f > 0 ? ";" : "") + e.prcToValue(this.value.prc)
                }
            });
            return d
        },
        getPrcValue: function() {
            if (!this.is.init) {
                return false
            }
            var e = this;
            var d = "";
            b.each(this.o.pointers, function(f) {
                if (this.value.prc != undefined && !isNaN(this.value.prc)) {
                    d += (f > 0 ? ";" : "") + this.value.prc
                }
            });
            return d
        },
        prcToValue: function(l) {
            if (this.settings.heterogeneity && this.settings.heterogeneity.length > 0) {
                var g = this.settings.heterogeneity;
                var f = 0;
                var k = this.settings.from;
                for (var e = 0; e <= g.length; e++) {
                    if (g[e]) {
                        var d = g[e].split("/")
                    } else {
                        var d = [100, this.settings.to]
                    }
                    d[0] = new Number(d[0]);
                    d[1] = new Number(d[1]);
                    if (l >= f && l <= d[0]) {
                        var j = k + ((l - f) * (d[1] - k)) / (d[0] - f)
                    }
                    f = d[0];
                    k = d[1]
                }
            } else {
                var j = this.settings.from + (l * this.settings.interval) / 100
            }
            return this.round(j)
        },
        valueToPrc: function(j, l) {
            if (this.settings.heterogeneity && this.settings.heterogeneity.length > 0) {
                var g = this.settings.heterogeneity;
                var f = 0;
                var k = this.settings.from;
                for (var e = 0; e <= g.length; e++) {
                    if (g[e]) {
                        var d = g[e].split("/")
                    } else {
                        var d = [100, this.settings.to]
                    }
                    d[0] = new Number(d[0]);
                    d[1] = new Number(d[1]);
                    if (j >= k && j <= d[1]) {
                        var m = l.limits(f + (j - k) * (d[0] - f) / (d[1] - k))
                    }
                    f = d[0];
                    k = d[1]
                }
            } else {
                var m = l.limits((j - this.settings.from) * 100 / this.settings.interval)
            }
            return m
        },
        round: function(d) {
            d = Math.round(d / this.settings.step) * this.settings.step;
            if (this.settings.round) {
                d = Math.round(d * Math.pow(10, this.settings.round)) / Math.pow(10, this.settings.round)
            } else {
                d = Math.round(d)
            }
            return d
        },
        nice: function(d) {
            d = d.toString().replace(/,/gi, ".");
            d = d.toString().replace(/ /gi, "");
            if (Number.prototype.jSliderNice) {
                return (new Number(d)).jSliderNice(this.settings.round).replace(/-/gi, "&minus;")
            } else {
                return new Number(d)
            }
        }
    };

    function a() {
        this.baseConstructor.apply(this, arguments)
    }
    a.inheritFrom(Draggable, {
        oninit: function(f, e, d) {
            this.uid = e;
            this.parent = d;
            this.value = {};
            this.settings = this.parent.settings
        },
        onmousedown: function(d) {
            this._parent = {
                offset: this.parent.domNode.offset(),
                width: this.parent.domNode.width()
            };
            this.ptr.addDependClass("hover");
            this.setIndexOver()
        },
        onmousemove: function(e, d) {
            var f = this._getPageCoords(e);
            this._set(this.calc(f.x))
        },
        onmouseup: function(d) {
            if (this.parent.settings.callback && b.isFunction(this.parent.settings.callback)) {
                this.parent.settings.callback.call(this.parent, this.parent.getValue())
            }
            this.ptr.removeDependClass("hover")
        },
        setIndexOver: function() {
            this.parent.setPointersIndex(1);
            this.index(2)
        },
        index: function(d) {
            this.ptr.css({
                zIndex: d
            })
        },
        limits: function(d) {
            return this.parent.limits(d, this)
        },
        calc: function(e) {
            var d = this.limits(((e - this._parent.offset.left) * 100) / this._parent.width);
            return d
        },
        set: function(d, e) {
            this.value.origin = this.parent.round(d);
            this._set(this.parent.valueToPrc(d, this), e)
        },
        _set: function(e, d) {
            if (!d) {
                this.value.origin = this.parent.prcToValue(e)
            }
            this.value.prc = e;
            this.ptr.css({
                left: e + "%"
            });
            this.parent.redraw(this)
        }
    })
})(jQuery);