;(function($){
var ms = {};
window.ms = ms;
var is_msie8_or_lower = $.browser.msie && parseInt($.browser.version.substr(0,1)) <= 8;
var is_msie7_or_lower = $.browser.msie && parseInt($.browser.version.substr(0,1)) <= 7;

function linkParent( item ) {
	$(item).each(function() {
		var href = $(this).attr('href');
		$(this).parent().click( function() {
			document.location = href;
		});
		$(this).parent().css('cursor','pointer');
		$(this).parent().hover(function(){$('a',this).toggleClass('hover');});
	});
}
window.L = [];
function onImageLoad( src, f ) {
	var img = $('<img>', {'style': 'display: none'});
	img.load(function(){
		img.detach();
		window.L.push(function(){f(src);});
		f(src);
	});
	img.attr('src',src);
	$('body').append(img);
}
$.fn.vertical_center = function() {
	this.each(function() {
		var node = $(this);
		node.css({
			'margin-top': (node.parent().height() - node.height())/2,
			'margin-bottom': (node.parent().height() - node.height())/2
		});
	});
};
function banners() {
	var bannerElement = '#banner_img';
	var images = [];
	$('#banner_img div.image').not('div.lowres').each(function() {
		images.push({
			path: $(this).css('background-image').replace(/url\("?'?([^\)'"]+)'?"?\).*/,'$1'),
			element: this,
			loaded: false
		});
	});
	var lowres = $(bannerElement + ' div.lowres');
	lowres.css({'z-index': '2'});

	var ANIMATION_TIME = 250;
	var TIMEOUT = 3000;
	var current = -1;
	var num = images.length;
	var focused = true;
	$(window).bind('focus', function() { focused = true; });
	$(window).bind('blur', function() { focused = false; });
	function cycle() {
		if (!focused)
			return;
		var sCurrent = (current + 1) % num;
		while (!images[sCurrent].loaded) {
			sCurrent = (sCurrent + 1) % num;
			if (sCurrent == current || current == -1 && sCurrent == 0) {
				return; // nobody is loaded
			}
		}
		var cur = (current != -1) ? $(images[current].element) : lowres;
		var next = $(images[sCurrent].element);
		current = sCurrent;
		next.css('z-index',1);
		next.css('opacity',1);
		if (!is_msie8_or_lower) {
			cur.animate({'opacity':0},ANIMATION_TIME,'linear', function() {
				cur.css('z-index',0);
				next.css('z-index',2);
			});
		} else {
			cur.css({'opacity':0});
			cur.css('z-index',0);
			next.css('z-index',2);
		}
	}
	setInterval(cycle, TIMEOUT);
	cycle();
	
	var firstLoaded = false;
	var imageLoaded = function(img) {
		for( var i in images ) {
			if (img == images[i].path) {
				images[i].loaded = true;
				$(images[i].element).css({'z-index': '0'}).removeClass('hidden');
				if (!firstLoaded) {
					cycle();
					firstLoaded = true;
				}
			}
		}
	};
	for ( var i in images ) {
		onImageLoad( images[i].path, imageLoaded );
	}
}
function nav() {
	var HIDDEN_TOP = $('#banner_overlay').height();
	var ANIMATION_TIME = 500;
	var EASING = 'swing';
	var animateOverlay = function(overlay, z, top_offset) {
		overlay.css('z-index', z);
		var css = {	'top': top_offset };
		if (!is_msie8_or_lower) {
			if (overlay.offset().top != top_offset) {
				overlay.animate(css, ANIMATION_TIME, EASING);
			}
		} else {
			overlay.css(css);
		}
	};
	var hideOverlays = function() {
		$('#banner_overlay div.item').each(function(){
			if($(this).position().top != HIDDEN_TOP) {
				animateOverlay($(this), 1, HIDDEN_TOP);
			}
		});
	};
	var showOverlay = function(title) {
		$('#banner_overlay div.item').each(function(){
			if($.trim($('h1', this).text()) == title) {
				animateOverlay($(this), 2, 0);
			} else {
				animateOverlay($(this), 1, HIDDEN_TOP);
			}
		});
	};
	var showDefault = function() {
		if (ms.defaultOverlay != null) {
			showOverlay(ms.defaultOverlay);
		} else {
			hideOverlays();
		}
	};
	// add the separator
	//$('#nav li:not(:last-child)').after($('<li>',{'class':'separator'}));
	// call the menu extension
	$('#nav > ul').submenus({
		attach: '#nav',
		onShow: function(li, menu) {
			$('img', li).vertical_center();
			showOverlay($.trim(li.text()));
		},
		onHideAll: function() {
			showDefault();
		}
	});
	$('#nav ul.root a').click(function(){
		if ($(this).attr('href') == '#')
			return false;
		else
			return true;
	});
	$('#banner_overlay div.item').css({top: HIDDEN_TOP});
	showDefault();
}
function content_height() {
	if (is_msie7_or_lower)
		return;
	var nav = $('#middle div.nav');
	var cont = $('#middle div.content');
	var right = $('#middle div.right');
	var f = function() {
		cont.css('height','');
		if (cont.height() > right.height()) {
			right.height(cont.height());
		} else {
			cont.height(right.height());
		}
		nav.height(cont.height());
	}
	if (cont.size() != 0) {
		$(window).load(f);
		cont.bind('resize', f);
		$('img').bind('load',f);
		f();
	}
}
function fixMiddle() {
	$('#middle').wrap($('<div>',{'id':'middle_cont'}));
	$('#middle_cont').append($('<div>',{'class':'grass'}));
}
function setupForm(where) {
	function send() {
		var data = {};
		$('input, textarea',$(where)).each(function(){
			var node = $(this);
			if (node.is(':checkbox')) {
				data[node.attr('name')] = this.checked;
			} else {
				data[node.attr('name')] = node.val();
			}
		});
		$.post('/request-an-estimate.php?ajax', data, function(response) {
			if (response.match('captcha')) {
				$('span.captcha_error').detach();
				$('div.button').after('<span class="captcha_error">Please retry the CAPTCHA</span>');
				Recaptcha.reload();
			} else {
				$('form.ms').after('<h2>Thank you for your request!</h2>');
				$('form.ms').detach();
				$('span.captcha_error').detach();
			}
		});
		return false;
	}

	$(where).validate({
		submitHandler: function() {
			return send();
		}
	});

	$('div.button', $(where)).click(function() {
		$(where).submit();
	});
}
ms.setupForm = setupForm;
function photoGallery() {
	if ($('#gallery').size() == 0)
		return;
	var re = /\/([\d]+)/;
	var setNum = re.exec(document.location.href);
	if (setNum != null)
		setNum = setNum[1];
	else
		return;
	re = new RegExp(setNum);
	$('#middle div.nav li a').each(function() {
		var result = re.exec($(this).attr('href'));
		if (result != null)
			$(this).parent().addClass('active');
	});
}

$(document).ready(function(){
	fixMiddle();
	banners();
	nav();
	linkParent('#top_nav a');
	content_height();
	photoGallery();
	if ($('#estimate').size() != 0) {
		setupForm('#estimate');
	}
});
Modernizr.load([
	{
	 test: $.browser.msie && parseInt($.browser.version.substr(0,1)) <= 7,
	 yep: ['/resources/polyfill/ie7.js','/resources/polyfill/ie7.css']
	},
	{
	 test: $.browser.msie && parseInt($.browser.version.substr(0,1)) <= 8,
	 yep: ['/resources/polyfill/ie8.js','/resources/polyfill/ie8.css']
	}
]);

})(jQuery);

