/*!
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */

(function(g){var q={vertical:!1,rtl:!1,start:1,offset:1,size:null,scroll:3,visible:null,animation:"normal",easing:"swing",auto:0,wrap:null,initCallback:null,setupCallback:null,reloadCallback:null,itemLoadCallback:null,itemFirstInCallback:null,itemFirstOutCallback:null,itemLastInCallback:null,itemLastOutCallback:null,itemVisibleInCallback:null,itemVisibleOutCallback:null,animationStepCallback:null,buttonNextHTML:"<div></div>",buttonPrevHTML:"<div></div>",buttonNextEvent:"click",buttonPrevEvent:"click", buttonNextCallback:null,buttonPrevCallback:null,itemFallbackDimension:null},m=!1;g(window).bind("load.jcarousel",function(){m=!0});g.jcarousel=function(a,c){this.options=g.extend({},q,c||{});this.autoStopped=this.locked=!1;this.buttonPrevState=this.buttonNextState=this.buttonPrev=this.buttonNext=this.list=this.clip=this.container=null;if(!c||c.rtl===void 0)this.options.rtl=(g(a).attr("dir")||g("html").attr("dir")||"").toLowerCase()=="rtl";this.wh=!this.options.vertical?"width":"height";this.lt=!this.options.vertical? this.options.rtl?"right":"left":"top";for(var b="",d=a.className.split(" "),f=0;f<d.length;f++)if(d[f].indexOf("jcarousel-skin")!=-1){g(a).removeClass(d[f]);b=d[f];break}a.nodeName.toUpperCase()=="UL"||a.nodeName.toUpperCase()=="OL"?(this.list=g(a),this.clip=this.list.parents(".jcarousel-clip"),this.container=this.list.parents(".jcarousel-container")):(this.container=g(a),this.list=this.container.find("ul,ol").eq(0),this.clip=this.container.find(".jcarousel-clip"));if(this.clip.size()===0)this.clip= this.list.wrap("<div></div>").parent();if(this.container.size()===0)this.container=this.clip.wrap("<div></div>").parent();b!==""&&this.container.parent()[0].className.indexOf("jcarousel-skin")==-1&&this.container.wrap('<div class=" '+b+'"></div>');this.buttonPrev=g(".jcarousel-prev",this.container);if(this.buttonPrev.size()===0&&this.options.buttonPrevHTML!==null)this.buttonPrev=g(this.options.buttonPrevHTML).appendTo(this.container);this.buttonPrev.addClass(this.className("jcarousel-prev"));this.buttonNext= g(".jcarousel-next",this.container);if(this.buttonNext.size()===0&&this.options.buttonNextHTML!==null)this.buttonNext=g(this.options.buttonNextHTML).appendTo(this.container);this.buttonNext.addClass(this.className("jcarousel-next"));this.clip.addClass(this.className("jcarousel-clip")).css({position:"relative"});this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden",position:"relative",top:0,margin:0,padding:0}).css(this.options.rtl?"right":"left",0);this.container.addClass(this.className("jcarousel-container")).css({position:"relative"}); !this.options.vertical&&this.options.rtl&&this.container.addClass("jcarousel-direction-rtl").attr("dir","rtl");var j=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible):null,b=this.list.children("li"),e=this;if(b.size()>0){var h=0,i=this.options.offset;b.each(function(){e.format(this,i++);h+=e.dimension(this,j)});this.list.css(this.wh,h+100+"px");if(!c||c.size===void 0)this.options.size=b.size()}this.container.css("display","block");this.buttonNext.css("display","block");this.buttonPrev.css("display", "block");this.funcNext=function(){e.next()};this.funcPrev=function(){e.prev()};this.funcResize=function(){e.resizeTimer&&clearTimeout(e.resizeTimer);e.resizeTimer=setTimeout(function(){e.reload()},100)};this.options.initCallback!==null&&this.options.initCallback(this,"init");!m&&g.browser.safari?(this.buttons(!1,!1),g(window).bind("load.jcarousel",function(){e.setup()})):this.setup()};var f=g.jcarousel;f.fn=f.prototype={jcarousel:"0.2.8"};f.fn.extend=f.extend=g.extend;f.fn.extend({setup:function(){this.prevLast= this.prevFirst=this.last=this.first=null;this.animating=!1;this.tail=this.resizeTimer=this.timer=null;this.inTail=!1;if(!this.locked){this.list.css(this.lt,this.pos(this.options.offset)+"px");var a=this.pos(this.options.start,!0);this.prevFirst=this.prevLast=null;this.animate(a,!1);g(window).unbind("resize.jcarousel",this.funcResize).bind("resize.jcarousel",this.funcResize);this.options.setupCallback!==null&&this.options.setupCallback(this)}},reset:function(){this.list.empty();this.list.css(this.lt, "0px");this.list.css(this.wh,"10px");this.options.initCallback!==null&&this.options.initCallback(this,"reset");this.setup()},reload:function(){this.tail!==null&&this.inTail&&this.list.css(this.lt,f.intval(this.list.css(this.lt))+this.tail);this.tail=null;this.inTail=!1;this.options.reloadCallback!==null&&this.options.reloadCallback(this);if(this.options.visible!==null){var a=this,c=Math.ceil(this.clipping()/this.options.visible),b=0,d=0;this.list.children("li").each(function(f){b+=a.dimension(this, c);f+1<a.first&&(d=b)});this.list.css(this.wh,b+"px");this.list.css(this.lt,-d+"px")}this.scroll(this.first,!1)},lock:function(){this.locked=!0;this.buttons()},unlock:function(){this.locked=!1;this.buttons()},size:function(a){if(a!==void 0)this.options.size=a,this.locked||this.buttons();return this.options.size},has:function(a,c){if(c===void 0||!c)c=a;if(this.options.size!==null&&c>this.options.size)c=this.options.size;for(var b=a;b<=c;b++){var d=this.get(b);if(!d.length||d.hasClass("jcarousel-item-placeholder"))return!1}return!0}, get:function(a){return g(">.jcarousel-item-"+a,this.list)},add:function(a,c){var b=this.get(a),d=0,p=g(c);if(b.length===0)for(var j,e=f.intval(a),b=this.create(a);;){if(j=this.get(--e),e<=0||j.length){e<=0?this.list.prepend(b):j.after(b);break}}else d=this.dimension(b);p.get(0).nodeName.toUpperCase()=="LI"?(b.replaceWith(p),b=p):b.empty().append(c);this.format(b.removeClass(this.className("jcarousel-item-placeholder")),a);p=this.options.visible!==null?Math.ceil(this.clipping()/this.options.visible): null;d=this.dimension(b,p)-d;a>0&&a<this.first&&this.list.css(this.lt,f.intval(this.list.css(this.lt))-d+"px");this.list.css(this.wh,f.intval(this.list.css(this.wh))+d+"px");return b},remove:function(a){var c=this.get(a);if(c.length&&!(a>=this.first&&a<=this.last)){var b=this.dimension(c);a<this.first&&this.list.css(this.lt,f.intval(this.list.css(this.lt))+b+"px");c.remove();this.list.css(this.wh,f.intval(this.list.css(this.wh))-b+"px")}},next:function(){this.tail!==null&&!this.inTail?this.scrollTail(!1): this.scroll((this.options.wrap=="both"||this.options.wrap=="last")&&this.options.size!==null&&this.last==this.options.size?1:this.first+this.options.scroll)},prev:function(){this.tail!==null&&this.inTail?this.scrollTail(!0):this.scroll((this.options.wrap=="both"||this.options.wrap=="first")&&this.options.size!==null&&this.first==1?this.options.size:this.first-this.options.scroll)},scrollTail:function(a){if(!this.locked&&!this.animating&&this.tail){this.pauseAuto();var c=f.intval(this.list.css(this.lt)), c=!a?c-this.tail:c+this.tail;this.inTail=!a;this.prevFirst=this.first;this.prevLast=this.last;this.animate(c)}},scroll:function(a,c){!this.locked&&!this.animating&&(this.pauseAuto(),this.animate(this.pos(a),c))},pos:function(a,c){var b=f.intval(this.list.css(this.lt));if(this.locked||this.animating)return b;this.options.wrap!="circular"&&(a=a<1?1:this.options.size&&a>this.options.size?this.options.size:a);for(var d=this.first>a,g=this.options.wrap!="circular"&&this.first<=1?1:this.first,j=d?this.get(g): this.get(this.last),e=d?g:g-1,h=null,i=0,k=!1,l=0;d?--e>=a:++e<a;){h=this.get(e);k=!h.length;if(h.length===0&&(h=this.create(e).addClass(this.className("jcarousel-item-placeholder")),j[d?"before":"after"](h),this.first!==null&&this.options.wrap=="circular"&&this.options.size!==null&&(e<=0||e>this.options.size)))j=this.get(this.index(e)),j.length&&(h=this.add(e,j.clone(!0)));j=h;l=this.dimension(h);k&&(i+=l);if(this.first!==null&&(this.options.wrap=="circular"||e>=1&&(this.options.size===null||e<= this.options.size)))b=d?b+l:b-l}for(var g=this.clipping(),m=[],o=0,n=0,j=this.get(a-1),e=a;++o;){h=this.get(e);k=!h.length;if(h.length===0){h=this.create(e).addClass(this.className("jcarousel-item-placeholder"));if(j.length===0)this.list.prepend(h);else j[d?"before":"after"](h);if(this.first!==null&&this.options.wrap=="circular"&&this.options.size!==null&&(e<=0||e>this.options.size))j=this.get(this.index(e)),j.length&&(h=this.add(e,j.clone(!0)))}j=h;l=this.dimension(h);if(l===0)throw Error("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting..."); this.options.wrap!="circular"&&this.options.size!==null&&e>this.options.size?m.push(h):k&&(i+=l);n+=l;if(n>=g)break;e++}for(h=0;h<m.length;h++)m[h].remove();i>0&&(this.list.css(this.wh,this.dimension(this.list)+i+"px"),d&&(b-=i,this.list.css(this.lt,f.intval(this.list.css(this.lt))-i+"px")));i=a+o-1;if(this.options.wrap!="circular"&&this.options.size&&i>this.options.size)i=this.options.size;if(e>i){o=0;e=i;for(n=0;++o;){h=this.get(e--);if(!h.length)break;n+=this.dimension(h);if(n>=g)break}}e=i-o+ 1;this.options.wrap!="circular"&&e<1&&(e=1);if(this.inTail&&d)b+=this.tail,this.inTail=!1;this.tail=null;if(this.options.wrap!="circular"&&i==this.options.size&&i-o+1>=1&&(d=f.intval(this.get(i).css(!this.options.vertical?"marginRight":"marginBottom")),n-d>g))this.tail=n-g-d;if(c&&a===this.options.size&&this.tail)b-=this.tail,this.inTail=!0;for(;a-- >e;)b+=this.dimension(this.get(a));this.prevFirst=this.first;this.prevLast=this.last;this.first=e;this.last=i;return b},animate:function(a,c){if(!this.locked&& !this.animating){this.animating=!0;var b=this,d=function(){b.animating=!1;a===0&&b.list.css(b.lt,0);!b.autoStopped&&(b.options.wrap=="circular"||b.options.wrap=="both"||b.options.wrap=="last"||b.options.size===null||b.last<b.options.size||b.last==b.options.size&&b.tail!==null&&!b.inTail)&&b.startAuto();b.buttons();b.notify("onAfterAnimation");if(b.options.wrap=="circular"&&b.options.size!==null)for(var c=b.prevFirst;c<=b.prevLast;c++)c!==null&&!(c>=b.first&&c<=b.last)&&(c<1||c>b.options.size)&&b.remove(c)}; this.notify("onBeforeAnimation");if(!this.options.animation||c===!1)this.list.css(this.lt,a+"px"),d();else{var f=!this.options.vertical?this.options.rtl?{right:a}:{left:a}:{top:a},d={duration:this.options.animation,easing:this.options.easing,complete:d};if(g.isFunction(this.options.animationStepCallback))d.step=this.options.animationStepCallback;this.list.animate(f,d)}}},startAuto:function(a){if(a!==void 0)this.options.auto=a;if(this.options.auto===0)return this.stopAuto();if(this.timer===null){this.autoStopped= !1;var c=this;this.timer=window.setTimeout(function(){c.next()},this.options.auto*1E3)}},stopAuto:function(){this.pauseAuto();this.autoStopped=!0},pauseAuto:function(){if(this.timer!==null)window.clearTimeout(this.timer),this.timer=null},buttons:function(a,c){if(a==null&&(a=!this.locked&&this.options.size!==0&&(this.options.wrap&&this.options.wrap!="first"||this.options.size===null||this.last<this.options.size),!this.locked&&(!this.options.wrap||this.options.wrap=="first")&&this.options.size!==null&& this.last>=this.options.size))a=this.tail!==null&&!this.inTail;if(c==null&&(c=!this.locked&&this.options.size!==0&&(this.options.wrap&&this.options.wrap!="last"||this.first>1),!this.locked&&(!this.options.wrap||this.options.wrap=="last")&&this.options.size!==null&&this.first==1))c=this.tail!==null&&this.inTail;var b=this;this.buttonNext.size()>0?(this.buttonNext.unbind(this.options.buttonNextEvent+".jcarousel",this.funcNext),a&&this.buttonNext.bind(this.options.buttonNextEvent+".jcarousel",this.funcNext), this.buttonNext[a?"removeClass":"addClass"](this.className("jcarousel-next-disabled")).attr("disabled",a?!1:!0),this.options.buttonNextCallback!==null&&this.buttonNext.data("jcarouselstate")!=a&&this.buttonNext.each(function(){b.options.buttonNextCallback(b,this,a)}).data("jcarouselstate",a)):this.options.buttonNextCallback!==null&&this.buttonNextState!=a&&this.options.buttonNextCallback(b,null,a);this.buttonPrev.size()>0?(this.buttonPrev.unbind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev), c&&this.buttonPrev.bind(this.options.buttonPrevEvent+".jcarousel",this.funcPrev),this.buttonPrev[c?"removeClass":"addClass"](this.className("jcarousel-prev-disabled")).attr("disabled",c?!1:!0),this.options.buttonPrevCallback!==null&&this.buttonPrev.data("jcarouselstate")!=c&&this.buttonPrev.each(function(){b.options.buttonPrevCallback(b,this,c)}).data("jcarouselstate",c)):this.options.buttonPrevCallback!==null&&this.buttonPrevState!=c&&this.options.buttonPrevCallback(b,null,c);this.buttonNextState= a;this.buttonPrevState=c},notify:function(a){var c=this.prevFirst===null?"init":this.prevFirst<this.first?"next":"prev";this.callback("itemLoadCallback",a,c);this.prevFirst!==this.first&&(this.callback("itemFirstInCallback",a,c,this.first),this.callback("itemFirstOutCallback",a,c,this.prevFirst));this.prevLast!==this.last&&(this.callback("itemLastInCallback",a,c,this.last),this.callback("itemLastOutCallback",a,c,this.prevLast));this.callback("itemVisibleInCallback",a,c,this.first,this.last,this.prevFirst, this.prevLast);this.callback("itemVisibleOutCallback",a,c,this.prevFirst,this.prevLast,this.first,this.last)},callback:function(a,c,b,d,f,j,e){if(!(this.options[a]==null||typeof this.options[a]!="object"&&c!="onAfterAnimation")){var h=typeof this.options[a]=="object"?this.options[a][c]:this.options[a];if(g.isFunction(h)){var i=this;if(d===void 0)h(i,b,c);else if(f===void 0)this.get(d).each(function(){h(i,this,d,b,c)});else for(var a=function(a){i.get(a).each(function(){h(i,this,a,b,c)})},k=d;k<=f;k++)k!== null&&!(k>=j&&k<=e)&&a(k)}}},create:function(a){return this.format("<li></li>",a)},format:function(a,c){for(var a=g(a),b=a.get(0).className.split(" "),d=0;d<b.length;d++)b[d].indexOf("jcarousel-")!=-1&&a.removeClass(b[d]);a.addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-"+c)).css({"float":this.options.rtl?"right":"left","list-style":"none"}).attr("jcarouselindex",c);return a},className:function(a){return a+" "+a+(!this.options.vertical?"-horizontal":"-vertical")}, dimension:function(a,c){var b=g(a);if(c==null)return!this.options.vertical?b.outerWidth(!0)||f.intval(this.options.itemFallbackDimension):b.outerHeight(!0)||f.intval(this.options.itemFallbackDimension);else{var d=!this.options.vertical?c-f.intval(b.css("marginLeft"))-f.intval(b.css("marginRight")):c-f.intval(b.css("marginTop"))-f.intval(b.css("marginBottom"));g(b).css(this.wh,d+"px");return this.dimension(b)}},clipping:function(){return!this.options.vertical?this.clip[0].offsetWidth-f.intval(this.clip.css("borderLeftWidth"))- f.intval(this.clip.css("borderRightWidth")):this.clip[0].offsetHeight-f.intval(this.clip.css("borderTopWidth"))-f.intval(this.clip.css("borderBottomWidth"))},index:function(a,c){if(c==null)c=this.options.size;return Math.round(((a-1)/c-Math.floor((a-1)/c))*c)+1}});f.extend({defaults:function(a){return g.extend(q,a||{})},intval:function(a){a=parseInt(a,10);return isNaN(a)?0:a},windowLoaded:function(){m=!0}});g.fn.jcarousel=function(a){if(typeof a=="string"){var c=g(this).data("jcarousel"),b=Array.prototype.slice.call(arguments, 1);return c[a].apply(c,b)}else return this.each(function(){var b=g(this).data("jcarousel");b?(a&&g.extend(b.options,a),b.reload()):g(this).data("jcarousel",new f(this,a))})}})(jQuery);
;
/**
 * jQuery Masonry v2.0.110524
 * A dynamic layout plugin for jQuery
 * The flip-side of CSS Floats
 * http://masonry.desandro.com
 *
 * Licensed under the MIT license.
 * Copyright 2011 David DeSandro
 */
(function(a,b,c){var d=b.event,e;d.special.smartresize={setup:function(){b(this).bind("resize",d.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",d.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",e&&clearTimeout(e),e=setTimeout(function(){jQuery.event.handle.apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Mason=function(a,c){this.element=b(c),this._create(a),this._init()};var f=["position","height"];b.Mason.settings={isResizable:!0,isAnimated:!1,animationOptions:{queue:!1,duration:500},gutterWidth:0,isRTL:!1,isFitWidth:!1},b.Mason.prototype={_filterFindBricks:function(a){var b=this.options.itemSelector;return b?a.filter(b).add(a.find(b)):a},_getBricks:function(a){var b=this._filterFindBricks(a).css({position:"absolute"}).addClass("masonry-brick");return b},_create:function(c){this.options=b.extend(!0,{},b.Mason.settings,c),this.styleQueue=[],this.reloadItems();var d=this.element[0].style;this.originalStyle={};for(var e=0,g=f.length;e<g;e++){var h=f[e];this.originalStyle[h]=d[h]||null}this.element.css({position:"relative"}),this.horizontalDirection=this.options.isRTL?"right":"left",this.offset={};var i=b(document.createElement("div"));this.element.prepend(i),this.offset.y=Math.round(i.position().top),this.options.isRTL?(i.css({"float":"right",display:"inline-block"}),this.offset.x=Math.round(this.element.outerWidth()-i.position().left)):this.offset.x=Math.round(i.position().left),i.remove();var j=this;setTimeout(function(){j.element.addClass("masonry")},0),this.options.isResizable&&b(a).bind("smartresize.masonry",function(){j.resize()})},_init:function(a){this._getColumns("masonry"),this._reLayout(a)},option:function(a,c){b.isPlainObject(a)&&(this.options=b.extend(!0,this.options,a))},layout:function(a,c){var d,e,f,g,h,i;for(var j=0,k=a.length;j<k;j++){d=b(a[j]),e=Math.ceil(d.outerWidth(!0)/this.columnWidth),e=Math.min(e,this.cols);if(e===1)this._placeBrick(d,this.colYs);else{f=this.cols+1-e,g=[];for(i=0;i<f;i++)h=this.colYs.slice(i,i+e),g[i]=Math.max.apply(Math,h);this._placeBrick(d,g)}}var l={};l.height=Math.max.apply(Math,this.colYs)-this.offset.y,this.options.isFitWidth&&(l.width=this.cols*this.columnWidth-this.options.gutterWidth),this.styleQueue.push({$el:this.element,style:l});var m=this.isLaidOut?this.options.isAnimated?"animate":"css":"css",n=this.options.animationOptions,o;for(j=0,k=this.styleQueue.length;j<k;j++)o=this.styleQueue[j],o.$el[m](o.style,n);this.styleQueue=[],c&&c.call(a),this.isLaidOut=!0},_getColumns:function(){var a=this.options.isFitWidth?this.element.parent():this.element,b=a.width();this.columnWidth=this.options.columnWidth||this.$bricks.outerWidth(!0)||b,this.columnWidth+=this.options.gutterWidth,this.cols=Math.floor((b+this.options.gutterWidth)/this.columnWidth),this.cols=Math.max(this.cols,1)},_placeBrick:function(a,b){var c=Math.min.apply(Math,b),d=0;for(var e=0,f=b.length;e<f;e++)if(b[e]===c){d=e;break}var g={top:c};g[this.horizontalDirection]=this.columnWidth*d+this.offset.x,this.styleQueue.push({$el:a,style:g});var h=c+a.outerHeight(!0),i=this.cols+1-f;for(e=0;e<i;e++)this.colYs[d+e]=h},resize:function(){var a=this.cols;this._getColumns("masonry"),this.cols!==a&&this._reLayout()},_reLayout:function(a){var b=this.cols;this.colYs=[];while(b--)this.colYs.push(this.offset.y);this.layout(this.$bricks,a)},reloadItems:function(){this.$bricks=this._getBricks(this.element.children())},reload:function(a){this.reloadItems(),this._init(a)},appended:function(a,b,c){if(b){this._filterFindBricks(a).css({top:this.element.height()});var d=this;setTimeout(function(){d._appended(a,c)},1)}else this._appended(a,c)},_appended:function(a,b){var c=this._getBricks(a);this.$bricks=this.$bricks.add(c),this.layout(c,b)},remove:function(a){this.$bricks=this.$bricks.not(a),a.remove()},destroy:function(){this.$bricks.removeClass("masonry-brick").each(function(){this.style.position=null,this.style.top=null,this.style.left=null});var c=this.element[0].style;for(var d=0,e=f.length;d<e;d++){var g=f[d];c[g]=this.originalStyle[g]}this.element.unbind(".masonry").removeClass("masonry").removeData("masonry"),b(a).unbind(".masonry")}},b.fn.imagesLoaded=function(a){var b=this.find("img"),d=b.length,e="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",f=this;if(!d){a.call(this);return this}b.bind("load",function(){--d<=0&&this.src!==e&&a.call(f)}).each(function(){if(this.complete||this.complete===c){var a=this.src;this.src=e,this.src=a}});return this},b.fn.masonry=function(a){if(typeof a=="string"){var c=Array.prototype.slice.call(arguments,1);this.each(function(){var d=b.data(this,"masonry");if(!d)return b.error("cannot call methods on masonry prior to initialization; attempted to call method '"+a+"'");if(!b.isFunction(d[a])||a.charAt(0)==="_")return b.error("no such method '"+a+"' for masonry instance");d[a].apply(d,c)})}else this.each(function(){var c=b.data(this,"masonry");c?(c.option(a||{}),c._init()):b.data(this,"masonry",new b.Mason(a,this))});return this}})(window,jQuery);
;
jQuery(document).ready(function($) {
/*
 * UTILITY FUNCTIONS
 * 
 * If you wrote a really cool UNIVERSALLY APPLICABLE function, put it here
 * 
 * */

	// Class to handle text input focus/blur effect 
		var applyTxtFocusBlur =
		{
			focus : function(e) {
				var self = $(this);
				self.val('');
			},
			blur : function(e) {
				var self = $(this);
				if (self.val()=='') { self.val( self.attr('rel') ); }
			},
			init : function(e) {
				e.attr('rel', e.val());
				e.focus(this.focus);
				e.blur(this.blur);
			}
		};
		
		
		var applyGrayscale = 
		{
			oImg : null,
			grayscaleImageIE : function()
		    {
				this.oImg.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayScale=1)';
		    },
		    grayscaleImage : function()
		    {
		        var canvas			= document.createElement('canvas');
		        var canvasContext	= canvas.getContext('2d');
		        var imgW			= this.oImg.width;
		        var imgH			= this.oImg.height;
			        canvas.width	= imgW;
			        canvas.height	= imgH;
			        
		        canvasContext.drawImage(this.oImg, 0, 0);
		        var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
		        
		        for (var y = 0; y < imgPixels.height; y++){
		            for (var x = 0; x < imgPixels.width; x++){
		                var i = (y * 4) * imgPixels.width + x * 4;
		                var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
		                imgPixels.data[i] = avg; 
		                imgPixels.data[i + 1] = avg; 
		                imgPixels.data[i + 2] = avg;
		            }
		        }
		        
		        canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
		        return canvas.toDataURL();
		    },
			init : function(imgObj)
			{
		    	this.oImg = imgObj[0];
		    	
	            if ($.browser.msie) {
	                this.grayscaleImageIE();
	            } else {
	            	this.oImg.src = this.grayscaleImage();
	            }
			}
		};		
		
		
		var applyCarousel = 
		{
			carousel_getCurrentNav : function(carousel, ix)
			{
				var total	= carousel.options.custom_nav.length;
				var current	= (ix % total);
				
				if (current==0)	{ current = total; }
				if (current<0)	{ current = total+current; }
				
				return carousel.options.custom_nav.parents('ul').find('a[rel="'+current+'"]');		
			},
			carousel_getFadeClass : function(str)
			{
				var classes = str.split(' ');
				var c = null;
				$.each(classes, function(ix) {
					if (classes[ix].substr(0, 5)=='fade-') {
						c = classes[ix];
					}
				});
				return c;
			},
			carousel_setFadeClass : function(carousel, item, targetElement)
			{
				if (!applyCarousel.allFadeClasses) {
					var fc = new Array();
					carousel.container.find('.wrapper').each(function(ix) {
						var c = applyCarousel.carousel_getFadeClass( $(this).attr('class') );
						if (c) { fc.push(c); }
					});
					
					applyCarousel.allFadeClasses = fc;
				}
				
				if (applyCarousel.allFadeClasses.length) {
					var targetClassName = applyCarousel.carousel_getFadeClass( $(item).find('.wrapper').attr('class') );
					
					if (applyCarousel.firstRun) {
						targetElement.fadeTo('normal', .7, function() {
							targetElement.removeClass( applyCarousel.allFadeClasses.join(' ') );
							targetElement.addClass(targetClassName);
							targetElement.fadeTo('normal', 1);
						});
					}
					else {
						targetElement.addClass(targetClassName);
					}
				}
				
				applyCarousel.firstRun = true;
			},
			carousel_initCallback : function(carousel)
			{
				var clickDefault = function(evt) {
					evt.preventDefault();
					carousel.startAuto(0); // Disable autoscrolling
				};
				
				// User clicked nav item; scroll to corresponding slide
				carousel.options.custom_nav.bind('click', function(evt) {
					clickDefault(evt);
					carousel.scroll( $.jcarousel.intval($(this).attr('rel')) );
				});
				// User clicked next button
				carousel.options.custom_next.bind('click', function(evt) {
					clickDefault(evt);
					carousel.next();
				});
				// User clicked prev button
				carousel.options.custom_prev.bind('click', function(evt) {
					clickDefault(evt);
					carousel.prev();
				});
			    // Disable autoscrolling if user mouseovers current clip
			    carousel.clip.hover(
				    function() { carousel.startAuto(0); },
				    function() { carousel.startAuto(0); }
			    );
			},
			carousel_beforeAnimation : function(carousel, item, ix, state)
			{
				// Apply color transitions to header
				applyCarousel.carousel_setFadeClass(carousel, item, $('.header'));
				
				return false;
			},
			carousel_afterAnimation : function(carousel, item, ix, state)
			{
				var self = applyCarousel.carousel_getCurrentNav(carousel, ix);
				
				carousel.options.custom_nav.parents('ul').find('li').removeClass('active');
				self.parent('li').addClass('active');
				
				return false;
			},
			init : function(target, nav, prev, next, interval)
			{
				// Set carousel options
				var opts = {
						buttonNextHTML	: null,
						buttonPrevHTML	: null,
						scroll			: 1,
						auto			: (!interval ? 8 : interval), 
						wrap			: 'circular',
						initCallback	: this.carousel_initCallback,
						itemFirstInCallback: {
							onBeforeAnimation	: this.carousel_beforeAnimation,
							onAfterAnimation	: this.carousel_afterAnimation
						},
						custom_nav		: nav,
						custom_prev		: prev,
						custom_next		: next
					};
					
				// Bind the carousel
				target.jcarousel(opts);
			}
		};
		
		
		var validators = 
		{
			isValidEmail : function(sEmail)
			{
				// Validate against RFC822 spec
				var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
				var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
				var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
				var sQuotedPair = '\\x5c[\\x00-\\x7f]';
				var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
				var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
				var sDomain_ref = sAtom;
				var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
				var sWord = '(' + sAtom + '|' + sQuotedString + ')';
				var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
				var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
				var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
				var sValidEmail = '^' + sAddrSpec + '$'; // as whole string  
				var reValidEmail = new RegExp(sValidEmail);
				
				if (reValidEmail.test(sEmail)) {
					return true;
				}
				
				return false;
			}
		};
		
		
		/*
 * TEMPLATE FUNCTIONS
 * 
 * If you wrote a really cool ELEMENT-SPECIFIC function, OR ANYTHING THAT USES 
 * THE UTILITY STUFF ABOVE, put it here
 * 
 * */
	
	// Apply 2nd-level nav active indicator
		var nav2_active = $('#hd .sub .block-menu-block li.active-trail')
		if (nav2_active.length) {
			nav2_active.append('<div class="active-indicator"></div>');
		}
		
	/* Equal spacing for subnav elements
		var subnavs					= $('.bdWrapper .block-menu-block ul.menu li a');
		var subnavs_exclude			= new Array('front', 'page-node-9', 'node-type-project'); // Body classes where this spacing should not be applied
		var subnavs_exclude_test	= 0;
		
		$.each(subnavs_exclude, function(ix) {
			var test = $('body.'+subnavs_exclude[ix]);
			if (test.length) { subnavs_exclude_test++; }
		});
		
		if (subnavs_exclude_test == 0) {
			subnavs.parent('li').width( (100/subnavs.length)+'%' );
		}
	*/	
	// Remove margin-bottom from last p tag in blocks
		$.each([
		        $('#col-3 .block'),
		        $('#col-0 .block')
		        ],
		        function(ix) {
					$(this).find('p:last').css({ 'margin-bottom':'0' });
				}
			);
			
	// Template text fields to focus/blur default value
		$.each([
		        $('.block-mailchimp input.form-text')	// Footer signup form
		        ],
		        function(ix) { applyTxtFocusBlur.init($(this)); }
			);
		
		// Contact form hackery
					var labels = $('.block-webform form label');
					if (labels.length) {
						labels.each(function(ix) {
							var label		= $(this);
							var input		= label.parent('.form-item').find('input[type="text"]:visible');
							var textarea	= label.parent('.form-item').find('textarea:visible');
							
							if (input.length) {
								if (input.val() == '') {
									input.val(label.text());	
								}
								applyTxtFocusBlur.init(input);
							}
							if (textarea.length) {
								if (textarea.val() == '') {
									textarea.val(label.text());
								}
								applyTxtFocusBlur.init(textarea);
							}
							
						});
					}
					
					// Make sure that we don't submit default label values for this form
					// i.e. Don't break Webform's validation routine
					$('.block-webform form').submit(function() {
						var form		= $(this);
						var inputs		= form.find('input[type="text"]:visible');
						var textareas	= form.find('textarea:visible');
						
						if (inputs.length) {
							inputs.each(function(ix) {
								var self	= $(this);
								var label	= self.parent('.form-item').find('label');
								
								if (self.val() == label.text()) { self.val(''); }
							});
						}
						if (textareas.length) {
							textareas.each(function(ix) {
								var self	= $(this);
								var label	= self.parents('.form-item').find('label');
								
								if (self.val() == label.text()) { self.val(''); }
							});
						}
						
					});
			
	// Validate footer Mailchimp signup form
	//	var frm_email_signup = $('#mailchimp_subscribe_anon_form_7c8bed3e2b');
		var frm_email_signup = $('#mailchimp_subscribe_anon_form_7c8bed3e2b');
		if (frm_email_signup.length)
		{
			var messages	= $('#frm-signup-validation');
			var email 		= frm_email_signup.find('[name$="[EMAIL]"]');
			
			frm_email_signup.find('input[type="submit"]').click(function(evt) {
				if (!validators.isValidEmail(email.val())) {
					messages.show();
					return false;
				}
			});
		}
		
	// Landing page carousel
		var slideWrapper = $('body.node-type-landing .carousel > .slides');
		if (slideWrapper.length)
		{
			applyCarousel.init(
				slideWrapper,
				$('body.node-type-landing .bdWrapper .menu .block-menu-block ul.menu > li > a'),
				$('body.node-type-landing .carousel > a.prev:first'),
				$('body.node-type-landing .carousel > a.next:first'),
				7
			);
		}
		
	// Company page carousels
		var slideWrapper = $('body.node-type-company .carousel');
		if (slideWrapper.length)
		{
			slideWrapper.each(function(ix) {
				var self = $(slideWrapper[ix]);
				
				applyCarousel.init(
						self,
						self.find('ul.menu > li > a'),
						self.find('a.prev:first'),
						self.find('a.next:first'),
						7
					);
			});
		}
		
	// Homepage carousel
		var slideWrapper = $('body.front .carousel > .slides');
		if (slideWrapper.length)
		{
			applyCarousel.init(
				slideWrapper,
				$('body.front .bdWrapper .menu .block-menu-block ul.menu > li > a'),
				$('body.front .carousel > a.prev:first'),
				$('body.front .carousel > a.next:first'),
				7
			);
		}
		
	// Homepage project img hover
		$('body.front .projects .grid-4 a').hover(
			function() {
				var self 	= $(this).parents('.grid-4').find('.hover a');
				var img		= self.find('img');
				var over	= img.attr('src');
				
				self.css({'background' : 'url('+over+') no-repeat 50% -150px'}); 
				img.fadeTo('normal', 0);
			},
			function() {
				$(this).parents('.grid-4').find('.hover a img').fadeTo('normal', 1).show();
			}
		);
		
	// Animate TOC links. jQuery SmoothScroll v.11-03-14		
		$('a[href*=#]').click(function(evt) {
			
			var duration	= 1000; // duration in ms
			var easing		= 'swing'; // easing values: swing | linear
			var newHash		= this.hash;
			var target		= $('a[name='+this.hash.slice(1)+']');
			
			if (target.length)
			{
				evt.preventDefault();
				
				target = target.offset().top;
				
				var oldLocation	= window.location.href.replace(window.location.hash, '');
				var newLocation	= this;
				
				// make sure it's the same location
				if(oldLocation+newHash==newLocation) {
					// set selector
					if($.browser.safari) {
						var animationSelector='body:not(:animated)';
					}
					else {
						var animationSelector='html:not(:animated)';
					}
					
					// animate to target and set the hash to the window.location after the animation
					$(animationSelector).animate({ scrollTop: target }, duration, easing, function() {
						// add new hash to the browser location
						window.location.href=newLocation;
					});
				}
				
				return false;
			}
		});
		
	// Autoscroll to .messages.error
		var msg_err = $('.messages.error');
		if (msg_err.length) {
			
			var target = msg_err.offset().top;
			// set selector
			if($.browser.safari) {
				var animationSelector='body:not(:animated)';
			}
			else {
				var animationSelector='html:not(:animated)';
			}
			
			// animate to target and set the hash to the window.location after the animation
			$(animationSelector).animate({ scrollTop: target }, 1000, 'swing', function() {
				
			});		
		}
		
	// Portfolio masonry stuffs
		var container = $('.portfolio');
		container.imagesLoaded(function(){
			container.masonry({
				itemSelector : '.portfolio li',
				columnWidth : 240
			});
		});
		
	// Portfolio project img hover + blend animation
		/*
		if (container.length)
		{
			var images	= container.find('img');
		    var aColor	= new Array();
		    
			images.each(function(ix) {
				var self = $(this);
				aColor.push( self[0].src );
				applyGrayscale.init(self);
			});
			
			function fader1() {
				var self	= $(this);
				var bubble	= self.find('.bubble');
				
				self.css({'background' : 'url('+aColor[self.attr('rel')]+') no-repeat 0 0'}); 
				self.find('img').fadeTo('normal', 0);
				if (bubble.length) { bubble.fadeTo('normal', 1); }
			}
			function fader2() {
				var self	= $(this);
				var bubble	= self.find('.bubble');
				
				self.find('img').fadeTo('normal', 1);
				if (bubble.length) { bubble.fadeTo('normal', 0); }
			}
			
			var links = images.parent('a');
			links.each(function(ix) { $(this).attr('rel', ix); });
			links.hover(fader1, fader2);
			
			// Randomly light up images
			function animatePortfolio()
			{
				images.fadeTo('normal', 1); // Reset all images
				
				var max = Math.round((images.length/3));
				for (var i=0; i < max; i++) {
					var rand	= Math.floor(Math.random() * images.length);
					var link	= container.find('a[rel="'+rand+'"]');
					
					link.css({'background' : 'url('+aColor[rand]+') no-repeat 0 0'});
					link.find('img').fadeTo('normal', 0);
				}
				
				var animationHandler = setTimeout(animatePortfolio, 4000);
			}
			
			//animatePortfolio();
			
		}
	    */
		

});

	;

