text: /*
  	Copyright (c) 2004-2006, The Dojo Foundation
  	All Rights Reserved.
  
  	Licensed under the Academic Free License version 2.1 or above OR the
  	modified BSD license. For more information on Dojo licensing, see:
  
  		http://dojotoolkit.org/community/licensing.shtml
  */
  
  dojo.provide("dojo.widget.Button");
  dojo.provide("dojo.widget.html.Button");
  
  dojo.require("dojo.lang.extras");
  dojo.require("dojo.html");
  dojo.require("dojo.style");
  dojo.require("dojo.widget.*");
  dojo.require("dojo.widget.HtmlWidget");
  
  dojo.widget.defineWidget(
  	"dojo.widget.html.Button",
  	dojo.widget.HtmlWidget,
  	{
  		widgetType: "Button",
  		isContainer: true,
  
  		// Constructor arguments
  		caption: "",
  		disabled: false,
  
  		templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlButtonTemplate.html"),
  		templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlButtonTemplate.css"),
  
  		// button images
  		inactiveImg: "src/widget/templates/images/soriaButton-",
  		activeImg: "src/widget/templates/images/soriaActive-",
  		pressedImg: "src/widget/templates/images/soriaPressed-",
  		disabledImg: "src/widget/templates/images/soriaDisabled-",
  		width2height: 1.0/3.0,
  
  		// attach points
  		containerNode: null,
  		leftImage: null,
  		centerImage: null,
  		rightImage: null,
  
  		fillInTemplate: function(args, frag){
  			if(this.caption != ""){
  				this.containerNode.appendChild(document.createTextNode(this.caption));
  			}
  			dojo.html.disableSelection(this.containerNode);
  		},
  
  		postCreate: function(args, frag){
  			this.sizeMyself();
  		},
  
  		sizeMyself: function(){
  			// we cannot size correctly if any of our ancestors are hidden (display:none),
  			// so temporarily attach to document.body
  			if(this.domNode.parentNode){
  				var placeHolder = document.createElement("span");
  				dojo.dom.insertBefore(placeHolder, this.domNode);
  			}
  			dojo.html.body().appendChild(this.domNode);
  
  			this.sizeMyselfHelper();
  
  			// Put this.domNode back where it was originally
  			if(placeHolder){
  				dojo.dom.insertBefore(this.domNode, placeHolder);
  				dojo.dom.removeNode(placeHolder);
  			}
  		},
  
  		sizeMyselfHelper: function(){
  			this.height = dojo.style.getOuterHeight(this.containerNode);
  			this.containerWidth = dojo.style.getOuterWidth(this.containerNode);
  			var endWidth= this.height * this.width2height;
  
  			this.containerNode.style.left=endWidth+"px";
  
  			this.leftImage.height = this.rightImage.height = this.centerImage.height = this.height;
  			this.leftImage.width = this.rightImage.width = endWidth+1;
  			this.centerImage.width = this.containerWidth;
  			this.centerImage.style.left=endWidth+"px";
  			this._setImage(this.disabled ? this.disabledImg : this.inactiveImg);
  
  			if ( this.disabled ) {
  				dojo.html.prependClass(this.domNode, "dojoButtonDisabled");
  			} else {
  				dojo.html.removeClass(this.domNode, "dojoButtonDisabled");
  			}
  
  			this.domNode.style.height=this.height + "px";
  			this.domNode.style.width= (this.containerWidth+2*endWidth) + "px";
  		},
  
  		onMouseOver: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.domNode, "dojoButtonHover");
  			this._setImage(this.activeImg);
  		},
  
  		onMouseDown: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.domNode, "dojoButtonDepressed");
  			dojo.html.removeClass(this.domNode, "dojoButtonHover");
  			this._setImage(this.pressedImg);
  		},
  		onMouseUp: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.domNode, "dojoButtonHover");
  			dojo.html.removeClass(this.domNode, "dojoButtonDepressed");
  			this._setImage(this.activeImg);
  		},
  
  		onMouseOut: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.removeClass(this.domNode, "dojoButtonHover");
  			this._setImage(this.inactiveImg);
  		},
  
  		buttonClick: function(e){
  			if( !this.disabled ) { this.onClick(e); }
  		},
  
  		onClick: function(e) { },
  
  		_setImage: function(prefix){
  			this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");
  			this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");
  			this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");
  		},
  
  		_toggleMenu: function(menuId){
  			var menu = dojo.widget.getWidgetById(menuId);
  			if ( !menu ) { return; }
  
  			if ( menu.open && !menu.isShowingNow) {
  				var pos = dojo.style.getAbsolutePosition(this.domNode, false);
  				menu.open(pos.x, pos.y+this.height, this);
  			} else if ( menu.close && menu.isShowingNow ){
  				menu.close();
  			} else {
  				menu.toggle();
  			}
  		},
  
  		setCaption: function(content){
  			this.caption=content;
  			this.containerNode.innerHTML=content;
  			this.sizeMyself();
  		},
  
  		setDisabled: function(disabled){
  			this.disabled=disabled;
  			this.sizeMyself();
  		}
  	});
  
  /**** DropDownButton - push the button and a menu shows up *****/
  dojo.widget.defineWidget(
  	"dojo.widget.html.DropDownButton",
  	dojo.widget.html.Button,
  	{
  		widgetType: "DropDownButton",
  
  		menuId: "",
  
  		arrow: null,
  
  		downArrow: "src/widget/templates/images/whiteDownArrow.gif",
  		disabledDownArrow: "src/widget/templates/images/whiteDownArrow.gif",
  
  		fillInTemplate: function(args, frag){
  			dojo.widget.html.DropDownButton.superclass.fillInTemplate.call(this, args, frag);
  
  			this.arrow = document.createElement("img");
  			dojo.html.setClass(this.arrow, "downArrow");
  		},
  
  		sizeMyselfHelper: function(){
  			// draw the arrow (todo: why is the arror in containerNode rather than outside it?)
  			this.arrow.src = dojo.uri.dojoUri(this.disabled ? this.disabledDownArrow : this.downArrow);
  			this.containerNode.appendChild(this.arrow);
  
  			dojo.widget.html.DropDownButton.superclass.sizeMyselfHelper.call(this);
  		},
  
  		onClick: function (e){
  			this._toggleMenu(this.menuId);
  		}
  	});
  
  /**** ComboButton - left side is normal button, right side shows menu *****/
  dojo.widget.defineWidget(
  	"dojo.widget.html.ComboButton",
  	dojo.widget.html.Button,
  	{
  		widgetType: "ComboButton",
  
  		menuId: "",
  
  		templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlComboButtonTemplate.html"),
  
  		// attach points
  		leftPart: null,
  		rightPart: null,
  		arrowBackgroundImage: null,
  
  		// constants
  		splitWidth: 2,		// pixels between left&right part of button
  		arrowWidth: 5,		// width of segment holding down arrow
  
  		sizeMyselfHelper: function(e){
  			this.height = dojo.style.getOuterHeight(this.containerNode);
  			this.containerWidth = dojo.style.getOuterWidth(this.containerNode);
  			var endWidth= this.height/3;
  
  			// left part
  			this.leftImage.height = this.rightImage.height = this.centerImage.height =
  				this.arrowBackgroundImage.height = this.height;
  			this.leftImage.width = endWidth+1;
  			this.centerImage.width = this.containerWidth;
  			this.leftPart.style.height = this.height + "px";
  			this.leftPart.style.width = endWidth + this.containerWidth + "px";
  			this._setImageL(this.disabled ? this.disabledImg : this.inactiveImg);
  
  			// right part
  			this.arrowBackgroundImage.width=this.arrowWidth;
  			this.rightImage.width = endWidth+1;
  			this.rightPart.style.height = this.height + "px";
  			this.rightPart.style.width = this.arrowWidth + endWidth + "px";
  			this._setImageR(this.disabled ? this.disabledImg : this.inactiveImg);
  
  			// outer container
  			this.domNode.style.height=this.height + "px";
  			var totalWidth = this.containerWidth+this.splitWidth+this.arrowWidth+2*endWidth;
  			this.domNode.style.width= totalWidth + "px";
  		},
  
  		/** functions on left part of button**/
  		leftOver: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.leftPart, "dojoButtonHover");
  			this._setImageL(this.activeImg);
  		},
  
  		leftDown: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.leftPart, "dojoButtonDepressed");
  			dojo.html.removeClass(this.leftPart, "dojoButtonHover");
  			this._setImageL(this.pressedImg);
  		},
  		leftUp: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.leftPart, "dojoButtonHover");
  			dojo.html.removeClass(this.leftPart, "dojoButtonDepressed");
  			this._setImageL(this.activeImg);
  		},
  
  		leftOut: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.removeClass(this.leftPart, "dojoButtonHover");
  			this._setImageL(this.inactiveImg);
  		},
  
  		leftClick: function(e){
  			if ( !this.disabled ) {
  				this.onClick(e);
  			}
  		},
  
  		_setImageL: function(prefix){
  			this.leftImage.src=dojo.uri.dojoUri(prefix + "l.gif");
  			this.centerImage.src=dojo.uri.dojoUri(prefix + "c.gif");
  		},
  
  		/*** functions on right part of button ***/
  		rightOver: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.rightPart, "dojoButtonHover");
  			this._setImageR(this.activeImg);
  		},
  
  		rightDown: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.rightPart, "dojoButtonDepressed");
  			dojo.html.removeClass(this.rightPart, "dojoButtonHover");
  			this._setImageR(this.pressedImg);
  		},
  		rightUp: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.prependClass(this.rightPart, "dojoButtonHover");
  			dojo.html.removeClass(this.rightPart, "dojoButtonDepressed");
  			this._setImageR(this.activeImg);
  		},
  
  		rightOut: function(e){
  			if( this.disabled ){ return; }
  			dojo.html.removeClass(this.rightPart, "dojoButtonHover");
  			this._setImageR(this.inactiveImg);
  		},
  
  		rightClick: function(e){
  			if( this.disabled ){ return; }
  			this._toggleMenu(this.menuId);
  		},
  
  		_setImageR: function(prefix){
  			this.arrowBackgroundImage.src=dojo.uri.dojoUri(prefix + "c.gif");
  			this.rightImage.src=dojo.uri.dojoUri(prefix + "r.gif");
  		}
  	});
  