var crowdreelWidget=function(){var c=c||{};c.host="http://widgets.crowdreel.com";c.apiHost="http://api.crowdreel.com";c.browser=function(){var b=navigator.userAgent;return{ie:b.match(/MSIE\s([^;]*)/),moz:b.match(/Mozilla/),firefox:b.match(/Firefox/),safari:b.match(/Safari/)}}();c.is={bool:function(b){return typeof b==="boolean"},def:function(b){return typeof b!=="undefined"},number:function(b){return typeof b==="number"&&isFinite(b)},string:function(b){return typeof b==="string"},fn:function(b){return typeof b===
"function"},array:function(b){if(b)return is.number(b.length)&&is.fn(b.splice);return!1}};c.extend=function(b,d){for(var e in d)b[e]=d[e];return b};c.Mouse={coords:function(b){if(b.pageX||b.pageY)return{x:b.pageX,y:b.pageY};return{x:b.clientX+document.body.scrollLeft-document.body.clientLeft,y:b.clientY+document.body.scrollTop-document.body.clientTop}},wheelDelta:function(b,d){var e=0;if(!b)b=window.event;b.wheelDelta?(e=c.browser.safari?b.wheelDelta/20:c.browser.ie?b.wheelDelta:b.wheelDelta/120,
window.opera&&(e=-e)):b.detail&&(e=-b.detail*10);e&&d(e)}};c.object=function(b,d){function e(){}var c;e.prototype=b;c=new e;c.superClass=b;for(var g in d)c[g]=d[g];return c};c.timeAgo=function(b){var d=new Date,e=new Date(b);c.browser.ie&&(e=Date.parse(b.replace(/( \+)/," UTC$1")));b=d-e;if(isNaN(b)||b<0)return"";if(b<7E3)return"right now";if(b<6E4)return Math.floor(b/1E3)+" seconds ago";if(b<12E4)return"about 1 minute ago";if(b<36E5)return Math.floor(b/6E4)+" minutes ago";if(b<72E5)return"about 1 hour ago";
if(b<864E5)return Math.floor(b/36E5)+" hours ago";if(b>864E5&&b<1728E5)return"yesterday";return b<31536E6?Math.floor(b/864E5)+" days ago":"over a year ago"};c.offset=function(b){var d=curtop=0;if(b.offsetParent){do d+=b.offsetLeft,curtop+=b.offsetTop;while(b=b.offsetParent)}return{x:d,y:curtop}};c.prefetchImages=function(b){for(var d in b)document.createElement("img").setAttribute("src",b[d])};c.Event={bind:function(b,d,c){b.addEventListener?b.addEventListener(d,function(b){var d;if(b){if((d=c(b))==
!1)b.preventDefault&&b.preventDefault(),b.returnValue=!1,b.stopPropagation&&b.stopPropagation(),b.cancelBubble=!0;return d}},!1):b.attachEvent("on"+d,function(){c.call(b,window.event)})},trigger:function(b,d){if(document.addEventListener){var c=document.createEvent("UIEvents");c.initEvent(d,!1,!1);return b.dispatchEvent(c)}}};c.LoadingMutex=function(b,d){this.is_loading=!1;this.onDoneLoading=d;this.onLoading=b};c.LoadingMutex.prototype={doneLoading:function(){this.is_loading=!1;if(this.onDoneLoading)this.onDoneLoading();
return this},loading:function(){var b=this.is_loading;this.is_loading=!0;if(b&&this.onLoading)this.onLoading();return b}};c.CRX=function(){};c.CRX.prototype={loadCSS:function(b,d){var c=document.createElement("link");c.href=b;c.rel="stylesheet";c.type="text/css";document.getElementsByTagName("head")[0].appendChild(c);d&&d(c);return c},loadJS:function(b,d){var e=document.createElement("script");e.type="text/javascript";e.src=c.host+"/javascripts/"+b;document.getElementsByTagName("head")[0].appendChild(e);
d&&d(e);return e},loadJSON:function(b,d){var c=document.createElement("script");c.type="text/javascript";c.src=b;document.getElementsByTagName("head")[0].appendChild(c);d&&d(c);return c}};c.Scroller=function(b,d,e){e||(e={});this.settings=c.extend({outside:".widget",height:60,width:3,scrollHeight:700,targetWidth:8,color:"#000"},e);this.grid=b;this.widget=b.widget;this.target=d;this.scroll_bar=document.createElement("div");this.scroll_bar.className="cr-widget-scroll-bar";this.scroll_bar.style.height=
this.settings.scrollHeight;this.slider=document.createElement("div");this.slider.className="cr-widget-slider";this.slider.style.paddingLeft="1px";this.slider.style.paddingRight="2px";b=document.createElement("div");b.className="cr-widget-slider-bar";b.style.width=this.settings.targetWidth-3+"px";this.bar=b;this.slider.appendChild(b);this.scroll_bar.appendChild(this.slider);this.widget.html.appendChild(this.scroll_bar);var f=this;f.dragging=!1;f.mouseOffset=null;c.Event.bind(f.slider,"mousedown",function(b){f.dragging=
!0;var d=c.offset(f.bar),b=c.Mouse.coords(b);f.mouseOffset={x:b.x-d.x,y:b.y-d.y};return!1});c.Event.bind(document,"mouseup",function(){f.dragging=!1});c.Event.bind(document,"mousemove",function(b){if(f.dragging)return b=c.Mouse.coords(b).y-f.mouseOffset.y-c.offset(f.scroll_bar).y,f.dragScroll(b),!1});c.Event.bind(f.grid.container,c.browser.firefox?"DOMMouseScroll":"mousewheel",function(b){c.Mouse.wheelDelta(b,function(b){f.scrollOffset(b)});return!1})};c.Scroller.prototype={scrollTo:function(b){var d=
b/this.scrollPaneOffset()*this.scrollHeight();this.target.style.marginTop=b+"px";this.slider.style.marginTop=-1*d+"px"},dragScroll:function(b){targetPos=b/this.scrollHeight()*this.scrollPaneOffset();this.slider.style.marginTop=Math.max(0,Math.min(this.scrollHeight(),b))+"px";this.target.style.marginTop=-1*Math.max(0,Math.min(this.scrollPaneOffset(),targetPos))+"px"},scrollPaneHeight:function(){return this.grid.shortestCol().offsetHeight-1},scrollPaneOffset:function(){return this.scrollPaneHeight()-
this.settings.scrollHeight},scrollHeight:function(){return this.settings.scrollHeight-this.settings.height},scrollOffset:function(b){(currentOffset=parseInt(this.target.style.marginTop,10))||(currentOffset=0);diff=currentOffset+b;bottom=this.scrollPaneHeight()*-1+this.settings.scrollHeight;diff=b<0?Math.max(diff,bottom):Math.min(diff,0);this.scrollTo(diff);return diff-bottom}};c.Grid=function(b,d){this.widget=b;d||(d={});this.settings=c.extend({moreOffset:200,cols:2,width:300,height:400},d);this.bucket=
[];this.max_id=null;this.container=document.getElementById("cr-widget-grid");this.height=this.settings.height;this.width=this.settings.width;this.colWidth=Math.floor(this.settings.width/this.settings.num_columns);this.callbacks=this.container;this.is=new c.LoadingMutex;this.colsContainer=document.createElement("div");this.colsContainer.className="cols";this.container.appendChild(this.colsContainer);this.cols=[];this.crx=this.widget.crx;this.offset=0;this.reelCompleted=!1;this.scroller=new c.Scroller(this,
this.colsContainer,this.widget.settings.scroller);c.Event.bind(document.getElementById("cr-widget-footer"),"click",function(){b.grid.more();return!1})};c.Grid.prototype={build:function(){for(var b=this.settings.num_columns;b--;)ul=document.createElement("ul"),ul.className="col "+(b===0?"last":""),ul.style.width=this.colWidth+"px",ul.style.minWidth=this.colWidth+"px",this.cols.push(ul),this.colsContainer.appendChild(ul);return this},more:function(){this.scroller.scrollOffset(this.settings.moreOffset*
-1)<this.settings.moreOffset*2&&this.fetchMore();return!1},loadMore:function(b){this.bucket=b;this.populate();this.scroller&&this.scroller.scrollOffset(0)},fetchMore:function(){var b=this;if(typeof this.moreUri==="undefined"&&!this.reelCompleted)this.crx.loadJSON(c.apiHost+"/widget.json?key="+b.widget.key+"&callback=crowdreelWidget.more",function(d){b.storeScriptElement(d)});else if(this.reelCompleted){if(this.reelCompleted&&this.scroller.scrollOffset(this.settings.moreOffset*-1)<this.settings.moreOffset*
2)document.getElementById("cr-widget-footer").className="cr-more-disabled"}else this.crx.loadJSON(c.apiHost+"/widget.json"+this.moreUri+"&callback=crowdreelWidget.more",function(d){b.storeScriptElement(d)});return b},populate:function(b){b||(b=20);this.moreUri=this.bucket.more_url;if(typeof this.moreUri==="undefined")this.reelCompleted=!0;b=this.bucket.results.splice(0,b);if(b.length){this.max_id=b[b.length-1].url_code;for(var d=this.widget.viewer.items.length-1;b.length;){d+=1;var c=b.shift();c.index=
d;this.shortestCol().appendChild(this.widget.build.preview(this.widget,c));this.widget.viewer.items.push(this.widget.build.post(this.widget,c))}}return this},shortestCol:function(){var b,c=null,e;for(b=0;b<this.cols.length;b++)if(c==null||this.cols[b].offsetHeight<c)e=this.cols[b],c=this.cols[b].offsetHeight;return e},storeScriptElement:function(b){this.script_element&&this.script_element.parentNode.removeChild(this.script_element);this.script_element=b},bind:function(b,c){$(this).bind(b,c);return this},
afterLoadMore:function(b){return this.bind("afterLoadMore",b)},beforeLoadMore:function(b){return this.bind("beforeLoadMore",b)}};c.Viewer=function(b,d){this.widget=b;d||(d={});this.settings=c.extend({css:{previousSelector:"cr-widget-left",nextSelector:"cr-widget-right"}},d);this.html=this.widget.build.viewer(this.widget);document.body.appendChild(this.html);this.container=document.createElement("div");this.container.className="cr-widget-viewer-container";this.html.appendChild(this.container);this.items=
[];var e=this,f=document.getElementById(this.settings.css.previousSelector);c.Event.bind(f,"click",function(){e.scrollLeft()});f=document.getElementById(this.settings.css.nextSelector);c.Event.bind(f,"click",function(){e.scrollRight()});c.Event.bind(document,"keyup",function(b){e.html.style.display=="block"&&(b.keyCode===37?e.scrollLeft():b.keyCode===39?e.scrollRight():b.keyCode===27&&e.hide())});c.Event.bind(document.getElementById("cr-widget-close"),"click",function(){e.hide()});c.Event.bind(window,
"resize",function(){e.html.style.display=="block"&&(e.center(),e.setTimeOverlay())})};c.Viewer.prototype={show:function(b){this.currentIndex=b&&parseInt(b,10)||0;this.createOverlay();post=this.items[this.currentIndex];this.html.style.display="block";this.container.innerHTML=post.innerHTML;this.center();this.setTimeOverlay()},hide:function(){this.html.style.display="none";document.getElementById("cr-widget-overlay").style.display="none"},setTimeOverlay:function(){var b=this.html.getElementsByTagName("img")[0];
document.getElementById("cr-viewer-timeago").style.right=(640-b.offsetWidth)/2+5+"px"},center:function(){var b=document.documentElement.clientHeight?document.documentElement:document.body,c=window.innerHeight||b.offsetHeight,e=window.innerWidth||b.offsetWidth,f=this.html.offsetHeight,g=this.html.getElementsByTagName("img")[0];if(c-f<50)g.height=c/1.5,f=this.html.offsetHeight;this.html.style.top=(window.pageYOffset||b.scrollTop)+c/2-f/2+"px";this.html.style.left=e/2-this.html.offsetWidth/2+"px";this.centerScrollableArrows(f)},
centerScrollableArrows:function(b){var c=document.getElementById(this.settings.css.previousSelector),b=b/2-c.offsetHeight/2;c.style.top=b+"px";document.getElementById(this.settings.css.nextSelector).style.top=b+"px"},createOverlay:function(){var b=document.getElementById("cr-widget-overlay");if(!b){b=document.createElement("div");b.id="cr-widget-overlay";document.body.appendChild(b);var d=this;c.Event.bind(b,"click",function(){d.hide()})}b.style.display="block";b.style.height=Math.max(Math.max(document.body.scrollHeight,
document.documentElement.scrollHeight),Math.max(document.body.offsetHeight,document.documentElement.offsetHeight),Math.max(document.body.clientHeight,document.documentElement.clientHeight))+"px"},scrollLeft:function(){this.currentIndex!=0&&(this.currentIndex-=1,this.show(this.currentIndex))},scrollRight:function(){if(this.currentIndex==this.items.length-1)if(this.widget.grid.reelCompleted)this.currentIndex=0,this.show(this.currentIndex);else{this.widget.grid&&this.widget.grid.fetchMore();var b=this;
setTimeout(function(){b.scrollRight()},500)}else this.items.length>this.currentIndex+1&&(this.currentIndex+=1,this.show(this.currentIndex))}};c.Widget=function(b){b||(b={});this.settings=c.extend({widgetCSS:"widget.css",title:"Crowdreel Widget",scrollWidth:5,num_columns:2,height:500,width:300,theme:{css:"dark"}},b);this.crx=new c.CRX;this.key=c.getWidgetKeyFromUrl();this.wid=this.key.slice(0,5);document.write('<div id="cr-widget-'+this.wid+'" class="cr-widget-container-holder"></div>');this.html=
document.getElementById("cr-widget-"+this.wid);this.core=c};c.Widget.prototype={more:function(b){this.grid.loadMore(b)},load:function(){var b=this;c.Event.bind(window,"load",function(){b.key!==""?b.crx.loadJSON(c.apiHost+"/widget.json?key="+b.key+"&action=init&callback=crowdreelWidget.init"):document.write("Invalid Key")});return this},init:function(b){if(b.results){this.html.className="cr-widget-container";if(typeof b.results.num_columns!=="undefined")b.results.num_columns=b.results.num_columns||
this.settings.num_columns;if(typeof b.results.height!=="undefined")b.results.height=b.results.height||this.settings.height;if(typeof b.results.width!=="undefined")b.results.width=b.results.width||this.settings.width;if(b.results.theme&&typeof b.results.theme.css!=="undefined")b.results.theme.css=b.results.theme.css||this.settings.theme.css;this.settings=c.extend(this.settings,b.results);this.html.style.width=this.settings.width+"px";this.crx.loadCSS(c.host+"/stylesheets/"+this.settings.widgetCSS);
this.settings.theme&&this.settings.theme.css&&(this.settings.theme.css.indexOf("http://")===-1?this.crx.loadCSS(c.host+"/stylesheets/widget/"+this.settings.theme.css+".css"):this.crx.loadCSS(this.settings.theme.css));this.settings.theme&&this.settings.theme.js?this.crx.loadJS(this.settings.theme.js+".js"):this.populate()}},calculateDimensions:function(){this.settings.height-=this.build.heightOffset;var b=this.settings.num_columns+1+this.settings.scrollWidth,c=Math.floor((this.settings.width-2-b)/
this.settings.num_columns)*this.settings.num_columns+this.settings.num_columns-1,b=this.settings.width-2-c;this.settings.width=c;this.settings.scroller={targetWidth:b,scrollHeight:this.settings.height}},loadTheme:function(b){this.build=c.object(this.build,b);this.populate()},populate:function(){this.calculateDimensions();this.html.innerHTML=this.build.widget(this);this.viewer=new c.Viewer(this,this.settings);this.grid=(new c.Grid(this,this.settings)).build().fetchMore()},showOverlay:function(){if(!this.overlay)this.overlay=
document.createElement("div"),this.overlay.id="cr-widget-overlay",document.body.appendChild(this.overlay);this.overlay.className="show"},hideOverlay:function(){if(this.overlay)this.overlay.className="hide"},build:{heightOffset:70,themeImagePath:"/images/widget",viewer:function(b){v=document.createElement("div");v.className="cr-widget-viewer cr-base";var c='<div id="cr-widget-close"></div>';c+='<div id="cr-widget-left"></div>';c+='<div id="cr-widget-right"></div>';c+='<div class="cr-widget-header">';
c+=b.settings.title;c+='<div class="cr-widget-header-logo"><a href="http://crowdreel.com"></a></div></div>';v.innerHTML=c;return v},widget:function(b){sb='<div class="cr-widget cr-base" ><div class="cr-widget-header">';sb+=b.settings.title;sb+='<div class="cr-widget-header-logo" ><a href="http://crowdreel.com"></a></div></div>';sb+='<div class="cr-widget-posts" id="cr-widget-grid" style="height:'+b.settings.height+'px;"></div>';sb+='<div id="cr-widget-footer"><span class="cr-widget-more-text">more</span></div></div>';
return sb},preview:function(b,d){li=document.createElement("li");li.className="cr-grid-post";li.setAttribute("rel-url_code",d.url_code);a=document.createElement("a");a.setAttribute("href",d.short_url);a.setAttribute("data-index",d.index);a.id=d.url_code;var e='<img class="cr-grid-post-image" src="'+d.small.url+'" height="'+Math.floor(d.small.height/d.small.width*b.grid.colWidth)+'" width="'+b.grid.colWidth+'" />',f=document.createElement("abbr");f.className="cr-meta";f.title=d.posted_at;f.innerHTML=
c.timeAgo(d.posted_at);a.innerHTML=e;c.Event.bind(a,"click",function(c){b.viewer.show((c.currentTarget||this).getAttribute("data-index")||0);if(!c.preventDefault)c.returnValue=!1;return!1});li.appendChild(a);li.appendChild(f);return li},post:function(b,d){var e="http://api.twitter.com/1/users/profile_image/"+d.from_username+"?size=bigger";c.prefetchImages([d.large.url,e]);html='<div class="cr-post-image-container">';html+='<img class="cr-grid-post-image" src="'+d.large.url+'" />';html+='<div id="cr-viewer-timeago"><abbr class="cr-timeago cr-short" title="'+
d.posted_at+'">'+c.timeAgo(d.posted_at)+"</abbr></div></div>";html+='<div class="cr-grid-post-data">';html+='<div class="cr-grid-post-avatar"><img src="'+e+'" /></div>';html+='<div class="cr-grid-post-info"><div class="cr-grid-post-username">'+d.from_username+"</div>";html+='<div class="cr-grid-post-tweet">'+d.text+"</div>";html+='</div></div><div class="clear"></div>';e=document.createElement("div");e.innerHTML=html;return e}}};c.getWidgetKeyFromUrl=function(){var b=document.getElementsByTagName("script");
return b[b.length-1].src.replace(/^.*\?/,"")};return new c.Widget}().load();

