/*
 * the webyte accordion
 */

(function( $ ){

	jQuery.fn.accordion = function(options) {
		
		//default var values
		var defaults = {
			'minWidth'			: 25,		//width of title block, minimized width
			'spacing'			: 3,		//spacing between elements
      		'active'			: 1,		//index of opened starting element
      		'animationTime'		: 500,		//
      		'event'				: 'click'	//values: 'click', 'mouseenter mouseleave'
    	};
	
		var options = $.extend(defaults, options);
		
		this.each(function() {  
			var self = $(this);    
      		//init
      		var elementsCount = self.children().children().size();
      		var widgetWidth = self.width();
      		var maxWidth = self.width() - elementsCount * options.minWidth - (elementsCount-2) * options.spacing;
      		//set start element
      		$("ul li:nth-child(" + options.active + ") div.accordion-element", self).addClass("active");
      		//set accordion element size
      		$(".accordion-element", self).css({"height": self.height()});
      		$(".accordion-element", self).css({"width": options.minWidth + maxWidth});
      		$(".accordion-element-button",self).css({height: options.minWidth + 'px'});
      		$(".accordion-element-button",self).css({width: $(this).height() + 'px'});
    		$(".accordion-element-button p",self).css({'line-height': options.minWidth + 'px'});
    		$(".accordion-element-background", self).css({"left": options.minWidth + options.spacing + 'px'});
    		$(".accordion-element-content",self).css({'margin-left': options.minWidth + 'px'});
      		//
      		for (var i = 1; i < (elementsCount + 1); i++) {
      			$("ul li:nth-child(" + i + ")", self).css({"margin-right": options.spacing});
      			$("ul li:nth-child(" + i + ")", self).show();
      			$("ul li:nth-child(" + i + ") .accordion-element .accordion-element-button p.element-index", self).text(i);
    			if ($("ul li:nth-child(" + i + ")", self).children().hasClass("active")) {
    				$("ul li:nth-child(" + i + ")", self).css({"left": (i-1) * (options.minWidth + options.spacing) +"px"});
    			}
    			else
    				if (i < options.active){
    					$("ul li:nth-child(" + i + ")", self).css({"left": ((i-1) *(options.minWidth + options.spacing)) + "px"});
    				} else {
    					$("ul li:nth-child(" + i + ")", self).css({"left": ((i-1) *options.minWidth + (i-2)*options.spacing + maxWidth) + "px"});
    			}
    			
    		}
    		//
    		$("ul li div.accordion-element", self).bind(options.event,
      			function(){
      				
      				var clickedElement = ($('ul li div.accordion-element', self).index(this) +1);
       					if ($("ul li:nth-child(" + clickedElement + ")", self).css("left").replace(/[px]/g, '') > clickedElement * 25) {
       						
       						if ((clickedElement - options.active) == 1) {
       							$(this).parent().animate({left: (clickedElement-1)*(options.minWidth + options.spacing) +"px"}, options.animationTime);
       							options.active = clickedElement;
							} else {
								for (var i = 2; i <= clickedElement; i++) {
									$("ul li:nth-child(" + i + ")", self).animate({left: (i-1)*(options.minWidth + options.spacing) +"px"}, options.animationTime);
									options.active = clickedElement;
								}
							}
       					} else {
       						if ((options.active - clickedElement) == 1) {
       							$("ul li:nth-child(" + options.active + ")", self).animate({left: widgetWidth + options.spacing - (elementsCount - clickedElement)*(options.minWidth + options.spacing) + "px"}, options.animationTime);
       							options.active = clickedElement;
							} else {
					
								var j=1;
								for (var i = elementsCount; i > clickedElement; i--) {
						
									$("ul li:nth-child(" + i + ")", self).animate({left: widgetWidth + options.spacing - (j) * (options.minWidth + options.spacing) + "px"}, options.animationTime);

									options.active = clickedElement;
									j++;
								}
							}
       					}
       					$('.accordion-element').removeClass('active');
						$(this).addClass('active');
     			}
    		);
      		
     	 })
    };
})( jQuery );
