define([
	"dojo/_base/lang",
	"dojo/_base/declare",
	"dijit/layout/ContentPane"
], function(lang, declare, ContentPane){
  
return declare("dojox.widget.WizardPane", ContentPane, {
	// summary:
	//		A panel in a `dojox.widget.Wizard`
	// description:
	//		An extended ContentPane with additional hooks for passing named
	//		functions to prevent the pane from going either forward or
	//		backwards.

	// canGoBack: Boolean
	//		If true, then can move back to a previous panel (by clicking the "Previous" button)
	canGoBack: true,

	// passFunction: String
	//		Name of function that checks if it's OK to advance to the next panel.
	//		If it's not OK (for example, mandatory field hasn't been entered), then
	//		returns an error message (String) explaining the reason. Can return null (pass)
	//		or a Boolean (true == pass)
	passFunction: null,
	
	// doneFunction: String
	//		Name of function that is run if you press the "Done" button from this panel
	doneFunction: null,

	startup: function(){
		this.inherited(arguments);
		if(this.isFirstChild){ this.canGoBack = false; }
		if(lang.isString(this.passFunction)){
			this.passFunction = lang.getObject(this.passFunction);
		}
		if(lang.isString(this.doneFunction) && this.doneFunction){
			this.doneFunction = lang.getObject(this.doneFunction);
		}
	},

	_onShow: function(){
		if(this.isFirstChild){ this.canGoBack = false; }
		this.inherited(arguments);
	},

	_checkPass: function(){
		// summary:
		//		Called when the user presses the "next" button.
		//		Calls passFunction to see if it's OK to advance to next panel, and
		//		if it isn't, then display error.
		//		Returns true to advance, false to not advance. If passFunction
		//		returns a string, it is assumed to be a custom error message, and
		//		is alert()'ed
		var r = true;
		if(this.passFunction && lang.isFunction(this.passFunction)){
			var failMessage = this.passFunction();
			switch(typeof failMessage){
				case "boolean":
					r = failMessage;
					break;
				case "string":
					alert(failMessage);
					r = false;
					break;
			}
		}
		return r; // Boolean
	},

	done: function(){
		if(this.doneFunction && lang.isFunction(this.doneFunction)){ this.doneFunction(); }
	}
});

});

