(function( $ ){

    $.fn.verticalAccordion = function(options)
    {
  	  var  settings =
  	  {
  			header : "> h3",
  			content : "> div",
  			fadeSpeed: 250,
  			slideSpeed : 250,
  			width : "530px",
  			height : "275px",
  			rotateHeaderDegrees : "90",
  			containerPosition : "relative",
  			headerWidth : "50px"
  	  };
  	  
  	  if (options) $.extend(settings, options);
  	  
  	  var context = this;
  	  
  	  context.hide();
  	  
  	  $(window).load(function()
  	  {
  		  context.show();
  		  
  		  $("img", context).css("border", "none");
  		  
  		  
  		  
  		  return context.each(function(i)
  		    	  {
  			  
  			  		  var $container = context;
  			  		  
  			  		  var headerHeights = new Array();
  			  		  
  		    		  var positionHeaders = function(currentIndex)
  		        	  {
  		        		$headers.each(function(i)
  		        		{
  		        			var left;
  		        			
  		        			//alert("is current index ("+currentIndex+") lte i("+i+")? "+(currentIndex <= i));
  		        			if (i <= currentIndex)
  		        			{
  		        				left = sumHeaderHeights(i, false);
  		        			}
  		        			else
  		        			{
  		        				
  		        				left = (parseInt(settings.width)-sumHeaderHeights(i, true)-headerHeights[i])+"px";
  		        			//	alert(settings.width+" minus "+sumHeaderHeights(i, true)+" equals : "+left);
  		        			}
  		        			
  		        			
  		        			
		        				$(this).animate({
		        					"left" : left
		        				}, settings.slideSpeed);
		        						

  		        		});
  		        		
  		        	  };
  		        	  
  		        	  var fadeToContent = function(currentIndex)
  		        	  {
  		        	  
  		        		  $contents.each(function(i)
  		        		  {
  		        			  if ((currentIndex != i))
  		        			  {
  		        				  $(this).animate({"opacity" : "0"}, settings.fadeSpeed);
  		        				  $(this).css("z-index", "0");
  		        			  }
  		        			  else
  		        			  {
  		        				  $(this).animate({"opacity": "1"}, settings.fadeSpeed);
  		        				  $(this).css("z-index", "1");
  		        			  }
  		        				  
  		        		  });
  		        	  };
  		        	  
  		        	  var sumHeaderHeights = function(until, reverse)
  		        	  {
  		        		  var sum = 0;
  		        		  
  		        		  if (!reverse)
	    		        	  {
	    		        		  for (var i = 0; i < headerHeights.length && i < until; i++)
	    		        			{
	    		        			  sum += headerHeights[i];
	    		        			}
	    		              }
	    		        	 else
	    		        	  {
	    		        	      for (var i = headerHeights.length-1; i > until && i > 0; i--)
	    		        		  {
	    		        				sum += headerHeights[i];	
	    		        	       }
	    		        	}
  		        		  
  		        		return sum;
  		        	  }
  			  		  
  			  		  var dataKey = "vertical-accordion-"+i;
  			  		  
  			  		  var $headers = $(settings.header, $(this));
  		    		  var $contents = $(settings.content, $(this));

  		        	  $headers.each(function(i)
  		        			  {
  		        		  		headerHeights[i] = $(this).outerHeight();
  		        		  	  });

  			  		  
  			  		  $container.css(
  			  		  {
  			  			 "width" : settings.width,
  			  			 "height" : settings.height,
  			  			 "position" : settings.containerPosition,
  			  			 "overflow" : "hidden"
  			  		  });
  			  		
  		    		  
  		    		  
  		    		  
  		        	 
  		    		  
  		    		  $contents.each(function(i)
  		    				  {
  		    			  		$(this).css({
  		    			  			"position" : "absolute",
  		    			  			"z-index" : $contents.size()-i,
  		    			  			"top": "0px",
  		    			  			"left" : "0px"
  		    			  		});
  		    			  		
  		    			  		if (i != 0)
  		    			  			$(this).css("opacity", "0");
  		    			  		
  		    			  		
  		    			  		
  		    				  });
  		    		  
  		    		  var headerZ = $contents.size() + $headers.size();
  		    		  
  		    		  $headers.each(function(i)
  		    				  {
  		    			  			$(this).addClass("rotated");
  		    			  			
  		    			  			$(this).css(
  		    			  			{
    		    			  			"z-index": headerZ - i,
  		    			  				"width": settings.height
  		    			  			});
  		    			  
  		    			  			if (jQuery.browser.msie && (parseInt(jQuery.browser.version) <= 8))
  		    			  			{
	  		  		    		  		$(this).css({
	  		  		   			  			"filter" : "progid:DXImageTransform.Microsoft.BasicImage(sizingMethod='auto expand', rotation=3)",
	  	  		    		  				"top" : "-"+$(this).css("padding-left")
	  		  	    			  		});
  		    		  				}
  		    			  			else
  		    			  			{
	  		    			  			$(this).css("top", settings.height);
  		    			  			}
  		    			  
  		    			  		$(this).click(function()
  		    			  		{
  		    			  			positionHeaders(i);		
  		    			  			fadeToContent(i);
  		    			  		});  		    			  		
  		    			  		
  		    				  });
  		    		  
  		    		  positionHeaders(0);
						  
  		    	  });  
  	  });
    }
	})( jQuery );
