$j.Avaya.Marquee = {};

$j.Avaya.Marquee.Base = function(options) {
	var self = this,
		presets = {
			$container : '#marquee',
			$initial_index : 0,
			$cards : '.marquee-card',
			$card_on : '.card-on',
			
			$nav_on : true,
			$nav : {
				container : '#marquee-nav',
				option : '.marquee-nav-option',
				on_class : '.marquee-nav-option-on',
				hover_class : '.marquee-nav-option-hover'
			},
			
			$transition_on : true,
			$sifr_transition_on : true,
			$transition : {
				anim_in : 'fadeIn',
				anim_out : 'fadeOut',
				interval : 7000,
				anim_speed : 500,
				nav_speed : 300
			},
			
			$rotate_on : true,
			$rotate : {
				limit : 2
			},
			
			$initCallback : function(){ },
			$transitionCallback : function(){ }
		};
	
	this.s = $j.extend(true, presets, options);
};

$j.Avaya.Marquee.Base.prototype = {
	
	init : function(){
		this.current = this.next = this.s.$initial_index;
		if(this.s.$rotate_on) this.rot = 0;
		
		this.s.$initCallback.call(this);
	},
	
	transition : function() {
		var self = this,
			current = $j(this.s.$container).find(this.s.$cards).eq(this.current),
			next = $j(this.s.$container).find(this.s.$cards).eq(this.next);
		
		if(!this.s.$sifr_transition_on){
			$j(this.s.$container).find('.marquee-text').hide();
		}
		
		if(this.s.$transition_on){
			current[this.s.$transition.anim_out](this.s.$transition.anim_speed);
			if(this.s.$sifr_transition_on){
				next[this.s.$transition.anim_in](this.s.$transition.$anim_speed);
			} else {
				next[this.s.$transition.anim_in](this.s.$transition.$anim_speed, function(){
					$j(self.s.$container).find('.marquee-text').show();
				});
			}
		} else {
			current.hide();
			next.show();
		}
		
		this.s.$transitionCallback.call(this);
	}

};





$j.Avaya.Marquee.Casebuilder = function(options) {
	var self = this,
		presets = $j.extend(true, this.s, {
			$container : '#casebuilder_marquee',
			$image_container : '#marquee_img',
			$image_section : '.marquee_img_section',
			$options_container : '#marquee_opts',
			
			$transition_on : false,
			$rotate_on : false,
			
			$words_of_str_on : false,
			$words_of_str : '.strength_words',
			
			$pointer : '#marquee_pointer',
			$pointer_offset : 10
		});
	
	this.s = $j.extend(true, presets, options);
};

$j.Avaya.Marquee.Casebuilder.prototype = $j.extend(new $j.Avaya.Marquee.Base(), {
	
	constructor : $j.Avaya.Marquee.Casebuilder,
	
	parent : $j.Avaya.Marquee.Base.prototype,
	
	init : function(){
		var self = this;
		
		$j(document).bind('Avaya.Marquee.Casebuilder.transition', function(e, el, ix){
			if(!el.hasClass('opt_on')) self.transition(ix);
		});
		
		$j(this.s.$options_container).find('td').each(function(ix){
			var $opt = $j(this);
			
			$opt.click(function(){ $j(document).trigger('Avaya.Marquee.Casebuilder.transition', [$opt, ix]); });
		}).find('a').each(function(ix){
			var $opt = $j(this);
			
			$opt.click(function(e){
				e.preventDefault();
				$j(document).trigger('Avaya.Marquee.Casebuilder.transition', [$opt.parent('td'), ix]);
				return false;
			}).parent().hover(
				function(){ $j(this).toggleClass('opt_hover'); },
				function(){ $j(this).toggleClass('opt_hover'); }
			);
		}).find('span.case_name').each(function(ix){
			var $opt = $j(this);
			
			$j.Avaya.SifrClick({
				sifr_el: $opt,
				callback: function(){
					$j(document).trigger('Avaya.Marquee.Casebuilder.transition', [$opt.parents('td').eq(0), ix]);
				}
			});
		});
		
		$j(this.s.$container).find(this.s.$image_section).click(function(){
			window.location.href = $j(this).find('a').attr('href');
		});
		
		if(this.s.$words_of_str_on)
			this.randomStrength(Math.floor(Math.random() * this.s.$words_of_str.size()));
		
		
		this.s.$initCallback.call(this);
	},
	
	transition : function(ix) {
		var image_container = $j(this.s.$image_container),
			options_container = $j(this.s.$options_container),
			tar = options_container.find('td').eq(0),
			tar_val = tar.width() * ix + this.s.$pointer_offset;
		
		options_container.find('td').removeClass('opt_hover');
		
		image_container.children('div:visible').not('#marquee_drop').hide();
		image_container.children('div:eq(' + ix + ')').show();
		
		$j(this.s.$pointer).css('left', tar_val + 'px');
		options_container.find('td.opt_on').removeClass('opt_on');
		options_container.find('td:eq(' + ix + ')').addClass('opt_on');
		
		
		this.s.$transitionCallback.call(this, ix);
	},
	
	randomStrength : function(ix){
		var words = $j(this.s.$words_of_str);
		
		words.not('.noshow').addClass('noshow');
		words.eq(ix).removeClass('noshow');
	}
	
});





$j.Avaya.Marquee.Home = function(options) {
	var self = this,
		presets = $j.extend(true, this.s, {
			$navCallback : function(){ },
			$tooltip_text_source : 'h2'
		});
	
	this.s = $j.extend(true, presets, options);
};

$j.Avaya.Marquee.Home.prototype = $j.extend(new $j.Avaya.Marquee.Base(), {
	
	constructor : $j.Avaya.Marquee.Home,
	
	parent : $j.Avaya.Marquee.Base.prototype,
	
	init : function(){
		var self = this;
		
		this.current = this.next = this.rot = 0;
		this.cardNum = $j(this.s.$container).find(this.s.$cards).size();
		
		
		if(this.cardNum < 2) { $j(this.s.$nav.container).remove(); }
		else {
			for(var i=0; i<this.cardNum; i++)
				$j(this.s.$nav.container).append('<a href="javascript:void(0)" class="'+this.s.$nav.option.substr(1)+'"><div><p /></div></a>');
			
			$j(this.s.$nav.option).eq(this.current).addClass(this.s.$nav.on_class.substr(1)).find('div').css('height','10px');
			
			$j(this.s.$cards).each(function(ix, item){
				if(ix !== 0) $j(this).hide();
				if($j(this).hasClass(self.s.$card_on.substr(1))) $j(this).removeClass(self.s.$card_on.substr(1));
				if(ix === self.current) $j(this).addClass(self.s.$card_on.substr(1));
				
				if($j(this).find(self.s.$tooltip_text_source).size() > 0){
					new $j.Avaya.ToolTipTrigger($j(self.s.$nav.option).eq(ix), {
						staticContent: '<p>' + $j(this).find(self.s.$tooltip_text_source).text() + '</p>',
						location: 'NE', width: 150, yOffset: 23, xOffset: -28, fixed: false
					});
				}
			});
			
			this.aInterval = this.animateInterval();
			
			$j(this.s.$container + ' .marquee-text').one('mousemove', function(){
				$j(this).mouseenter();
			}).hover(
				function(){ if(typeof self.aInterval != 'undefined') clearInterval(self.aInterval); },
				function(){ if(typeof self.aInterval != 'undefined') self.aInterval = self.animateInterval(); }
			);
			
			$j(this.s.$nav.container).children(this.s.$nav.option).each(function(ix){
				$j(this).click(function(e){
					e.preventDefault();
					
					self.current = self.next;
					self.next = ix;
					
					clearInterval( self.aInterval );
					delete self.aInterval;
					
					if(ix == self.current) return;
					
					self.track((ix+1));
					
					$j(self.s.$cards).add(self.s.$nav.option).stop(true, true);
					self.transition();
					
					return false;
				}).hover(
					function(){ $j(this).addClass(self.s.$nav.hover_class.substr(1)); },
					function(){ $j(this).removeClass(self.s.$nav.hover_class.substr(1)); }
				);
			});
		}
		
		
		this.s.$initCallback.call(this);
	},
	
	track : function(ix){
		s.clearVars();
		s.eVar39 = $j(document).attr('title');
		s.eVar40 = 'Marquee';
		s.eVar41 = 'Thumbnail'+ix;
		s.eVar42 = 'Thumbnail'+ix;
		s.eVar43 = 'Not Defined';
		s.t();
	},
	
	transition : function(){
		this.parent.transition.call(this);
		this.shiftNav();
	},
	
	shiftNav : function(){
		var $current = $j(this.s.$nav.option).eq(this.current),
			$next = $j(this.s.$nav.option).eq(this.next);
		
		$current.removeClass(this.s.$nav.on_class.substr(1)).children('div').animate({ height:'-=5' }, this.s.$transition.nav_speed);
		$next.addClass(this.s.$nav.on_class.substr(1)).children('div').animate({ height:'+=5' }, this.s.$transition.nav_speed);
		
		this.s.$navCallback.call(this);
	},
	
	animateInterval : function(){
		var self = this;
		
		return setInterval(function(){
			self.current = self.next;
			
			if(!$j(self.s.$cards).eq(self.current).next(self.s.$cards).size()) {
				self.next = 0;
				self.rot++;
			} else {
				self.next = self.current+1;
			}
			
			self.transition();
			
			if(self.rot == self.s.$rotate.limit){
				clearInterval(self.aInterval);
				delete self.aInterval;
			}
		}, this.s.$transition.interval);
	}
	
});
