dojo.provide("Z2h.Toast");

dojo.require("dojo.fx");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");

dojo.declare("Z2h.Toast", [dijit._Widget, dijit._Templated], {
	templateString: null,
	templatePath: dojo.moduleUrl("Z2h","templates/Toast.html"),
	widgetsInTemplate : true,

	notificationType: "community",
	mainContent: "",
	
	topText: "",
	bottomText: "",
	imgSrc: "/images/notification/exclaimation_green.png",

	sticky: false,
	timeout: 5000,
	
	containerNode: null,
	
	_slideIn: null,
	_slideOut: null,
	
	_timouet: null,
	
	_alreadyInitialized: false,

	constructor: function(){
		this.inherited(arguments);
	},
	
	_setup: function(){
		var max = dojo.fx.wipeIn({
			node: this.listNode,
			duration: 2000
		});
		
		var slide = dojo.animateProperty({ 
			node: this.listNode, 
			properties: {
				marginLeft: { start: dojo.style(this.listNode,'marginLeft'), end: 0, unit: 'px'}
			}
		});
		
		this._slideIn = dojo.fx.combine([max,slide]);

		var slideOut = dojo.animateProperty({ 
			node: this.listNode, 
			properties: {
				marginLeft: { end: dojo.style(this.listNode,'marginLeft'), start: 0, unit: 'px'}
			}
		});
		var shrinkOut = dojo.fx.wipeOut({ 
			node: this.listNode, 
			duration: 2000
		});
		this._slideOut = dojo.fx.combine([slideOut,shrinkOut]);
		
		dojo.connect(this.closeButton,'onclick',dojo.hitch(this,"hide"));
		dojo.connect(shrinkOut,'onEnd',dojo.hitch(this,"destroy"));
		
		dojo.connect(this.listNode,'onmouseover',dojo.hitch(this,"stopTimeout"));
		dojo.connect(this.listNode,'onmouseout', dojo.hitch(this,"startTimeout"));

		if ( !this.sticky ){
			this._timeout = setTimeout(dojo.hitch(this,"hide"),this.timeout);
		}
	},
	
	postCreate: function(){
		this.inherited("postCreate",arguments);
		
		if ( this.containerNode ) {
			dojo.place(this.listNode,this.containerNode,'top');
		}

		var coords = dojo.marginBox(this.listNode);
		dojo.style(this.listNode,'marginLeft',coords.w+'px');

		var type = this.notificationType;
		if ( type ) {
			dojo.addClass(this.notificationNode,type);
//			dojo.addClass(this.closeButton,"btn_close_"+this.types[type]);
		}
		
	},
	
	stopTimeout: function(){
		if ( this._timeout ) {
			clearTimeout(this._timeout);
		}
	},
	
	startTimeout: function(){
		if ( !this.sticky ) {
			this._timeout = setTimeout(dojo.hitch(this,"hide"),this.timeout);
		}
	},
	
	hide: function(e){

		if ( this._slideOut && this._slideOut.status() != "playing" ) {
			if ( this._timeout ) {
				clearTimeout(this._timeout);
			}
			
			if ( e && e.preventDefault ) {
				e.preventDefault();
			}
			
			if ( this._slideOut )
				this._slideOut.play();
		}
	},
	
	show: function(){
		if(!this._alreadyInitialized){
			this._setup();
			this._alreadyInitialized=true;
		}
		
		if(this._slideOut && this._slideOut.status() == "playing"){
			this._slideOut.stop();
		}
		
		if ( this._slideIn ) {
			this._slideIn.play();
		}
	}
	
});

