(function(jQuery) {
	jQuery.fn.easyAccordion = function(options) {

		var defaults = {
			slideNum: true,
			autoStart: false,
			slideInterval: 6000
		};
		this.each(function() {
			var settings = jQuery.extend(defaults, options);
			jQuery(this).find('dl').addClass('accordion');
			jQuery.fn.setVariables = function() {
				dlWidth = jQuery(this).width();
				dlHeight = jQuery(this).height();
				dtWidth = jQuery(this).find('dt').outerHeight();
				if (jQuery.browser.msie) {
					dtWidth = $(this).find('dt').outerWidth();
				}
				dtHeight = dlHeight - (jQuery(this).find('dt').outerWidth() - jQuery(this).find('dt').width());
				slideTotal = jQuery(this).find('dt').size();
				ddWidth = dlWidth - (dtWidth * slideTotal) - (jQuery(this).find('dd').outerWidth(true) - jQuery(this).find('dd').width());
				ddHeight = dlHeight - (jQuery(this).find('dd').outerHeight(true) - jQuery(this).find('dd').height());
			};
			jQuery(this).setVariables();
			if (jQuery.browser.safari) {
				var dtTop = (dlHeight - dtWidth) / 2;
				var dtOffset = -dtTop;
			}
			if (jQuery.browser.mozilla) {
				var dtTop = dlHeight - 20;
				var dtOffset = -20;
			}
			if (jQuery.browser.msie) {
				var dtTop = 0;
				var dtOffset = 0;
			}			
			jQuery(this).find('dt').each(function() {
				jQuery(this).css({
					'width': dtHeight,
					'top': dtTop,
					'margin-left': dtOffset
				});
				
			});
			if (jQuery(this).find('.active').size()) {
				jQuery(this).find('.active').next('dd').addClass('active');
			} else {
				jQuery(this).find('dt:first').addClass('active').next('dd').addClass('active');
			}
			jQuery(this).find('dt:first').css({
				'left': '0'
			}).next().css({
				'left': dtWidth
			});
			jQuery(this).find('dd').css({
				'width': ddWidth,
				'height': ddHeight
			});
			jQuery.fn.findActiveSlide = function() {
				var i = 1;
				this.find('dt').each(function() {
					if (jQuery(this).hasClass('active')) {
						activeID = i;
					} else if (jQuery(this).hasClass('no-more-active')) {
						noMoreActiveID = i;
					}
					i = i + 1;
				});
			};
			jQuery.fn.calculateSlidePos = function() {
				var u = 2;
				jQuery(this).find('dt').not(':first').each(function() {
					var activeDtPos = dtWidth * activeID;
					if (u <= activeID) {
						var leftDtPos = dtWidth * (u - 1);
						jQuery(this).animate({
							'left': leftDtPos
						});
						if (u < activeID) { 
							jQuery(this).next().css({
								'left': leftDtPos + dtWidth
							});
						} else {
							jQuery(this).next().animate({
								'left': activeDtPos
							});
						}
					} else {
						var rightDtPos = dlWidth - (dtWidth * (slideTotal - u + 1));
						jQuery(this).animate({
							'left': rightDtPos
						});
						var rightDdPos = rightDtPos + dtWidth;
						jQuery(this).next().animate({
							'left': rightDdPos
						});
					}
					u = u + 1;
				});
				setTimeout(function() {
					jQuery('.accordion').find('dd').not('.active').each(function() {
						jQuery(this).css({
							'display': 'none'
						});
					});
				},
				400);

			};
			jQuery.fn.activateSlide = function() {
				this.parent('dl').setVariables();
				this.parent('dl').find('dd').css({
					'display': 'block'
				});
				this.parent('dl').find('dd.plus').removeClass('plus');
				this.parent('dl').find('.no-more-active').removeClass('no-more-active');
				this.parent('dl').find('.active').removeClass('active').addClass('no-more-active');
				this.addClass('active').next().addClass('active');
				this.parent('dl').findActiveSlide();
				if (activeID < noMoreActiveID) {
					this.parent('dl').find('dd.no-more-active').addClass('plus');
				}
				this.parent('dl').calculateSlidePos();
			};
			jQuery.fn.rotateSlides = function(slideInterval, timerInstance) {
				var accordianInstance = jQuery(this);
				timerInstance.value = setTimeout(function() {
					accordianInstance.rotateSlides(slideInterval, timerInstance);
				},
				slideInterval);
				jQuery(this).findActiveSlide();
				var totalSlides = jQuery(this).find('dt').size();
				var activeSlide = activeID;
				var newSlide = activeSlide + 1;
				if (newSlide > totalSlides) newSlide = 1;
				jQuery(this).find('dt:eq(' + (newSlide - 1) + ')').activateSlide(); 
			}

			function trackerObject() {
				this.value = null
			}
			var timerInstance = new trackerObject();

			jQuery(this).findActiveSlide();
			jQuery(this).calculateSlidePos();

			if (settings.autoStart == true) {
				var accordianInstance = jQuery(this);
				var interval = parseInt(settings.slideInterval);
				timerInstance.value = setTimeout(function() {
					accordianInstance.rotateSlides(interval, timerInstance);
				},
				interval);
			}
			jQuery(this).find('dt').not('active').click(function() {
				jQuery(this).activateSlide();
				clearTimeout(timerInstance.value);
			});
			if (! (jQuery.browser.msie && jQuery.browser.version == 6.0)) {
				jQuery('dt').hover(function() {
					jQuery(this).addClass('hover');
				},
				function() {
					jQuery(this).removeClass('hover');
				});
			}
		});
	};
})(jQuery);
