(function($){

  
  $.fn.goodCarousel = function(options){
    

    
    this.each(function(){
    	$('ul.carousel', this).each(function(){
    		$(this).data('cdatasrc', $('> li', this));
    		//console.log("var idx = c.index(i, jQuery.data(this, 'cdatasrc').length); | "+$(this).data('cdatasrc').length);
    	    var _initCallback = function(c){
    		    $('div.next-button').bind('click',function(){c.next();return false;});
    		    $('div.prev-button').bind('click',function(){c.prev(); return false;});
    		    if(!c.list.parents().is('#content-pane-background')){
    		    	//$('li', c.list).children().animate({opacity: 1.0});
    			}
    	    };
    	    
    		var _itemLoadCallback = function(){
    			  
    		};
    	    
    		var _itemVisibleInCallback_BeforeAnimation = function(c, item, i, state, evt){
    		  	var data = c.list.data('cdatasrc');
    			var idx = c.index(i, data.length);
    		  	
    			// need to add detection - i only want to do carousel-content-pane children
    			var addItem = $($(data.get(idx-1)).html());
    			if(!c.list.parents().is('#content-pane-background')){
    				addItem.css('opacity', .001);
    				
    			}
    			
    		    c.add(i, addItem);
    		    
    		    // conditionally modify the height of #content-pane-top p if there is an anchor...
    		    /*
    		    if($('+ a', addItem).length > 0 && c.list.parents('#content-pane-top').length > 0){
					var text = $(addItem);
					var subtract = function(e, x){
						var h = Math.floor(e.height());
						var j = Math.ceil(x.height());
						var cssDimensionToFloat = function(str, context){
							var cx = $($(context||'body, html').get(0));
							var valueAsFloat = null;
							var m;
							switch(true){
								case (m = str.match(/^([\d.]+)em$/)):
								case (m = str.match(/^([\d.]+)%$/)):
									valueAsFloat = cssDimensionToFloat(cx.css('font-size'), cx)*parseFloat(m);
								    break;
								case (m = str.match(/^([\d.]+)px$/)):
								default:
									valueAsFloat = parseFloat(m);
							}
							
							return valueAsFloat;
						};
						
						var lh = cssDimensionToFloat(e.css('line-height'), h);
						return parseInt(Math.floor(h) - Math.ceil(((j/lh)*lh)+cssDimensionToFloat(e.css('margin-bottom'))*2));
					};

					text.css('height', subtract(text, $('+ a img', text)));
				}
				*/    		    
    		};
    	  
    		var _itemVisibleInCallback_AfterAnimation = function(c, item, i, state, evt){
    			if(!c.list.parents().is('#content-pane-background')){
    				$(item).trigger('beginanim').children().animate({'opacity': .999}, 450);
    				
    			}
    		};
    	  
    		var _itemVisibleOutCallback_BeforeAnimation = function(c, item, i, state, evt){
    			if(!c.list.parents().is('#content-pane-background')){
    				$(item).children().animate({'opacity': .001}, 450);
    				
    			}
    		};
    	  
    		var _itemVisibleOutCallback_AfterAnimation = function(c, item, i, state, evt){
    			c.remove(i);
    		};
    		
    		$(this).empty().jcarousel({
                scroll: 1,
                initCallback: _initCallback,
                buttonNextHTML: null,
                buttonPrevHTML: null,
                easing: 'easeInCirc',
                animation: 750,
                wrap: 'circular',
                itemVisibleInCallback: {
    				onBeforeAnimation: _itemVisibleInCallback_BeforeAnimation,
    				onAfterAnimation: _itemVisibleInCallback_AfterAnimation
    			},
                itemVisibleOutCallback: {
    				onBeforeAnimation: _itemVisibleOutCallback_BeforeAnimation,
    				onAfterAnimation: _itemVisibleOutCallback_AfterAnimation	
	    		}
            });
    	});
    });
    
    $('ul.carousel', this).css('visibility', 'visible');
  };
})(jQuery);
