/* Calculate Initial Values when DOM is ready */
var leftStart			=	0;
var midStart			=	0;
var rightStart			=	0;
var slides				= 	new Array();
var slideHolder			= 	null;
var slideMargin			= 	null;
var slideWidth			= 	null;
var slidesWidth			= 	null;
var availableWidth		= 	null;
var firstItemPosition	= 	null;
var lastItemPosition	= 	null;
var midItemPosition		= 	null;
var animating			= 	false;
var wrapper				=	false;
var leftVanishPoint		=	null;
var virtualSlidesWidth	=	null;
var animationSpeed		=	null;
var animationEffect		=	null;
var baloonSelector		=	null;
var switchSelector		=	null;
/* Configurable Variables */
slideSelector 		=	"div#carousel-slides div.slide";
slideHolder			=	"carousel-slides";
wrapper				=	"carousel-wrapper";
baloonSelector		=	"div#baloons div.baloon";
switchSelector		=	"div#controls ul li a";
animationSpeed		=	500;
animationEffect		=	Fx.Transitions.Cubic.easeIn;
window.addEvent('domready',function()
{	
	slides				=	$$(slideSelector);
	slideMargin			=	slides[0].getStyle("marginLeft").toInt() 
						+ 	$$("div.slide")[0].getStyle("marginRight").toInt();
	slideWidth			=	slides[0].offsetWidth.toInt();
	slidesWidth 		=	slides.length.toInt() 
						*	(slideMargin+slideWidth);	
	virtualSlidesWidth 	=	(slides.length.toInt() + 2) 
						*	(slideMargin+slideWidth);	
	$(slideHolder).setStyles({'width':virtualSlidesWidth,'marginLeft':((slidesWidth-virtualSlidesWidth)/2)});
	availableWidth		=	$(wrapper).offsetWidth.toInt();	
	firstItemPosition	=	(availableWidth/2)
						-	(slidesWidth/2)
						-	((slidesWidth-virtualSlidesWidth)/2);
	if(window.ie6)firstItemPosition-=85;
	midItemPosition		=	firstItemPosition 
						+	(slideWidth+slideMargin);
	lastItemPosition	=	firstItemPosition 
						+	(slideWidth+slideMargin)*2;
	leftVanishPoint		=	firstItemPosition
						-	(slideWidth + slideMargin);
	rightVanishPoint	=	lastItemPosition
						+	(slideWidth + slideMargin);
	slides[0].addClass('leftShift');
	slides[1].addClass('midShift');
	slides[2].addClass('rightShift');
	initiateAnimation();
	$$(slideSelector).addEvent('click',decideAndShift);
	$$(baloonSelector).each(function(node,index)
	{
		var switches=$$(switchSelector);
		node.setStyles({'left':switches[index].getLeft()-$("pageContainer").getLeft(),'top':switches[index].getTop()});
	});
	$$(switchSelector).each(function(node)
	{
		node.addEvent('click',function(e)
	    {
			decideAndShift(e,$(this.getParent().className));
	    });
	});
	$$(baloonSelector + " a").each(function(node)
	{
		node.addEvent('click',function()
		{
			if(animating==true)return;
			$$("div.mid")[0].addClass("altContent");
			$$('div.mid')[0].getElement('div.info').setStyle('display','block');
			this.getParent().setStyle('display','none');
		});
	});
	$$("div.info a.back").addEvent('click',backMethod);
});
backMethod=function()
{
	animating=true;
	this.getParent().getParent().removeClass('altContent');
	var mybaloon=$($$("div.mid a.portrait")[0].rel + "-baloon");
	mybaloon.setStyles({'opacity':'0.01','display':'block'});
	mybaloon.effect("opacity",{duration:animationSpeed/2,transition:animationEffect}).start(mybaloon.getStyle("opacity"),1).chain(function(){animating=false;});
}
function decideAndShift(e,obj)
{	
	var source =null
	if(!obj) source = this;
	else source=obj;
	
	if(source.hasClass('left'))shiftRight();
	if(source.hasClass('right'))shiftLeft();
}
function initiateAnimation()
{
	if(animating==true)return;
	animating=true;
	$$("div.leftShift")[0].effect("marginLeft",{duration:animationSpeed,transition:animationEffect}).start($$("div.leftShift")[0].getStyle('marginLeft'),firstItemPosition).chain(function()
	{
		$$("div.leftShift")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.leftShift")[0].getStyle("opacity"),0.3);
		$$("div.midShift")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.midShift")[0].getStyle("opacity"),1);
		$$("div.rightShift")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.rightShift")[0].getStyle("opacity"),0.3).chain(function()
		{
			$$("div.leftShift")[0].addClass("left");
			$$("div.leftShift")[0].removeClass("leftShift");	
			$$("div.midShift")[0].addClass("mid");
			$$("div.midShift")[0].removeClass("midShift");	
			$$("div.rightShift")[0].addClass("right");
			$$("div.rightShift")[0].removeClass("rightShift");	
			animating=false;			
			baloonFocus();			
		});		
	});
}
function shiftLeft()
{
	if(animating==true)return;	
	animating=true;
	$$("div.info").setStyle('display','none');
	var leftShifter=$$("div.mid")[0];
	var midShifter=$$("div.right")[0];
	var vanishShifter=$$("div.left")[0];
	var newLeftShifter=vanishShifter.clone();
	newLeftShifter.addEvent('click',decideAndShift);
	newLeftShifter.getElements('a.back')[0].addEvent('click',backMethod);
	newLeftShifter.setStyle('marginLeft','0');
	newLeftShifter.injectAfter(midShifter);
	vanishShifter.effect("marginLeft",{duration:animationSpeed,transition:animationEffect}).start(vanishShifter.getStyle("marginLeft"),leftVanishPoint).chain(function()
	{
		vanishShifter.remove();
		leftShifter.setStyle('marginLeft',firstItemPosition);
		slides				=	$$(slideSelector);
		slides[0].className	=	"slide left";
		slides[1].className	=	"slide mid";
		slides[2].className	=	"slide right";
		$$("div.left")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.left")[0].getStyle("opacity"),0.3);
		$$("div.mid")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.mid")[0].getStyle("opacity"),1);
		$$("div.right")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.right")[0].getStyle("opacity"),0.3).chain(function()
		{
			animating=false;
			baloonFocus();			
		});
		
	});	
}
function shiftRight()
{
	if(animating==true)return;
	animating=true;
	$$("div.info").setStyle('display','none');	
	var rightShifter=$$("div.mid")[0];
	var midShifter=$$("div.left")[0];
	var vanishShifter=$$("div.right")[0];
	var newRightShifter=vanishShifter.clone();
	newRightShifter.setStyle('marginLeft',leftVanishPoint);
	midShifter.setStyle('marginLeft',0);
	newRightShifter.addEvent('click',decideAndShift);	
	newRightShifter.getElements('a.back')[0].addEvent('click',backMethod);
	newRightShifter.injectBefore(midShifter);
	newRightShifter.effect("marginLeft",{duration:animationSpeed,transition:animationEffect}).start(vanishShifter.getStyle("marginLeft"),firstItemPosition).chain(function()
	{
		vanishShifter.remove();
		slides				=	$$(slideSelector);
		slides[0].className	=	"slide left";
		slides[1].className	=	"slide mid";
		slides[2].className	=	"slide right";
		$$("div.left")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.left")[0].getStyle("opacity"),0.3);
		$$("div.mid")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.mid")[0].getStyle("opacity"),1);
		$$("div.right")[0].effect("opacity",{duration:animationSpeed,transition:animationEffect}).start($$("div.right")[0].getStyle("opacity"),0.3).chain(function()
		{
			animating=false;
			baloonFocus();
		});
	});	
}
function baloonFocus()
{	
	animating=true;
	$$(switchSelector).removeClass('active');
	$$(baloonSelector).each(function(node,idx)
	{
		if(node.id != $$("div.mid a.portrait")[0].rel + "-baloon")
			node.effect("opacity",{duration:animationSpeed/2,transition:animationEffect,onComplete:function(a){(a.setStyle('display','none'));}}).start(node.getStyle("opacity"),0);
	});
	$($$("div.mid a.portrait")[0].rel + "-baloon").setStyle('opacity','0.01');
	$($$("div.mid a.portrait")[0].rel + "-baloon").setStyle('display','block');	
	$($$("div.mid a.portrait")[0].rel + "-baloon").effect("opacity",{duration:animationSpeed/2,transition:animationEffect}).start($($$("div.mid a.portrait")[0].rel + "-baloon").getStyle("opacity"),1).chain(function(){animating=false;});		
	$($$("div.mid a.portrait")[0].rel + "-switch").addClass('active');		
}