text: dojo._xdResourceLoaded({
  depends: [["provide", "dijit.form.Slider"],
  ["require", "dijit.form._FormWidget"],
  ["require", "dijit._Container"],
  ["require", "dojo.dnd.move"],
  ["require", "dijit.form.Button"],
  ["require", "dojo.number"]],
  defineResource: function(dojo){if(!dojo._hasResource["dijit.form.Slider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  dojo._hasResource["dijit.form.Slider"] = true;
  dojo.provide("dijit.form.Slider");
  
  dojo.require("dijit.form._FormWidget");
  dojo.require("dijit._Container");
  dojo.require("dojo.dnd.move");
  dojo.require("dijit.form.Button");
  dojo.require("dojo.number");
  
  dojo.declare(
  	"dijit.form.HorizontalSlider",
  	[dijit.form._FormWidget, dijit._Container],
  {
  	// summary
  	//	A form widget that allows one to select a value with a horizontally draggable image
  
  	templateString:"<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\r\n\t\t><td dojoAttachPoint=\"containerNode,topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\r\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\"\r\n\t\t\t><div class=\"dijitHorizontalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"\r\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderLeftBumper dijitHorizontalSliderLeftBumper\"></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"\r\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\r\n\t\t\t/><div style=\"position:relative;\" dojoAttachPoint=\"sliderBarContainer\"\r\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderProgressBar dijitHorizontalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\r\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable dijitHorizontalSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\r\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitHorizontalSliderImageHandle\"></div\r\n\t\t\t\t\t></div\r\n\t\t\t\t></div\r\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderRemainingBar dijitHorizontalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\r\n\t\t\t></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"\r\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderRightBumper dijitHorizontalSliderRightBumper\"></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\" style=\"right:0px;\"\r\n\t\t\t><div class=\"dijitHorizontalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\r\n\t\t></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\r\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\r\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\r\n\t></tr\r\n></table>\r\n",
  	value: 0,
  
  	// showButtons: boolean
  	//	Show increment/decrement buttons at the ends of the slider?
  	showButtons: true,
  
  	// minimum:: integer
  	//	The minimum value allowed.
  	minimum: 0,
  
  	// maximum: integer
  	//	The maximum allowed value.
  	maximum: 100,
  
  	// discreteValues: integer
  	//	The maximum allowed values dispersed evenly between minimum and maximum (inclusive).
  	discreteValues: Infinity,
  
  	// pageIncrement: integer
  	//	The amount of change with shift+arrow
  	pageIncrement: 2,
  
  	// clickSelect: boolean
  	//	If clicking the progress bar changes the value or not
  	clickSelect: true,
  
  	widgetsInTemplate: true,
  
  	attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
  		{id:"", name:"valueNode"}),
  
  	baseClass: "dijitSlider",
  
  	_mousePixelCoord: "pageX",
  	_pixelCount: "w",
  	_startingPixelCoord: "x",
  	_startingPixelCount: "l",
  	_handleOffsetCoord: "left",
  	_progressPixelSize: "width",
  	_upsideDown: false,
  
  	_onKeyPress: function(/*Event*/ e){
  		if(this.disabled || e.altKey || e.ctrlKey){ return; }
  		switch(e.keyCode){
  			case dojo.keys.HOME:
  				this.setValue(this.minimum, false);
  				break;
  			case dojo.keys.END:
  				this.setValue(this.maximum, false);
  				break;
  			case dojo.keys.UP_ARROW:
  			case (this._isReversed() ? dojo.keys.LEFT_ARROW : dojo.keys.RIGHT_ARROW):
  			case dojo.keys.PAGE_UP:
  				this.increment(e);
  				break;
  			case dojo.keys.DOWN_ARROW:
  			case (this._isReversed() ? dojo.keys.RIGHT_ARROW : dojo.keys.LEFT_ARROW):
  			case dojo.keys.PAGE_DOWN:
  				this.decrement(e);
  				break;
  			default:
  				this.inherited("_onKeyPress", arguments);
  				return;
  		}
  		dojo.stopEvent(e);
  	},
  
  	_onHandleClick: function(e){
  		if(this.disabled){ return; }
  		if(!dojo.isIE){
  			// make sure you get focus when dragging the handle
  			// (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
  			dijit.focus(this.sliderHandle);
  		}
  		dojo.stopEvent(e);
  	},
  	
  	_isReversed: function() {
  		return !(this._upsideDown || this.isLeftToRight());
  	},
  
  	_onBarClick: function(e){
  		if(this.disabled || !this.clickSelect){ return; }
  		dijit.focus(this.sliderHandle);
  		dojo.stopEvent(e);
  		var abspos = dojo.coords(this.sliderBarContainer, true);
  		var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
  		this._setPixelValue(this._isReversed() || this._upsideDown ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
  	},
  
  	_setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
  		if(this.disabled){ return; }
  		pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
  		var count = this.discreteValues;
  		if(count <= 1 || count == Infinity){ count = maxPixels; }
  		count--;
  		var pixelsPerValue = maxPixels / count;
  		var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
  		this.setValue((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
  	},
  
  	setValue: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
  		this.valueNode.value = this.value = value;
  		this.inherited('setValue', arguments);
  		var percent = (value - this.minimum) / (this.maximum - this.minimum);
  		this.progressBar.style[this._progressPixelSize] = (percent*100) + "%";
  		this.remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
  	},
  
  	_bumpValue: function(signedChange){
  		if(this.disabled){ return; }
  		var s = dojo.getComputedStyle(this.sliderBarContainer);
  		var c = dojo._getContentBox(this.sliderBarContainer, s);
  		var count = this.discreteValues;
  		if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
  		count--;
  		var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
  		if(value < 0){ value = 0; }
  		if(value > count){ value = count; }
  		value = value * (this.maximum - this.minimum) / count + this.minimum;
  		this.setValue(value, true);
  	},
  
  	decrement: function(e){
  		// summary
  		//	decrement slider by 1 unit
  		this._bumpValue(e.keyCode == dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);
  	},
  
  	increment: function(e){
  		// summary
  		//	increment slider by 1 unit
  		this._bumpValue(e.keyCode == dojo.keys.PAGE_UP?this.pageIncrement:1);
  	},
  
  	_mouseWheeled: function(/*Event*/ evt){
  		dojo.stopEvent(evt);
  		var scrollAmount = 0;
  		if(typeof evt.wheelDelta == 'number'){ // IE
  			scrollAmount = evt.wheelDelta;
  		}else if(typeof evt.detail == 'number'){ // Mozilla+Firefox
  			scrollAmount = -evt.detail;
  		}
  		if(scrollAmount > 0){
  			this.increment(evt);
  		}else if(scrollAmount < 0){
  			this.decrement(evt);
  		}
  	},
  
  	startup: function(){
  		dojo.forEach(this.getChildren(), function(child){
  			if(this[child.container] != this.containerNode){
  				this[child.container].appendChild(child.domNode);
  			}
  		}, this);
  	},
  
  	_onBlur: function(){
  		dijit.form.HorizontalSlider.superclass.setValue.call(this, this.value, true);
  	},
  
  	postCreate: function(){
  		if(this.showButtons){
  			this.incrementButton.style.display="";
  			this.decrementButton.style.display="";
  		}
  		this.connect(this.domNode, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
  
  		// define a custom constructor for a SliderMover that points back to me
  		var _self = this;
  		var mover = function(){
  			dijit.form._SliderMover.apply(this, arguments);
  			this.widget = _self;
  		};
  		dojo.extend(mover, dijit.form._SliderMover.prototype);
  
  		this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
  		this.inherited('postCreate', arguments);
  	},
  
  	destroy: function(){
  		this._movable.destroy();
  		this.inherited('destroy', arguments);	
  	}
  });
  
  dojo.declare(
  	"dijit.form.VerticalSlider",
  	dijit.form.HorizontalSlider,
  {
  	// summary
  	//	A form widget that allows one to select a value with a vertically draggable image
  
  	templateString:"<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\r\n><tbody class=\"dijitReset\"\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\"></td\r\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\r\n\t\t\t><div class=\"dijitVerticalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\"></td\r\n\t\t><td class=\"dijitReset\"\r\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderTopBumper dijitVerticalSliderTopBumper\"></div></center\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\r\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\r\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\r\n\t\t\t/><center style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\r\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderRemainingBar dijitVerticalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\r\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderProgressBar dijitVerticalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\r\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\r\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitVerticalSliderImageHandle\"></div\r\n\t\t\t\t\t></div\r\n\t\t\t\t></div\r\n\t\t\t></center\r\n\t\t></td\r\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\"></td\r\n\t\t><td class=\"dijitReset\"\r\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderBottomBumper dijitVerticalSliderBottomBumper\"></div></center\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"></td\r\n\t></tr\r\n\t><tr class=\"dijitReset\"\r\n\t\t><td class=\"dijitReset\"></td\r\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\r\n\t\t\t><div class=\"dijitVerticalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\r\n\t\t></td\r\n\t\t><td class=\"dijitReset\"></td\r\n\t></tr\r\n></tbody></table>\r\n",
  	_mousePixelCoord: "pageY",
  	_pixelCount: "h",
  	_startingPixelCoord: "y",
  	_startingPixelCount: "t",
  	_handleOffsetCoord: "top",
  	_progressPixelSize: "height",
  	_upsideDown: true
  });
  
  dojo.declare("dijit.form._SliderMover",
  	dojo.dnd.Mover,
  {
  	onMouseMove: function(e){
  		var widget = this.widget;
  		var c = this.constraintBox;
  		if(!c){
  			var container = widget.sliderBarContainer;
  			var s = dojo.getComputedStyle(container);
  			var c = dojo._getContentBox(container, s);
  			c[widget._startingPixelCount] = 0;
  			this.constraintBox = c;
  		}
  		var m = this.marginBox;
  		var pixelValue = widget._isReversed() ?
  			e[widget._mousePixelCoord] - dojo._abs(widget.sliderBarContainer).x : 
  			m[widget._startingPixelCount] + e[widget._mousePixelCoord];
  		dojo.hitch(widget, "_setPixelValue")(widget._isReversed() || widget._upsideDown? (c[widget._pixelCount]-pixelValue) : pixelValue, c[widget._pixelCount]);
  	},
  	
  	destroy: function(e){
  		var widget = this.widget;
  		widget.setValue(widget.value, true);
  		dojo.dnd.Mover.prototype.destroy.call(this);
  	}
  });
  
  
  dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
  {
  	//	Summary:
  	//		Create hash marks for the Horizontal slider
  	templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
  
  	// count: Integer
  	//		Number of hash marks to generate
  	count: 3,
  
  	// container: Node
  	//		If this is a child widget, connect it to this parent node
  	container: "containerNode",
  
  	// ruleStyle: String
  	//		CSS style to apply to individual hash marks
  	ruleStyle: "",
  
  	_positionPrefix: '<div class="RuleMark HorizontalRuleMark" style="left:',
  	_positionSuffix: '%;',
  	_suffix: '"></div>',
  
  	_genHTML: function(pos, ndx){
  		return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
  	},
  	
  	_isHorizontal: true,
  
  	postCreate: function(){
  		if(this.count==1){
  			var innerHTML = this._genHTML(50, 0);
  		}else{
  			var interval = 100 / (this.count-1);
  			if(!this._isHorizontal || this.isLeftToRight()){
  				var innerHTML = this._genHTML(0, 0);
  				for(var i=1; i < this.count-1; i++){
  					innerHTML += this._genHTML(interval*i, i);
  				}
  				innerHTML += this._genHTML(100, this.count-1);
  			}else{
  				var innerHTML = this._genHTML(100, 0);
  				for(var i=1; i < this.count-1; i++){
  					innerHTML += this._genHTML(100-interval*i, i);
  				}
  				innerHTML += this._genHTML(0, this.count-1);
  			}
  		}
  		this.domNode.innerHTML = innerHTML;
  	}
  });
  
  dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
  {
  	//	Summary:
  	//		Create hash marks for the Vertical slider
  	templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
  	_positionPrefix: '<div class="RuleMark VerticalRuleMark" style="top:',
  	
  	_isHorizontal: false
  });
  
  dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
  {
  	//	Summary:
  	//		Create labels for the Horizontal slider
  	templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
  
  	// labelStyle: String
  	//		CSS style to apply to individual text labels
  	labelStyle: "",
  
  	// labels: Array
  	//	Array of text labels to render - evenly spaced from left-to-right or bottom-to-top
  	labels: [],
  
  	// numericMargin: Integer
  	//	Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
  	numericMargin: 0,
  
  	// numericMinimum: Integer
  	//	Leftmost label value for generated numeric labels when labels[] are not specified
  	minimum: 0,
  
  	// numericMaximum: Integer
  	//	Rightmost label value for generated numeric labels when labels[] are not specified
  	maximum: 1,
  
  	// constraints: object
  	//	pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
  	constraints: {pattern:"#%"},
  
  	_positionPrefix: '<div class="RuleLabelContainer HorizontalRuleLabelContainer" style="left:',
  	_labelPrefix: '"><span class="RuleLabel HorizontalRuleLabel">',
  	_suffix: '</span></div>',
  
  	_calcPosition: function(pos){
  		return pos;
  	},
  
  	_genHTML: function(pos, ndx){
  		return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
  	},
  
  	getLabels: function(){
  		// summary: user replaceable function to return the labels array
  
  		// if the labels array was not specified directly, then see if <li> children were
  		var labels = this.labels;
  		if(!labels.length){
  			// for markup creation, labels are specified as child elements
  			labels = dojo.query("> li", this.srcNodeRef).map(function(node){
  				return String(node.innerHTML);
  			});
  		}
  		this.srcNodeRef.innerHTML = '';
  		// if the labels were not specified directly and not as <li> children, then calculate numeric labels
  		if(!labels.length && this.count > 1){
  			var start = this.minimum;
  			var inc = (this.maximum - start) / (this.count-1);
  			for (var i=0; i < this.count; i++){
  				labels.push((i<this.numericMargin||i>=(this.count-this.numericMargin))? '' : dojo.number.format(start, this.constraints));
  				start += inc;
  			}
  		}
  		return labels;
  	},
  
  	postMixInProperties: function(){
  		this.inherited('postMixInProperties', arguments);
  		this.labels = this.getLabels();
  		this.count = this.labels.length;
  	}
  });
  
  dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
  {
  	//	Summary:
  	//		Create labels for the Vertical slider
  	templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
  
  	_positionPrefix: '<div class="RuleLabelContainer VerticalRuleLabelContainer" style="top:',
  	_labelPrefix: '"><span class="RuleLabel VerticalRuleLabel">',
  
  	_calcPosition: function(pos){
  		return 100-pos;
  	},
  	
  	_isHorizontal: false
  });
  
  }
  
  }});