").
+ hide().
+ parent().
+ addClass("combo").
+ addClass(this.config.skin);
+ //1
+ this.input = $("
").
+ appendTo(this.wrapper).
+ attr("autocomplete", "off").
+ attr("value", "").
+ attr("name", this.selectbox.attr("name") + this.config.suffix);
+ //1
+ var origName = this.selectbox.attr("name");
+ var newName = origName + this.config.hiddenSuffix;
+ if(this.config.renameOriginal) {
+ this.selectbox.attr("name", newName);
+ }
+ //1
+ this.hidden = $("
").appendTo(this.wrapper).attr("autocomplete", "off").attr("value", this.config.initialHiddenValue).attr("name", this.config.renameOriginal ? origName : newName);
+ this.PageNumbers = $("
").appendTo(this.wrapper).addClass('PageNumbers').attr("value",1);
+ this.searchTxt = $("
").appendTo(this.wrapper).addClass('searchTxt').attr("value",'');
+ //1
+ this.icon = $("
").
+ appendTo(this.wrapper).
+ addClass("icon");
+ //1
+ this.listWrapper = $("
").
+ appendTo(this.wrapper).addClass("list-wrapper");
+ this.updateDrop();
+
+ //1
+ this.list = $("
").appendTo(this.listWrapper);
+ isFirst = false;
+ this.page=$("
").appendTo(this.wrapper).addClass('list-page invisible');
+ this.homePage=$("
").appendTo(this.page).addClass('homeBtn').html('
«');
+ this.previous=$("
").appendTo(this.page).addClass('previous').html('
<');
+ this.ppage=$("
").appendTo(this.page).addClass('pageAll_a').html("
/");
+ this.pInputbox=$("
").appendTo(this.page).addClass('input_WIDTH');
+ this.PInput =$("
").appendTo(this.pInputbox).addClass("inputAll").attr("value",1);
+ this.totalAll=$("
").appendTo(this.page).addClass('pageAll_a').html('
');
+ this.nextPage=$("
").appendTo(this.page).html('
>');
+ this.lastPage=$("
").appendTo(this.page).addClass('lastBtn').html('
»');
+ }
+
+
+
+ var self = this;
+ var optWidths = [];
+ this.options.each(function() {
+ var optionText = $.trim($(this).text());
+ if (self.config.checkWidth) {
+ optWidths.push($("
").
+ appendTo(self.list).html("
" + optionText + "").addClass("visible").find("span").outerWidth());
+ }
+ else {
+ $("
").
+ appendTo(self.list).
+ html("
" + optionText + "").
+ addClass("visible");
+
+ }
+ });
+
+
+ //分页
+ //总页数 config.totalPage)
+ //每页显示的条数 _config.ajaxData.limit
+ //当前页数 currentPage.
+
+ //更新现在的页码数量 当total 为0 时,隐藏list列表
+ $("#total_page").text(currentPage);
+ $('#tota_All').text(config.totalPage)
+ $("#pages_all").text(config.total);
+ var optionsText ="没有数据";
+ if(config.total==0){
+ // this.hideList();
+ optWidths.push($("
").
+ appendTo(self.list).html("
"+optionsText+"").addClass("visible").find("span").outerWidth());
+ }
+
+ this.listItems = this.list.children();
+
+ /*this.listItems.find("span").each(function() {
+ optWidths.push($(this).outerWidth());
+ });*/
+ if (optWidths.length) {
+ optWidths = optWidths.sort(function(a, b) {
+ return a - b;
+ });
+ var maxOptionWidth = optWidths[optWidths.length - 1];
+
+
+ }
+ //容器的高度
+ // this.singleItemHeight = this.listItems.outerHeight();
+ //bgiframe causes some problems, let's remove it
+ /*if ("function" == typeof this.listWrapper.bgiframe) {
+ this.listWrapper.bgiframe({height: this.singleItemHeight * this.wrapper.find("li").height()});
+ }*/
+ if(isFirst == true) {
+ this.listWrapper.addClass("invisible");
+ }
+ if ($.browser.opera) {
+ this.wrapper.css({position: "relative", left: "0", top: "0"});
+ }
+ this.filterFn = ("function" == typeof(this.config.filterFn)) ? this.config.filterFn : this.filterFn;
+
+ this.lastKey = null;
+ //this.overflowCSS = "overflow";
+
+ this.multiple = this.selectbox.attr("multiple");
+
+ var self = this;
+
+ this.wrapper.data("sc:lastEvent", "click");
+
+ this.overflowCSS = "overflowY";
+
+ if ((this.config.checkWidth) && (this.listWrapper.innerWidth() < maxOptionWidth)) {
+ this.overflowCSS = "overflow";
+
+ }
+ //simon-test 将当前创建的combo对象赋值给_combo
+ _combo = this;
+ _combo.config.data = [];
+ this.notify("init");
+ if(isFirstInitEventToIcon == true) {
+ this.initEvents();
+ isFirstInitEventToIcon = false;
+ }else{
+ this.renderEvent();
+ }
+ };
+ //shortcuts
+ var $sc = $.sexyCombo;
+ $sc.fn = $sc.prototype = {};
+ $sc.fn.extend = $sc.extend = $.extend;
+
+ $sc.fn.extend({
+ //TOC of our plugin
+ //initializes all event listeners
+ initEvents: function() {
+ var self = this;
+ // //添加click事件
+ //上一页
+ this.previous.bind('click',function(e){
+ var PageNumbers=$('.PageNumbers').val();
+ if(currentPage<=1){
+ _config.ajaxData.start=0;
+ $('.PageNumbers').val(_config.ajaxData.start);
+ }
+ if(currentPage>1){
+ self.eliminate();
+ var currentPages=(currentPage--);
+ var currentPagess=(currentPages-1)
+ $('.totalPage').text(currentPagess)
+ $('.PageNumbers').val(currentPagess)
+ _config.ajaxData.start=parseInt((currentPagess-1)*_config.ajaxData.limit)
+ $sc.create(_config);
+ }
+ e.stopPropagation();
+ })
+ //下一页
+ this.nextPage.bind('click',function(e){
+ var totalPage=$('.totalAll').text();
+ if(currentPage
1){
+ self.eliminate();
+ _config.ajaxData.start=0;
+ currentPage=1
+ $('.totalPage').text(currentPage)
+ $('.PageNumbers').val(currentPage)
+ $sc.create(_config);
+ }
+ e.stopPropagation();
+ })
+ //最后一页
+ this.lastPage.bind('click',function(e){
+ var pageSizeINT=parseInt($('.totalAll').text());
+ if(currentPage>pageSizeINT){
+ alert('a')
+ }
+ if(currentPage < pageSizeINT){
+ self.eliminate();
+ _config.ajaxData.start=parseInt((pageSizeINT-1)*_config.ajaxData.limit);
+ currentPage=pageSizeINT;
+ $('.totalPage').text(currentPage)
+ $('.PageNumbers').val(currentPage)
+ $sc.create(_config);
+ }
+
+ e.stopPropagation();
+ })
+ //输入框
+ this.PInput.bind('click',function(e){
+ e.stopPropagation();
+ });
+ this.ppage.bind('click',function(e){
+ e.stopPropagation();
+ })
+ this.totalAll.bind('click',function(e){
+ e.stopPropagation();
+ })
+ this.PInput.bind('keydown',function(e){
+ if(e.keyCode==13){
+ if($(this).val()!==''){
+ var nubmers=$(this).val();
+ var numRegex = /\D/g
+ if (numRegex.test(nubmers)) {
+ self.eliminate();
+ $(this).val('1');
+ return false;
+ }else{
+ var nubmer=parseInt($(this).val())
+ var totalPage=parseInt($('.totalAll').text());
+ if(nubmer<=0){
+ self.eliminate();
+ $(this).val('1');
+ _config.ajaxData.start=0;
+ currentPage=1
+ $('.totalPage').text(currentPage);
+ $('.PageNumbers').val(currentPage);
+ $sc.create(_config);
+ }
+ if(nubmer<=totalPage&&nubmer!==0){
+ self.eliminate();
+ _config.ajaxData.start=parseInt((nubmer-1)*_config.ajaxData.limit);
+ currentPage=nubmer;
+ $('.totalPage').text(currentPage);
+ $('.PageNumbers').val(currentPage);
+ $sc.create(_config);
+ }
+ if(nubmer>totalPage){
+ self.eliminate();
+ _config.ajaxData.start=parseInt((totalPage-1)*_config.ajaxData.limit);
+ currentPage=totalPage;
+ $(this).val(currentPage)
+ $('.totalPage').text(currentPage);
+ $('.PageNumbers').val(currentPage);
+ $sc.create(_config);
+ }
+ }
+ }
+ }
+ })
+ //图标显示隐藏
+ this.icon.bind("click", function() {
+ if (self.input.attr("disabled")) {
+ self.input.attr("disabled", false);
+ }
+ self.wrapper.data("sc:lastEvent", "click");
+ if(self.page.hasClass('invisible')){
+ self.page.removeClass("invisible").addClass("visible");
+ }
+
+ self.filter();
+ self.iconClick();
+ });
+
+ this.icon.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+ this.input.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+ this.wrapper.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+ this.listItems.bind("mouseover", function(e) {
+ //self.highlight(e.target);
+ if ("LI" == e.target.nodeName.toUpperCase()) {
+ self.highlight(e.target);
+ }
+ else {
+ self.highlight($(e.target).parent());
+ }
+ });
+
+ this.listItems.bind("click", function(e) {
+ self.listItemClick($(e.target));
+ });
+ //输入事件
+ this.input.bind("keyup", function(e) {
+ self.wrapper.data("sc:lastEvent", "key");
+ self.searchTxt.attr('value',$(this).val())
+ self.keyUp(e);
+ });
+
+ this.input.bind("keypress", function(e) {
+ if ($sc.KEY.RETURN == e.keyCode) {
+ e.preventDefault();
+ }
+ if ($sc.KEY.TAB == e.keyCode)
+ e.preventDefault();
+ });
+
+ $(document).bind("click", function(e) {
+ var _this = this;
+ if ((self.icon.get(0) == e.target) || (self.input.get(0) == e.target))
+ // console.log(self.input.get(0))
+ return;
+ self.hideList();
+ });
+ this.triggerSelected();
+ this.applyEmptyText();
+ this.input.bind("click", function(e) {
+ self.wrapper.data("sc:lastEvent", "click");
+ self.icon.trigger("click");
+ });
+
+ //here
+ this.wrapper.bind("click", function() {
+ self.wrapper.data("sc:lastEvent", "click");
+ });
+
+ this.input.bind("keydown", function(e) {
+ if (9 == e.keyCode) {
+ e.preventDefault();
+ }
+
+ });
+
+ this.wrapper.bind("keyup", function(e) {
+ var k = e.keyCode;
+ for (key in $sc.KEY) {
+ if ($sc.KEY[key] == k) {
+ return;
+ }
+ }
+ self.wrapper.data("sc:lastEvent", "key");
+ //$sc.log("Last evt is key");
+ });
+
+ this.input.bind("click", function() {
+ self.wrapper.data("sc:lastEvent", "click");
+ });
+
+ this.icon.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+ this.input.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+
+ this.wrapper.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+
+ this.notify("initEvents");
+ },
+ //simon-test
+ renderEvent:function() {
+ var self = this;
+ this.wrapper.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+ this.listItems.bind("mouseover", function(e) {
+ //self.highlight(e.target);
+ if ("LI" == e.target.nodeName.toUpperCase()) {
+ self.highlight(e.target);
+ }
+ else {
+ self.highlight($(e.target).parent());
+ }
+ });
+ this.listItems.bind("click", function(e) {
+ self.listItemClick($(e.target));
+ });
+ this.applyEmptyText();
+ this.wrapper.bind("click", function() {
+ self.wrapper.data("sc:lastEvent", "click");
+ });
+ this.wrapper.bind("keyup", function(e) {
+ var k = e.keyCode;
+ for (key in $sc.KEY) {
+ if ($sc.KEY[key] == k) {
+ return;
+ }
+ }
+ self.wrapper.data("sc:lastEvent", "key");
+ //$sc.log("Last evt is key");
+ });
+ this.wrapper.bind("click", function(e) {
+ if (!self.wrapper.data("sc:positionY")) {
+ self.wrapper.data("sc:positionY", e.pageY);
+ }
+ });
+ this.notify("initEvents");
+
+ },
+ //simon-test
+ getTextValue: function() {
+ return this.__getValue("input");
+ },
+
+ getCurrentTextValue: function() {
+ return this.__getCurrentValue("input");
+ },
+
+ getHiddenValue: function() {
+ return this.__getValue("hidden");
+ },
+
+ getCurrentHiddenValue: function() {
+ return this.__getCurrentValue("hidden");
+ },
+
+ __getValue: function(prop) {
+ prop = this[prop];
+ if (!this.multiple)
+ return $.trim(prop.val());
+
+ var tmpVals = prop.val().split(this.config.separator);
+ var vals = [];
+
+ for (var i = 0, len = tmpVals.length; i < len; ++i) {
+ vals.push($.trim(tmpVals[i]));
+ }
+
+ vals = $sc.normalizeArray(vals);
+
+ return vals;
+ },
+
+ __getCurrentValue: function(prop) {
+ prop = this[prop];
+ if (!this.multiple)
+ return $.trim(prop.val());
+
+ return $.trim(prop.val().split(this.config.separator).pop());
+ },
+ //清除当前list的内容
+ eliminate:function(){
+ $('.list-wrapper').find("ul").empty();
+ },
+ //icon click event listener
+ iconClick: function() {
+ if (this.listVisible()) {
+ this.hideList();
+ this.input.blur();
+ }
+ else {
+ this.showList();
+ this.input.focus();
+ if (this.input.val().length) {
+ this.selection(this.input.get(0), 0, this.input.val().length);
+ }
+ }
+ },
+
+ //returns true when dropdown list is visible
+ listVisible: function() {
+ return this.listWrapper.hasClass("visible");
+ return this.page.hasClass("visible")
+ },
+
+ //shows dropdown list
+ showList: function() {
+ if (!this.listItems.filter(".visible").length)
+ return;
+
+ this.listWrapper.removeClass("invisible").
+ addClass("visible");
+ this.wrapper.css("zIndex", "99999");
+ this.listWrapper.css("zIndex", "99999");
+ this.setListHeight();
+
+ var listHeight = this.listWrapper.height();
+ var inputHeight = this.wrapper.height();
+
+ var bottomPos = parseInt(this.wrapper.data("sc:positionY")) + inputHeight + listHeight;
+ var maxShown = $(window).height() + $(document).scrollTop();
+ if (bottomPos > maxShown) {
+ this.setDropUp(true);
+ }
+ else {
+ this.setDropUp(false);
+ }
+
+ if ("" == $.trim(this.input.val())) {
+ this.highlightFirst();
+ this.listWrapper.scrollTop(0);
+ }
+ else {
+ this.highlightSelected();
+ }
+ this.notify("showList");
+ },
+
+ //hides dropdown list
+ hideList: function() {
+ if (this.listWrapper.hasClass("invisible"))
+ return;
+ this.listWrapper.removeClass("visible").
+ addClass("invisible");
+ this.page.removeClass("visible").
+ addClass("invisible");
+ this.wrapper.css("zIndex", "0");
+ this.listWrapper.css("zIndex", "99999");
+
+ this.notify("hideList");
+ },
+
+ //returns sum of all visible items height
+ getListItemsHeight: function() {
+
+ var itemHeight = this.singleItemHeight;
+ return itemHeight * this.liLen();
+ },
+
+ //changes list wrapper's overflow from hidden to scroll and vice versa (depending on list items height))
+ setOverflow: function() {
+ var maxHeight = this.getListMaxHeight();
+
+ if (this.getListItemsHeight() > maxHeight)
+ this.listWrapper.css(this.overflowCSS, "scroll");
+ else
+ this.listWrapper.css(this.overflowCSS, "hidden");
+ },
+
+ //highlights active item of the dropdown list
+ highlight: function(activeItem) {
+ if (($sc.KEY.DOWN == this.lastKey) || ($sc.KEY.UP == this.lastKey))
+ return;
+
+ this.listItems.removeClass("active");
+ $(activeItem).addClass("active");
+ },
+
+
+
+ //sets text and hidden inputs value
+ setComboValue: function(val, pop, hideList) {
+ var oldVal = this.input.val();
+
+ var v = "";
+ if (this.multiple) {
+ v = this.getTextValue();
+ if (pop)
+ v.pop();
+ v.push($.trim(val));
+ v = $sc.normalizeArray(v);
+ v = v.join(this.config.separator) + this.config.separator;
+
+ } else {
+ v = $.trim(val);
+ }
+ this.input.val(v);
+ this.setHiddenValue(val);
+ this.filter();
+ if (hideList)
+ this.hideList();
+ this.input.removeClass("empty");
+
+
+ if (this.multiple)
+ this.input.focus();
+
+ if (this.input.val() != oldVal)
+ this.notify("textChange");
+
+ },
+
+
+
+ //sets hidden inputs value
+ //takes text input's value as a param
+ setHiddenValue: function(val) {
+ var set = false;
+ val = $.trim(val);
+ var oldVal = this.hidden.val();
+
+ if (!this.multiple) {
+ for (var i = 0, len = this.options.length; i < len; ++i){
+ if (val == this.options.eq(i).text()) {
+ this.hidden.val(this.options.eq(i).val());
+ set = true;
+ break;
+ }
+ }
+ }
+ else {
+ var comboVals = this.getTextValue();
+ var hiddenVals = [];
+ for (var i = 0, len = comboVals.length; i < len; ++i) {
+ for (var j = 0, len1 = this.options.length; j < len1; ++j) {
+ if (comboVals[i] == this.options.eq(j).text()) {
+ hiddenVals.push(this.options.eq(j).val());
+ }
+ }
+ }
+
+ if (hiddenVals.length) {
+ set = true;
+ this.hidden.val(hiddenVals.join(this.config.separator));
+ }
+ }
+
+ if (!set) {
+ this.hidden.val(this.config.initialHiddenValue);
+ }
+
+ if (oldVal != this.hidden.val())
+ this.notify("change");
+
+ this.selectbox.val(this.hidden.val());
+ this.selectbox.trigger("change");
+ },
+
+
+ listItemClick: function(item) {
+ // console.log(item.text())
+ this.setComboValue(item.text(), true, true);
+ this.inputFocus();
+ },
+
+ //adds / removes items to / from the dropdown list depending on combo's current value
+ filter: function() {
+ if ("yes" == this.wrapper.data("sc:optionsChanged")) {
+ var self = this;
+ this.listItems.remove();
+ this.options = this.selectbox.children().filter("option");
+ this.options.each(function() {
+ var optionText = $.trim($(this).text());
+ $("").
+ appendTo(self.list).
+ text(optionText).
+ addClass("visible");
+ });
+
+ this.listItems = this.list.children();
+
+ this.listItems.bind("mouseover", function(e) {
+ self.highlight(e.target);
+ });
+
+ this.listItems.bind("click", function(e) {
+ self.listItemClick($(e.target));
+ });
+
+ self.wrapper.data("sc:optionsChanged", "");
+ }
+
+ var comboValue = this.input.val();
+ var self = this;
+
+ this.listItems.each(function() {
+ var $this = $(this);
+ var itemValue = $this.text();
+ if (self.filterFn.call(self, self.getCurrentTextValue(), itemValue, self.getTextValue())) {
+ $this.removeClass("invisible").
+ addClass("visible");
+ } else {
+ $this.removeClass("visible").
+ addClass("invisible");
+ }
+ });
+
+ this.setOverflow();
+ this.setListHeight();
+ },
+
+ //default dropdown list filtering function
+ filterFn: function(currentComboValue, itemValue, allComboValues) {
+ if ("click" == this.wrapper.data("sc:lastEvent")) {
+ return true;
+ }
+ //alert(currentComboValue.toSource());
+ if (!this.multiple) {
+ return itemValue.toLowerCase().indexOf(currentComboValue.toLowerCase()) == 0;
+ }
+ else {
+ //exclude values that are already selected
+
+ for (var i = 0, len = allComboValues.length; i < len; ++i) {
+ if (itemValue == allComboValues[i]) {
+ return false;
+ }
+ }
+
+ return itemValue.toLowerCase().search(currentComboValue.toLowerCase()) == 0;
+ }
+ },
+
+ //just returns integer value of list wrapper's max-height property
+ getListMaxHeight: function() {
+
+ var result = parseInt(this.listWrapper.css("maxHeight"), 10);
+ if (isNaN(result)) {
+ result = this.singleItemHeight * 10;
+ }
+
+ return result;
+ },
+
+ //corrects list wrapper's height depending on list items height
+ setListHeight: function() {
+
+ var liHeight = this.getListItemsHeight();
+
+ var maxHeight = this.getListMaxHeight();
+
+
+ var listHeight = this.listWrapper.height();
+ if (liHeight < listHeight) {
+ this.listWrapper.height(liHeight);
+
+ return liHeight;
+ }
+ else if (liHeight > listHeight) {
+ this.listWrapper.height(Math.min(maxHeight, liHeight));
+
+ return Math.min(maxHeight, liHeight);
+ }
+
+ },
+
+ //returns active (hovered) element of the dropdown list
+ getActive: function() {
+ return this.listItems.filter(".active");
+ },
+
+ keyUp: function(e) {
+ this.lastKey = e.keyCode;
+ var k = $sc.KEY;
+ switch (e.keyCode) {
+ // case k.RETURN:
+ case k.TAB:
+ this.input.focus();
+ this.setComboValue(this.getActive().text(), true, true);
+ if (!this.multiple)
+ //this.input.blur(); //
+
+ break;
+ case k.DOWN:
+ this.highlightNext();
+
+ break;
+ case k.UP:
+ this.highlightPrev();
+ break;
+ case k.ESC:
+ this.hideList();
+ break;
+ // case k.RETURN:
+ // this.inputChanged();
+ // break;
+ default:
+ this.inputChanged();
+ break;
+ }
+
+
+ },
+
+ //returns number of currently visible list items
+ liLen: function() {
+ return this.listItems.filter(".visible").length;
+ },
+ //用户输入300ms开始检查input的value值
+ delay_till_last:function(id, fn, wait){
+ if (_timer[id]) {
+ window.clearTimeout(_timer[id]);
+ delete _timer[id];
+ }
+
+ return _timer[id] = window.setTimeout(function() {
+ fn();
+ delete _timer[id];
+ }, wait);
+ },
+ inputChanged: function() {
+ var selft = this;
+ selft.eliminate();
+ this.delay_till_last('keyup',function(){
+ var Inputval=$('.searchTxt').val()
+ // console.log(Inputval)
+ if(Inputval!==''){
+ selft.eliminate();
+ _config.ajaxData.spell=Inputval;
+ currentPage=1
+ _config.ajaxData.start=parseInt((currentPage-1)*_config.ajaxData.limit);
+ $('.inputAll').val(currentPage)
+ $sc.create(_config)
+ selft.showList();
+ selft.setOverflow();
+ $('.list-page').removeClass('invisible').addClass('visible')
+ }
+ if(Inputval==''){
+ selft.eliminate();
+ _config.ajaxData.spell=Inputval;
+ currentPage=1
+ _config.ajaxData.start=parseInt((currentPage-1)*_config.ajaxData.limit);
+ $sc.create(_config)
+ selft.showList();
+ $('.list-page').removeClass('invisible').addClass('visible')
+ // selft.setOverflow();
+ }
+ },300);
+
+ this.setHiddenValue(this.input.val());
+ this.notify("textChange");
+
+ },
+
+ //highlights first item of the dropdown list
+ highlightFirst: function() {
+ this.listItems.removeClass("active").filter(".visible:eq(0)").addClass("active");
+ this.autoFill();
+ },
+
+ highlightSelected: function() {
+ this.listItems.removeClass("active");
+ var val = $.trim(this.input.val());
+
+ try {
+ this.listItems.each(function() {
+ var $this = $(this);
+ if ($this.text() == val) {
+ $this.addClass("active");
+ self.listWrapper.scrollTop(0);
+ self.scrollDown();
+
+ }
+ });
+ //no match, must be partial input string; highlight first item
+ this.highlightFirst();
+
+ } catch (e) {}
+ },
+
+ //highlights item of the dropdown list next to the currently active item
+ highlightNext: function() {
+ var $next = this.getActive().next();
+
+ while ($next.hasClass("invisible") && $next.length) {
+ $next = $next.next();
+ }
+
+ if ($next.length) {
+ this.listItems.removeClass("active");
+ $next.addClass("active");
+ this.scrollDown();
+ }
+ },
+
+ //scrolls list wrapper down when needed
+ scrollDown: function() {
+ if ("scroll" != this.listWrapper.css(this.overflowCSS))
+ return;
+
+ var beforeActive = this.getActiveIndex() + 1;
+ /*if ($.browser.opera)
+ ++beforeActive;*/
+
+ var minScroll = this.listItems.outerHeight() * beforeActive - this.listWrapper.height();
+
+ if ($.browser.msie)
+ minScroll += beforeActive;
+
+ if (this.listWrapper.scrollTop() < minScroll)
+ this.listWrapper.scrollTop(minScroll);
+ },
+
+
+ //highlights list item before currently active item
+ highlightPrev: function() {
+ var $prev = this.getActive().prev();
+
+ while ($prev.length && $prev.hasClass("invisible"))
+ $prev = $prev.prev();
+
+ if ($prev.length) {
+ this.getActive().removeClass("active");
+ $prev.addClass("active");
+ this.scrollUp();
+ }
+ },
+
+ //returns index of currently active list item
+ getActiveIndex: function() {
+ return $.inArray(this.getActive().get(0), this.listItems.filter(".visible").get());
+ },
+
+
+ //scrolls list wrapper up when needed
+ scrollUp: function() {
+
+ if ("scroll" != this.listWrapper.css(this.overflowCSS))
+ return;
+
+ var maxScroll = this.getActiveIndex() * this.listItems.outerHeight();
+
+ if (this.listWrapper.scrollTop() > maxScroll) {
+ this.listWrapper.scrollTop(maxScroll);
+ }
+ },
+
+ //emptyText stuff
+ applyEmptyText: function() {
+ if (!this.config.emptyText.length)
+ return;
+
+ var self = this;
+ this.input.bind("focus", function() {
+ self.inputFocus();
+ }).
+ bind("blur", function() {
+ self.inputBlur();
+ });
+
+ if ("" == this.input.val()) {
+ this.input.addClass("empty").val(this.config.emptyText);
+ }
+ },
+
+ inputFocus: function() {
+ if (this.input.hasClass("empty")) {
+ this.input.removeClass("empty").
+ val("");
+ }
+ },
+
+ inputBlur: function() {
+ if ("" == this.input.val()) {
+ this.input.addClass("empty").
+ val(this.config.emptyText);
+ }
+
+ },
+
+ //triggerSelected stuff
+ triggerSelected: function() {
+ if (!this.config.triggerSelected)
+ return;
+
+ var self = this;
+ try {
+ this.options.each(function() {
+ if ($(this).attr("selected")) {
+ self.setComboValue($(this).text(), false, true);
+ throw new Error();
+ }
+ });
+ } catch (e) {
+ return;
+ }
+
+ self.setComboValue(this.options.eq(0).text(), false, false);
+ },
+
+ //autofill stuff
+ autoFill: function() {
+ if (!this.config.autoFill || ($sc.KEY.BACKSPACE == this.lastKey) || this.multiple)
+ return;
+
+ var curVal = this.input.val();
+ var newVal = this.getActive().text();
+ this.input.val(newVal);
+ this.selection(this.input.get(0), curVal.length, newVal.length);
+
+
+ },
+
+ //provides selection for autofilling
+ //borrowed from jCarousel
+ selection: function(field, start, end) {
+ if( field.createTextRange ){
+ var selRange = field.createTextRange();
+ selRange.collapse(true);
+ selRange.moveStart("character", start);
+ selRange.moveEnd("character", end);
+ selRange.select();
+ } else if( field.setSelectionRange ){
+ field.setSelectionRange(start, end);
+ } else {
+ if( field.selectionStart ){
+ field.selectionStart = start;
+ field.selectionEnd = end;
+ }
+ }
+ // field.focus();
+ },
+
+
+ //for internal use
+ updateDrop: function() {
+ if (this.config.dropUp)
+ this.listWrapper.addClass("list-wrapper-up");
+ else
+ this.listWrapper.removeClass("list-wrapper-up");
+ },
+
+ //updates dropUp config option
+ setDropUp: function(drop) {
+ this.config.dropUp = drop;
+ this.updateDrop();
+ },
+
+ notify: function(evt) {
+ if (!$.isFunction(this.config[evt + "Callback"]))
+ return;
+
+ this.config[evt + "Callback"].call(this);
+ }
+ });
+
+ $sc.extend({
+ KEY: {
+ UP: 38,
+ DOWN: 40,
+ DEL: 46,
+ TAB: 9,
+ RETURN: 13,
+ ESC: 27,
+ COMMA: 188,
+ PAGEUP: 33,
+ PAGEDOWN: 34,
+ BACKSPACE: 8
+ },
+ log: function(msg) {
+ var $log = $("#log");
+ $log.html($log.html() + msg + "
");
+ },
+
+ createSelectbox: function(config) {
+ //simon-test delete
+ var $selectbox
+ if(!$(".combo").is("div")) {
+ $selectbox = $("").appendTo(config.container).attr({
+ name: config.name,
+ id: config.id,
+ size: "1"
+ });
+
+ _$selectbox = $selectbox;
+ }else{
+ var elArr = [];
+ for(var s = 0; s < _$selectbox.get(0).length;s++){
+ var item = _$selectbox.get(0)[s];
+ if($(item).is('option')){
+ // delete item[]
+ // $(item).remove();
+ elArr.push(item);
+ }
+ }
+
+ for(var i = 0; i < elArr.length; i++){
+ $(elArr[i]).remove();
+ }
+ $selectbox = _$selectbox;
+
+
+ }
+
+ if (config.multiple)
+ $selectbox.attr("multiple", true);
+
+ var data = config.data;
+ var selected = false;
+
+
+ for (var i = 0, len = data.length; i < len; ++i) {
+ // console.log(data[i][config.value])
+ selected = data[i].selected || false;
+ $("").appendTo($selectbox).
+ attr("value", data[i][config.key]).
+ text(data[i][config.value]).
+ attr("selected", selected);
+ }
+
+ return $selectbox.get(0);
+ },
+
+ create: function(config) {
+ var defaults = {
+ name: "",
+ // start:config.start,
+ id: "",
+ data: [],
+ multiple: false,
+ key: "id",
+ value: "name",
+ container: $(document),
+ url: "",
+ ajaxData: {}
+ };
+
+ config = $.extend({}, defaults, config || {});
+ var Url =config.url;
+ //simon-test delete
+ if (config.url) {
+ return $.getJSON(Url,config.ajaxData, function(data) {
+
+ $.extend(_config,config);//simon-test
+ config.total = data.total;//总条数
+ config.totalPage=Math.ceil(data.total/config.ajaxData.limit);//总页数
+ delete config.url;
+ delete config.ajaxData;
+ config.data = data.rows;
+
+ return $sc.create(config);
+ });
+ }
+ config.container = $(config.container);
+ //simon-test
+ var selectbox = $sc.createSelectbox(config);
+ _selectbox = selectbox;
+ return new $sc(_selectbox, config);
+
+
+ },
+
+ deactivate: function($select) {
+ $select = $($select);
+ $select.each(function() {
+ if ("SELECT" != this.tagName.toUpperCase()) {
+ return;
+ }
+ var $this = $(this);
+ if (!$this.parent().is(".combo")) {
+ return;
+ }
+ //$this.parent().find("input[type='text']").attr("disabled", true);
+
+ });
+ },
+
+ activate: function($select) {
+ $select = $($select);
+ $select.each(function() {
+ if ("SELECT" != this.tagName.toUpperCase()) {
+ return;
+ }
+ var $this = $(this);
+ if (!$this.parent().is(".combo")) {
+ return;
+ }
+ $this.parent().find("input[type='text']").attr("disabled", false);
+ });
+ },
+
+ changeOptions: function($select) {
+ $select = $($select);
+ $select.each(function() {
+ if ("SELECT" != this.tagName.toUpperCase()) {
+ return;
+ }
+
+ var $this = $(this);
+ var $wrapper = $this.parent();
+ var $input = $wrapper.find("input[type='text']");
+ var $listWrapper = $wrapper.find("ul").parent();
+
+ $listWrapper.removeClass("visible").
+ addClass("invisible");
+ $wrapper.css("zIndex", "0");
+ $listWrapper.css("zIndex", "99999");
+
+ $input.val("");
+ $wrapper.data("sc:optionsChanged", "yes");
+ var $selectbox = $this;
+ $selectbox.parent().find("input[type='text']").val($selectbox.find("option:eq(0)").text());
+ $selectbox.parent().data("sc:lastEvent", "click");
+ $selectbox.find("option:eq(0)").attr('selected','selected');
+ });
+ },
+
+
+ normalizeArray: function(arr) {
+ var result = [];
+ for (var i = 0, len =arr.length; i < len; ++i) {
+ if ("" == arr[i])
+ continue;
+
+ result.push(arr[i]);
+ }
+
+ return result;
+ }
+
+ });
+
+
+})(jQuery);
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/index.jsp
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/index.jsp (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/index.jsp (revision 25053)
@@ -0,0 +1,53 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+pageEncoding="UTF-8"%>
+
+
+
+ Sexy Combo 2.1.3 demo page
+
+ <%@ include file="/dx-disinfectsystem/pages/disinfectsystem/commons/tagLibsPath.jsp"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/sexy/text-bg.gif
===================================================================
diff -u
Binary files differ
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/json2.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/json2.js (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/json2.js (revision 25053)
@@ -0,0 +1,484 @@
+/*
+ json2.js
+ 2015-05-03
+ Public Domain.
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+ See http://www.JSON.org/js.html
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+ This file creates a global JSON object containing two methods: stringify
+ and parse. This file is provides the ES5 JSON capability to ES3 systems.
+ If a project might run on IE8 or earlier, then this file should be included.
+ This file does nothing on ES5 systems.
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or ' '),
+ it contains the characters used to indent at each level.
+ This method produces a JSON text from a JavaScript value.
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+ For example, this would serialize Dates as ISO strings.
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+ Example:
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date
+ ? 'Date(' + this[key] + ')'
+ : value;
+ });
+ // text is '["Date(---current time---)"]'
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+ Example:
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+/*jslint
+ eval, for, this
+*/
+
+/*property
+ JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (typeof JSON !== 'object') {
+ JSON = {};
+}
+
+(function () {
+ 'use strict';
+
+ var rx_one = /^[\],:{}\s]*$/,
+ rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rx_four = /(?:^|:|,)(?:\s*\[)+/g,
+ rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+
+ function this_value() {
+ return this.valueOf();
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function () {
+
+ return isFinite(this.valueOf())
+ ? this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z'
+ : null;
+ };
+
+ Boolean.prototype.toJSON = this_value;
+ Number.prototype.toJSON = this_value;
+ String.prototype.toJSON = this_value;
+ }
+
+ var gap,
+ indent,
+ meta,
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ rx_escapable.lastIndex = 0;
+ return rx_escapable.test(string)
+ ? '"' + string.replace(rx_escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string'
+ ? c
+ : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"'
+ : '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value)
+ ? String(value)
+ : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0
+ ? '[]'
+ : gap
+ ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+ : '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ if (typeof rep[i] === 'string') {
+ k = rep[i];
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0
+ ? '{}'
+ : gap
+ ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+ : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"': '\\"',
+ '\\': '\\\\'
+ };
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ rx_dangerous.lastIndex = 0;
+ if (rx_dangerous.test(text)) {
+ text = text.replace(rx_dangerous, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (
+ rx_one.test(
+ text
+ .replace(rx_two, '@')
+ .replace(rx_three, ']')
+ .replace(rx_four, '')
+ )
+ ) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function'
+ ? walk({'': j}, '')
+ : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
\ No newline at end of file
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/custom/custom_bak.css
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/custom/custom_bak.css (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/custom/custom_bak.css (revision 25053)
@@ -0,0 +1,86 @@
+/**
+ sexy-combo 2.1.3 : http://code.google.com/p/sexy-combo/
+
+ This is an example custom skin.
+*/
+
+div.custom {
+ white-space: nowrap;
+ height: 24px;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ width: 146px;
+}
+
+div.custom input {
+ margin: 0 0 0 0;
+ font:normal 14px tahoma, arial, helvetica, sans-serif;
+ padding:1px 3px;
+ background:#fff url(sexy-input-bg.jpg) repeat-x 0 0;
+ border:1px solid #000000;
+ height: 20px;
+ line-height: 20px;
+ vertical-align:middle;
+ left: 0px;
+ top: 0px;
+ width: 187px;
+
+}
+
+div.custom div.icon {
+ width:24px;
+ height:24px;
+ border: 0;
+ background:transparent url(arrow.jpg) no-repeat 0 0;
+ cursor:pointer;
+ /* border-bottom: 1px solid #B5B8C8;*/
+ top:0px;
+ left: 187px;
+
+}
+
+
+div.custom div.list-wrapper {
+ left: 0px;
+ top: 24px;
+ border: 1px solid #000000;
+ border-top: 0;
+ background-color: #FFFFFF;
+ padding: 0;
+ margin: 0;
+ width: 205px;
+ bottom: auto;
+}
+
+div.custom div.list-wrapper-up {
+ top: auto;
+ bottom: 24px;
+ border: 1px solid #000000;
+ border-bottom: 0;
+}
+
+div.custom ul {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ height: 200px;
+}
+
+
+div.custom li {
+ padding: 0;
+ padding-left: 5px;
+ font:normal 14px tahoma, arial, helvetica, sans-serif;
+ background-color: #FFFFFF;
+ cursor: pointer;
+ margin: 0;
+}
+
+div.custom li.active {
+ background-color: rgb(160, 169, 194);
+}
+
+div.custom input.empty {
+ color: gray;
+}
\ No newline at end of file
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/jquery.bgiframe.min.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/jquery.bgiframe.min.js (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/examples/jquery.bgiframe.min.js (revision 25053)
@@ -0,0 +1,10 @@
+/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
+ * $Rev: 2447 $
+ *
+ * Version 2.1.1
+ */
+(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
\ No newline at end of file
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/custom/arrow.jpg
===================================================================
diff -u
Binary files differ
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/sexy-combo.css
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/sexy-combo.css (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/sexy-combo.css (revision 25053)
@@ -0,0 +1,70 @@
+/**
+ sexy-combo 2.1.3 : http://code.google.com/p/sexy-combo/
+
+ This is the base structure, a skin css file is also needed
+*/
+
+/*wrapper of all elements*/
+div.combo {
+ position:relative;
+ left: 0px;
+ top: 0px;
+}
+
+
+/*text input*/
+.combo input {
+ position: absolute;
+}
+
+
+/*icon*/
+.combo div.icon {
+ position:absolute;
+}
+
+
+/*list wrapper*/
+.combo div.list-wrapper {
+ position: absolute;
+ overflow: hidden;
+ /*we should set height and max-height explicitly*/
+ /*height: 200px; */
+ /*max-height: 200px;*/
+ /*should be always at the top*/
+ z-index: 99999;
+
+}
+
+/*"drop-up" list wrapper*/
+.combo div.list-wrapper-up {}
+
+/*dropdown list*/
+.combo ul {}
+
+/*dropdown list item*/
+.combo li {
+ height: 20px;
+}
+
+/*active (hovered) list item*/
+.combo li.active {}
+
+
+.combo .visible {
+ display: block;
+}
+
+.combo .invisible {
+ display: none;
+}
+
+/*used when emptyText config opt is set. Applied to text input*/
+.combo input.empty {}
+
+
+
+
+
+
+
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/style-bak.css
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/style-bak.css (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/css/style-bak.css (revision 25053)
@@ -0,0 +1,103 @@
+/**
+ sexy-combo 2.1.3 : http://code.google.com/p/sexy-combo/
+
+ This is a verbose backup of the base structure. Use sexy-combo.css unless you know what you are doing.
+*/
+
+
+div.combo {
+ position:relative;
+ white-space: nowrap;
+ height: 21px;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ width: 146px;
+}
+
+.combo input {
+ margin: 0 0 0 0;
+ font:normal 12px tahoma, arial, helvetica, sans-serif;
+ padding:1px 3px;
+ background:#fff url(sexy/text-bg.gif) repeat-x 0 0;
+ border:1px solid #B5B8C8;
+ height: 18px;
+ line-height:18px;
+ vertical-align:middle;
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width: 129px;
+
+}
+
+.combo div.icon {
+ width:17px;
+ height:21px;
+ border: 0;
+
+ background:transparent url(../images/trigger.gif) no-repeat 0 0;
+ cursor:pointer;
+ border-bottom: 1px solid #B5B8C8;
+ position:absolute;
+ top:0px;
+ left: 129px;
+
+}
+
+
+
+div.list-wrapper {
+ position: absolute;
+ left: 0px;
+ top: 21px;
+ border: 1px solid #D9D9D9;
+ background-color: #FFFFFF;
+ padding: 0;
+ overflow: hidden;
+ margin: 0;
+ height: 200px;
+ max-height: 200px;
+ z-index: 99999;
+ width: 146px;
+}
+
+.combo ul {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ height: 200px;
+}
+
+.combo li {
+ padding: 0;
+ padding-left: 5px;
+ font:normal 14px tahoma, arial, helvetica, sans-serif;
+ background-color: #FFFFFF;
+ height: 20px;
+ cursor: pointer;
+ margin: 0;
+}
+
+.combo li.active {
+ background-color: rgb(223, 232, 246);
+}
+
+
+.combo .visible {
+ display: block;
+}
+
+.combo .invisible {
+ display: none;
+}
+.combo input.empty {
+ color: gray;
+}
+
+
+
+
+
+
+
Index: ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/jquery.sexy-combo.min.js
===================================================================
diff -u
--- ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/jquery.sexy-combo.min.js (revision 0)
+++ ssts-web/src/main/webapp/dx-disinfectsystem/plugins/select-page/jquery.sexy-combo.min.js (revision 25053)
@@ -0,0 +1,31 @@
+/***************************************************************************
+
+ sexy-combo 2.1.3 : A jQuery date time picker.
+
+ Authors:
+ Kadalashvili.Vladimir@gmail.com - Vladimir Kadalashvili
+ thetoolman@gmail.com
+
+ Version: 2.1.3
+
+ Website: http://code.google.com/p/sexy-combo/
+
+
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * *
+ ***************************************************************************/;(function($){$.fn.sexyCombo=function(config){return this.each(function(){if("SELECT"!=this.tagName.toUpperCase()){return;}new $sc(this,config);});};var defaults={skin:"sexy",suffix:"__sexyCombo",hiddenSuffix:"__sexyComboHidden",renameOriginal:false,initialHiddenValue:"",emptyText:"",autoFill:false,triggerSelected:true,filterFn:null,dropUp:false,separator:",",key:"value",value:"text",showListCallback:null,hideListCallback:null,initCallback:null,initEventsCallback:null,changeCallback:null,textChangeCallback:null,checkWidth:true};$.sexyCombo=function(selectbox,config){if(selectbox.tagName.toUpperCase()!="SELECT")return;this.config=$.extend({},defaults,config||{});this.selectbox=$(selectbox);this.options=this.selectbox.children().filter("option");this.wrapper=this.selectbox.wrap("").hide().parent().addClass("combo").addClass(this.config.skin);this.input=$("
").appendTo(this.wrapper).attr("autocomplete","off").attr("value","").attr("name",this.selectbox.attr("name")+this.config.suffix);var origName=this.selectbox.attr("name");var newName=origName+this.config.hiddenSuffix;if(this.config.renameOriginal){this.selectbox.attr("name",newName);}this.hidden=$("
").appendTo(this.wrapper).attr("autocomplete","off").attr("value",this.config.initialHiddenValue).attr("name",this.config.renameOriginal?origName:newName);this.icon=$("
").appendTo(this.wrapper).addClass("icon");this.listWrapper=$("
").appendTo(this.wrapper).addClass("list-wrapper");this.updateDrop();this.list=$("
").appendTo(this.listWrapper);var self=this;var optWidths=[];this.options.each(function(){var optionText=$.trim($(this).text());if(self.config.checkWidth){optWidths.push($("
").appendTo(self.list).html("
"+optionText+"").addClass("visible").find("span").outerWidth());}else{$("
").appendTo(self.list).html("
"+optionText+"").addClass("visible");}});this.listItems=this.list.children();if(optWidths.length){optWidths=optWidths.sort(function(a,b){return a-b;});var maxOptionWidth=optWidths[optWidths.length-1];}this.singleItemHeight=this.listItems.outerHeight();this.listWrapper.addClass("invisible");if($.browser.opera){this.wrapper.css({position:"relative",left:"0",top:"0"});}this.filterFn=("function"==typeof(this.config.filterFn))?this.config.filterFn:this.filterFn;this.lastKey=null;this.multiple=this.selectbox.attr("multiple");var self=this;this.wrapper.data("sc:lastEvent","click");this.overflowCSS="overflowY";if((this.config.checkWidth)&&(this.listWrapper.innerWidth()
maxShown){this.setDropUp(true);}else{this.setDropUp(false);}if(""==$.trim(this.input.val())){this.highlightFirst();this.listWrapper.scrollTop(0);}else{this.highlightSelected();}this.notify("showList");},hideList:function(){if(this.listWrapper.hasClass("invisible"))return;this.listWrapper.removeClass("visible").addClass("invisible");this.wrapper.css("zIndex","0");this.listWrapper.css("zIndex","99999");this.notify("hideList");},getListItemsHeight:function(){var itemHeight=this.singleItemHeight;return itemHeight*this.liLen();},setOverflow:function(){var maxHeight=this.getListMaxHeight();if(this.getListItemsHeight()>maxHeight)this.listWrapper.css(this.overflowCSS,"scroll");else
+this.listWrapper.css(this.overflowCSS,"hidden");},highlight:function(activeItem){if(($sc.KEY.DOWN==this.lastKey)||($sc.KEY.UP==this.lastKey))return;this.listItems.removeClass("active");$(activeItem).addClass("active");},setComboValue:function(val,pop,hideList){var oldVal=this.input.val();var v="";if(this.multiple){v=this.getTextValue();if(pop)v.pop();v.push($.trim(val));v=$sc.normalizeArray(v);v=v.join(this.config.separator)+this.config.separator;}else{v=$.trim(val);}this.input.val(v);this.setHiddenValue(val);this.filter();if(hideList)this.hideList();this.input.removeClass("empty");if(this.multiple)this.input.focus();if(this.input.val()!=oldVal)this.notify("textChange");},setHiddenValue:function(val){var set=false;val=$.trim(val);var oldVal=this.hidden.val();if(!this.multiple){for(var i=0,len=this.options.length;i").appendTo(self.list).text(optionText).addClass("visible");});this.listItems=this.list.children();this.listItems.bind("mouseover",function(e){self.highlight(e.target);});this.listItems.bind("click",function(e){self.listItemClick($(e.target));});self.wrapper.data("sc:optionsChanged","");}var comboValue=this.input.val();var self=this;this.listItems.each(function(){var $this=$(this);var itemValue=$this.text();if(self.filterFn.call(self,self.getCurrentTextValue(),itemValue,self.getTextValue())){$this.removeClass("invisible").addClass("visible");}else{$this.removeClass("visible").addClass("invisible");}});this.setOverflow();this.setListHeight();},filterFn:function(currentComboValue,itemValue,allComboValues){if("click"==this.wrapper.data("sc:lastEvent")){return true;}if(!this.multiple){return itemValue.toLowerCase().indexOf(currentComboValue.toLowerCase())==0;}else{for(var i=0,len=allComboValues.length;ilistHeight){this.listWrapper.height(Math.min(maxHeight,liHeight));return Math.min(maxHeight,liHeight);}},getActive:function(){return this.listItems.filter(".active");},keyUp:function(e){this.lastKey=e.keyCode;var k=$sc.KEY;switch(e.keyCode){case k.RETURN:case k.TAB:this.setComboValue(this.getActive().text(),true,true);if(!this.multiple)break;case k.DOWN:this.highlightNext();break;case k.UP:this.highlightPrev();break;case k.ESC:this.hideList();break;default:this.inputChanged();break;}},liLen:function(){return this.listItems.filter(".visible").length;},inputChanged:function(){this.filter();if(this.liLen()){this.showList();this.setOverflow();this.setListHeight();}else{this.hideList();}this.setHiddenValue(this.input.val());this.notify("textChange");},highlightFirst:function(){this.listItems.removeClass("active").filter(".visible:eq(0)").addClass("active");this.autoFill();},highlightSelected:function(){this.listItems.removeClass("active");var val=$.trim(this.input.val());try{this.listItems.each(function(){var $this=$(this);if($this.text()==val){$this.addClass("active");self.listWrapper.scrollTop(0);self.scrollDown();}});this.highlightFirst();}catch(e){}},highlightNext:function(){var $next=this.getActive().next();while($next.hasClass("invisible")&&$next.length){$next=$next.next();}if($next.length){this.listItems.removeClass("active");$next.addClass("active");this.scrollDown();}},scrollDown:function(){if("scroll"!=this.listWrapper.css(this.overflowCSS))return;var beforeActive=this.getActiveIndex()+1;var minScroll=this.listItems.outerHeight()*beforeActive-this.listWrapper.height();if($.browser.msie)minScroll+=beforeActive;if(this.listWrapper.scrollTop()maxScroll){this.listWrapper.scrollTop(maxScroll);}},applyEmptyText:function(){if(!this.config.emptyText.length)return;var self=this;this.input.bind("focus",function(){self.inputFocus();}).bind("blur",function(){self.inputBlur();});if(""==this.input.val()){this.input.addClass("empty").val(this.config.emptyText);}},inputFocus:function(){if(this.input.hasClass("empty")){this.input.removeClass("empty").val("");}},inputBlur:function(){if(""==this.input.val()){this.input.addClass("empty").val(this.config.emptyText);}},triggerSelected:function(){if(!this.config.triggerSelected)return;var self=this;try{this.options.each(function(){if($(this).attr("selected")){self.setComboValue($(this).text(),false,true);throw new Error();}});}catch(e){return;}self.setComboValue(this.options.eq(0).text(),false,false);},autoFill:function(){if(!this.config.autoFill||($sc.KEY.BACKSPACE==this.lastKey)||this.multiple)return;var curVal=this.input.val();var newVal=this.getActive().text();this.input.val(newVal);this.selection(this.input.get(0),curVal.length,newVal.length);},selection:function(field,start,end){if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}else if(field.setSelectionRange){field.setSelectionRange(start,end);}else{if(field.selectionStart){field.selectionStart=start;field.selectionEnd=end;}}},updateDrop:function(){if(this.config.dropUp)this.listWrapper.addClass("list-wrapper-up");else
+this.listWrapper.removeClass("list-wrapper-up");},setDropUp:function(drop){this.config.dropUp=drop;this.updateDrop();},notify:function(evt){if(!$.isFunction(this.config[evt+"Callback"]))return;this.config[evt+"Callback"].call(this);}});$sc.extend({KEY:{UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},log:function(msg){var $log=$("#log");$log.html($log.html()+msg+"
");},createSelectbox:function(config){var $selectbox=$("").appendTo(config.container).attr({name:config.name,id:config.id,size:"1"});if(config.multiple)$selectbox.attr("multiple",true);var data=config.data;var selected=false;for(var i=0,len=data.length;i").appendTo($selectbox).attr("value",data[i][config.key]).text(data[i][config.value]).attr("selected",selected);}return $selectbox.get(0);},create:function(config){var defaults={name:"",id:"",data:[],multiple:false,key:"value",value:"text",container:$(document),url:"",ajaxData:{}};config=$.extend({},defaults,config||{});if(config.url){return $.getJSON(config.url,config.ajaxData,function(data){delete config.url;delete config.ajaxData;config.data=data;return $sc.create(config);});}config.container=$(config.container);var selectbox=$sc.createSelectbox(config);return new $sc(selectbox,config);},deactivate:function($select){$select=$($select);$select.each(function(){if("SELECT"!=this.tagName.toUpperCase()){return;}var $this=$(this);if(!$this.parent().is(".combo")){return;}});},activate:function($select){$select=$($select);$select.each(function(){if("SELECT"!=this.tagName.toUpperCase()){return;}var $this=$(this);if(!$this.parent().is(".combo")){return;}$this.parent().find("input[type='text']").attr("disabled",false);});},changeOptions:function($select){$select=$($select);$select.each(function(){if("SELECT"!=this.tagName.toUpperCase()){return;}var $this=$(this);var $wrapper=$this.parent();var $input=$wrapper.find("input[type='text']");var $listWrapper=$wrapper.find("ul").parent();$listWrapper.removeClass("visible").addClass("invisible");$wrapper.css("zIndex","0");$listWrapper.css("zIndex","99999");$input.val("");$wrapper.data("sc:optionsChanged","yes");var $selectbox=$this;$selectbox.parent().find("input[type='text']").val($selectbox.find("option:eq(0)").text());$selectbox.parent().data("sc:lastEvent","click");$selectbox.find("option:eq(0)").attr('selected','selected');});},normalizeArray:function(arr){var result=[];for(var i=0,len=arr.length;i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(3($){$.1J.1V=3(a){6 2.U(3(){4("1w"!=2.1p.1j()){6}1W l(2,a)})};5 m={3g:"4d",3a:"45",2Z:"3X",2a:C,1Z:"",1C:"",1B:C,1z:G,18:15,1N:C,1m:",",1f:"11",11:"y",4b:15,49:15,44:15,43:15,42:15,41:15,2d:G};$.1V=3(h,f){4(h.1p.1j()!="1w")6;2.r=$.19({},m,f||{});2.P=$(h);2.J=2.P.1D().N("1x");2.n=2.P.3I("<1S>").3G().S().x("1R").x(2.r.3g);2.7=$("<7 1y=\'y\' />").Q(2.n).A("2Y","3k").A("11","").A("Z",2.P.A("Z")+2.r.3a);5 e=2.P.A("Z");5 i=e+2.r.2Z;4(2.r.2a){2.P.A("Z",i)}2.O=$("<7 1y=\'O\' />").Q(2.n).A("2Y","3k").A("11",2.r.1Z).A("Z",2.r.2a?e:i);2.1c=$("<1S />").Q(2.n).x("1c");2.p=$("<1S />").Q(2.n).x("V-n");2.2l();2.V=$("<39 />").Q(2.p);5 g=2;5 d=[];2.J.U(3(){5 a=$.L($(2).y());4(g.r.2d){d.1v($("<2h />").Q(g.V).1H("<1t>"+a+"1t>").x("F").1a("1t").3Y())}B{$("<2h />").Q(g.V).1H("<1t>"+a+"1t>").x("F")}});2.z=2.V.1D();4(d.w){d=d.3V(3(a,b){6 a-b});5 c=d[d.w-1]}2.24=2.z.22();2.p.x("W");4($.2T.3U){2.n.K({3T:"3S",3Q:"0",3M:"0"})}2.18=("3"==3K(2.r.18))?2.r.18:2.18;2.1n=15;2.D=2.P.A("D");5 g=2;2.n.q("s:T","t");2.1g="3F";4((2.r.2d)&&(2.p.3D()a){2.2c(G)}B{2.2c(C)}4(""==$.L(2.7.o())){2.2b();2.p.1b(0)}B{2.2W()}2.12("1A")},1d:3(){4(2.p.1s("W"))6;2.p.E("F").x("W");2.n.K("1i","0");2.p.K("1i","1G");2.12("1d")},1U:3(){5 a=2.24;6 a*2.20()},29:3(){5 a=2.28();4(2.1U()>a)2.p.K(2.1g,"26");B 2.p.K(2.1g,"O")},1E:3(a){4((l.R.23==2.1n)||(l.R.25==2.1n))6;2.z.E("M");$(a).x("M")},1u:3(a,b,d){5 c=2.7.o();5 v="";4(2.D){v=2.1L();4(b)v.35();v.1v($.L(a));v=l.2i(v);v=v.2V(2.r.1m)+2.r.1m}B{v=$.L(a)}2.7.o(v);2.21(a);2.N();4(d)2.1d();2.7.E("1r");4(2.D)2.7.2f();4(2.7.o()!=c)2.12("2U")},21:3(b){5 a=C;b=$.L(b);5 e=2.O.o();4(!2.D){14(5 i=0,I=2.J.w;i").Q(c.V).y(a).x("F")});2.z=2.V.1D();2.z.u("30",3(e){c.1E(e.X)});2.z.u("t",3(e){c.2g($(e.X))});c.n.q("s:1X","")}5 d=2.7.o();5 c=2;2.z.U(3(){5 b=$(2);5 a=b.y();4(c.18.2O(c,c.37(),a,c.1L())){b.E("W").x("F")}B{b.E("F").x("W")}});2.29();2.1F()},18:3(b,a,c){4("t"==2.n.q("s:T")){6 G}4(!2.D){6 a.1M().3P(b.1M())==0}B{14(5 i=0,I=c.w;ib){2.p.17(2M.2L(a,c));6 2M.2L(a,c)}},16:3(){6 2.z.N(".M")},3h:3(e){2.1n=e.1k;5 k=l.R;3J(e.1k){1q k.2p:1q k.2n:2.1u(2.16().y(),G,G);4(!2.D)1h;1q k.23:2.2J();1h;1q k.25:2.2I();1h;1q k.2H:2.1d();1h;3H:2.2G();1h}},20:3(){6 2.z.N(".F").w},2G:3(){2.N();4(2.20()){2.1A();2.29();2.1F()}B{2.1d()}2.21(2.7.o());2.12("2U")},2b:3(){2.z.E("M").N(".F:Y(0)").x("M");2.1B()},2W:3(){2.z.E("M");5 b=$.L(2.7.o());2F{2.z.U(3(){5 a=$(2);4(a.y()==b){a.x("M");2s.p.1b(0);2s.1O()}});2.2b()}2D(e){}},2J:3(){5 a=2.16().2C();2x(a.1s("W")&&a.w){a=a.2C()}4(a.w){2.z.E("M");a.x("M");2.1O()}},1O:3(){4("26"!=2.p.K(2.1g))6;5 a=2.1P()+1;5 b=2.z.22()*a-2.p.17();4($.2T.3E)b+=a;4(2.p.1b()a){2.p.1b(a)}},3c:3(){4(!2.r.1C.w)6;5 a=2;2.7.u("2f",3(){a.1Y()}).u("31",3(){a.2y()});4(""==2.7.o()){2.7.x("1r").o(2.r.1C)}},1Y:3(){4(2.7.1s("1r")){2.7.E("1r").o("")}},2y:3(){4(""==2.7.o()){2.7.x("1r").o(2.r.1C)}},1z:3(){4(!2.r.1z)6;5 a=2;2F{2.J.U(3(){4($(2).A("1o")){a.1u($(2).y(),C,G);3A 1W 3y();}})}2D(e){6}a.1u(2.J.Y(0).y(),C,C)},1B:3(){4(!2.r.1B||(l.R.2E==2.1n)||2.D)6;5 a=2.7.o();5 b=2.16().y();2.7.o(b);2.2e(2.7.1e(0),a.w,b.w)},2e:3(b,a,c){4(b.2B){5 d=b.2B();d.3x(G);d.3v("2w",a);d.3u("2w",c);d.2N()}B 4(b.2v){b.2v(a,c)}B{4(b.2K){b.2K=a;b.3t=c}}},2l:3(){4(2.r.1N)2.p.x("V-n-2u");B 2.p.E("V-n-2u")},2c:3(a){2.r.1N=a;2.2l()},12:3(a){4(!$.3s(2.r[a+"2t"]))6;2.r[a+"2t"].2O(2)}});l.19({R:{25:38,23:40,3r:46,2n:9,2p:13,2H:27,3p:3o,3Z:33,3m:34,2E:8},3l:3(a){5 b=$("#3l");b.1H(b.1H()+a+"<4m />")},3i:3(d){5 a=$("<2N />").Q(d.1I).A({Z:d.Z,2r:d.2r,4j:"1"});4(d.D)a.A("D",G);5 b=d.q;5 c=C;14(5 i=0,I=b.w;i").Q(a).A("11",b[i][d.1f]).y(b[i][d.11]).A("1o",c)}6 a.1e(0)},3f:3(c){5 d={Z:"",2r:"",q:[],D:C,1f:"11",11:"y",1I:$(2m),1K:"",2q:{}};c=$.19({},d,c||{});4(c.1K){6 $.4i(c.1K,c.2q,3(a){3e c.1K;3e c.2q;c.q=a;6 l.3f(c)})}c.1I=$(c.1I);5 b=l.3i(c);6 1W l(b,c)},4h:3(b){b=$(b);b.U(3(){4("1w"!=2.1p.1j()){6}5 a=$(2);4(!a.S().3d(".1R")){6}})},4g:3(b){b=$(b);b.U(3(){4("1w"!=2.1p.1j()){6}5 a=$(2);4(!a.S().3d(".1R")){6}a.S().1a("7[1y=\'y\']").A("1T",C)})},4f:3(f){f=$(f);f.U(3(){4("1w"!=2.1p.1j()){6}5 b=$(2);5 c=b.S();5 a=c.1a("7[1y=\'y\']");5 d=c.1a("39").S();d.E("F").x("W");c.K("1i","0");d.K("1i","1G");a.o("");c.q("s:1X","2Q");5 e=b;e.S().1a("7[1y=\'y\']").o(e.1a("1x:Y(0)").y());e.S().q("s:T","t");e.1a("1x:Y(0)").A(\'1o\',\'1o\')})},2i:3(a){5 b=[];14(5 i=0,I=a.w;i