/*
 * jQuery Notify UI Widget 1.4
 * Copyright (c) 2010 Eric Hynds
 *
 * http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/
 *
 * Depends:
 *   - jQuery 1.4
 *   - jQuery UI 1.8 widget factory
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
*/
(function($){$.widget("ech.notify",{options:{speed:500,expires:5000,stack:'below',custom:false},_create:function(){var self=this;this.templates={};this.keys=[];this.element.addClass("ui-notify").children().addClass("ui-notify-message ui-notify-message-style").each(function(i){var key=this.id||i;self.keys.push(key);self.templates[key]=$(this).removeAttr("id").wrap("<div></div>").parent().html();}).end().empty().show();},create:function(template,msg,opts){if(typeof template==="object"){opts=msg;msg=template;template=null;}
var tpl=this.templates[template||this.keys[0]];if(opts&&opts.custom){tpl=$(tpl).removeClass("ui-notify-message-style").wrap("<div></div>").parent().html();}
return new $.ech.notify.instance(this)._create(msg,$.extend({},this.options,opts),tpl);}});$.extend($.ech.notify,{instance:function(widget){this.parent=widget;this.isOpen=false;}});$.extend($.ech.notify.instance.prototype,{_create:function(params,options,template){this.options=options;var self=this,html=template.replace(/#(?:\{|%7B)(.*?)(?:\}|%7D)/g,function($1,$2){return($2 in params)?params[$2]:'';}),m=(this.element=$(html)),closelink=m.find(".ui-notify-close");if(typeof this.options.click==="function"){m.addClass("ui-notify-click").bind("click",function(e){self._trigger("click",e,self);});}
if(closelink.length){closelink.bind("click",function(){self.close();return false;});}
this.open();if(typeof options.expires==="number"){window.setTimeout(function(){self.close();},options.expires);}
return this;},close:function(){var self=this,speed=this.options.speed;this.element.fadeTo(speed,0).slideUp(speed,function(){self._trigger("close");self.isOpen=false;});return this;},open:function(){if(this.isOpen||this._trigger("beforeopen")===false){return this;}
var self=this;this.element[this.options.stack==='above'?'prependTo':'appendTo'](this.parent.element).css({display:"none",opacity:""}).fadeIn(this.options.speed,function(){self._trigger("open");self.isOpen=true;});return this;},widget:function(){return this.element;},_trigger:function(type,e,instance){return this.parent._trigger.call(this,type,e,instance);}});})(jQuery);
