dojo.provide("dojo.widget.CurrencyTextbox");

dojo.require("dojo.widget.IntegerTextbox");
dojo.require("dojo.validate.common");

dojo.widget.defineWidget(
	"dojo.widget.CurrencyTextbox",
	dojo.widget.IntegerTextbox,
	{
		// summary:
		//	  A subclass that extends IntegerTextbox.
		//		Over-rides isValid/isInRange to test if input denotes a monetary value .

		/*=====
		// fractional: Boolean
		//		The decimal places (e.g. for cents).  Can be true or false, optional if omitted.
		fractional: undefined,

		// symbol: String
		//		A currency symbol such as Yen "???", Pound "???", or the Euro "???". Default is "$".
		symbol: "$",

		// separator: String
		//		Default is "," instead of no separator as in IntegerTextbox.
		separator: ",",

		// min: Number
		//		Minimum signed value.  Default is -Infinity
		min: undefined,

		// max: Number
		//		Maximum signed value.  Default is +Infinity
		max: undefined,
		=====*/

		mixInProperties: function(localProperties, frag){
			// First initialize properties in super-class.
			dojo.widget.CurrencyTextbox.superclass.mixInProperties.apply(this, arguments);
	
			// Get properties from markup attributes, and assign to flags object.
			if(localProperties.fractional){
				this.flags.fractional = (localProperties.fractional == "true");
			}else if(localProperties.cents){
				dojo.deprecated("dojo.widget.IntegerTextbox", "use fractional attr instead of cents", "0.5");
				this.flags.fractional = (localProperties.cents == "true");
			}
			if(localProperties.symbol){
				this.flags.symbol = localProperties.symbol;
			}
			if(localProperties.min){ 
				this.flags.min = parseFloat(localProperties.min);
			}
			if(localProperties.max){ 
				this.flags.max = parseFloat(localProperties.max);
			}
		},

		isValid: function(){
			// summary: Over-ride for currency validation
			return dojo.validate.isCurrency(this.textbox.value, this.flags);
		},
		isInRange: function(){
			// summary: Over-ride for currency validation
			return dojo.validate.isInRange(this.textbox.value, this.flags);
		}
	}
);
