/* SagePath.com
 * Copyright 2011 SagePath.com
 */

var pageTracker;
var	emailStart = true;
var isMSIE6 = _determineIE6();
var screenAnimating;
var currentID;

var CONTENT_PATH = "/content";
var BASE_SPEED = 400;
var COLUMN_WIDTH = 200;
var MED_SCREEN = 430;
var LG_SCREEN = 660;

var isIOS = DetectIos();

var EMAILFORMARRAY = [];
EMAILFORMARRAY.name1 = {id: "name1", value: "your name"};
EMAILFORMARRAY.email1 = {id: "email1", value: "your email"};
EMAILFORMARRAY.who = {id: "who", value: "who told you"};

	
$(document).ready(function () {
	_initTracking();
	_loadTypeKit();
});


/////////////////////////////////////////////
// Tracking methods
/////////////////////////////////////////////

function _initTracking() {
	try {
		pageTracker = _gat._getTracker("UA-25350428-2"); 
		pageTracker._trackPageview();
	}catch(err) {}
}

function _trackPage(page) {
	log(page);
	try {pageTracker._trackPageview(page);
	}catch(err) {log(err);}
}

function _trackEvent(category, action) {
	log(category);
	try {pageTracker._trackEvent(category, action);
	}catch(err) {log(err);}
}

function _trackLinkEvent(link, category) {
	_trackEvent(category, link.href);
}

function _recordOutboundLink(link) {
  	_trackEvent("outbound", link.href);
    setTimeout("window.open('"+link.href+"');", 250);
}


/////////////////////////////////////////////
// TypeKit methods
/////////////////////////////////////////////

function _loadTypeKit() {
	var TypekitConfig = {
    	kitId: 'mua1ggo',
		loading: function () {},
      	active: function () {_init();},
      	inactive: function () {_init();}
    };
	$.ajax({
        url: '//use.typekit.com/' + TypekitConfig.kitId + '.js',
        dataType: 'script',
        cache: true,
        success: function () {try { Typekit.load(TypekitConfig); } catch (e) {}}
    });
}


/////////////////////////////////////////////
// Global methods
/////////////////////////////////////////////	

window.log = function(){
  log.history = log.history || [];
  log.history.push(arguments);
  if(this.console){
    console.log( Array.prototype.slice.call(arguments) );
  }
};

function _loadContent(id) {
	_toggleLoader('#'+id);
	var contentContainer = '#'+id+' .screen-content';
	
	$(contentContainer).hide();
	try 
	{
		$(contentContainer).load(CONTENT_PATH+"/"+id+".html", function () {
			_updateContent(id);
		});
	}
	catch(e) {
		_toggleLoader('#'+id);
	}
}

function _updateContent(id) {
	
	_toggleLoader('#'+id);
	var contentContainer = '#'+id+' .screen-content';
	
	if (!isMSIE) 
	{
		$(contentContainer).fadeTo(BASE_SPEED, 1);
	}
	else
	{
		$(contentContainer).show();
	}
	
	$(contentContainer).show();
	
	_trackPage("/"+id);
}

function _toggleLoader(id) {
	if ($(id).find('.large-screen').hasClass('loader'))
	{
		$(id).find('.large-screen').removeClass('loader');
	}
	else
	{
		$(id).find('.large-screen').addClass('loader');
	}
	if ($(id).find('.med-screen').hasClass('loader'))
	{
		$(id).find('.med-screen').removeClass('loader');
	}
	else
	{
		$(id).find('.med-screen').addClass('loader');
	}
}

function _determineIE6() {
	var version = MSIEVersion.split(".");
	return (isMSIE && version[0]==="6");
}

function animateScreen(width, height, obj, callback) {
	$(obj).animate({
    width: width,
    height: height
	}, BASE_SPEED, callback);
}

JQTWEET = {
    user: 'the_blue_rabbit',
    numTweets: 5,
    appendTo: '#jstwitter',
 
    loadTweets: function() {
        $.ajax({
            url: 'http://api.twitter.com/1/statuses/user_timeline.json/',
            type: 'GET',
            dataType: 'jsonp',
            data: {
                screen_name: JQTWEET.user,
                include_rts: true,
                count: JQTWEET.numTweets,
                include_entities: true
            },
            success: function(data, textStatus, xhr) {
 
                 var html = '<div class="tweet">TWEET_TEXT<div class="time">AGO</div>';
         
                 for (var i = 0; i < data.length; i++) {
                    $(JQTWEET.appendTo).append(
                        html.replace('TWEET_TEXT', JQTWEET.ify.clean(data[i].text) )
                            .replace(/USER/g, data[i].user.screen_name)
                            .replace('AGO', JQTWEET.timeAgo(data[i].created_at) )
                            .replace(/ID/g, data[i].id_str)
                    );
                 }                  
            }   
 
        });
         
    }, 

    timeAgo: function(dateString) {
        var rightNow = new Date();
        var then = new Date(dateString);
         
        if ($.browser.msie) {
            then = Date.parse(dateString.replace(/( \+)/, ' UTC$1'));
        }
 
        var diff = rightNow - then;
 
        var second = 1000,
        minute = second * 60,
        hour = minute * 60,
        day = hour * 24,
        week = day * 7;
 
        if (isNaN(diff) || diff < 0) return ""; 
        if (diff < second * 2)  return "right now";
        if (diff < minute)  return Math.floor(diff / second) + " seconds ago"; 
        if (diff < minute * 2) return "about 1 minute ago"; 
        if (diff < hour)  return Math.floor(diff / minute) + " minutes ago"; 
        if (diff < hour * 2)  return "about 1 hour ago"; 
        if (diff < day) return  Math.floor(diff / hour) + " hours ago";
        if (diff > day && diff < day * 2)  return "yesterday";
        if (diff < day * 365) return Math.floor(diff / day) + " days ago";
        else return "over a year ago";
    },

    ify:  {
      link: function(tweet) {
        return tweet.replace(/\b(((https*\:\/\/)|www\.)[^\"\']+?)(([!?,.\)]+)?(\s|$))/g, function(link, m1, m2, m3, m4) {
          var http = m2.match(/w/) ? 'http://' : '';
          return '<a class="twtr-hyperlink" target="_blank" href="' + http + m1 + '">' + ((m1.length > 25) ? m1.substr(0, 24) + '...' : m1) + '</a>' + m4;
        });
      },
 
      at: function(tweet) {
        return tweet.replace(/\B[@＠]([a-zA-Z0-9_]{1,20})/g, function(m, username) {
          return '<a target="_blank" class="twtr-atreply" href="http://twitter.com/intent/user?screen_name=' + username + '">@' + username + '</a>';
        });
      },
 
      list: function(tweet) {
        return tweet.replace(/\B[@＠]([a-zA-Z0-9_]{1,20}\/\w+)/g, function(m, userlist) {
          return '<a target="_blank" class="twtr-atreply" href="http://twitter.com/' + userlist + '">@' + userlist + '</a>';
        });
      },
 
      hash: function(tweet) {
        return tweet.replace(/(^|\s+)#(\w+)/gi, function(m, before, hash) {
          return before + '<a target="_blank" class="twtr-hashtag" href="http://twitter.com/search?q=%23' + hash + '">#' + hash + '</a>';
        });
      },
 
      clean: function(tweet) {
        return this.hash(this.at(this.list(this.link(tweet))));
      }
    }
 
     
};

function updateIsotopeOptions(speed) {
	$('#container').isotope({
		itemSelector: '.screen',
		animationEngine: 'jquery',
		masonry: {
			columnWidth: 1
		},
		layoutMode : 'masonry',
		animationOptions: {
			duration: speed,
			queue: false
		}
	});
}


/////////////////////////////////////////////
// Form methods
/////////////////////////////////////////////

function _initEmailForm()
{
	
	_resetEmailForm();
	
	$('#emailform').submit(function() {  
		
		if(_validateForm())
		{
			$.post("/php/sendmail.php", { name: $('#name1').val(), email: $('#email1').val(), attending:$('#attend').val(), guests:$('#guests').val(), who:$('#who').val()} );
			_resetEmailForm();
		}
		
		return false; 
	});

	
	$('#emailform input[type=text]').input(function(event) 
	{
		_checkForm();
	});
	
}


function _displayErrorMsg()
{
	//
}

function _handleResetClick(ev)
{
	ev.preventDefault();
	_resetEmailForm();
}

function _resetEmailForm()
{
	
	for (var i in EMAILFORMARRAY)
	{
		$('#'+i).val('');
	}
	$('#eventsubmitbutton').removeClass("emailformsubmitenabled").addClass("emailformsubmitdisabled");
	$('#guests').val(0);
	$('input:radio[name=attend][value=yes]').click();
}

function _checkForm()
{
	if (_validateForm()) 
	{
		$('#eventsubmitbutton').removeClass("emailformsubmitdisabled").addClass("emailformsubmitenabled");
	}
	else 
	{ 
		$('#eventsubmitbutton').removeClass("emailformsubmitenabled").addClass("emailformsubmitdisabled");
	}
}

function _validateForm()
{
	var formBool = true;
	
	for (var i in EMAILFORMARRAY)
	{
		
		switch (i)
		{
			case "phone":
				if (!_validatePhone($('#'+i))) formBool = false;
			break;
			
			case "email":
				if (!_validateEmail($('#'+i))) formBool = false;
			break;
			
			case "who":
				// nothing
			break;
			
			default:
				if (!_validateText($('#'+i))) formBool = false;
		}
		
	}
	return formBool;
}

function _validateEmail($forminput)
{
	var a = $forminput.val();
	var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
	if(filter.test(a))
	{
		return true;
	}
	return false;
}

function _validateText($forminput)
{
	if($forminput.val().length < 3)
	{
		return false;
	}
	return true;
}

function _validatePhone($forminput) 
{
	var stripped = $forminput.val().replace(/[\s()+-]|ext\.?/gi, "");
	return ((/\d{10,}/i).test(stripped));
}

/////////////////////////////////////////////
// Screen methods
/////////////////////////////////////////////

function _resetGrid() {
	$('.screen').removeClass('large').removeClass('medium');
	$('.small-screen').show();
	$('.large-screen').hide().removeClass('loader');
	$('.med-screen').hide().removeClass('loader');
	$('.screen-container').css('width', '200px').css('height', '200px');
	$('.screen-container').width(200).height(200);
	
	currentID = "";
	$('.screen').click(screenClickHandler);
}

function clickScreen(obj) {
	
		screenAnimating = obj;
		
		var thisID = $(screenAnimating).attr('id');
		
		if (thisID==undefined) return;
		if ($(screenAnimating).hasClass('comment') || thisID==currentID || $(screenAnimating).hasClass('hire')) return;
		
		$('.screen-container').removeClass('small-hover');
		
		_resetGrid();
		currentID = thisID;
		
		$(screenAnimating).unbind('click', screenClickHandler);
		$(screenAnimating).find('.small-screen').hide();
		
		var targetSize = MED_SCREEN;
		
		if ($(screenAnimating).find('div').hasClass('large-screen')) {
			$(screenAnimating).addClass('large');
			targetSize = LG_SCREEN;
		}
		if ($(screenAnimating).find('div').hasClass('med-screen')) $(screenAnimating).addClass('medium');

		animateScreen(targetSize, targetSize, $(screenAnimating).find('.screen-container'), function() {
			$(screenAnimating).find('.large-screen').show();
			$(screenAnimating).find('.med-screen').show();
			_loadContent(currentID);
			$.scrollTo('#'+currentID, BASE_SPEED, {offset: {top:-30, left:0 }});
		});
		
		$('#container').isotope('reLayout');
		
		

		return false;
}

function screenClickHandler()
{
	if ($(this).hasClass('comment') || $(this).hasClass('hire')) return false;
	
	var hash = $(this).attr('id');
	var node = $( '#' + hash );
	
	if ( node.length ) node.attr( 'id', '' );
	
	window.location.hash = hash;
	
	if ( node.length ) node.attr( 'id', hash );
	
	return false;
}

function logoClickHandler()
{
	_resetGrid();
	window.location.hash = "";
	$('#container').isotope('reLayout');
	return false;
}

function screenOver()
{
	if ($(this).hasClass('large') || $(this).hasClass('medium')) return;
			
	if ($(this).hasClass('photo') || $(this).hasClass('hire')){
		var textHeight = 200-($(this).find('.screen-info h3').height() + $(this).find('.screen-info p').height() + 30);
		textHeight = Math.max(textHeight,0);
		$(this).find('.screen-info').animate({top: textHeight}, {queue: false});
	}
			
	if ($(this).hasClass('section')){
		$(this).find('.screen-container').addClass('small-hover');
	}	
}

function screenOff()
{
	if ($(this).hasClass('photo') || $(this).hasClass('hire')){
		$(this).find('.screen-info').animate({top: 200}, {queue: false});
	}
			
	if ($(this).hasClass('section')){
		$(this).find('.screen-container').removeClass('small-hover');
	}
}

function closeOver()
{
	$(this).addClass('close-button-over');	
}

function closeOff()
{
	$(this).removeClass('close-button-over');	
}


function hashChangeHandler(e)
{
	if(window.location.hash=="#event") {
		$('#container').isotope({ filter: '*' });
		$('#event').show();
	}
	clickScreen($(window.location.hash));
}

function _init() {
	var $container = $('#container');
	var h;
    
	updateIsotopeOptions(1);
	
	$("#container").show();
	$('#container').isotope('reLayout');
	$('#footer').show();
	
	if (!isMSIE) 
	{
		$('.screen').each(function(index) {
			$(this).delay(index*80).animate({
				opacity: 1
			});
		});
	}
	else
	{
		$('.screen').each(function(index) {
			$(this).css('opacity', 1);
		});
		updateIsotopeOptions(BASE_SPEED);
	}
	
	$(".comment .small-screen").each(function(i){
		h = 200-($(this).height());
		$(this).css('margin-top', h);
	});
	
	$('.screen').click(screenClickHandler);
	$('#top-logo').click(logoClickHandler);
	$('.close-button').click(logoClickHandler);
	
	$('.close-button').hover(closeOver, closeOff);	
	$('.screen').hover(screenOver, screenOff);
	
	$(window).hashchange(hashChangeHandler);
	$(window).hashchange();
	
	if(window.location.hash!="#event") {
		$('#container').isotope({ filter: '.screen:not(#event)' });
	} else {
		$('#event').show();
	}
		
}
