/*
 * jQuery Easing v1.1 - http://gsgd.co.uk/sandbox/jquery.easing.php
 *
 * Uses the built in easing capabilities added in jQuery 1.1
 * to offer multiple easing options
 *
 * Copyright (c) 2007 George Smith
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */

jQuery.easing = {
	easein: function(x, t, b, c, d) {
		return c*(t/=d)*t + b; // in
	},
	easeinout: function(x, t, b, c, d) {
		if (t < d/2) return 2*c*t*t/(d*d) + b;
		var ts = t - d/2;
		return -2*c*ts*ts/(d*d) + 2*c*ts/d + c/2 + b;		
	},
	easeout: function(x, t, b, c, d) {
		return -c*t*t/(d*d) + 2*c*t/d + b;
	},
	expoin: function(x, t, b, c, d) {
		var flip = 1;
		if (c < 0) {
			flip *= -1;
			c *= -1;
		}
		return flip * (Math.exp(Math.log(c)/d * t)) + b;		
	},
	expoout: function(x, t, b, c, d) {
		var flip = 1;
		if (c < 0) {
			flip *= -1;
			c *= -1;
		}
		return flip * (-Math.exp(-Math.log(c)/d * (t-d)) + c + 1) + b;
	},
	expoinout: function(x, t, b, c, d) {
		var flip = 1;
		if (c < 0) {
			flip *= -1;
			c *= -1;
		}
		if (t < d/2) return flip * (Math.exp(Math.log(c/2)/(d/2) * t)) + b;
		return flip * (-Math.exp(-2*Math.log(c/2)/d * (t-d)) + c + 1) + b;
	},
	bouncein: function(x, t, b, c, d) {
		return c - jQuery.easing['bounceout'](x, d-t, 0, c, d) + b;
	},
	bounceout: function(x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	bounceinout: function(x, t, b, c, d) {
		if (t < d/2) return jQuery.easing['bouncein'] (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing['bounceout'] (x, t*2-d,0, c, d) * .5 + c*.5 + b;
	},
	elasin: function(x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	elasout: function(x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	elasinout: function(x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	backin: function(x, t, b, c, d) {
		var s=1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	backout: function(x, t, b, c, d) {
		var s=1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	backinout: function(x, t, b, c, d) {
		var s=1.70158;
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	linear: function(x, t, b, c, d) {
		return c*t/d + b; //linear
	}
};

(function($){
  $.fn.shuffle = function() {
    return this.each(function(){
      var items = $(this).children();
      return (items.length)
        ? $(this).html($.shuffle(items))
        : this;
    });
  }
 
  $.shuffle = function(arr) {
    for(
      var j, x, i = arr.length; i;
      j = parseInt(Math.random() * i),
      x = arr[--i], arr[i] = arr[j], arr[j] = x
    );
    return arr;
  }
})(jQuery);

$(function(){
			$("#logocator").click(function(){
				$("#header").animate({height:'215px'},{duration: 600, easing: 'easeout'});
				$("#logo").animate({opacity:'1'},'slow');
				$("#logocator").css({cursor:'default'}).animate({opacity:'0'},'fast');
				$("#header-left p").slideDown(800);
			});
			$("#logo-hider").click(function(){
				$("#header").animate({height:'60px'},{duration: 600, easing: 'easeout'});
				$("#logo").animate({opacity:'.3'},'slow');
				$("#logocator").css({cursor:'pointer'}).animate({opacity:'1'},'fast');
				$("#header-left p").slideUp(200);
			});
		});
				
		$(function(){
			$("#logo").animate({opacity:'.3'},'slow');
			$('#carousel ul').shuffle();
			$("#portfolio-container").fadeIn(500);
			$("#logo").css('opacity', '.3');
		});
		
		$(function() {
		    $("#carousel").jCarouselLite({
		        btnNext: "#next",
		        btnPrev: "#prev",
		        speed: 1000,
		        visible: 1,
		        easing: "easeinout"
		    });
		});
		
		$(function(){
			$('.port-nav').click(function(){
				$('#carousel p').fadeTo(350, .4);
				setTimeout("$('#carousel p').fadeTo(250, 1)", 1000);
			})
		});
		
		$(function(){
			setTimeout('$("#quotables").animate({"height": "toggle", "opacity": "toggle"}, 1000)',800);			
		});
		
		$(function(){
			$("#quotables p:last").addClass('attribution');
		});
		
		$(function(){
		
		    var $quote = $("#quotables");
		
		    var $numWords = $quote.text().split(" ").length;
		
		    if (($numWords >= 1) && ($numWords < 10)) {
		        $quote.css("font-size", "30px");
		    }
		    else if (($numWords >= 10) && ($numWords < 20)) {
		        $quote.css("font-size", "26px");
		    }
		    else if (($numWords >= 20) && ($numWords < 30)) {
		        $quote.css("font-size", "22px");
		    }
		    else if (($numWords >= 30) && ($numWords < 40)) {
		        $quote.css("font-size", "18px");
		    }
		    else {
		        $quote.css("font-size", "16px");
		    }    
		
		});
		
		$(document).ready(function(){
			$("#loading-portfolio").hide();
		});
		
/*
			 * stickyfloat - jQuery plugin for verticaly floating anything in a constrained area
			 * 
			 * Example: jQuery('#menu').stickyfloat({duration: 400});
			 * parameters:
			 * 		duration 	- the duration of the animation
			 *		startOffset - the amount of scroll offset after it the animations kicks in
			 *		offsetY		- the offset from the top when the object is animated
			 *		lockBottom	- 'true' by default, set to false if you don't want your floating box to stop at parent's bottom
			 * $Version: 05.16.2009 r1
			 * Copyright (c) 2009 Yair Even-Or
			 * vsync.design@gmail.com
			 */
 
			$.fn.stickyfloat = function(options, lockBottom) {
				var $obj 				= this;
				var parentPaddingTop 	= parseInt($obj.parent().css('padding-top'));
				var startOffset 		= $obj.parent().offset().top;
				var opts 				= $.extend({ startOffset: startOffset, offsetY: parentPaddingTop, duration: 200, lockBottom:true }, options);
				
				$obj.css({ position: 'absolute'});
				
				if(opts.lockBottom){
					var bottomPos = $obj.parent().height() - $obj.height() + parentPaddingTop; //get the maximum scrollTop value
					if( bottomPos < 0 )
						bottomPos = 0;
				}
				
				$(window).scroll(function () { 
					$obj.stop(); // stop all calculations on scroll event
 
					var pastStartOffset			= $(document).scrollTop() > opts.startOffset;	// check if the window was scrolled down more than the start offset declared.
					var objFartherThanTopPos	= $obj.offset().top > startOffset;	// check if the object is at it's top position (starting point)
					var objBiggerThanWindow 	= $obj.outerHeight() < $(window).height();	// if the window size is smaller than the Obj size, then do not animate.
					
					// if window scrolled down more than startOffset OR obj position is greater than
					// the top position possible (+ offsetY) AND window size must be bigger than Obj size
					if( (pastStartOffset || objFartherThanTopPos) && objBiggerThanWindow ){ 
						var newpos = ($(document).scrollTop() -startOffset + opts.offsetY );
						if ( newpos > bottomPos )
							newpos = bottomPos;
						if ( $(document).scrollTop() < opts.startOffset ) // if window scrolled < starting offset, then reset Obj position (opts.offsetY);
							newpos = parentPaddingTop;
			
						$obj.animate({ top: newpos }, opts.duration ).css({margin: '25px 0 0 0' });
					}
				});
			};
			
 $(document).ready(function(){
			$('.meta').stickyfloat();
			$("a.top").click(function(){
				$('html, body').animate({scrollTop:0}, 'slow', 'easeinout'); 
			return false;
			});
	});