/*
 * Notify v0.1 plugin for jQuery.
 *
 * Displays Desktop Notifications in supported browsers, and animated 'toast' notifications in other browsers.
 *
 * Copyright (c) 2011 Jonathan Cardy
 * Licensed under the MIT licenses.
 */
(function(e){var f=0,g=0,h=function(){var a=document.title,c=document.title;return{update:function(b){if(document.title!==c)a=document.title;c=b?"("+b+") "+a:a;document.title=c}}}(),i=function(a,c,b){this.timeout=a;this._onClose=c;this._onClick=b};i.prototype={_getPermission:function(a){window.webkitNotifications.checkPermission()>0?window.webkitNotifications.requestPermission(a):a()},_setupNotification:function(a){var c=this;this._notification=a;a.show();a.onclose=function(){c.hide()};a.onclick=
c._onClick;if(this.timeout)this._hideTimeout=setTimeout(function(){c.hide()},this.timeout)},hide:function(){if(!this._cancelled)this._cancelled=!0,this._hideTimeout&&clearTimeout(this._hideTimeout),this._notification.cancel(),this._onClose()},show:function(a,c,b){var d=this;this._getPermission(function(){try{d._setupNotification(window.webkitNotifications.createNotification(a,c,b))}catch(e){}})},showUrl:function(a){var c=this;this._getPermission(function(){try{c._setupNotification(window.webkitNotifications.createHTMLNotification(a))}catch(b){}})}};
var j=function(){var a=[],c=0;return{add:function(b){a.push(b);c+=10;b.element.appendTo(document.body);b.height=b.element.height();b.element.css("bottom",-b.height+"px");b.element.animate({bottom:c},"fast");c+=b.height},remove:function(b){var d,f=b.height+10;c-=f;d=e.inArray(b,a);b.element.remove();a.splice(d,1);for(b=d;b<a.length;b++)a[b].element.animate({bottom:"-="+f})}}}(),k=function(a,c,b){this.timeout=a;this._onClose=c;this._onClick=b};k.prototype={_setupNotification:function(){var a=this;e(".notification-close",
this.element).click(function(){a.hide()});e(".notification-content",this.element).click(a._onClick);e("iframe",this.element).load(function(){e(this).contents().click(a._onClick)});j.add(this);if(this.timeout)this._hideTimeout=setTimeout(function(){a.hide()},this.timeout)},hide:function(){this._hideTimeout&&clearTimeout(this._hideTimeout);j.remove(this);this._onClose()},show:function(a,c,b){this.element=e("<div class='notification-outer'><div class='notification-header'><div class='notification-title'>"+
c+"</div><div class='notification-close' title='Dismiss'></div></div><div class='notification-content'><div class='notification-icon' style='display:none;'></div><div class='notification-text'><div class='notification-body'>"+b+"</div></div></div></div>");a&&e(".notification-icon",this.element).show().css("background-image","url("+a+")");this._setupNotification()},showUrl:function(a){this.element=e("<div class='notification-outer'><div class='notification-close' title='Dismiss'></div><iframe src='"+
a+"'></iframe></div>");this._setupNotification()}};e.notify=function(a){var c,b=++g,d={icon:"",title:"Notification",message:"",url:"",useFallback:!window.webkitNotifications,timeout:0,showCountInTitle:!window.webkitNotifications,onClose:function(){},onClick:function(){},closeOnClick:!0,obj:null};if(typeof a==="string")a={message:a};else if(!a)throw Error("You need to pass an object specifying some options.");a=a||{};e.extend(d,a);c=new (d.useFallback?k:i)(d.timeout,function(){d.onClose(b,d.obj);f--;
d.showCountInTitle&&h.update(f)},function(){d.onClick(b,d.obj);d.closeOnClick&&c.hide()});d.url?c.showUrl(d.url):c.show(d.icon,d.title,d.message);f++;d.showCountInTitle&&h.update(f);return g}})(jQuery);
