/*! Tinycon - A small library for manipulating the Favicon Tom Moor, http://tommoor.com Copyright (c) 2012 Tom Moor @license MIT Licensed @version 0.6.3 */(function(){varTinycon={};varcurrentFavicon=null;varoriginalFavicon=null;varfaviconImage=null;varcanvas=null;varoptions={};varr=window.devicePixelRatio||1;varsize=16*r;vardefaults={width:7,height:9,font:10*r+'px arial',colour:'#ffffff',background:'#F03D25',fallback:true,crossOrigin:true,abbreviate:true};varua=(function(){varagent=navigator.userAgent.toLowerCase();returnfunction(browser){returnagent.indexOf(browser)!==-1}}());varbrowser={ie:ua('msie'),chrome:ua('chrome'),webkit:ua('chrome')||ua('safari'),safari:ua('safari')&&!ua('chrome'),mozilla:ua('mozilla')&&!ua('chrome')&&!ua('safari')};vargetFaviconTag=function(){varlinks=document.getElementsByTagName('link');for(vari=0,len=links.length;i<len;i++){if((links[i].getAttribute('rel')||'').match(/\bicon\b/)){returnlinks[i]}}returnfalse};varremoveFaviconTag=function(){varlinks=document.getElementsByTagName('link');varhead=document.getElementsByTagName('head')[0];for(vari=0,len=links.length;i<len;i++){varexists=(typeof(links[i])!=='undefined');if(exists&&(links[i].getAttribute('rel')||'').match(/\bicon\b/)){head.removeChild(links[i])}}};vargetCurrentFavicon=function(){if(!originalFavicon||!currentFavicon){vartag=getFaviconTag();originalFavicon=currentFavicon=tag?tag.getAttribute('href'):'/favicon.ico'}returncurrentFavicon};vargetCanvas=function(){if(!canvas){canvas=document.createElement("canvas");canvas.width=size;canvas.height=size}returncanvas};varsetFaviconTag=function(url){removeFaviconTag();varlink=document.createElement('link');link.type='image/x-icon';link.rel='icon';link.href=url;document.getElementsByTagName('head')[0].appendChild(link)};varlog=function(message){if(window.console)window.console.log(message)};vardrawFavicon=function(label,colour){if(!getCanvas().getContext||browser.ie||browser.safari||options.fallback==='force'){returnupdateTitle(label)}varcontext=getCanvas().getContext("2d");varcolour=colour||'#000000';varsrc=getCurrentFavicon();faviconImage=document.createElement('img');faviconImage.onload=function(){context.clearRect(0,0,size,size);context.drawImage(faviconImage,0,0,faviconImage.width,faviconImage.height,0,0,size,size);if((label+'').length>0)drawBubble(context,label,colour);refreshFavicon()};if(!src.match(/^data/)&&options.crossOrigin){faviconImage.crossOrigin='anonymous'}faviconImage.src=src};varupdateTitle=function(label){if(options.fallback){varoriginalTitle=document.title;if(originalTitle[0]==='('){originalTitle=originalTitle.slice(originalTitle.indexOf(' '))}if((label+'').length>0){document.title='('+label+') '+originalTitle}else{document.title=originalTitle}}};vardrawBubble=function(context,label,colour){if(typeoflabel=='number'&&label>99&&options.abbreviate){label=abbreviateNumber(label)}varlen=(label+'').length-1;varwidth=options.width*r+(6*r*len),height=options.height*r;vartop=size-height,left=size-width-r,bottom=16*r,right=16*r,radius=2*r;context.font=(browser.webkit?'bold ':'')+options.font;context.fillStyle=options.background;context.strokeStyle=options.background;context.lineWidth=r;context.beginPath();context.moveTo(left+radius,top);context.quadraticCurveTo(left,top,left,top+radius);context.lineTo(left,bottom-radius);context.quadraticCurveTo(left,bottom,left+radius,bottom);context.lineTo(right-radius,bottom);context.quadraticCurveTo(right,bottom,right,bottom-radius);context.lineTo(right,top+radius);context.quadraticCurveTo(right,top,right-radius,top);context.closePath();context.fill();context.beginPath();context.strokeStyle="rgba(0,0,0,0.3)";context.moveTo(left+radius/2.0,bottom);context.lineTo(right-radius/2.0,bottom);context.stroke();context.fillStyle=options.colour;context.textAlign="right";context.textBaseline="top";context.fillText(label,r===2?29:15,browser.mozilla?7*r:6*r)};varrefreshFavicon=function(){if(!getCanvas().getContext)return;setFaviconTag(getCanvas().toDataURL())};varabbreviateNumber=function(label){varmetricPrefixes=[['G',1000000000],['M',1000000],['k',1000]];for(vari=0;i<metricPrefixes.length;++i){if(label>=metricPrefixes[i][1]){label=round(label/metricPrefixes[i][1])+metricPrefixes[i][0];break}}returnlabel};varround=function(value,precision){varnumber=newNumber(value);returnnumber.toFixed(precision)};Tinycon.setOptions=function(custom){options={};for(varkeyindefaults){options[key]=custom.hasOwnProperty(key)?custom[key]:defaults[key]}returnthis};Tinycon.setImage=function(url){currentFavicon=url;refreshFavicon();returnthis};Tinycon.setBubble=function(label,colour){label=label||'';drawFavicon(label,colour);returnthis};Tinycon.reset=function(){setFaviconTag(originalFavicon)};Tinycon.setOptions(defaults);window.Tinycon=Tinycon;if(typeofdefine==='function'&&define.amd){define(Tinycon)}})();