$(document).ready(function() {
	initDoc();
});

function initDoc() {

	/***************************************************************/
	// Carousel
	/***************************************************************/
	var $interval=7000;
	$('#carousel-holder img:gt(0)').css('display','none');
	$('#carousel-holder').each(function() {
		var $numberOfImages=$('#carousel-holder img').length-1;
		var $currentImage=0;
		
		$('#carousel ol li').each(function() {
			$(this).click(function() {
				$thisIndex=$("#carousel ol").find('li').index(this);
				if ($thisIndex!=$currentImage) {
					scrollToImage($thisIndex);
				}				
				return false;
			});
		});

		function scrollToImage($index) {
			clearTimeout($intervalID);
			$('#carousel-holder img:eq('+$currentImage+')').fadeOut('slow');
			$thisThumb=$('#carousel ol li:eq('+$currentImage+') img');
			$thisThumb.attr('src','/assets/images/buttons/carousel.png');
			$thisThumb.addClass('rollover');
			$currentImage=$index;
			$('#carousel-holder img:eq('+$currentImage+')').fadeIn('slow');
			$thisThumb=$('#carousel ol li:eq('+$currentImage+') img');
			$thisThumb.attr('src','/assets/images/buttons/carousel-over.png');
			$thisThumb.removeClass();
		}

		function nextImage() {
			$index=$currentImage+1;
			if ($index>$numberOfImages) {
				$index=0;
			}
			scrollToImage($index);
			$intervalID=setTimeout(nextImage,$interval);
		}

		function prevImage() {
			$index=$currentImage-1;
			if ($index<0) {
				$index=$numberOfImages;
			}
			scrollToImage($index);
			$intervalID=setTimeout(nextImage,$interval);
		}

		$intervalID=setTimeout(nextImage,$interval);
	});
	
	/***************************************************************/
	// Testimonials show/hide
	/***************************************************************/
	$('#body-content article a.more').click(function() {
		$thisIndex=$('#body-content article').find('a.more').index(this); //Get index
		$thisContent=$('#body-content article div.more:eq('+$thisIndex+')');
		if ($thisContent.css('display')!='none') {
			$thisContent.slideUp();
		} else {
			$thisContent.slideDown();
		}
		return false;
	});
	
	/***************************************************************/
	// Calculators
	/***************************************************************/
	$('#mortgage-calculator-form').each(function() {
		$(this).submit(function() {
			$('#result').css('display','none');
		
			var $amount=$("#amount").val();
			$amount=$amount.replace(/[^a-zA-Z 0-9]+/g,'');
			$amount=parseFloat($amount);
			var $term=parseFloat($("#term").val());
			$term=$term*12;
			var $type=parseFloat($("#type").val());
			$type=$type/1200;
		
			var $error=false;
			var $response='';
		
			if (!jQuery.isInteger($amount)) {
				$error=true;
				$response='Please enter a numerical value for Mortgage amount';
			}
		
			if ($error) {
				alert($response);
				return false;
			} else {
				var $monthly=jQuery.calcMonthly($amount,$type,$term).toFixed(2);
				
				$('#result dl dd').html('&euro;'+jQuery.addCommas($monthly));
				$('#result').fadeIn('slow');
				
				return false;
			}
		});

	});
	
	/***************************************************************/
	// Fancybox
	/***************************************************************/
	$("a.calculator").click(function() {
		$.fancybox({
			'padding'		: 0,
			'autoScale'		: false,
			'overlayOpacity': 0.6,
			'overlayColor'	: '#000',
			'transitionIn'	: 'fade',
			'transitionOut'	: 'fade',
			'speedIn'		: 400,
			'speedOut'		: 400,
			'width'			: 458,
			'height'		: 530,
			'href'			: $(this).attr('href'),
			'type'			: 'iframe'
		});
		return false;
	});

	/***************************************************************/
	// Form validation
	/***************************************************************/
	$('#callback-form').each(function() {
	
		$("#callback-name, #callback-email, #callback-phone, #callback-type").focus(function() {
			$(this).css("color","#666");
			$(this).css("background-color","#fff");
		});
	
		$(this).submit(function() {
			var $name=$("#callback-name").val();
			var $nameDefault=$("#callback-name").attr("rel");
			var $email=$("#callback-email").val();
			var $emailDefault=$("#callback-email").attr("rel");
			var $phone=$("#callback-phone").val();
			var $phoneDefault=$("#callback-phone").attr("rel");
			var $type=$("#callback-type").val();
		
			var $error=false;
		
			if (!jQuery.isString($name) || $name==$nameDefault) {
				$error=true;
				$("#callback-name").css("color","#fff");
				$("#callback-name").css("background-color","#cc0000");
				$("#callback-name").val($nameDefault);
			}
			
			if (!jQuery.isEmail($email)) {
				$error=true;
				$("#callback-email").css("color","#fff");
				$("#callback-email").css("background-color","#cc0000");
				$("#callback-email").val($emailDefault);
			}
		
			if (!jQuery.isString($phone) || $phone==$phoneDefault) {
				$error=true;
				$("#callback-phone").css("color","#fff");
				$("#callback-phone").css("background-color","#cc0000");
				$("#callback-phone").val($phoneDefault);
			}
			
			if ($type=="") {
				$error=true;
				$("#callback-type").css("color","#fff");
				$("#callback-type").css("background-color","#cc0000");
			}
					
			if ($error) {
				return false;
			}
		});
	
	});
	
	$('#contact-form').each(function() {
	
		$("#contact-name, #contact-email, #contact-phone, #contact-type").focus(function() {
			$(this).css("color","#666");
			$(this).css("background-color","#fff");
		});
	
		$(this).submit(function() {
			var $name=$("#contact-name").val();
			var $nameDefault=$("#contact-name").attr("rel");
			var $email=$("#contact-email").val();
			var $emailDefault=$("#contact-email").attr("rel");
			var $phone=$("#contact-phone").val();
			var $phoneDefault=$("#contact-phone").attr("rel");
			var $type=$("#contact-type").val();
		
			var $error=false;
		
			if (!jQuery.isString($name) || $name==$nameDefault) {
				$error=true;
				$("#contact-name").css("color","#fff");
				$("#contact-name").css("background-color","#cc0000");
				$("#contact-name").val($nameDefault);
			}
			
			if (!jQuery.isEmail($email)) {
				$error=true;
				$("#contact-email").css("color","#fff");
				$("#contact-email").css("background-color","#cc0000");
				$("#contact-email").val($emailDefault);
			}
		
			if (!jQuery.isString($phone) || $phone==$phoneDefault) {
				$error=true;
				$("#contact-phone").css("color","#fff");
				$("#contact-phone").css("background-color","#cc0000");
				$("#contact-phone").val($phoneDefault);
			}
			
			if ($type=="") {
				$error=true;
				$("#contact-type").css("color","#fff");
				$("#contact-type").css("background-color","#cc0000");
			}
		
			if ($error) {
				return false;
			} else {
				return true;
			}
		});
	
	});
	
	/***************************************************************/
	// General document enhancements
	/***************************************************************/
	$("a.email").each(function() { //Email address obfuscation
		e = this.rel.replace("/","@");
		this.href = "mailto:"+e;
		$(this).text($(this).attr("title"));
	});

	$("a.external").click(function() { window.open(this.href); return false; }); //External site link
	
	$(".rollover").each(function() { jQuery.preLoadImages(jQuery.imageOver($(this))); }); //Rollover image preload

	$(".rollover").hover(
		function() { $(this).attr("src",jQuery.imageOver($(this))); },
		function() { $(this).attr("src",jQuery.imageOff($(this))); }
	);
	
	$(".cleartext").each (function() { this.rel=this.value; }); //Clear input text

	$(".cleartext").focus(function() { if (this.value==this.rel) { this.value=''; } });

	$(".cleartext").blur(function() { if (this.value=='') { this.value=this.rel; } });
	
	/***************************************************************/
	// Load tweets
	/***************************************************************/
	$("#twitter_update_list").each(function() {
		$.getScript('http://twitter.com/javascripts/blogger.js');
		$.getScript('http://twitter.com/statuses/user_timeline/Stephen_Red.json?callback=twitterCallback2&count=1');
	});
	
	/***************************************************************/
	// Images to preload
	/***************************************************************/
	jQuery.preLoadImages("/assets/js/fancybox/fancy_close-over.png");

}

(function($) {

	var cache=[]; //Preload images
	$.preLoadImages=function() {
		var args_len = arguments.length;
		for (var i = args_len; i--;) {
			var cacheImage = document.createElement('img');
			cacheImage.src = arguments[i];
			cache.push(cacheImage);
		}
	}

	$.imageOver=function($el) { //Rollover image
		if($($el).attr("src").indexOf("-over")==-1) {
			var newSrc = $($el).attr("src").replace(".gif","-over.gif");
			newSrc = newSrc.replace(".jpg","-over.jpg");
			newSrc = newSrc.replace(".png","-over.png");
			return newSrc;
		}
	}
	
	$.imageOff=function($el) { //Rollout image
		if($($el).attr("src").indexOf("-over")!=-1) {
			var oldSrc = $($el).attr("src").replace("-over.gif",".gif");
			oldSrc = oldSrc.replace("-over.jpg",".jpg");
			oldSrc = oldSrc.replace("-over.png",".png");
			return oldSrc;
		}
	}
	
	$.isString=function($str) {  //Data type validation
		if ($str.length!="") { return true; } else { return false;}
	}
	
	$.isEmail=function($str) {
		var regex=new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
		return regex.test($str);
	}
	
	$.isInteger=function($str) {
		return ($str.toString().search(/^-?[0-9]+$/) == 0);
	}
	
	$.calcMonthly=function(amt,ir,term) {
		var total=1;

		for (i=0;i<term;i++) {
			total = total * (1 + ir);
		}
		mp = amt * ir / ( 1 - (1/total));

		return (mp*100)/100;
	}
		
	$.addCommas=function($str) {
		$str += '';
		x = $str.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}


})(jQuery)
