jQuery(window).load(function() {
	$.getJSON('http://api.twitter.com/1/statuses/user_timeline.json?screen_name=stonecrandall&count=1&exclude_replies=1&callback=?', function(data) {
	  $('#twitterTime').html("tweeted " + relativeTime(data[0].created_at) + " by <a href='http://twitter.com/stonecrandall' target='_blank'>@stonecrandall</a>");
	  $('#twitterText').html(parseTwitter(data[0].text));
	});
});

function slideFeatures(item) {
	index = $(item).attr("alt");
	
	$(item).siblings("a").removeClass("on");
	$(item).addClass("on");
	
	$("#featureHolder").animate({"left":index*-940+"px"},600);
}


function changePostsControlGroup(link) {
	$(link).parent().children("a").removeClass("on");
	$(link).addClass("on");
	
	if($(link).parent().is('#viewLinks')) {
		if($(link).attr("alt") == "grid") {
			$("#featureWrapper").show("blind", { direction: "vertical" }, 300);
		} else {
			$("#featureWrapper").hide("blind", { direction: "vertical" }, 300);
		}
	}
	
	loadPosts(0);
}


function loadPosts(offset) {
	$('#postsHolder').fadeOut(300,function() {
		$('#postsHolder').html('<div class="loading">Loading posts…</div>').fadeIn(300,function() {
			
			view = $("#viewLinks").children("a.on:first").attr("alt");
			category = $("#filterLinks").children("a.on:first").attr("alt");
			sort = $("#sortLinks").children("a.on:first").attr("alt");
			
			$.get('/actions.php?action=posts&view='+view+'&category='+category+'&sort='+sort+'&offset='+offset, function(data) {
				$('#postsHolder').fadeOut(300,function() {
					$('#postsHolder').html(data).fadeIn(300);
				});
			});
			
		});
	});
}


function sendContactForm() {
	$("#contactCardStatus").html("");
	if(validateContactForm()) {
		$("#contactCardStatus").html("Sending message…");
		
		name = $("#contactName").val();
		email = $("#contactEmail").val();
		phone = $("#contactPhone").val();
		referral = $("#contactReferrer").val();
		type = $("#contactEventType").val();
		date = $("#contactEventDate").val();
		loc = $("#contactEventLocation").val();
		message = $("#contactMessage").val(); 
		
		$.post('/actions.php?action=email',
			{ 'name':name, 'email':email, 'phone':phone, 'referral':referral, 'type':type, 'date':date, 'loc':loc, 'message':message },
			function(data) {
				$("#contactCard").fadeOut(200,function() {
					$("#contactCardSent").fadeIn(300);
				});
			}
		);
	}
}


function validateContactForm() {
	if($.trim($("#contactName").val()) == "" || $.trim($("#contactEmail").val()) == "" || $.trim($("#contactEventType").val()) == "" || $.trim($("#contactMessage").val()) == "") {
		$("#contactCardStatus").html("You must provide all required fields.");
		return false;
	} else {
		var reg = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
		
     	if(reg.test($("#contactEmail").val())) {
     		return true;
     	} else {
     		$("#contactCardStatus").html("You must provide a valid email address.");
			return false;
     	}	
	}
}


function relativeTime(pastTime) {
	// Generate a JavaScript relative time for the tweets

	var origStamp = Date.parse(pastTime);
	var curDate = new Date();
	var currentStamp = curDate.getTime();
	var difference = parseInt((currentStamp - origStamp)/1000);
	
	if(difference < 0) return false;
	
	if(difference <= 20)         return "seconds ago";
	if(difference <= 60)         return "a minute ago";
	if(difference < 3600)        return parseInt(difference/60)+" minutes ago";
	if(difference <= 1.5*3600)   return "one hour ago";
	if(difference < 23.5*3600)   return Math.round(difference/3600)+" hours ago";
	if(difference < 1.5*24*3600) return "one day ago";
	
	// If the tweet is older than a day, show an absolute date/time value;
	var dateArr = pastTime.split(' ');
	
	return dateArr[4].replace(/\:\d+$/,'')+' '+dateArr[2]+' '+dateArr[1]+
	(dateArr[3]!=curDate.getFullYear()?' '+dateArr[3]:'');
}

function parseTwitter(text) {
    // Parse URIs
    text = text.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(uri) {
		return uri.link(uri);
	});
 
    // Parse Twitter usernames
    text = text.replace(/[@]+[A-Za-z0-9-_]+/, function(u) {
		var username = u.replace("@","")
		return u.link("http://twitter.com/"+username);
	});
 
	// Parse Twitter hash tags
	text = text.replace(/[#]+[A-Za-z0-9-_]+/, function(t) {
		var tag = t.replace("#","%23")
		return t.link("http://search.twitter.com/search?q="+tag);
	});
    
    return text;
}
