(function($){$.widget("ui.multislider",{widgetEventPrefix:"multislider",options:{start:0,end:100,divisor:1,increment:5,positions:[],counts:[],boundaryCounts:[],textboxes:false},_init:function(){var self=this,o=this.options;if(!this.element.hasClass("sli-multislider")){if(!o.hasOwnProperty("min")){o.min=o.start}if(!o.hasOwnProperty("max")){o.max=o.end}o.min=parseInt(o.min,10);o.max=parseInt(o.max,10);this.element.addClass("sli-multislider");this.positions(o.positions);this.counts(o.counts);this.boundaryCounts(o.boundaryCounts);this.buildSlider();this.buildStatus();this.updateProductCount()}},positions:function(value){if(value){if(this._contains(value,this.options.end)==-1){value.push(this.options.end)}this._positions=value}return this._positions},_contains:function(array,item){for(var i=0,n=array.length;i<n;i++){if(array[i]===item){return i}}return -1},counts:function(value){if(value){this._counts=value}return this._counts},boundaryCounts:function(value){if(value){this._boundary_counts=value}return this._boundary_counts},buildSlider:function(){var self=this,o=this.options;this.slider=$("<div></div>").appendTo(this.element).removeAttr("slide").slider({range:true,min:o.start,max:o.end,step:o.increment,values:[this._min=o.min,this._max=o.max],slide:function(e,ui){self.sliding(ui.values[0],ui.values[1]);self.updateStatus(ui.values[0],ui.values[1])},stop:function(e,ui){self.scheduleUpdate()}})},buildStatus:function(){var self=this,o=this.options;$status=$("<div></div>").appendTo(this.element).addClass("sli-slider-status");if(o.textboxes){if(o.currency){$status.append(o.currency)}textboxNames=typeof(o.textboxes)=="array"?o.textboxes:["sli-slider-min","sli-slider-max"];this.textboxes={};this.textboxes.min=$('<input type="text">').appendTo($status).attr("name",textboxNames[0]).attr("id",textboxNames[0]).addClass("min");$status.append(" to "+(o.currency||""));this.textboxes.max=$('<input type="text">').appendTo($status).attr("name",textboxNames[1]).attr("id",textboxNames[1]).addClass("max");this.updateStatus=function(min,max){self.textboxes.min.val(self.formatAmount(min));self.textboxes.max.val(self.formatAmount(max));self.updateProductCount()};$("input.min, input.max").keydown(function(e){if((e.which>=48&&e.which<58)||e.which==8||e.which==9||e.which==46||(e.which>=37&&e.which<=40)){setTimeout(function(){self.updateFromTextboxes()},50)}else{return false}}).focus(function(){this.select()})}else{this.rangeSpan=$('<span><span class="min"></span><span class="to">&nbsp;to&nbsp;</span><span class="max"></span></span>').appendTo($status);this.updateStatus=function(min,max){$(".min",self.rangeSpan).text(self.formatAmount(min,true));$(".max",self.rangeSpan).text(self.formatAmount(max,true));self.updateProductCount()}}this.productCount=$("<span></span>").addClass("count").appendTo($status);this.updateStatus(o.min,o.max)},formatAmount:function(amount,includeCurrency){var o=this.options;return(includeCurrency&&o.currency?o.currency:"")+Math.round(amount/o.divisor)},updateSlider:function(min,max){var o=this.options,rmin=Math.floor(Math.max(Math.min(min,max),o.start)/o.increment)*o.increment,rmax=Math.ceil(Math.min(Math.max(min,max),o.end)/o.increment)*o.increment;this.slider.slider("values",0,this._min=rmin);this.slider.slider("values",1,this._max=rmax)},sliding:function(min,max){this.updateStatus(this._min=min,this._max=max)},updateFromTextboxes:function(){var o=this.options;this.updateSlider(parseInt(this.textboxes.min.val())*o.divisor,parseInt(this.textboxes.max.val())*o.divisor);this.updateProductCount()},scheduleUpdate:function(event){var self=this;if(this.updater){clearTimeout(this.updater)}this.updater=setTimeout(function(){self._trigger("change",event,{min:self.min(),max:self.max()})},250)},min:function(value){if(typeof(value)!="undefined"){this._min=value;this.updateStatus(value,this.max());this.updateSlider(value,this.max())}return this._min},max:function(value){if(typeof(value)!="undefined"){this._max=value;this.updateStatus(this.min(),value);this.updateSlider(this.min(),value)}return this._max},updateProductCount:function(){this.productCount.text(" ("+this.products()+")")},products:function(){var o=this.options,t=0,min=this.min(),max=this.max();for(i=0,p=o.positions,c=o.counts,b=o.boundaryCounts,n=p.length-1;i<n;i++){if(p[i]>=min&&p[i+1]<=max){t+=c[i]+(p[i+1]==max?b[i]:0)}else{if(min==max&&p[i+1]==max){t+=b[i]}}}return t},clear:function(){this.min(this.options.start);this.max(this.options.end)}})})(jQuery);
