/*
 * 特别声明：本技术材料受《中华人民共和国著作权法》、《计算机软件保护条例》等法律、法规、行政
 * 规章以及有关国际条约的保护，赞同科技享有知识产权、保留一切权利并视其为技术秘密。未经本公司书
 * 面许可，任何人不得擅自（包括但不限于：以非法的方式复制、传播、展示、镜像、上载、下载）使用，
 * 不得向第三方泄露、透露、披露。否则，本公司将依法追究侵权者的法律责任。特此声明！
 *
 * Special Declaration: These technical material reserved as the technical secrets by AGREE
 * TECHNOLOGY have been protected by the "Copyright Law" "ordinances on Protection of Computer
 * Software" and other relevant administrative regulations and international treaties. Without
 * the written permission of the Company, no person may use (including but not limited to the
 * illegal copy, distribute, display, image, upload, and download) and disclose the above
 * technical documents to any third party. Otherwise, any infringer shall afford the legal
 * liability to the company.
 */
/**
 * Created by huang.dy on 2016/3/20.
 */
define(["adoreapp/widget/BaseWidget", "adoreapp/widget/EventHub"], function (BaseWidget, EventHub) {
    return BaseWidget.extend(function (base) {
        return {
            _initWidget: function (attrs) {
                this.jqueryNode = $(attrs.template).attr("id", this.id);
                this.slider = this.jqueryNode[0];
                /**
                 * 默认数据
                 */
                this.step = 1;
                this.min = 0;
                this.max = 100;
                this.startValue = 0;
                this.value = this.startValue;
            },

            _setStep: function (attrs) {
                this.step = attrs.step;
                if (this.isLayout) {
                    var own = this;
                    this.slider.noUiSlider.updateOptions({
                        step: own.step,
                        range: {
                            'min': own.min,
                            'max': own.max
                        }
                    });
                }
            },

            _setRange: function (attrs) {
                this.min = attrs.min;
                this.max = attrs.max;
                if (this.isLayout) {
                    var own = this;
                    this.slider.noUiSlider.updateOptions({
                        range: {
                            'min': own.min,
                            'max': own.max
                        }
                    });
                }
            },

            _setValue: function (attrs) {
                this.value = attrs.value;
                if (this.isLayout) {
                    this.slider.noUiSlider.set(this.value);
                }
            },

            _layout: function () {
                base._layout.call(this);
                this.isLayout = true;
                var own = this;
                noUiSlider.create(this.slider, {
                    start: this.min,
                    step: own.step,
                    connect: 'lower',
                    tooltips: [true],
                    range: {
                        'min': own.min,
                        'max': own.max
                    }
                });
                //隐藏tooltips，等有交互时再显示
                $(this.slider).find("div.noUi-tooltip").css({display: "none"});
                this.slider.noUiSlider.on("start", function () {
                    $(own.slider).find("div.noUi-tooltip").css({display: "block"});//显示tooltips
                    own.startValue = own.slider.noUiSlider.get();
                });
                this.slider.noUiSlider.on("end", function () {
                    $(own.slider).find("div.noUi-tooltip").css({display: "none"});//隐藏tooltips
                    var endValue = own.slider.noUiSlider.get();
                    if (own.startValue !== endValue) {
                        // dispatch onChange event
                        EventHub.dispatchEvent(EventHub.MSG_TYPE.WIDGET, {
                            id: own.id,
                            evtType: EventHub.ON_CHANGE,
                            value: endValue
                        });
                    }
                });
            }
        };
    });
});