function isIOS(){
	return (
		//Detect iPhone
		(navigator.platform.indexOf("iPhone") != -1) ||
		//Detect iPod
		(navigator.platform.indexOf("iPod") != -1) ||
		(navigator.userAgent.match(/iPad/i) != null)
	);
}

/*********************
 *	Displays default text in search field
 ********************/
//Set default text
var strSearchDefault = 'Search'; 
 
// Remove default text upon focus
$("#searchQuery").focus(function(){
	if($(this).val() == strSearchDefault){
		$(this).removeClass("defaultText");
        $(this).val("");
	}
});

// Add default text upon blur
$("#searchQuery").blur(function(){
	if ($(this).val() == ""){
		$(this).addClass("defaultText");
		$(this).val(strSearchDefault);
	}
});

// Trigger blur
$("#searchQuery").blur();

// Clear any default text upon form submission
$(".searchForm").submit(function(){
	$(".defaultText").each(function(){
		if($(this).val() == strSearchDefault){
			$(this).val("");
		}
	});
});


/*********************
 *	Displays default text in '/newsletter' input fields
 ********************/
var Newsletter = {
	init:function(){
		//Set default text
		var arrNewsletterDefault = [];
		arrNewsletterDefault[0] = 'First name';
		arrNewsletterDefault[1] = 'Last name';
		arrNewsletterDefault[2] = 'Email address';
		
		// Add '.defaultText' class if empty fields
		$('.t2e-defaultText').each(function(index){
			if ($(this).val() == arrNewsletterDefault[index]){
				$(this).addClass('defaultText');
			}
		});
		
		$('.t2e-defaultText').each(function(index){
			// Remove default text upon focus
			$(this).focus(function(){
				if($(this).val() == arrNewsletterDefault[index]){
					$(this).removeClass('defaultText');
					$(this).val('');
				}
			});
			
			// Add default text upon blur
			$(this).blur(function(){
				if ($(this).val() == ''){
					$(this).addClass('defaultText');
					$(this).val(arrNewsletterDefault[index]);
				}
			});
			
			// Trigger blur
			$(this).blur();
		});
		
		// Clear any default text upon form submission
		$('.t2e-form').submit(function(){
			$('.defaultText').each(function(){
				if($(this).val() == strSearchDefault){
					$(this).val('');
				}
			});
		});
	}
};


/*********************
 *	Displays default text in comment form fields
 ********************/
var CommentForm = {
	init:function(){
		//Set default text
		var arrCommentsDefault = [];
		arrCommentsDefault[0] = 'Name';
		arrCommentsDefault[1] = 'Email';
		arrCommentsDefault[2] = 'Website';
		arrCommentsDefault[3] = 'Comment';
		
		// Add '.defaultText' class if empty fields
		$('.commentsDefaultText').each(function(index){
			if ($(this).val() == arrCommentsDefault[index]){
				$(this).addClass('defaultText');
			}
		});
		
		$('.commentsDefaultText').each(function(index){
			// Remove default text upon focus
			$(this).focus(function(){
				if($(this).val() == arrCommentsDefault[index]){
					$(this).removeClass('defaultText');
					$(this).val('');
				}
			});
			
			// Add default text upon blur
			$(this).blur(function(){
				if ($(this).val() == ''){
					$(this).addClass('defaultText');
					$(this).val(arrCommentsDefault[index]);
				}
			});
			
			// Trigger blur
			$(this).blur();
		});
		
		// Clear any default text upon form submission
		$('#commentform').submit(function(){
			$('.commentsDefaultText').each(function(index){
				if($(this).val() == arrCommentsDefault[index]){
					$(this).val('');
				}
			});
		});
	}
};


/*********************
 *	Retrieves the latest 4 tweets from smashLAB's account
 ********************/
var Tweets = {
	init:function(){
		//Load API + add Blueprint CSS classess (callback)
		$('.twitter').load('/api/twitter/loadTweets.php', function(){
			$('.twitter').has('div').addClass('prepend-top-3 span-24').show('slow');
		});
	},
	
	init_new:function(){
		var $twitter = $('#twitter');
		
		$twitter.load('/api/twitter/loadTweets.php', function(){
			$twitter.has('div').addClass('prepend-top-3').fadeTo(500, 1);
		});
	}
};


/*********************
 *	Retrieves a smashLAB flickr photoset
 ********************/
var Flickr = {
	init:function(){
		//Load API + show photoset (callback)
		$('.flickr').load('/api/flickr/loadPhotoSet.php', function(){
			if($('.flickr')[0].hasChildNodes()){
				$('.descriptions').addClass('prepend-top-2');
				$('.flickrTitle').slideDown(600);
				$('.flickr').delay(400).slideDown(600);
			}	
		});
	}
};


/*********************
 *	Retrieves a smashLAB Youtube feed
 ********************/
var Youtube = {
	init:function(){
		//Load API + show photoset (callback)
		$('.youtube').load('/api/youtube/loadYouTubeFeed.php', function(){
			if($('.youtube')[0].hasChildNodes()){
				$('.youtubeTitle').addClass('prepend-top-4').slideDown(600);
				$('.youtube').has('a').delay(400).slideDown(600);
			}
		});
	}
};


/*********************
 *	Controls the image slider for case study pages w/o nav button support + w/o pausing
 ********************/
var SlideShow = {
	init:function(){
		// Set event listener
		$('.ssThumbsItem').hover(SlideShow.stopShow, SlideShow.startShow);
		
		// Get number of images
		SlideShow._length = $('.ssMainItem').length;
		
		// Set animation delays
		SlideShow._interval = 3500; // Delay between slideshow auto-loading next image
		SlideShow._slideDelay = 250; // Slideshow fadeTo duration
		
		// Add 'currentSlide' class to first main image and its thumb
		$('.ssMainItem:first').addClass('currentSlide');
		$('.ssThumbsItem:first').addClass('currentSlide');

		// Fade out all the main items EXCEPT the first one
		$('.ssMainItem').not($('.ssMainItem:first')).fadeTo(0, 0);		
		
		// Set play override flag (to override startShow method)
		SlideShow._playOverride = false;
		// Begin the slideshow
		SlideShow.startShow();
	},
	
	startShow:function(){
		// If play override is disabled
		if(!SlideShow._playOverride){
			// If click listener has NOT been set
			if(!SlideShow._clickListenerSet){
				$('.ssThumbsItem').click(SlideShow.thumbClick);
				SlideShow._clickListenerSet = true;
			}
			
			// Begin the slideshow
			SlideShow._timer = setInterval(function(){
				// Extract slideID
				var slideID = $('.currentSlide').attr('id').split('_')[1];
				// If last slide
				if(slideID == SlideShow._length){
					// Next slide will be first slide
					slideID = 1;
				}else{
					// Go to next slide
					slideID++;	
				};
				
				// If play override disabled
				if(!SlideShow._playOverride){
					// Auto-load image
					SlideShow.autoLoadImage(slideID, SlideShow._slideDelay);
				}else{
					// Stop slideshow
					clearTimeout(SlideShow._timer);	
				}
			}, SlideShow._interval);
		}else{
			clearTimeout(SlideShow._timer);
		}
	},
	
	stopShow:function(){
		// Stop slideshow
		clearTimeout(SlideShow._timer);
	},
	
	thumbClick:function(){
		// Get currently displayed slideID
		var currentSlideID = $('.currentSlide').attr('id').split('_')[1];
		// Get clicked thumbnail slideID
		var slideID = $(this)[0].id.split('_')[1];
		
		// If NOT clicking on the same thumbnail AND opacity if over a value
		if(currentSlideID != slideID){
			// Set play override property
			SlideShow._playOverride = true;
			// Stop slideshow
			SlideShow.stopShow();
			// Manually-load image
			SlideShow.manualLoadImage(slideID, SlideShow._slideDelay);
		}
	},
	
	autoLoadImage:function(slideID, slideDelay){
		// Remove currentSlide class from current thumbnail item
		$('.ssThumbsItem.currentSlide').removeClass('currentSlide');
		// Add currentSlide class to clicked thumbnail item
		$('#thumbID_' + slideID).addClass('currentSlide');
		
		// Fade current main item to 0 opacity
		$('.ssMainItem.currentSlide').fadeTo(slideDelay, 0, function(){
			// Remove currentSlide class from current main item
			$('.ssMainItem.currentSlide').removeClass('currentSlide');	
			// Add currentSlide class to newly-selected main item
			$('#imageID_' + slideID).addClass('currentSlide');
			// Fade new main item to full opacity
			$('#imageID_' + slideID).fadeTo(slideDelay, 1);
		});
	},
	
	manualLoadImage:function(slideID, slideDelay){
		// Remove currentSlide class from current thumbnail item
		$('.ssThumbsItem.currentSlide').removeClass('currentSlide');
		// Add currentSlide class to clicked thumbnail item
		$('#thumbID_' + slideID).addClass('currentSlide');
		
		// If main item is still being animated
		if($('.ssMainItem.currentSlide').is(':animated')){
			// Stop main item's animation and fade instantly to 0 opacity
			$('.ssMainItem.currentSlide:animated').stop().fadeTo(0, 0);
			// Remove currentSlide class from current main item
			$('.ssMainItem.currentSlide').removeClass('currentSlide');
			// Add currentSlide class to newly-selected main item
			$('#imageID_' + slideID).addClass('currentSlide');
			// Fade new main item to full opacity
			$('#imageID_' + slideID).fadeTo(slideDelay, 1);
		// If main item finished its animation
		}else{		
			// Fade current main item to 0 opacity
			$('.ssMainItem.currentSlide').fadeTo(slideDelay, 0, function(){
				// Remove currentSlide class from current main item
				$('.ssMainItem.currentSlide').removeClass('currentSlide');	
				// Add currentSlide class to newly-selected main item
				$('#imageID_' + slideID).addClass('currentSlide');
				// Fade new main item to full opacity
				$('#imageID_' + slideID).fadeTo(slideDelay, 1);
			});
		}
	}
};



/*********************
 *	Controls rollover states for home + results pages' portfolio items
 ********************/
var PortfolioHover = {
	init:function(){
		/*!
		 * jQuery UI 1.8.9
		 *
		 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
		 * Dual licensed under the MIT or GPL Version 2 licenses.
		 * http://jquery.org/license
		 *
		 * http://docs.jquery.com/UI + http://docs.jquery.com/UI/Effects/
		 */
		(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.9",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
		NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
		"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
		if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
		"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
		d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
		c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
		b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
		;
		jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
		16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
		a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
		a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
		"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
		0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
		211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
		d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0];
		h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,
		a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.9",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,
		a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",
		border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);
		return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments);
		else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),
		b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,
		a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,
		a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==
		e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=
		g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
		h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,
		a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
		;
		
		// Get item images, links and containers
		var objPageImages = $('.recentWorkActive').find('img');
		var objPageLinks = $('.recentWork').find('a');
		var objRecentWorkItem = $('.recentWorkItem');
		
		// Set click listeners for portfolio images to link href
		$('.recentWorkItem').each(function(){
				$(this).click(function(){
					window.location = $(this).find('a').attr('href');
				});
		});
		
		// Disable default link hover CSS
		$('.recentWorkItem').find('a').mouseenter(
			function(){
				$(this).css('background', 'none');	
		});
		
		// Assign img alt text to link text title
		$(objPageLinks).each(function(j){
			$(objPageLinks[j]).attr('title', $(objPageImages[j]).attr('alt'));
			$(objRecentWorkItem[j]).attr('title', $(objPageImages[j]).attr('alt'));
		});
		
		// Set effect durations
		var intItemFadeDuration = 200;
		var intGroupFadeDuration = 2000;
		
		$('.recentWork').hover(
			function(){
				// Stop ALL animations
				$('.recentWorkItem').stop();
			},
			function(){
				// Stop ALL animations
				$('.recentWorkItem').children().stop();
				
				// Hide ALL b&w and borders
				$('.recentWorkItem').children('.recentWorkBw').fadeTo(intGroupFadeDuration, 0);
				$('.recentWorkItem').children('.recentWorkBorder').fadeTo(intItemFadeDuration, 0);
				
				// Reset link text color
				$('.recentWorkItem').find('a').stop().animate({color: '#ffffff'}, intGroupFadeDuration);
			}
		);
		
		$('.recentWorkItem').mouseenter(
			function(){
				// Hide THIS b&w
				$(this).children('.recentWorkBw').stop().fadeTo(intItemFadeDuration, 0);
				
				// Change OTHER link text color
				$('.recentWorkItem').not($(this)).find('a').stop().animate({color: '#6d6d6d'}, intItemFadeDuration);
		
				// Change THIS link text color
				$(this).find('a').stop().animate({color: '#ffffff'}, intItemFadeDuration);		
				
				// Show THIS border
				$(this).children('.recentWorkBorder').stop().fadeTo(intItemFadeDuration, 1);
				
				// Show OTHER b&w
				$('.recentWorkItem').not($(this)).children('.recentWorkBorder').stop().fadeTo(intItemFadeDuration, 0);
				
				// Hide OTHER border
				$('.recentWorkItem').not($(this)).children('.recentWorkBw').stop().fadeTo(intItemFadeDuration, 1);
		});
	}
};


/**
* Home page carousel
*/
var HPC = {
	init:function(){
		// Media player
		HPC._elements = {};
		HPC._elements.player = $('#mediaPlayer');
		
		// Emebed player dimensions (px)
		HPC._embedX = 950;
		HPC._embedY = 397;
		
		// First and last video IDs
		HPC._firstVideoID = null;
		HPC._lastVideoID = null;
		
		// Regex for extraction video IDs
		HPC._rxVideoID = /(mainOverlay\-|mediaThumb\-|videoID\-|player_)([0-9]+)/i;	
		
		// Cascading timers/delays
		HPC._tmrCascade = null;
		HPC._dlyOverlayHide = 500;
		HPC._dlyCascadeShow = 250;
		HPC._dlyCascadeInterval = 500;
		
		// Flag for iOS devices
		HPC._isIOS = isIOS();
		
		// Determine first and last videoIDs in media carousel
		$('#mediaCarousel .mediaThumb').each(function(index){
			if(index == 0) HPC._firstVideoID = HPC.getVideoID($(this));
			if(index == $('#mediaCarousel .mediaThumb').length - 1) HPC._lastVideoID = HPC.getVideoID($(this));
		});
		
		// Click handler for main content overlay
		$('.mainLink').click(function(){
			var $this = $(this);			
						
			$this.parent().fadeTo(HPC._dlyOverlayHide, 0, function(){
				// We stop any cascading animations and immediately display the content
				$(this).hide();
				clearTimeout(HPC._tmrCascade);
				$this.find('.mediaCascade').stop(true, true).fadeTo(0, 1);
				// Mark the content loaded to avoid any further cascading effect
				$this.closest('.mainOverlay').addClass('loaded');
			});
		});
		
		$('.videoThumb').bind({
			// Click handler for thumbnails
			click: function(){
				HPC.loadContent(this);
			},
			
			// iOS touchend handler for thumbnails
			touchend: function(){
				HPC.loadContent(this);
			},
			
			changeVideo: function(){
				HPC.loadContent(this);
			}
		});		
		
		// Load first video
		$first = $('.mainOverlay:first .mainLink');
		HPC.loadVideo(HPC.getVideoID($first));
		
		// Cascade main content
		HPC.cascadeContent($first);		
	},
	
	
	/**
	* Loads the main content overlay and handles thumbnail and main content events
	*
	* @param object objThis
	* @return void
	*/	
	loadContent:function(objThis){
		var $this = $(objThis);
		var $active = $('.mediaThumb.activeItem');
		var videoID = HPC.getVideoID($this);
		
		// Re-display the main overlay (if already hidden) and reload the video when clicking the active thumbnail
		if(videoID == HPC.getVideoID($active)){
			if($('.mainOverlay-' + videoID).css('opacity') < 1){
				$('.mainOverlay-' + videoID).stop(true, true).fadeTo(0, 1);

				HPC.resetPlayer();
				HPC.loadVideo(videoID);				
			}

			return false;
		}
		
		HPC.resetPlayer();
		
		$('.mainOverlay, .mediaThumb').removeClass('activeItem');
		$('.mainOverlay-' + videoID + ', .mediaThumb-' + videoID).addClass('activeItem');		
		
		$('.mainOverlay').hide();
		$('.mainOverlay-' + videoID).fadeTo(0, 1);
		
		HPC.loadVideo(videoID);
		
		clearTimeout(HPC._tmrCascade);
		$('.mediaCascade').fadeTo(0, 0);				
		HPC.cascadeContent($('.mainOverlay-' + videoID));
	},
	
	
	/**
	* Cascades the main content
	*
	* @param object $this - Parent DOM element of .mainContent
	* @return void
	*/	
	cascadeContent:function($this){		
		var $overlay = $this.closest('.mainOverlay');		
		var $spans = $this.find('.mainContent').children();
		
		// We only cascade the content is it hasn't already hasn't already been loaded
		if(!$overlay.hasClass('loaded')){
			var i = 0;
			var ii = $spans.length;					
			
			HPC._tmrCascade = setInterval(function(){
				if(i != ii){						
					$($spans[i]).fadeTo(HPC._dlyCascadeShow, 1);				
					i++;
				}else{
					clearTimeout(HPC._tmrCascade);
					$overlay.addClass('loaded');
				}
			}, HPC._dlyCascadeInterval);
		}else{
			$spans.fadeTo(0, 1);
		}
	},
	
	
	/**
	* Extracts the Vimeo video ID
	*
	* @param mixed $this - The $this object or a normal string
	* @return string
	*/
	getVideoID:function($this){
		var strTest = typeof $this == 'string' ? $this : $this.attr('class');
		var arrMatch = HPC._rxVideoID.exec(strTest);		
		return arrMatch != null ? arrMatch[2] : '';
	},
	
	
	/**
	* Loads the Vimeo embed code
	*
	* @param string videoID - Vimeo video ID
	* @return void
	*/	
	loadVideo:function(videoID){
		var htmPlayer = '<iframe id="player_' + videoID + '" src="http://player.vimeo.com/video/' + videoID + '?api=1&amp;player_id=player_' + videoID + '&amp;title=0&amp;byline=0&amp;portrait=0" width="' + HPC._embedX + '" height="' + HPC._embedY + '" frameborder="0"></iframe>';		
		HPC._elements.player.html(htmPlayer);
		
		if(!HPC._isIOS) HPC.froogaloop(videoID);
	},
	
	
	froogaloop: function(videoID){
		var player = $('#player_' + videoID).get(0);
		
		$f(player).addEvent('ready', ready);

		/**
		 * Called once a vimeo player is loaded and ready to receive
		 * commands. You can add events and make api calls only after this
		 * function has been called.
		 */
		function ready(player_id) {
			// Keep a reference to Froogaloop for this player
			//var froogaloop = $f(player_id);
			
			$('.mainLink.videoID-' + videoID).click(function(){
				$f(player_id).api('play');
			});
			
			$f(player_id).addEvent('finish', movieFinished);
		}
		
		
		function movieFinished(data){
			var vimeoID = HPC.getVideoID(data);
			
			if(vimeoID != HPC._lastVideoID){
				$('.mediaThumb.mediaThumb-' + vimeoID).next().find('.thumbLink.videoThumb').trigger('changeVideo');
			}else{
				$('.thumbLink.videoThumb.videoID-' + HPC._firstVideoID).trigger('changeVideo');
			}
		}		
	},
	
	
	/**
	* Resets the media player container
	* 
	* @return void
	*/	
	resetPlayer:function(){
		HPC._elements.player.html('');
	}
};
