﻿/*!
 * FooBar - The Unobtrusive Notification Bar That Doesn’t Suck!
 * http://bit.ly/getfoobar
 *
 * Copyright 2011, Steven Usher & Brad Vincent
 * http://themergency.com
 * http://themergency.com/foobar-a-jquery-notification-plugin/
 *
 * Date: 15 July 2011
 * Version : 1.4
 */
(function($){$.foobar=function(options){if(typeof options=="string"){options={"messages":[options]};};var settings=$.extend(true,{},defaults,options);bar.apply(settings);};$.foobarGoogleCallback=function(){bar.loadFeeds();};defaults={"height":30,"collapsedButtonHeight":30,"positioning":"fixed","backgroundColor":"IndianRed","border":"solid 3px #FFF","enableShadow":true,"buttonTheme":"triangle-arrow","display":"expanded","displayDelay":0,"speed":200,"easing":"swing","messages":[],"messageSizes":[],"messagesDelay":2000,"messagesFadeDelay":500,"messagesScrollSpeed":50,"messagesScrollDelay":2000,"messagesScrollDirection":"left","enableCookie":false,"positionClose":"right","positionSocial":"left","rightHtml":null,"leftHtml":null,"messageClass":"","fontFamily":"Verdana","fontSize":"10pt","fontColor":"White","fontShadow":null,"aFontFamily":"Verdana","aFontSize":"10pt","aFontColor":"LightYellow","aFontDecoration":"underline","aFontShadow":null,"aHoverFontFamily":null,"aHoverFontSize":null,"aHoverFontColor":null,"aHoverFontDecoration":null,"aHoverFontShadow":null,"social":{"text":"Follow us:","fontFamily":"Verdana","fontSize":"10pt","fontColor":"White","fontShadow":null,"profiles":[]},"rss":{"enabled":false,"googleAPIKey":"","url":"http://my-domain.com/rss","maxResults":5,"linkText":"Read More","linkTarget":"_blank"},"twitter":{"enabled":false,"user":null,"maxTweets":5}};bar={settings:{},wrapper:null,container:null,shadow:null,left:null,center:null,message:null,right:null,closeButtonContainer:null,closeButton:null,openButtonContainer:null,openButton:null,initialized:false,isOpen:false,htmlMarginTop:0,messageTimeoutId:null,messageIndex:0,currentMesasgeIndex:-1,messageHover:false,initialize:function(){var $html=$('html');bar.htmlMarginTop=parseInt($html.css('margin-top'));bar.htmlMarginTop=isNaN(bar.htmlMarginTop)?0:bar.htmlMarginTop;if($('.foobar-wrapper').length==0){bar.wrapper=$('<div/>').addClass('foobar-wrapper');bar.container=$('<div/>').addClass('foobar-container');bar.shadow=$('<div/>').addClass('foobar-shadow');bar.left=$('<div/>').addClass('foobar-container-left');bar.center=$('<div/>').addClass('foobar-container-center');bar.message=$('<span/>').addClass('foobar-message');bar.right=$('<div/>').addClass('foobar-container-right');bar.closeButtonContainer=$('<div/>').addClass('foobar-close-button-container');bar.closeButton=$('<a/>').attr('href','#close-foobar').addClass('foobar-close-button').text(' ');bar.openButtonContainer=$('<div/>').addClass('foobar-open-button-container');bar.openButton=$('<a/>').attr('href','#open-foobar').addClass('foobar-open-button').text(' ');bar.addTo('body');bar.initialized=true;}else{bar.wrapper=$('.foobar-wrapper');bar.container=$('.foobar-container');bar.shadow=$('.foobar-shadow');bar.left=$('.foobar-container-left');bar.center=$('.foobar-container-center');bar.message=$('.foobar-message');bar.right=$('.foobar-container-right');bar.closeButtonContainer=$('.foobar-close-button-container');bar.closeButton=$('.foobar-close-button').text(' ');bar.openButtonContainer=$('.foobar-open-button-container');bar.openButton=$('.foobar-open-button').text(' ');bar.initialized=true;};},setCookie:function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}else{var expires="";};document.cookie=name+"="+value+expires+"; path=/";},getCookie:function(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);}
return null;},deleteCookie:function(name){bar.setCookie(name,"",-1);},addTo:function(selector){$(selector).prepend(bar.wrapper);bar.wrapper.append(bar.container).append(bar.shadow).append(bar.openButtonContainer);bar.container.append(bar.closeButtonContainer).append(bar.left).append(bar.center.append(bar.message)).append(bar.right);bar.closeButtonContainer.append(bar.closeButton);bar.openButtonContainer.append(bar.openButton);},isNotNullOrEmpty:function(strVal){return(typeof strVal=="string"&&strVal!=null&&strVal!="");},messageCycleReset:function(){if(bar.messageHover){bar.messageTimeoutId=setTimeout(bar.messageCycleReset,bar.settings.messagesDelay);return;};$("#foobar-message-"+bar.currentMesasgeIndex).animate({'margin-left':0},500,function(){bar.currentMesasgeIndex=-1;bar.messageCycle();});},messageCycleFade:function(){if(bar.messageHover){bar.messageTimeoutId=setTimeout(bar.messageCycleFade,bar.settings.messagesDelay);return;};$current=$("#foobar-message-"+bar.currentMesasgeIndex);$current.animate({'opacity':0},bar.settings.messagesFadeDelay/2,function(){$current.css({'margin-left':0}).hide();bar.messageCycle();});},parseHtml:function(html){if(!bar.isNotNullOrEmpty(html))return html;if(html&&html.match('{{include:(.*?)}}')){var regEx=new RegExp('{{include:(.*?)}}');var match=regEx.exec(html);while(match!=null){var matchedHtml=$(match[1]).html();html=html.replace(match[0],matchedHtml);match=regEx.exec(html);}}
return html;},messageCycle:function(){if(!bar.isOpen){return;}
if(bar.messageHover){bar.messageTimeoutId=setTimeout(bar.messageCycle,bar.settings.messagesDelay);return;};if(bar.currentMesasgeIndex==bar.messageIndex){return;}
bar.clearMessageTimeout();if($('.foobar-message-wrapper').length==0){for(var i=0;i<bar.settings.messages.length;i++){var messageHtml=bar.parseHtml(bar.settings.messages[i]);var $message=$('<div id="foobar-message-'+i+'" class="foobar-message-wrapper">'+messageHtml+'</div>');$message.css({position:"absolute",display:"block",width:"auto"});$message.css({left:"0",top:i*100+100});if(!bar.isNotNullOrEmpty(bar.settings.messageClass)){var $a=$message.find('a');bar.styleLinks($a);bar.styleLinksHover($a);};bar.message.append($message);bar.settings.messageSizes[i]=$message.width();$message.hover(bar.pauseMessages,bar.resumeMessages);if(i!=bar.messageIndex){$message.hide();}}};var $currentMessage=$("#foobar-message-"+bar.messageIndex);$currentMessage.css({position:"static",visability:"visible",marginLeft:"0",opacity:"100"}).show();bar.currentMesasgeIndex=bar.messageIndex;var cWidth=bar.center.width();var mWidth=bar.settings.messageSizes[bar.messageIndex];(bar.messageIndex>=(bar.settings.messages.length-1))?bar.messageIndex=0:bar.messageIndex++;if(mWidth>cWidth){var diff=mWidth-cWidth;var speed=Math.round(diff/bar.settings.messagesScrollSpeed)*1000;$currentMessage.css({'width':mWidth});bar.message.css({'width':cWidth});$currentMessage.delay(bar.settings.messagesScrollDelay).animate({'margin-left':'-'+diff},speed,'linear',function(){if(bar.messageIndex==bar.currentMesasgeIndex){bar.messageTimeoutId=setTimeout(bar.messageCycleReset,bar.settings.messagesDelay);}else{bar.messageTimeoutId=setTimeout(bar.messageCycleFade,bar.settings.messagesDelay);};});}else{if(bar.messageIndex!=bar.currentMesasgeIndex){bar.messageTimeoutId=setTimeout(bar.messageCycleFade,bar.settings.messagesDelay);};};return;},styleLinks:function(links){if(bar.isNotNullOrEmpty(bar.settings.aFontFamily)){links.css('font-family',bar.settings.aFontFamily);};if(bar.isNotNullOrEmpty(bar.settings.aFontSize)){links.css('font-size',bar.settings.aFontSize);};if(bar.isNotNullOrEmpty(bar.settings.aFontColor)){links.css('color',bar.settings.aFontColor);};if(bar.isNotNullOrEmpty(bar.settings.aFontDecoration)){links.css('text-decoration',bar.settings.aFontDecoration);};if(bar.isNotNullOrEmpty(bar.settings.aFontShadow)){links.css('text-shadow',bar.settings.aFontShadow);};},styleLinksHover:function(links){links.unbind('mouseenter').bind({mouseenter:function(){if(bar.isNotNullOrEmpty(bar.settings.aHoverFontFamily)){$(this).css('font-family',bar.settings.aHoverFontFamily);};if(bar.isNotNullOrEmpty(bar.settings.aHoverFontSize)){$(this).css('font-size',bar.settings.aHoverFontSize);};if(bar.isNotNullOrEmpty(bar.settings.aHoverFontColor)){$(this).css('color',bar.settings.aHoverFontColor);};if(bar.isNotNullOrEmpty(bar.settings.aHoverFontDecoration)){$(this).css('text-decoration',bar.settings.aHoverFontDecoration);};if(bar.isNotNullOrEmpty(bar.settings.aHoverFontShadow)){$(this).css('text-shadow',bar.settings.aHoverFontShadow);};},mouseleave:function(){bar.styleLinks($(this));}});},clearMessageTimeout:function(){if(typeof bar.messageTimeoutId!='undefined'&&bar.messageTimeoutId!=null){clearTimeout(bar.messageTimeoutId);};bar.messageTimeoutId=null;},setMessageTimeout:function(){bar.clearMessageTimeout();if(typeof bar.messageTimeoutId=='undefined'||bar.messageTimeoutId==null){bar.messageTimeoutId=setTimeout(bar.messageCycle,bar.settings.messagesDelay);};},isGoogleLoaded:function(){var googleAPI=false;$('head > script[type="text/javascript"]').each(function(){var src=$(this).attr('src');var check="http://www.google.com/jsapi?key=";if(bar.isNotNullOrEmpty(src)&&src.length>=check.length&&src.substr(0,check.length)===check){googleAPI=true;};});return(googleAPI&&!(typeof google=='undefined'));},isFeedsLoaded:function(){return(bar.isGoogleLoaded()&&!(typeof google.feeds=='undefined'));},loadGoogle:function(){var script=document.createElement("script");script.src="http://www.google.com/jsapi?key="+bar.settings.rss.googleAPIKey+"&callback=jQuery.foobarGoogleCallback";script.type="text/javascript";document.getElementsByTagName("head")[0].appendChild(script);},loadFeeds:function(){google.load("feeds","1",{'callback':bar.loadRss});},loadRss:function(){var feed=new google.feeds.Feed(bar.settings.rss.url);feed.setNumEntries(bar.settings.rss.maxResults);feed.load(function(result){bar.clearMessageTimeout();if(!result.error){for(var i=0;i<result.feed.entries.length;i++){var msg=result.feed.entries[i].title;if(bar.isNotNullOrEmpty(bar.settings.rss.linkText)){msg+=' <a href="'+result.feed.entries[i].link+'" target="'+bar.settings.rss.linkTarget+'">'+bar.settings.rss.linkText+'</a>';};bar.settings.messages.push(msg);}};bar.message.stop().css({'left':0,'opacity':100});bar.messageCycle();});},loadTwitter:function(){var timeline_url="http://twitter.com/statuses/user_timeline/"+bar.settings.twitter.user+".json?callback=?&page=1&count="+bar.settings.twitter.maxTweets;jQuery.ajax({url:timeline_url,dataType:'json',success:function(data){jQuery.each(data,function(i,item){var msg=bar.formatTweetHtml(item.text);bar.settings.messages.push(msg);});bar.message.stop().css({'left':0,'opacity':100});bar.messageCycle();},error:function(){alert('There was a problem connecting to Twitter');}});},formatTweetHtml:function(tweet){tweet=' '+tweet;tweet=tweet.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');tweet=tweet.replace(/([^\w])\@([\w\-]+)/gm,'$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');tweet=tweet.replace(/([^\w])\#([\w\-]+)/gm,'$1<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');return tweet;},expand:function(e){if(typeof e!='undefined'&&e!=null&&typeof e.preventDefault=='function'){e.preventDefault();}
if(!bar.isOpen){bar.openButton.animate({'height':0},bar.settings.speed);bar.openButtonContainer.animate({'height':0},bar.settings.speed,function(){bar.container.animate({'height':bar.settings.height},bar.settings.speed,bar.settings.easing).css({'border-bottom':bar.settings.border});bar.wrapper.animate({'height':bar.settings.height+5},bar.settings.speed,bar.settings.easing);bar.message.show();bar.left.show();bar.right.show();if(bar.settings.positioning=='fixed'){$('html').animate({'margin-top':'+='+(bar.settings.height+5)});}else{$('html').css({'margin-top':bar.htmlMarginTop+'px'});};bar.wrapper.focus();bar.isOpen=true;bar.messageCycle();});if(bar.settings.enableCookie){bar.setCookie('foobar-state',true,1);}};},collapse:function(e){if(typeof e!='undefined'&&e!=null&&typeof e.preventDefault=='function'){e.preventDefault();}
if(bar.isOpen){bar.container.animate({'height':0},bar.settings.speed).css({'border':'none'});if(bar.settings.positioning=='fixed'){$('html').animate({'margin-top':'-='+(bar.settings.height+5)});}
else{$('html').css({'margin-top':bar.htmlMarginTop+'px'});};bar.wrapper.animate({'height':5},bar.settings.speed,function(){bar.message.hide();bar.left.hide();bar.right.hide();bar.openButtonContainer.animate({'height':bar.settings.collapsedButtonHeight+11},bar.settings.speed,bar.settings.easing);bar.openButton.animate({'height':bar.settings.collapsedButtonHeight},bar.settings.speed,bar.settings.easing);});bar.isOpen=false;if(bar.settings.enableCookie){bar.setCookie('foobar-state',false,1);}};},setExpanded:function(){bar.container.height(bar.settings.height).css({'border-bottom':bar.settings.border});bar.wrapper.height(bar.settings.height+5);bar.openButtonContainer.add(bar.openButton).height(0);if(bar.settings.positioning=='fixed'){$('html').css({'margin-top':(bar.htmlMarginTop<=0)?(bar.settings.height+5)+'px':(bar.htmlMarginTop+(bar.settings.height+5))+'px'});}else{$('html').css({'margin-top':bar.htmlMarginTop+'px'});};bar.isOpen=true;bar.message.show();bar.left.show();bar.right.show();if(bar.settings.enableCookie){bar.setCookie('foobar-state',true,1);}},setCollapsed:function(){bar.container.height(0).css({'border-bottom':0});bar.wrapper.height(5);bar.openButtonContainer.height(bar.settings.collapsedButtonHeight+11);bar.openButton.height(bar.settings.collapsedButtonHeight);if(bar.settings.positioning=='fixed'){$('html').css({'margin-top':(bar.htmlMarginTop<=0)?0+'px':(bar.htmlMarginTop-(bar.settings.height+5))+'px'});}else{$('html').css({'margin-top':bar.htmlMarginTop+'px'});};bar.isOpen=false;bar.message.hide();bar.left.hide();bar.right.hide();if(bar.settings.enableCookie){bar.setCookie('foobar-state',false,1);}},pauseMessages:function(){bar.messageHover=true;},resumeMessages:function(){bar.messageHover=false;},apply:function(settings){wasinit=true;bar.settings=settings;if(!bar.initialized){bar.initialize();wasinit=false;}
if(settings.messagesScrollDirection!='left'&&settings.messagesScrollDirection!='right'){settings.messagesScrollDirection=defaults.messagesScrollDirection;};bar.wrapper.height(bar.settings.height+5);bar.openButtonContainer.height(bar.settings.collapsedButtonHeight+11);bar.openButton.height(bar.settings.collapsedButtonHeight);bar.container.add(bar.right).add(bar.left).add(bar.center).add(bar.message).add(bar.closeButtonContainer).add(bar.closeButton).height(bar.settings.height);bar.right.add(bar.left).add(bar.center).add(bar.message).css({'line-height':bar.settings.height+'px'});bar.container.add(bar.openButton).css({'background-color':bar.settings.backgroundColor});bar.container.css({'border-bottom':bar.settings.border});bar.openButton.css({'border':bar.settings.border,'border-top':'none'});bar.openButtonContainer.css({'top':bar.htmlMarginTop+'px'});bar.openButton.add(bar.closeButton).removeClass();bar.openButton.addClass('foobar-open-button');bar.closeButton.addClass('foobar-close-button');bar.openButton.add(bar.closeButton).addClass(settings.buttonTheme);if(bar.settings.enableShadow){bar.shadow.show();bar.openButtonContainer.addClass('shadow');}
else{bar.shadow.hide();bar.openButtonContainer.removeClass('shadow');};if(bar.isNotNullOrEmpty(bar.settings.messageClass)){bar.message.addClass(bar.settings.messageClass);}else{if(bar.isNotNullOrEmpty(bar.settings.fontFamily)){bar.message.css('font-family',bar.settings.fontFamily);};if(bar.isNotNullOrEmpty(bar.settings.fontSize)){bar.message.css('font-size',bar.settings.fontSize);};if(bar.isNotNullOrEmpty(bar.settings.fontColor)){bar.message.css('color',bar.settings.fontColor);};if(bar.isNotNullOrEmpty(bar.settings.fontShadow)){bar.message.css('text-shadow',bar.settings.fontShadow);};};if(bar.settings.positionSocial=='left'||bar.settings.positionSocial=='right'){if(bar.settings.social.profiles.length>0){var $social=$('.foobar-social').length>0?$('.foobar-social'):$('<ul/>').addClass('foobar-social');$social.empty();var $text=$('<li/>').text(bar.settings.social.text).css({'height':bar.settings.height,'line-height':bar.settings.height+'px'});if(bar.isNotNullOrEmpty(bar.settings.socialClass)){$text.addClass(bar.settings.socialClass);}else{$text.css({'padding-right':'10px','padding-left':'10px'});if(bar.isNotNullOrEmpty(bar.settings.social.fontFamily)){$text.css('font-family',bar.settings.social.fontFamily);};if(bar.isNotNullOrEmpty(bar.settings.social.fontSize)){$text.css('font-size',bar.settings.social.fontSize);};if(bar.isNotNullOrEmpty(bar.settings.social.fontColor)){$text.css('color',bar.settings.social.fontColor);};if(bar.isNotNullOrEmpty(bar.settings.social.fontShadow)){$text.css('text-shadow',bar.settings.social.fontShadow);};};$social.append($text);pdef={'name':null,'url':null,'image':null,'target':'_blank'};$.each(bar.settings.social.profiles,function(i,p){profile=$.extend({},pdef,p);if(profile.name!=null&&profile.url!=null&&profile.image!=null){var $a=$('<a/>').attr('href',profile.url).attr('title',profile.name).attr('target',profile.target).css({'background':"url('"+profile.image+"') no-repeat center center",'height':bar.settings.height});$social.append($('<li/>').css({'height':bar.settings.height}).append($a));};});if(bar.settings.positionSocial=='right'){$social.css('float','right');bar.right.append($social);}else if(bar.settings.positionSocial=='left'){$social.css('float','left');bar.left.append($social);};}else{$('.foobar-social').remove();};}else{$('.foobar-social').remove();};if(bar.isNotNullOrEmpty(bar.settings.rightHtml)){bar.right.append(bar.parseHtml(bar.settings.rightHtml));}
if(bar.isNotNullOrEmpty(bar.settings.leftHtml)){bar.left.append(bar.parseHtml(bar.settings.leftHtml));}
if(bar.settings.positioning=='fixed'){bar.wrapper.css({'position':'fixed','top':bar.htmlMarginTop+'px','left':'0px'});bar.openButtonContainer.css({'position':'fixed'});}else{bar.wrapper.css({'position':'relative','top':0,'left':0});bar.openButtonContainer.css({'position':'absolute'});};if(bar.settings.positionClose=='right'){bar.left.css('width','25%');bar.right.css('width','20%');bar.closeButtonContainer.css('float','right');bar.openButtonContainer.css({'left':'auto','right':'0px'});}else if(bar.settings.positionClose=='left'){bar.left.css('width','20%');bar.right.css('width','25%');bar.closeButtonContainer.css('float','left');bar.openButtonContainer.css({'right':'auto','left':'0px'});}else{bar.left.css('width','25%');bar.right.css('width','25%');};var cookie=bar.getCookie('foobar-state');if(cookie==null||!bar.settings.enableCookie){if(!bar.settings.enableCookie){bar.deleteCookie('foobar-state');}
switch(bar.settings.display){case'onscroll':bar.setCollapsed();$(window).one('scroll',function(){setTimeout(bar.expand,bar.settings.displayDelay);});break;case'delayed':bar.setCollapsed();setTimeout(bar.expand,bar.settings.displayDelay);break;case'collapsed':bar.setCollapsed();break;case'expanded':default:bar.setExpanded();break;};}else{cookie=="true"?bar.setExpanded():bar.setCollapsed();};bar.openButton.unbind().click(bar.expand);bar.closeButton.unbind().click(bar.collapse);$('.foobar-message-wrapper').remove();bar.messageHover=false;bar.messageIndex=0;bar.currentMesasgeIndex=-1;var handleMessages=true;if(bar.settings.twitter.enabled&&bar.isNotNullOrEmpty(bar.settings.twitter.user)){handleMessages=false;bar.loadTwitter();};if(bar.settings.rss.enabled&&bar.isNotNullOrEmpty(bar.settings.rss.googleAPIKey)&&bar.isNotNullOrEmpty(bar.settings.rss.url)){handleMessages=false;if(bar.isGoogleLoaded()&&bar.isFeedsLoaded()){bar.loadRss();}
else if(bar.isFeedsLoaded()){bar.loadFeeds();}
else{bar.loadGoogle();};};if(handleMessages){bar.message.stop(true,false).css({'opacity':100});bar.messageCycle();};}};})(jQuery);
