// Underscore.js 1.1.7
// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the MIT license.
// Portions of Underscore are inspired or borrowed from Prototype,
// Oliver Steele's Functional, and John Resig's Micro-Templating.
// For all details and documentation:
// http://documentcloud.github.com/underscore
(function(){var p=this,C=p._,m={},i=Array.prototype,n=Object.prototype,f=i.slice,D=i.unshift,E=n.toString,l=n.hasOwnProperty,s=i.forEach,t=i.map,u=i.reduce,v=i.reduceRight,w=i.filter,x=i.every,y=i.some,o=i.indexOf,z=i.lastIndexOf;n=Array.isArray;var F=Object.keys,q=Function.prototype.bind,b=function(a){return new j(a)};typeof module!=="undefined"&&module.exports?(module.exports=b,b._=b):p._=b;b.VERSION="1.1.7";var h=b.each=b.forEach=function(a,c,b){if(a!=null)if(s&&a.forEach===s)a.forEach(c,b);else if(a.length===
+a.length)for(var e=0,k=a.length;e<k;e++){if(e in a&&c.call(b,a[e],e,a)===m)break}else for(e in a)if(l.call(a,e)&&c.call(b,a[e],e,a)===m)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(t&&a.map===t)return a.map(c,b);h(a,function(a,g,G){e[e.length]=c.call(b,a,g,G)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var k=d!==void 0;a==null&&(a=[]);if(u&&a.reduce===u)return e&&(c=b.bind(c,e)),k?a.reduce(c,d):a.reduce(c);h(a,function(a,b,f){k?d=c.call(e,d,a,b,f):(d=a,k=!0)});if(!k)throw new TypeError("Reduce of empty array with no initial value");
return d};b.reduceRight=b.foldr=function(a,c,d,e){a==null&&(a=[]);if(v&&a.reduceRight===v)return e&&(c=b.bind(c,e)),d!==void 0?a.reduceRight(c,d):a.reduceRight(c);a=(b.isArray(a)?a.slice():b.toArray(a)).reverse();return b.reduce(a,c,d,e)};b.find=b.detect=function(a,c,b){var e;A(a,function(a,g,f){if(c.call(b,a,g,f))return e=a,!0});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.filter===w)return a.filter(c,b);h(a,function(a,g,f){c.call(b,a,g,f)&&(e[e.length]=a)});return e};
b.reject=function(a,c,b){var e=[];if(a==null)return e;h(a,function(a,g,f){c.call(b,a,g,f)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=!0;if(a==null)return e;if(x&&a.every===x)return a.every(c,b);h(a,function(a,g,f){if(!(e=e&&c.call(b,a,g,f)))return m});return e};var A=b.some=b.any=function(a,c,d){c=c||b.identity;var e=!1;if(a==null)return e;if(y&&a.some===y)return a.some(c,d);h(a,function(a,b,f){if(e|=c.call(d,a,b,f))return m});return!!e};b.include=b.contains=function(a,c){var b=
!1;if(a==null)return b;if(o&&a.indexOf===o)return a.indexOf(c)!=-1;A(a,function(a){if(b=a===c)return!0});return b};b.invoke=function(a,c){var d=f.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,
c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):a;b<e.computed&&(e={value:a,computed:b})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,f){return{value:a,criteria:c.call(d,a,b,f)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,b){var d={};h(a,function(a,f){var g=b(a,f);(d[g]||(d[g]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||
(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return f.call(a);if(b.isArguments(a))return f.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?f.call(a,0,b):a[0]};b.rest=b.tail=function(a,b,d){return f.call(a,b==null||d?1:b)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.filter(a,
function(a){return!!a})};b.flatten=function(a){return b.reduce(a,function(a,d){if(b.isArray(d))return a.concat(b.flatten(d));a[a.length]=d;return a},[])};b.without=function(a){return b.difference(a,f.call(arguments,1))};b.uniq=b.unique=function(a,c){return b.reduce(a,function(a,e,f){if(0==f||(c===!0?b.last(a)!=e:!b.include(a,e)))a[a.length]=e;return a},[])};b.union=function(){return b.uniq(b.flatten(arguments))};b.intersection=b.intersect=function(a){var c=f.call(arguments,1);return b.filter(b.uniq(a),
function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=f.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(o&&a.indexOf===o)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,
b){if(a==null)return-1;if(z&&a.lastIndexOf===z)return a.lastIndexOf(b);for(var d=a.length;d--;)if(a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);d=arguments[2]||1;for(var e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};b.bind=function(a,b){if(a.bind===q&&q)return q.apply(a,f.call(arguments,1));var d=f.call(arguments,2);return function(){return a.apply(b,d.concat(f.call(arguments)))}};b.bindAll=function(a){var c=f.call(arguments,1);
c.length==0&&(c=b.functions(a));h(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return l.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=f.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(f.call(arguments,1)))};var B=function(a,b,d){var e;return function(){var f=this,g=arguments,h=function(){e=null;
a.apply(f,g)};d&&clearTimeout(e);if(d||!e)e=setTimeout(h,b)}};b.throttle=function(a,b){return B(a,b,!1)};b.debounce=function(a,b){return B(a,b,!0)};b.once=function(a){var b=!1,d;return function(){if(b)return d;b=!0;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(f.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=f.call(arguments);return function(){for(var b=f.call(arguments),d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}};b.keys=F||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)l.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){h(f.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){h(f.call(arguments,
1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,c){if(a===c)return!0;var d=typeof a;if(d!=typeof c)return!1;if(a==c)return!0;if(!a&&c||a&&!c)return!1;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual)return a.isEqual(c);if(c.isEqual)return c.isEqual(a);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return!1;
if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return!1;if(a.length&&a.length!==c.length)return!1;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return!1;for(var f in a)if(!(f in c)||!b.isEqual(a[f],c[f]))return!1;return!0};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(l.call(a,c))return!1;return!0};b.isElement=function(a){return!!(a&&a.nodeType==
1)};b.isArray=n||function(a){return E.call(a)==="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return!(!a||!l.call(a,"callee"))};b.isFunction=function(a){return!(!a||!a.constructor||!a.call||!a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===!0||a===!1};b.isDate=function(a){return!(!a||!a.getTimezoneOffset||
!a.setUTCFullYear)};b.isRegExp=function(a){return!(!a||!a.test||!a.exec||!(a.ignoreCase||a.ignoreCase===!1))};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){p._=C;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.mixin=function(a){h(b.functions(a),function(c){H(c,b[c]=a[c])})};var I=0;b.uniqueId=function(a){var b=I++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g};
b.template=function(a,c){var d=b.templateSettings;d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');";d=new Function("obj",d);return c?d(c):d};
var j=function(a){this._wrapped=a};b.prototype=j.prototype;var r=function(a,c){return c?b(a).chain():a},H=function(a,c){j.prototype[a]=function(){var a=f.call(arguments);D.call(a,this._wrapped);return r(c.apply(b,a),this._chain)}};b.mixin(b);h(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=i[a];j.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});h(["concat","join","slice"],function(a){var b=i[a];j.prototype[a]=function(){return r(b.apply(this._wrapped,
arguments),this._chain)}});j.prototype.chain=function(){this._chain=!0;return this};j.prototype.value=function(){return this._wrapped}})();

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);


/*
 * jQuery.SerialScroll - Animated scrolling of series
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 06/14/2009
 * @author Ariel Flesler
 * @version 1.2.2
 * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
 */
;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery);


/**
 * jQuery.LocalScroll - Animated scrolling navigation, using anchors.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 3/11/2009
 * @author Ariel Flesler
 * @version 1.2.7
 **/
;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);


// W.js Gallery
// W.js
(function(){var b=this;var a=new Object();var c={};if(typeof module!=="undefined"&&module.exports){module.exports=a;b.W=a}else{b.W=a}a.VERSION="0.0.1";a.aloop=function(j,h,k){var g=0;var f=false;var e={next:function(){if(f){return}if(g<j){g++;h(g-1,e)}else{f=true;k()}},"break":function(){f=true;k()}};e.next();return e};a.bind=function d(f,e){return function(){e.apply(f,arguments)}};a.text={};a.text.addCommas=function(g){g=""+g;if(g.length>3){var f=g.length%3;var e=(f>0?(g.substring(0,f)):"");for(i=0;i<Math.floor(g.length/3);i++){if((f==0)&&(i==0)){e+=g.substring(f+3*i,f+3*i+3)}else{e+=","+g.substring(f+3*i,f+3*i+3)}}return(e)}else{return g}};a.text.contains=function(e,f){return(e.indexOf(f)!=-1)};a.text.trim=function(e){return(e.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,""))};a.text.startsWith=function(e,f){return(f.match("^"+f)==f)};a.text.endsWith=function(e,f){return(e.match(f+"$")==f)};a.text.enableStringPrototype=function(){};a.console={};a.console.log=function(){if(arguments.length>0){var f=(arguments.length>1)?Array.prototype.join.call(arguments," "):arguments[0];try{console.log(f);return true}catch(g){try{opera.postError(f);return true}catch(g){}}return false}};a.log=a.console.log;a.l=a.log;a.console.warn=function(){if(arguments.length>0){var f=(arguments.length>1)?Array.prototype.join.call(arguments," "):arguments[0];try{console.warn(f);return true}catch(g){}return false}};a.warn=a.console.warn;a.w=a.warn;a.stub=function(){if(arguments.length>0){var f=(arguments.length>1)?Array.prototype.join.call(arguments," "):arguments[0];try{a.warn("@stub: "+f);return true}catch(g){}return false}}})();
// W.event.js
(function(a){a.event={};a.event.Dispatcher=function(){this.events=[]};a.event.Dispatcher.prototype.addEventlistener=function(b,c){this.events[b]=this.events[b]||[];if(this.events[b]){this.events[b].push(c)}};a.event.Dispatcher.prototype.removeEventlistener=function(d,e){if(this.events[d]){var c=this.events[d];for(var b=c.length-1;b>=0;--b){if(c[b]===e){c.splice(b,1);return true}}}return false};a.event.Dispatcher.prototype.dispatch=function(e,c){if(this.events[e]){var d=this.events[e],b=d.length;while(b--){d[b](this,c)}}}})(W);
// W.gallery.js (minifier return errors???)
( function (W) {
  W.gallery = {};
  W.gallery.Gallery = function ($view, settings) {
    var self = this;
    this.settings = settings || new W.gallery.Settings();
    this.$view = $view || null;
    this.juggler = new W.gallery.Juggler(this, this.settings.startsPlaying);
    this.controller = new W.gallery.Controller(this);
    this.exhibition = null;
    this.EXHIBIT_DID_CHANGE = "exhibit changed";
    this.EXHIBIT_WILL_CHANGE = "exhibit will change";
    this.STATE_DID_CHANGE = "state did change";
    this.events = new W.event.Dispatcher();
    // to do
    // setView();
    // getView();
    // getSettings();
    this.addExhibition = function ( exhibition ) {
      if ( self.exhibition === exhibition ) return;
      self.exhibition = exhibition;
      self.controller.clearQueue();
      self.controller.next();
      if ( self.settings.startsPlaying) {
        self.juggler.start();
      }
      exhibition.events.dispatch(exhibition.EXHIBITION_ADDED_TO_GALLERY);
    };
    this.getStatus = function () {
      var status = {
        totalExhibits     : self.exhibition.length,
        currentExhibitIndex : self.exhibition.currentExhibit,
        isPlaying     : self.juggler.isPlaying,
        loops       : self.settings.loops
      };
      return status;
    };
    this.setSettings = function ( newSettings ) {
       if (newSettings == undefined) return;
       for (var i in newSettings) {
              if(newSettings[i] != undefined && isNaN(newSettings[i]) == false) { // error check
                  self.settings[i] = newSettings[i];
                } else {
                  W.w("slideshow", "invalid setting for:", i);
                }
            };
    };
  };
  W.gallery.Juggler = function ( gallery, startsPlaying ) {
    var self = this;
    this.intervalID = undefined;
    this.gallery = gallery;
    this.isPlaying = false;
    this.currentExhibit = null;
    this._nextExhibit = null;
    this.events = new W.event.Dispatcher();
    this.JUGGLER_DID_FINISH = 'juggler did finish';
    this.transitionTo = function (toExhibit) {
      self.gallery.events.dispatch(self.gallery.EXHIBIT_WILL_CHANGE);
      toExhibit.events.dispatch( toExhibit.EXHIBIT_WILL_APPEAR );
            this._nextExhibit = toExhibit;
            this.gallery.$view.append(this._nextExhibit.view);
            this._nextExhibit.view.fadeOut(0);
            this._nextExhibit.view.fadeIn(this.gallery.settings.transition_time, W.bind(this, this._transitionDidFinish));
    };
    this._transitionDidFinish = function () {
      if (!!self.currentExhibit) {
        self.currentExhibit = self._nextExhibit;
        self.currentExhibit.events.dispatch(self.currentExhibit.EXHIBIT_DID_APPEAR);
        self._nextExhibit = undefined;
      }
      self.events.dispatch(self.JUGGLER_DID_FINISH);
      self.gallery.events.dispatch(self.gallery.EXHIBIT_DID_CHANGE);
    };
    this.start = function () {
      self.isPlaying = true;
      self.intervalID = setInterval( self.next, self.gallery.settings.display_time + self.gallery.settings.transition_time );
      self.gallery.events.dispatch(self.gallery.STATE_DID_CHANGE);
    };
    this.next = function () {
      var nextExhibit = self.gallery.exhibition.getNextExhibit();
      if ( !nextExhibit && self.gallery.settings.loops && self.gallery.exhibition.length > 1 ) {
        nextExhibit = self.gallery.exhibition.getFirstExhibit();
      }
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
      }  else {
        self.stop();
      }
    };
    this.stop = function () {
      self.isPlaying = false;
      clearInterval( self.intervalID );
      self.gallery.events.dispatch(self.gallery.STATE_DID_CHANGE);
    };
  };
  W.gallery.Controller = function (gallery) {
    var self = this;
    this._queue = [];
    this._ready = true;
    this.gallery = gallery;
    this.play = function () {
      if (!!self.gallery.juggler.isPlaying) return;
      self.gallery.juggler.start();
      return this;
    };
    this.goto = function ( index ) {
      if ( !self._readyOrQueue( self.goto ) ) return this;
      var nextExhibit = self.gallery.exhibition.getExhibit( index );
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
        self.gallery.juggler.events.addEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted  );
      } else {
        this._actionCompleted();
      }
      return this;
    };
    this.last = function () {
      if ( !self._readyOrQueue( self.last ))  return this;
      self.gallery.juggler.stop();
      var nextExhibit = self.gallery.exhibition.getLastExhibit();
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
        self.gallery.juggler.events.addEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted  );
      } else {
        this._actionCompleted();
      }
      return this;
    };
    this.first = function () {
      if ( !self._readyOrQueue( self.first )) return this;
      self.gallery.juggler.stop();
      var nextExhibit = self.gallery.exhibition.getFirstExhibit();
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
        self.gallery.juggler.events.addEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted  );
      } else {
        this._actionCompleted();
      }
      return this;
    };
    this.next = function () {
      if ( !self._readyOrQueue( self.next )) return this;
      self.gallery.juggler.stop();
      var nextExhibit = self.gallery.exhibition.getNextExhibit();
      if ( !nextExhibit && self.gallery.settings.loops && self.gallery.exhibition.length > 1 ) {
        nextExhibit = self.gallery.exhibition.getFirstExhibit();
      }
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
        self.gallery.juggler.events.addEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted  );
      } else {
        this._actionCompleted();
      }
      return this;
    };
    this.previous = function () {
      if ( !self._readyOrQueue( self.previous )) return this;
      self.gallery.juggler.stop();
      var nextExhibit = self.gallery.exhibition.getPreviousExhibit();
      if ( !nextExhibit && gallery.settings.loops && self.gallery.exhibition.length > 1 ) {
        nextExhibit = self.gallery.exhibition.getLastExhibit();
      }
      if ( nextExhibit ) {
        self.gallery.juggler.transitionTo( nextExhibit ); // class back
        self.gallery.juggler.events.addEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted  );
      } else {
        this._actionCompleted();
      }
      return this;
    };
    this.stop = function () {
      if (!self.gallery.juggler.isPlaying) return this;
      self.gallery.juggler.stop();
      return this;
    };
    this.clearQueue = function () {
      self._queue = [];
    };
    this._actionCompleted = function () {
      self.gallery.juggler.events.removeEventlistener( self.gallery.juggler.JUGGLER_DID_FINISH, self._actionCompleted );
      if ( self._queue.length === 0 ) {
        self._ready = true;
      } else {
        var nextFn = this._queue.shift();
        nextFn();
      }
    };
    this._readyOrQueue = function ( action ) {
      if ( !!this._ready ) {
        return true;
      } else {
        self._queue = action;
        return false;
      }
    };
  };
  W.gallery.Settings = function (args) {
    var self = this;
    args = args || {};
    this.display_time = args["display_time"] || 2000;
    this.loops = args['loops'] || true;
    this.transition_time = args['transition_time_in'] || 1000;
    this.startsPlaying = args['startsPlaying'] || true;
  };
  W.gallery.Exhibition = function () {
    var self = this;
    this._exhibits = [];
    this.currentExhibit = -1;
    this.length = 0;
    this.events = new W.event.Dispatcher();
    this.EXHIBITION_ADDED_TO_GALLERY = "exhibition added to gallery";
    this.addExhibit = function ( exhibit ) {
      self._exhibits.push(exhibit);
      self.length = self._exhibits.length;
    };
    this.getNextExhibit = function () {
      if ( self.currentExhibit + 1 >= self._exhibits.length )  return false;
      self.currentExhibit++;
      return self._exhibits[ self.currentExhibit ];
    };
    this.getPreviousExhibit = function () {
      if ( self.currentExhibit === 0 ) return false;
      self.currentExhibit--;
      return self._exhibits[ self.currentExhibit ];
    };
    this.getLastExhibit = function () {
      if ( self.currentExhibit === self._exhibits.length - 1) return false;
      self.currentExhibit = self._exhibits.length - 1;
      return self._exhibits[ self.currentExhibit ];
    };
    this.getFirstExhibit = function () {
      if ( self.currentExhibit === 0) return false;
      self.currentExhibit = 0;
      return self._exhibits[ self.currentExhibit ];
    };
    this.getExhibit = function ( index ) {
      if ( self.length == 0 || self.currentExhibit == index) return false;
      self.currentExhibit = index;
      return self._exhibits[ self.currentExhibit ];
    };
  };
  W.gallery.Exhibit = function ( view, shouldApplyDefaultCSS ) {
    var self = this;
    this.view = view || null;
    if ( !(view instanceof jQuery && this.view != null) ) {
      this.view = $(this.view);
    }
    this.events = new W.event.Dispatcher();
    this.EXHIBIT_WILL_APPEAR = "exhibit will appear";
    this.EXHIBIT_DID_APPEAR = "exhibit did appear";
    this.shouldApplyDefaultCSS = shouldApplyDefaultCSS || false;
    this.applyDefaultCSS = function () {
      self.view.css({
                'position' : 'absolute',
                'top' : 0,
                'left' : 0
            });
    };
    if (shouldApplyDefaultCSS) {
      this.applyDefaultCSS();
    }
  };
  W.gallery.Status = function (args) {
    var self = this;
  };
})(W);


// plugins.js
window.log=function(){log.history=log.history||[];log.history.push(arguments);if(this.console){arguments.callee=arguments.callee.caller;var a=[].slice.call(arguments);(typeof console.log==="object"?log.apply.call(console.log,console,a):console.log.apply(console,a))}};(function(e){function h(){}for(var g="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),f;f=g.pop();){e[f]=e[f]||h}})((function(){try{console.log();return window.console}catch(a){return window.console={}}})());

// script.js

if(typeof console==="undefined"||typeof console.log==="undefined"){var console={log:function(){}}}$(document).ready(function(){
	if (self != top){top.location = self.location;}
	var h=$("body").attr("id");$("header nav h1").click(function(){window.location="/"});$('a[href^="mailto:"]').each(function(x,y){var w=y.href.replace(/mailto:(.*)-atatat-(.*)/,"$2@$1");$(this).attr("href","mailto:"+w).text(w)});var u=$("header").outerHeight();var j=function(y,x,w){if(navigator.userAgent.indexOf("iPhone")>-1){$(y).append($('<div class="image-controls"><span class="controls next-image">Next Image</span><span class="controls next-project">Next Project</span><span class="controls project-info">Info</span></div>'))}else{$(y).append($('<div class="image-controls"><span class="controls next-image">Next Image</span><span class="controls next-project">Next Project</span><span class="controls project-info">Info</span></div>'))}if(x.length>1){$(".next-image",y).bind("click",_.bind(function(){w.controller.next()},this))}else{$(".next-image",y).css({opacity:0})}};var a=[];$(".project").each(_.bind(function(z,A){var x=$(".image-wrap-container",A)[0];var w=new W.gallery.Gallery($(x));w.setSettings({transition_time:200});var y=new W.gallery.Exhibition();$(".image-wrap",A).each(_.bind(function(D,C){var B=new W.gallery.Exhibit($(C),false);B.events.addEventlistener(B.EXHIBIT_WILL_APPEAR,_.bind(function(){$("img",this.view).removeClass("hidden")},B));y.addExhibit(B)},this));w.addExhibition(y);a.push(w);w.controller.stop();j($(".image",A)[0],y,w)},this));var n=function(x,z){var w=this;z=(z)?z:{};this.$element=(!!x)?x:$();this.children=(!!z.children)?z.children:[];this.parent=(!!z.parent)?z.parent:null;this.siblings=(!!z.siblings)?z.siblings:[];this.alone=(z.alone!==undefined)?z.alone:true;this.scroll_hides=(z.scroll_hides!==undefined)?z.scroll_hides:true;this.keep_parent=(z.keep_parent!==undefined)?z.keep_parent:false;this.visible=(z.visible!==undefined)?z.visible:false;this.name=(z.name!==undefined)?z.name:false;this.show=function(C){w.$element.fadeIn(function(){w.visible=true});if(w.children.length>0){for(var B=0;B<w.children.length;B=B+1){if(!w===w.children[B]){w.children[B].show()}}}};this.hide=function(C){w.$element.fadeOut(function(){w.visible=false});if(w.children.length>0){for(var B=0;B<w.children.length;B++){if(!w===w.children[B]){w.children[B].hide()}}}};this.toggle=function(C){if(!!w.alone){(w.visible===false)?w.show():w.hide();for(var B=0;B<w.siblings.length;B=B+1){w.siblings[B].hide()}}else{(w.visible===false)?w.show():w.hide()}};var y=function(){for(var C=0;C<w.children.length;C=C+1){var B=w.children.slice(0);B.splice(C,1);w.children[C].siblings=B}};this.addChildren=function(B){if(B!==null&&B instanceof n){B=[B]}for(var C=0;C<B.length;C=C+1){w.children.push(B[C]);w.children=_.uniq(w.children);w.children[w.children.length-1].parent=w}y()};var A=function(){(!!w.visible)?w.toggle():false;w.$element.click(function(B){B.stopPropagation()})};A()};var l=new n(null,{name:"root"});var b=new n($("#clients"),{name:"clients",scroll_hides:false});var p=new n($("#contact"),{name:"contact",scroll_hides:false});var e=new n($("#about"),{name:"about",scroll_hides:false});l.addChildren([b,p,e]);$("#clients-button").click(function(w){b.toggle();w.preventDefault()});$("#contact-button").click(function(w){p.toggle();w.preventDefault()});$("#about-button").click(function(w){e.toggle();w.preventDefault()});var o=$(".project");o.each(function(w,z){var y=(!navigator.userAgent.match(/iPhone/i));var x=new n($(".overlay",z),{name:"project"+w,scroll_hides:y});l.addChildren(x);$(".project-info",z).bind({click:function(A){x.toggle()}})});$(window).bind({scroll:_.debounce(function(){for(var x=0;x<l.children.length;x=x+1){if(l.children[x].scroll_hides&&l.children[x].visible){var w=(window.innerHeight)?window.innerHeight:$(window).height();var A=(window.innerWidth)?window.innerWidth:$(window).width();var z=l.children[x].$element.outerHeight();var y=l.children[x].$element.find(".description").outerWidth();if(z>=w||y>=A){return}else{l.children[x].hide()}}}},50),keyup:function(x){for(var w=0;w<l.children.length;w=w+1){if(l.children[w].visible&&x.keyCode===27){l.children[w].hide()}}}});$("#container").bind({click:function(x){for(var w=0;w<l.children.length;w=w+1){if(l.children[w].visible){l.children[w].hide()}}}});$("a",".image").click(function(x){for(var w=0;w<l.children.length;w=w+1){if(l.children[w].visible){x.preventDefault()}}});var g=function(G,y){var E=(G)?G.find("li"):null;var x=(E)?E.length:0;var w=(y)?y:10;var z=((x%w)>0)?Math.floor(x/w)+1:x/w;for(var A=0;A<z;A=A+1){var D=(A*w);var F=(A===(z-1))?x-1:((A+1)*w)-1;G.append("<li><ul>");for(var B=D;B<=F;B=B+1){var C=$(E[B]);$("ul:last",G).append(E[B])}}};g($("ul",".clients"),clientListLength);var q=40;var d=30;var t=15;var k=($(".image-controls"))?$(".image-controls").outerHeight()*1.5:100;var s=function(A){var z=t*2;var C=u+k;var x=(window.innerWidth)?(window.innerWidth-z):($(window).width()-z);var y=(window.innerHeight)?(window.innerHeight-C):($(window).height()-C);var w=$(".image");var B=Math.min((y/d),(x/q));if(B>=1){$(".image-wrap",w).each(function(){var F=$("img",this);var D=F.length;var E=(D===2)?t:0;if(D===2){$(F[0]).css("margin-right",E)}F.css("width",((q-E)/D)*B);F.css("height",d*B)});w.css("height",y+C);$(".image-wrap",w).css("height",d*B);$(".image-wrap",w).css("width",q*B);$(".image-wrap-container",w).css("height",d*B);$(".image-wrap-container",w).css("width",q*B)}return B};s();$(window).bind({resize:s});window.onorientationchange=function(){s()};var i=null;var v=0;var f=function(){var y=$(this);var w=(window.innerHeight)?window.innerHeight:$(window).height();var x=$(window).scrollTop();$(".image").each(function(A){var C=$(this);var D=C.offset().top;var B=D-x;var z=C.height();if(B<(w*0.65)&&B>=(w*0.35)*-1){i=C;v=A}})};if(h==="home"){f();window.originalHeight=$(window).height();window.originalWidth=$(window).width();$(window).bind({scroll:f,resize:_.debounce(function(){f();var w=i.offset().top-u;if($(window).height()!==window.originalHeight||$(window).width()!==window.originalWidth){window.originalHeight=$(window).height();window.originalWidth=$(window).width();$(this).scrollTo(w,100)}},100)})}if(h==="home"){$(window).scroll(function(){$("#container").trigger("notify",[v])});$(document).serialScroll({items:".project",next:".next-project",axis:"y",duration:200,offset:-u,onBefore:function(y,x,w,A,z){y.preventDefault();if(this.blur){this.blur()}},onAfter:function(w){}})}if(h!=="home"){$("ul","#client-header-inner > nav").localScroll({offset:-120,hash:true,duration:200});$("#client-header").fadeIn(function(){$("#clientprojects").fadeIn(function(){$("footer").fadeIn()})})}var r=$("#clients").height();var c=$("#clients").outerHeight();var m=function(){if(!navigator.userAgent.match(/iPhone/i)){if(c>=window.innerHeight){$("#clients").css({"overflow-y":"scroll","-webkit-overflow-scrolling":"touch"});$("#clients").animate({height:window.innerHeight-185},500);return}if(c<=window.innerHeight){$("#clients").animate({height:r},500);$("#clients").css({"overflow-y":"initial","-webkit-overflow-scrolling":"none"});return}}};m();if(!navigator.userAgent.match(/iPad/i)){$(window).bind({resize:_.debounce(function(){m()},100)})}if(navigator.userAgent.match(/iPad/i)){window.onorientationchange=_.debounce(function(){m()},100)}});
