context: 		setContent: function(msg, messageType, delay){			var delay = delay||this.showDelay;			// sync animations so there are no ghosted fades and such			if(this.slideAnim && this.slideAnim.status() == "playing"){				dojo.lang.setTimeout(50, dojo.lang.hitch(this, function(){					this.setContent(msg, messageType);				}));				return;			}else if(this.slideAnim){				this.slideAnim.stop();				if(this.fadeAnim) this.fadeAnim.stop();			}			if(!msg){				dojo.debug(this.widgetId + ".setContent() incoming content was null, ignoring.");				return;			}			if(!this.positionDirection || !dojo.lang.inArray(this.positionDirectionTypes, this.positionDirection)){				dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);			}			// determine type of content and apply appropriately			dojo.html.removeClass(this.containerNode, this.messageCssClass);			dojo.html.removeClass(this.containerNode, this.warningCssClass);			dojo.html.removeClass(this.containerNode, this.errorCssClass);			dojo.html.removeClass(this.containerNode, this.fatalCssClass);			dojo.html.clearOpacity(this.containerNode);						if(msg instanceof String || typeof msg == "string"){				this.contentNode.innerHTML = msg;			}else if(dojo.html.isNode(msg)){				this.contentNode.innerHTML = dojo.html.getContentAsString(msg);			}else{				dojo.raise("Toaster.setContent(): msg is of unknown type:" + msg);			}			switch(messageType){				case this.messageTypes.WARNING:					dojo.html.addClass(this.containerNode, this.warningCssClass);					break;				case this.messageTypes.ERROR:					dojo.html.addClass(this.containerNode, this.errorCssClass);					break				case this.messageTypes.FATAL:					dojo.html.addClass(this.containerNode, this.fatalCssClass);					break;				case this.messageTypes.MESSAGE:				default:					dojo.html.addClass(this.containerNode, this.messageCssClass);					break;			}			// now do funky animation of widget appearing from			// bottom right of page and up			this.show();			var nodeSize = dojo.html.getMarginBox(this.containerNode);			// sets up initial position of container node and slide-out direction			if(this.positionDirection.indexOf("-up") >= 0){				this.containerNode.style.left=0+"px";				this.containerNode.style.top=nodeSize.height + 10 + "px";			}else if(this.positionDirection.indexOf("-left") >= 0){				this.containerNode.style.left=nodeSize.width + 10 +"px";				this.containerNode.style.top=0+"px";			}else if(this.positionDirection.indexOf("-right") >= 0){				this.containerNode.style.left = 0 - nodeSize.width - 10 + "px";				this.containerNode.style.top = 0+"px";			}else if(this.positionDirection.indexOf("-down") >= 0){				this.containerNode.style.left = 0+"px";				this.containerNode.style.top = 0 - nodeSize.height - 10 + "px";			}else{				dojo.raise(this.widgetId + ".positionDirection is an invalid value: " + this.positionDirection);			}			this.slideAnim = dojo.lfx.html.slideTo(				this.containerNode,				{ top: 0, left: 0 },				450,				null,				dojo.lang.hitch(this, function(nodes, anim){					dojo.lang.setTimeout(dojo.lang.hitch(this, function(evt){						// we must hide the iframe in order to fade						// TODO: figure out how to fade with a BackgroundIframe						if(this.bgIframe){							this.bgIframe.hide();						}						// can't do a fadeHide because we're fading the						// inner node rather than the clipping node						this.fadeAnim = dojo.lfx.html.fadeOut(							this.containerNode,							1000,							null,							dojo.lang.hitch(this, function(evt){								this.hide();							})).play();					}), delay);				})).play();		},
meta: 4707	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/4707/50c3492c4c3c825dbd3401e134a19ed46799c456/Toaster.js/buggy/www/resources/dojo-ajax/src/widget/Toaster.js