var PromoShow = new Class({

	initialize: function( strHtmlId, bUseTabs, fnAfterInit )
	{
		
		this.strHtmlId = strHtmlId;

		if( bUseTabs == false )
		{
			this.bUseTabs = bUseTabs;
		}
		else
		{
			this.bUseTabs = true;
		}

		this.objData = new Object();
		this.objData.aryPromos = new Array();

		
		this.objSettings = new Object();

		
		this.objSettings.intTimer = 5;

	
		this.objSettings.intClickTimer = 10;

	
		this.objSettings.bHoverFade = false;

	
		if( this.bUseTabs )
		{
			tmpTabBorder = $( 'promo-tabs' );
			this.objData.objTabBorderEffect = new Fx.Morph( tmpTabBorder, { transition: Fx.Transitions.Sine.easeOut, link: 'chain' } );

		
			this.intCurrentTab = 0;
		}

	
		this.intIntervalId = 0;

		this.intCurrentTab = 0;

	
		if( $chk( fnAfterInit ))
		{
		
			fnAfterInit();
		}
	},

	addPromo: function( strPromoIdAppend, strPromoBorderColor, strColorDefaultBG, strColorDefaultBorder, strColorDefaultText, strColorHoverBG, strColorHoverBorder, strColorHoverText, strColorSelectedBG, strColorSelectedBorder, strColorSelectedText )
	{
		objPromo = new Object();
		objPromo.strPromoIdAppend = strPromoIdAppend;
		objPromo.intZIndex = 4998 - this.objData.aryPromos.length;

		if( this.bUseTabs )
		{
			objPromo.strPromoBorderColor = strPromoBorderColor;

			
			objPromo.strColorDefaultBG = strColorDefaultBG;
			objPromo.strColorDefaultBorder = strColorDefaultBorder;
			objPromo.strColorDefaultText = strColorDefaultText;

			
			objPromo.strColorHoverBG = strColorHoverBG;
			objPromo.strColorHoverBorder = strColorHoverBorder;
			objPromo.strColorHoverText = strColorHoverText;

			
			objPromo.strColorSelectedBG = strColorSelectedBG;
			objPromo.strColorSelectedBorder = strColorSelectedBorder;
			objPromo.strColorSelectedText = strColorSelectedText;

			
			objPromoTab = $( 'promo-tab_' + objPromo.strPromoIdAppend );
			objPromoTabLink = objPromoTab.getElement( 'a' );
			objPromo.objTabEffect = new Fx.Morph( objPromoTabLink, { duration: 'short', link: 'cancel' } );
		}

		
		objPromoImage = $( 'promo-main_' + objPromo.strPromoIdAppend );
		if( !this.bUseTabs )
		{
			objPromo.objImageEffect = new Fx.Morph( objPromoImage, { duration: 1, link: 'chain' } );
		}
		else
		{
			objPromo.objImageEffect = new Fx.Morph( objPromoImage, { link: 'chain' } );
		}

	
		this.objData.aryPromos.push( objPromo );
	},

	
	startTimer: function()
	{
		this.intIntervalId = this.advancePromo.periodical( this.objSettings.intTimer * 1000, this );
	},

	stopTimer: function()
	{
		this.intIntervalId = $clear( this.intIntervalId );
	},

	
	clickTimer: function()
	{
		this.stopTimer();
		this.intIntervalId = this.startTimer.delay( ( this.objSettings.intClickTimer - this.objSettings.intTimer ) * 1000 , this )
	},

	
	advancePromo: function()
	{
		
		intNextTab = this.intCurrentTab + 1;

	
		if( intNextTab >= this.objData.aryPromos.length )
		{
		
			intNextTab = 0;
		}

		
		this.intCurrentTab = intNextTab;

		
		this.attach();
	},

	
	randomPromo: function()
	{
		
		this.intCurrentTab = Math.floor( Math.random() * this.objData.aryPromos.length );

		
		this.attach();
	},

	attach: function()
	{
		this.clearTabs();
		this.refreshTabActions();
		this.refreshTabStyles();
	},

	
	clearTabs: function()
	{
		if( this.bUseTabs )
		{
			
			for( var i=0, intLen = this.objData.aryPromos.length; i < intLen; i++ )
			{
				
				objPromoData = this.objData.aryPromos[ i ];

				objPromoTab = $( 'promo-tab_' + objPromoData.strPromoIdAppend );

			
				objPromoTab.removeEvents( 'mouseover' );
				objPromoTab.removeEvents( 'mouseout' );
				objPromoTab.removeEvents( 'click' );

				if( objPromoTab.hasClass( 'selected' ))
				{
					objPromoTab.removeClass( 'selected' );
					this.intCurrentTab = i;
				}
			}
		}
	},

	
	refreshTabActions: function()
	{
		if( this.bUseTabs )
		{
			
			for( var i=0, intLen = this.objData.aryPromos.length; i < intLen; i++ )
			{
				
				objPromoData = this.objData.aryPromos[ i ];

				objPromoTab = $( 'promo-tab_' + objPromoData.strPromoIdAppend );

				
				objPromoTab.removeEvents( 'mouseover' );
				objPromoTab.removeEvents( 'mouseout' );
				objPromoTab.removeEvents( 'click' );

				if( this.intCurrentTab != i)
				{
				
					objPromoTab.addEvent( 'mouseover', this.handle_tabMouseToggle.bindWithEvent( this ));

					
					objPromoTab.addEvent( 'mouseout', this.handle_tabMouseToggle.bindWithEvent( this ));

					
					objPromoTab.addEvent( 'click', this.handle_tabClick.bindWithEvent( this ));
				}
			}
		}
	},

	
	refreshTabStyles: function()
	{
		
		for( var i=0, intLen = this.objData.aryPromos.length; i < intLen; i++ )
		{
			
			objPromoData = this.objData.aryPromos[ i ];
			objPromoImage = $( 'promo-main_' + objPromoData.strPromoIdAppend );

			if( this.bUseTabs )
			{
				objPromoTab = $( 'promo-tab_' + objPromoData.strPromoIdAppend );
				objPromoTabLink = objPromoTab.getElement( 'a' );
			}

			if( this.intCurrentTab == i)
			{
				

				if( this.bUseTabs )
				{				
					
					objPromoData.objTabEffect.start({
						'border-color': this.objData.aryPromos[ this.intCurrentTab ].strColorSelectedBorder,
						'color': this.objData.aryPromos[ this.intCurrentTab ].strColorSelectedText,
						'background-color': this.objData.aryPromos[ this.intCurrentTab ].strColorSelectedBG
					});

					
					this.objData.objTabBorderEffect.start({
						'background-color': this.objData.aryPromos[ this.intCurrentTab ].strPromoBorderColor
					});
				}

			
				objPromoImage.setStyle( 'z-index', '4999' );

				
				objPromoData.objImageEffect.start({
					'opacity': 1
				});
			}
			else
			{
				

				if( this.bUseTabs )
				{
					
					objPromoData.objTabEffect.start({
						'border-color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBorder,
						'color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultText,
						'background-color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBG
					});
				}

				
				objPromoImage.setStyle( 'z-index', objPromoData.intZIndex.toString() );

				
				objPromoData.objImageEffect.start({
					'opacity': 0
				});
			}
		}
	},

	
	handle_tabMouseToggle: function( objEvent )
	{
		objEvent = new Event( objEvent );

		
		objParent = objEvent.target.getParent();

	
		if( objParent.get( "tag" ) == "li" )
		{
			
			objPromoTab = objParent;

			objPromoTabLink = objPromoTab.getElement( 'a' );

			
			strTabIdAppend = objPromoTab.id.split( "_" )[ 1 ];

			if( this.objSettings.bHoverFade )
			{
				
				for( var i=0, intLen = this.objData.aryPromos.length; i < intLen; i++ )
				{
					
					if( this.objData.aryPromos[ i ].strPromoIdAppend == strTabIdAppend )
					{
						
						intHoverTab = i;
						break;
					}
				}
			}

			if( objEvent.type == "mouseover" )
			{
				
				if( this.objSettings.bHoverFade && typeof( intHoverTab ) != 'undefined' )
				{
					this.objData.aryPromos[ intHoverTab ].objTabEffect.start({
						'border-color': this.objData.aryPromos[ this.intCurrentTab ].strColorHoverBorder,
						'color': this.objData.aryPromos[ this.intCurrentTab ].strColorHoverText,
						'background-color': this.objData.aryPromos[ this.intCurrentTab ].strColorHoverBG
					});
				}
				else
				{
					objPromoTabLink.setStyle( 'border-color', this.objData.aryPromos[ this.intCurrentTab ].strColorHoverBorder );
					objPromoTabLink.setStyle( 'color', this.objData.aryPromos[ this.intCurrentTab ].strColorHoverText );
					objPromoTabLink.setStyle( 'background-color', this.objData.aryPromos[ this.intCurrentTab ].strColorHoverBG );
				}

			}
			else
			{
				
				if( this.objSettings.bHoverFade && typeof( intHoverTab ) != 'undefined' )
				{
					this.objData.aryPromos[ intHoverTab ].objTabEffect.start({
						'border-color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBorder,
						'color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultText,
						'background-color': this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBG
					});
				}
				else
				{
					objPromoTabLink.setStyle( 'border-color', this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBorder );
					objPromoTabLink.setStyle( 'color', this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultText );
					objPromoTabLink.setStyle( 'background-color', this.objData.aryPromos[ this.intCurrentTab ].strColorDefaultBG );
				}
			}
		}
	},

	
	handle_tabClick: function( objEvent )
	{
		
		objEvent = new Event( objEvent ).stop();

		
		objEvent.stopPropagation();

		
		objParent = objEvent.target.getParent();

		
		if( objParent.get( "tag" ) == "li" )
		{
			
			objClickedTab = objParent;

			
			objClickedTabLink = objClickedTab.getElement( 'a' );

			
			strTabIdAppend = objClickedTab.id.split( "_" )[ 1 ];

		
			for( var i=0, intLen = this.objData.aryPromos.length; i < intLen; i++ )
			{
			
				if( this.objData.aryPromos[ i ].strPromoIdAppend == strTabIdAppend )
				{
					
					this.intCurrentTab = i;
					break;
				}
			}

			this.attach();
			this.clickTimer();
		}

	}

});