// JavaScript Document

$(function() {
		   
    $.fn.fadeInHandler = function(speed, callback) {
		if ($.browser.msie && $.browser.version < 9) {
			$(this).show();
		} else {
			$(this).fadeIn();
		}
	};
		   
	var autoScroll = false;
	
	function moveSide() {
		var bH = $(window).height();
		var sH = $("#side").height();
		var wT = $(window).scrollTop();
		var offset = $("#side").position();
		var sO = offset.top;
		var tolerance = 10;
		
		if ((sO + sH + tolerance) > (wT + bH)) {
			// too high
			var pos = wT + bH - sH - tolerance;
			
			$('#side').stop().animate({ top: pos + "px" }, { queue: false, duration: 500, easing: 'easeInOutSine' });
		}
		
		if ((sO - tolerance) < wT) {
			// too high
			var pos = wT + tolerance;
			
			$('#side').stop().animate({ top: pos + "px" }, { queue: false, duration: 500, easing: 'easeInOutSine' });
		}	
	}
	
	moveSide();
	
	$(window).scroll(function() {
		if (autoScroll == false) {
			moveSide();
		}
	});
	
	$("#side area").click(function() {
		autoScroll = true;
		var linkClass = $(this).attr("class");
		if ($(this).hasClass("top")) {
			var pos = 389;
		} else if ($(this).hasClass("cred")) {
			var offset = $("a#" + linkClass).offset();
			var pos = offset.top - 15;
		} else if ($(this).hasClass("vids")) {
			var offset = $("a#" + linkClass).offset();
			var pos = offset.top - 15;
		} else if ($(this).hasClass("contacts")) {
			var offset = $("a#" + linkClass).offset();
			var pos = offset.top - 38;
		}
		
		if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
		  var $target = $(this.hash);
		  $target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
		  if ($target.length) {
			var targetOffset = $target.offset().top - 25;
			$('html,body').animate({scrollTop: targetOffset}, {duration: 500 , easing: 'easeInOutSine', complete: function() {
																														   $('#side').animate({ top: pos + "px" }, 
            { queue: false, duration: 500, easing: 'easeInOutSine', complete: function() {
				autoScroll = false;
			}});
																														   }});
		   return false;
		  }
		}
	});
	
	$("form a").click(function() {
		$("form").submit();
		return false;
	});	
	
	var nameVal = "e.g. Bob";
	var emailVal = "e.g. bob@bobco.com";
	var msgVal = "Tell us about your project, or why you are getting in touch with us. Give us a number if you want calling back.";
	
	if ($("form .name").val() == '') {
		$("form .name").val(nameVal);
	}
	
	$("form .name").focus(function() {
		if ($(this).val() == nameVal) {
			$(this).val("");
		}		 
	});
	
	$("form .name").blur(function() {
		if ($(this).val() == '') {
			$(this).val(nameVal);
		}
	});
	
	if ($("form .email").val() == '') {
		$("form .email").val(emailVal);
	}

	$("form .email").focus(function() {
		if ($(this).val() == emailVal) {
			$(this).val("");
		}		 
	});
	
	$("form .email").blur(function() {
		if ($(this).val() == '') {
			$(this).val(emailVal);
		}
	});
	
	if ($("form .message").val() == '') {
		$("form .message").val(msgVal);
	}
	
	$("form .message").focus(function() {
		if ($(this).val() == msgVal) {
			$(this).val("");
		}		 
	});
	
	$("form .message").blur(function() {
		if ($(this).val() == '') {
			$(this).val(msgVal);
		}
	});
		
	function isValidEmailAddress(emailAddress) {
		var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
		return pattern.test(emailAddress);
	}
	
	$("form").submit(function() {
		$(".name").val($.trim($("<div>").html($(".name").val()).text()));
		$(".email").val($.trim($("<div>").html($(".email").val()).text()));
		$(".message").val($.trim($("<div>").html($(".message").val()).text()));
		
		if ($(".name").val() == '' || $(".name").val() == nameVal || $(".email").val() == '' || $(".email").val() == emailVal || $(".message").val() == '' || $(".message").val() == msgVal) {
			$("p.outcome").hide().removeClass("success").addClass("error").text("Looks like you missed a few fields").fadeInHandler();
			return false;	
		} else if (!isValidEmailAddress($(".email").val())) {
			$("p.outcome").hide().removeClass("success").addClass("error").text("That doesn't look like a valid e-mail address").fadeInHandler();
			return false;
		} else {
			$("p.outcome").hide().removeClass("error").removeClass("success").text("Sending...").fadeInHandler();
			$.post('index.php?ajax=me', { name: $(".name").val(), email: $(".email").val(), message: $(".message").val() }, function(data) {
				if (data == "success") {
					$("p.outcome").hide().removeClass("error").addClass("success").text("Thanks for your message " + $(".name").val()).fadeInHandler();
					$("form .name").val(nameVal);
					$("form .email").val(emailVal);
					$("form .message").val(msgVal);	
				} else {
					$("p.outcome").hide().removeClass("success").addClass("error").text("That didn't work, please try again :(").fadeInHandler();					
				}
			});
			return false;
		}
	});
	
	// latest tweet
	$.getJSON('http://api.twitter.com/1/statuses/user_timeline.json?screen_name=visrep&callback=?',function(tweet){
		validTweet = false;
		i = 0;
		while (!validTweet) {
			if (tweet[i].text.substring(0,1) != '@') {
				$("#tweet span.tweet").html(tweet[i].text.linkify_tweet());
				$("#tweet span.meta").html('<a href="http://twitter.com/visrep/status/' + tweet[i].id_str + '">' + jQuery.timeago(new Date(tweet[i].created_at.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, "$1 $2 $4 $3 UTC"))) + '</a> via ' + tweet[0].source);
				validTweet = true;
			} else {
				i++;
			}
		}
	});
			
	String.prototype.linkify_tweet = function() {
		var tweet = this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g, function(url) { 
		var wrap = document.createElement('div');
		var anch = document.createElement('a');
		anch.href = url;
		anch.target = "_blank";
		anch.innerHTML = url;
		wrap.appendChild(anch);
		return wrap.innerHTML;
		});
		tweet = tweet.replace(/(^|\s)@(\w+)/g, '$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');
		return tweet.replace(/(^|\s)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>');
	};
	
	/*
	// make corner twitch on load
	$(window).load(function() {
		$("#pageflip img").stop().delay(1000).animate({
				width: '100px',
				height: '100px'
			}, 500);
		$(".msg_block").stop().delay(1000).animate({
			width: '100px',
			height: '97px'
		}, 500, function() {
			$("#pageflip img").stop().delay(1000).animate({
				width: '50px',
				height: '52px'
			}, 220);
			$(".msg_block").stop().delay(1000).animate({
				width: '50px',
				height: '50px'
			}, 200); //Note this one retracts a bit faster (to prevent glitching in IE)
		});		
	});
	
	// corner flip
	$("#pageflip").hover(function() {
		$("#pageflip img , .msg_block").stop().animate({
			width: '307px',
			height: '319px'
		}, 500);
	} , function() {
		$("#pageflip img").stop().animate({
				width: '50px',
				height: '52px'
			}, 220);
		$(".msg_block").stop().animate({
			width: '50px',
			height: '50px'
		}, 200); //Note this one retracts a bit faster (to prevent glitching in IE)
	});
	*/
	
});
