text: define(["dojo/_base/lang", "dojo/_base/Color"], function(lang, Color){
  	// module:
  	//		dojox/dgauges/components/utils
  	// summary:
  	//		Gauge utilities.
  	// tags:
  	//		public
  
  	var utils = {};
  
  	lang.mixin(utils, {
  		brightness: function(col, b){
  			// summary:
  			//		Adjusts the brightness of a color.
  			// col: Number
  			//		The base color
  			// b: Number
  			//		A positive or negative value to adjust the brightness
  			// returns: Number
  			//		The modified color			
  			var res = lang.mixin(null, col);
  			res.r = Math.max(Math.min(res.r + b, 255), 0);
  			res.g = Math.max(Math.min(res.g + b, 255), 0);
  			res.b = Math.max(Math.min(res.b + b, 255), 0);
  			return res;
  		},
  		
  		createGradient: function(entries){
  			// summary:
  			//		Creates a gradient object
  			// entries: Array
  			//		An array of numbers representing colors
  			// returns: Number
  			//		The modified color			
  			var res = {
  				colors: []
  			};
  			var obj;
  			for(var i = 0; i < entries.length; i++){
  				if(i % 2 == 0){
  					obj = {
  						offset: entries[i]
  					};
  				} else {
  					obj.color = entries[i];
  					res.colors.push(obj);
  				}
  			}
  			return res;
  		},
  		
  		_setter: function(obj, attributes, values){
  			for(var i = 0; i < attributes.length; i++){
  				obj[attributes[i]] = values[i];
  			}
  		},
  		
  		genericCircularGauge: function(scale, indicator, originX, originY, radius, startAngle, endAngle, orientation, font, labelPosition, tickShapeFunc){
  			// summary:
  			//		A helper method for configuring a circular gauge.
  			// scale: CircularScale
  			//		A circular scale
  			// indicator: IndicatorBase
  			//		A circular indicator
  			// originX: Number
  			//		The x-coordinate of the center of the scale (in pixels) 
  			// originY: Number
  			//		The y-coordinate of the center of the scale (in pixels)
  			// radius: Number
  			//		The radius of the scale (in pixels)
  			// startAngle: Number
  			//		The start angle of the scale (in degrees)
  			// endAngle: Number
  			//		The end angle of the scale (in degrees)
  			// orientation: String?
  			//		The orientation of the scale, can be "clockwise" or "cclockwise"
  			// font: Object?
  			//		The font used for the gauge
  			// labelPosition: String?
  			//		The position of the labels regarding   
  			// tickShapeFunc: Object?
  			//		A drawing function for the ticks
  			// returns: Number
  			//		The modified color	
  			var attributes = ["originX", "originY", "radius", "startAngle", "endAngle", "orientation", "font", "labelPosition", "tickShapeFunc"];
  			if(!orientation){
  				orientation = "clockwise";
  			}
  			if(!font){
  				font = {
  					family: "Helvetica",
  					style: "normal",
  					size: "10pt",
  					color: "#555555"
  				};
  			}
  			if(!labelPosition){
  				labelPosition = "inside";
  			}
  			if(!tickShapeFunc){
  				tickShapeFunc = function(group, scale, tick){
  					var stroke = scale.tickStroke;
  					var majorStroke;
  					var minorStroke;
  					if(stroke){
  						majorStroke = {color:stroke.color ? stroke.color : "#000000", width:stroke.width ? stroke.width : 0.5};
  						var col = new Color(stroke.color).toRgb();
  						minorStroke = {color:stroke.color ? utils.brightness({r:col[0], g:col[1], b:col[2]},51) : "#000000", width:stroke.width ? stroke.width * 0.6 : 0.3};
  					}
  					return group.createLine({
  						x1: tick.isMinor ? 2 : 0,
  						y1: 0,
  						x2: tick.isMinor ? 8 : 10,
  						y2: 0
  					}).setStroke(tick.isMinor ? minorStroke : majorStroke);
  				};
  			}
  			
  			this._setter(scale, attributes, [originX, originY, radius, startAngle, endAngle, orientation, font, labelPosition, tickShapeFunc]);
  			
  			indicator.set("interactionArea", "gauge");
  			// Needle shape
  			indicator.set("indicatorShapeFunc", function(group, indicator){
  				return group.createPolyline([0, -5, indicator.scale.radius - 6, 0, 0, 5, 0, -5]).setStroke({
  					color: "#333333",
  					width: 0.25
  				}).setFill(scale._gauge.indicatorColor);
  			});
  		}
  	});
  
  	return utils;
  });
  