 jQuery(function($) {
				 
	var animating = false;
	
	//Store the active floor plan and link
	var activeFloorPlan = $('.activeFloor').get(0);
	var activeFloorLink = $('.activeFloorLink').get(0);
	
	var first = $('#first').get(0);
	var second = $('#second').get(0);
	var basement = $('#basement').get(0);
	
	//Store a reference to the the link/floorplan in it's counterpart.
	$('.floorplan').each(function() {
		this.link = $('#navFloorplan a.' + this.id).get(0);
		this.link.floorplan = this;
	});
	
	 var stopAnimating = function() {
			 animating = false;
	};
	
	 var swap = function(el1, el2)
	 {
		var el1Attr = getAttributes(el1);
		var el2Attr = getAttributes(el2);
		
		 $(el1).animate(el2Attr, {complete:stopAnimating});
		 $(el2).animate(el1Attr);
	 };
	 
	 var animateTo = function(el, attributes)
	 {
		$(el).animate(attributes, {complete: stopAnimating}); 
	 };
	 
	 var getAttributes = function(el)
	 {
		 var attributes = ["height", "top", "left"];
		 var elAttr = {};
		 
		 for(var i = 0; i < attributes.length; i++)
			elAttr[attributes[i]] = el.style[attributes[i]];
			
		return elAttr;
	 }
	
	var onClick = function(event) {
		var floorplan, link;
		
		if($(this).hasClass('floorplan'))
		{
			floorplan = this;
			link = this.link;
		}
		else
		{
			link = this;
			floorplan = this.floorplan;
		}
		
		if(floorplan != activeFloorPlan && !animating)
		{
			animating = true;
			
			$(activeFloorPlan).removeClass("activeFloor");
			$(activeFloorLink).removeClass("activeFloorLink");
			
			var firstAttr = getAttributes(first);
			var secondAttr = getAttributes(second);
			var basementAttr = getAttributes(basement);
			
			if(activeFloorPlan == first)
			{
				if(floorplan == basement)
				{
					animateTo(basement, firstAttr);
					animateTo(second, basementAttr);
					animateTo(first, secondAttr);
				} else {
					swap(floorplan, activeFloorPlan);
				}
			}
			else if(activeFloorPlan == basement)
			{
				if(floorplan == first)
				{
					animateTo(first, basementAttr);
					animateTo(second, firstAttr);
					animateTo(basement, secondAttr);
				} else {
					swap(floorplan, activeFloorPlan);
				}
			}
			else
			{
				swap(floorplan, activeFloorPlan);
			}
			
			
			activeFloorPlan = floorplan;
			activeFloorLink = link;
			
			$(activeFloorPlan).addClass("activeFloor");
			$(activeFloorLink).addClass("activeFloorLink");
			
			event.preventDefault();
		}
	};
	 
	$('#navFloorplan a').bind("click",onClick);
	$('.floorplan').bind("click", onClick);
 
});