(function() {

	var PromotionsBox = window.PromotionsBox = function() {
		return new PromotionsBox.prototype.init();
	}

	var INITIAL_TAB = 0;
	var aLinks, aTabs;
	var bIsAnimating = false;
	var bIsLooping = true;
	var nCurrentTab = INITIAL_TAB, nTargetTab = 1;
	var oCurrentTab, oLoopCount, oNextNav, oPrevNav, oToggleNavBG, oToggleNavFG;

	function InitPromotionsBox() {

		/* Promotion Box Newsletter */
                var aLoginFields = $('#newsletterLogin input'), aRegisterFields = $('#newsletterRegister input');
		var oForm = $('#newsForm'), oFormAction = $('#formAction'), oFormState = $('#newsState'), oLogin = $('#checkboxLogin'), oRegister = $('#checkboxRegister');

		aLoginFields.focus(function() {
			if(oFormState.val() == 'register') {
				document.newsForm.reset();
				oFormAction.val('submitlogin');
                                oFormState.val('login');
                                oLogin.toggleClass('activeLink');
                                oRegister.toggleClass('activeLink');
                        }
		});

		aRegisterFields.focus(function() {
			if(oFormState.val() == 'login') {
				document.newsForm.reset();
				oFormAction.val('submitregister');
                                oFormState.val('register');
                                oLogin.toggleClass('activeLink');
                                oRegister.toggleClass('activeLink');
                        }
		});

		oLogin.click(function(e) {
                        e.preventDefault();

			if(oFormState.val() == 'register') {
				oFormState.val('login');
				oRegister.toggleClass('activeLink');
				$(this).toggleClass('activeLink');
			}
		});

		oRegister.click(function(e) {
                        e.preventDefault();

			if(oFormState.val() == 'login') {
				oFormState.val('register');
				oLogin.toggleClass('activeLink');
				$(this).toggleClass('activeLink');
			}
		});

		/* Promotion Box Navigation */
		aLinks = $('#promoBoxNavTextLinks li a');
	        aTabs = $('#promoBoxContent div.promoTab');

	        oCurrentTab = jQuery(aTabs[INITIAL_TAB]);
	        oLoopCount = $('#loopCount span');
	        oNextNav = $('#btnLoopNext');
	        oPrevNav = $('#btnLoopPrev');
	        oToggleNavBG = $('#btnLoopToggle');
	        oToggleNavFG = $('#btnLoopToggle span');

		oNextNav.click(function(e) {
			e.preventDefault();

			if(bIsLooping) StopLoop();

			if((nTargetTab + 1) == aTabs.length) {
				AnimateTab(oCurrentTab, jQuery(aTabs[0]));
			} else {
				AnimateTab(oCurrentTab, oCurrentTab.next());
			}
		});

		oPrevNav.click(function(e) {
			e.preventDefault();

			if(bIsLooping) StopLoop();

			if((nTargetTab - 1) < 0) {
				AnimateTab(oCurrentTab, jQuery(aTabs[aTabs.length - 1]));
			} else {
				AnimateTab(oCurrentTab, oCurrentTab.prev());
			}
		});

		oToggleNavBG.click(function(e) {
			e.preventDefault();

			if(bIsLooping) {
				StopLoop();
			} else {
				$(this).toggleClass('toggleOn').toggleClass('toggleOff');
				StartLoop();
			}
		});

		$(aLinks).click(function(e) {
			e.preventDefault();

			if(bIsLooping) StopLoop();

			oTargetTab = jQuery(aTabs[aLinks.index(this)]);

			AnimateTab(oCurrentTab, oTargetTab);
		});

		StartLoop();

	}

	function AnimateTab(currentTab, targetTab) {
	        oCurrentTab = currentTab, oTargetTab = targetTab;

	        if(oCurrentTab.attr('id') != oTargetTab.attr('id') && bIsAnimating === false) {
	                bIsAnimating = true;
	                oTargetTab.css({ opacity: 0 });

	                oCurrentTab.animate({ opacity: 0 }, 'slow').css({ top: '340px', zIndex: 1 });
	                oTargetTab.animate({ opacity: 1, top: 0 }, 'normal', 'easeOutQuint', function() { bIsAnimating = false; }).css({ zIndex: 2 });

	                nCurrentTab = aTabs.index(oCurrentTab);
	                nTargetTab = aTabs.index(oTargetTab);

	                oLoopCount.text((nTargetTab+1) + " of " + aTabs.length);

	                $(aLinks[nCurrentTab]).toggleClass('activeLink');
	                $(aLinks[nTargetTab]).toggleClass('activeLink');

	                oCurrentTab = oTargetTab;
	        }
	}

	function StartLoop() {
	        bIsLooping = true;

	        oToggleNavFG.css({ height: '12px' });
	        oToggleNavFG.animate({ height: '1px' }, 10000, 'linear', function() {
	                if((nTargetTab + 1) == aTabs.length) {
	                        AnimateTab(oCurrentTab, jQuery(aTabs[0]));
	                } else {
	                        AnimateTab(oCurrentTab, oCurrentTab.next());
	                }

	                StartLoop();
	        });
	}

	function StopLoop() {
	        bIsLooping = false;

	        oToggleNavFG.stop(true);
	        oToggleNavFG.css({ height: '12px' });
	        $(oToggleNavBG).toggleClass('toggleOn').toggleClass('toggleOff');
	}

	PromotionsBox.prototype = {
		init : function() {
			InitPromotionsBox();
		}
	}

	
})();
