// on ready
$(document).ready(function() {
	// init
	orbital.init();
});

// orbital object
var orbital = {
	
	// init
	init: function() {
		// portfolio masonry
		var $portfolio = $('#portfolio');
		$portfolio.imagesLoaded(function(){ $portfolio.masonry({ itemSelector: 'li' }); });
		// lettering (no on firefox)
		if ($.browser.mozilla != true) $('#header_title_content, #contact_title_content').lettering();
		// email address not in source for spamagrams fixify
		$('#contact_email').attr('href', 'mailto' + ':' + 'stephen' + '@' + 'chai'+  '.' + 'name');
		// if !iphone and !ipad
		if (navigator.platform.indexOf('iPhone') == -1 && navigator.platform.indexOf('iPad') == -1) {
			// orbital moon, cycle completeness (0 to 1), x_scale (max x radius), y_scale (max y_radius), speed (x number of milliseconds to update)
			orbital.moonOrbitInit($('#orbit_moon_1'), .6, 197, 50, 10);
			orbital.moonOrbitInit($('#orbit_moon_2'), .9, 120, 40, 12);
			orbital.moonOrbitInit($('#orbit_moon_3'), .3, 220, 20, 15);
		}
		// 2001
		$(document).keyup(function(event) {
			orbital.keypress(String.fromCharCode(event.keyCode).toUpperCase());
		});
		orbital.code_attempt = '';
		orbital.code_answer = 'HAL9000';
	}
	
	// moon orbiter init
	,moonOrbitInit: function($moon, cycle, x_scale, y_scale, speed) {
		// if no moon, no orbit (i see you ie6)
		if (!$moon.length) return;
		// set init cycle (0 to 1 representing orbit completeness), x and y scale
		$moon.data('orbit', { cycle: cycle, x_scale: x_scale, y_scale: y_scale });
		// and move it
		setInterval(function() { orbital.moonOrbitMove($moon); }, speed);
	}
	
	// moon orbiter move
	,moonOrbitMove: function($moon) {
		// orbit data
		var orbit = $moon.data('orbit');
		// calculate 
		var x_pos = Math.sin( orbit.cycle * 2 * Math.PI ) * orbit.x_scale
			,y_pos = Math.cos( orbit.cycle * 2 * Math.PI ) * orbit.y_scale;
		// z-index adjustment
		y_pos > 0 ? $moon.removeClass('behind_planet') : $moon.addClass('behind_planet');
		// $moon.animate({ left: x_pos + 'px', top: y_pos + 'px' }, 300);
		$moon.css({ left: x_pos + 'px', top: y_pos + 'px' });
		// increment orbit cycle
		orbit.cycle += .001;
		// update data object
		$moon.data('orbit', orbit);
	}
	
	// keypress listener
	,keypress: function(letter) {
		// add to string
		orbital.code_attempt += letter;
		// if a match, keep it alive, else no dice
		if (orbital.code_attempt != orbital.code_answer.substr(0, orbital.code_attempt.length)) orbital.code_attempt = '';
		// all in?
		else if (orbital.code_attempt == orbital.code_answer) {
			// unbind
			$(document).unbind('keypress');
			// just what do you think you're doing dave
			$('#header_title .title_intro').text('Just what do you think you\'re doing');
			$('#header_title_content').text('Dave?');
			// roid rage
			$('body').append('<script type="text/javascript" src="http://erkie.github.com/asteroids.min.js"></script>');
			// periodically add in some space pods
			orbital.spacePodPlus();
			setInterval(orbital.spacePodPlus, 4000);
		}
	}
	
	// space pod!
	,spacePodPlus: function() {
		// if there are too many pods, do nothing
		if ($('.space_pod').length > 10) return;
		// random position
		var x = Math.floor(Math.random() * ($(document).width() - 128))
			,y = Math.floor(Math.random() * ($(document).height() - 128));
		if (x < 0) x = 0;
		if (y < 0) y = 0;
		// pod it up
		$('body').append('<div class="space_pod" style="left: ' + x + 'px; top: ' + y + 'px"></p>');
	}
	
};

/* Lettering.JS 0.6.1 by Dave Rupert  - http://daverupert.com */
(function($){function injector(t,splitter,klass,after){var a=t.text().split(splitter),inject='';if(a.length){$(a).each(function(i,item){inject+='<span class="'+klass+(i+1)+'">'+item+'</span>'+after});t.empty().append(inject)}}var methods={init:function(){return this.each(function(){injector($(this),'','char','')})},words:function(){return this.each(function(){injector($(this),' ','word',' ')})},lines:function(){return this.each(function(){var r="eefec303079ad17405c889e092e105b0";injector($(this).children("br").replaceWith(r).end(),r,'line','')})}};$.fn.lettering=function(method){if(method&&methods[method]){return methods[method].apply(this,[].slice.call(arguments,1))}else if(method==='letters'||!method){return methods.init.apply(this,[].slice.call(arguments,0))}$.error('Method '+method+' does not exist on jQuery.lettering');return this}})(jQuery);

// jQuery Masonry v2.0.110825 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]||""}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="",this.style.top="",this.style.left=""});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){function h(){--d<=0&&this.src!==f&&(setTimeout(g),b.unbind("load error",h))}function g(){a.call(e,b)}var b=this.find("img"),d=b.length,e=this,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";d||g(),b.bind("load error",h).each(function(){if(this.complete||this.complete===c){var a=this.src;this.src=f,this.src=a}});return this};var g=function(a){this.console&&console.error(a)};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)g("cannot call methods on masonry prior to initialization; attempted to call method '"+a+"'");else{if(!b.isFunction(d[a])||a.charAt(0)==="_"){g("no such method '"+a+"' for masonry instance");return}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);
