
(function($){
	$.fn.showcasepanel = function(options)
	{

		var oShowcasePanel = $(".showcasePanelContainer",this);
		var oPanels = oShowcasePanel.children(".showcasePanel");
		var iShowcaseWidth = oShowcasePanel.outerWidth(true);
		var oCurrentOpenPanel = null;
		var nOriginalShowcaseWidth = $(this).outerWidth();
		var nOriginalPanelWidth = 100;
		var bOpenByDefault = options && options.openByDefault;
		var bShowCloseButton = options && options.showCloseButton;
		
		return this.each(function(){
			initialize();
		});


		function initialize()
		{
			setEvents();
		}
		function setEvents()
		{
			oPanels.each( function( i )
			{
				var oPanel = $(oPanels[i]);
				$(".showcasePanelOpenButton",oPanel).bind( "click", { panel:oPanel, panelIndex:i }, openPanel );
				$(".showcasePanelCloseButton",oPanel).bind( "click", { panel:oPanel, panelIndex:i }, closePanel );
				if( bOpenByDefault )
					openPanel( {data:{panel:oPanel}} );
			} );
		}
		function openPanel( event )
		{
			if( oCurrentOpenPanel != null )	return;
			oCurrentOpenPanel = $(event.data.panel);
			
			$(".showcasePager",oCurrentOpenPanel).fadeIn();
			$(".showcasePanelOpenButton",oCurrentOpenPanel).hide();
			nOriginalPanelWidth = oCurrentOpenPanel.width();
			oCurrentOpenPanel.animate( { width:nOriginalShowcaseWidth+"px" }, {	duration: 500, complete: function()
				{
					if( bShowCloseButton )
						$(".showcasePanelCloseButton",oCurrentOpenPanel).fadeIn( 500 );
					$(".showcasePanelProjectDescription",oCurrentOpenPanel).fadeIn( 500 );
				}
			} );
			
			var left =  oCurrentOpenPanel.position().left
			oShowcasePanel.animate( { left:"-=" + left + "px" }, { duration:500 } );
		}
		
		function closePanel()
		{
			if( oCurrentOpenPanel == null ) return;

			$(".showcaseCarousel",oCurrentOpenPanel).data('tinycarousel').moveToIndex(-1);
			$(".showcasePager",oCurrentOpenPanel).fadeOut();
			$(".showcasePanelOpenButton",oCurrentOpenPanel).show();
			$(".showcasePanelCloseButton",oCurrentOpenPanel).fadeOut( 250 );
			$(".showcasePanelProjectDescription",oCurrentOpenPanel).fadeOut( 250 );
			oCurrentOpenPanel.animate( { width: nOriginalPanelWidth + "px" }, { duration:500 } );
			oPanels.each( function( i )
			{
				var oPanel = $(oPanels[i]);
				if( oPanel[0] != oCurrentOpenPanel[0] )
				{
					oPanel.fadeIn(100);
				}
			} );
			
			var left =  oCurrentOpenPanel.position().left
			oShowcasePanel.animate( { left:"0px" }, { duration:500 } );
			
			oCurrentOpenPanel = null;
		}
	};
})(jQuery);
