var slidesCache = new Array();

var fmtThumb = function(thumbUrl, imgUrl, i) {
    var innerHTML = 
        '<div class="thumb"><img id="carousel-thumb-' + i + '" src="' + thumbUrl + '"/></div>';
    return innerHTML;
};

var fmtImg = function(imgUrl, linkUrl, i) {
    var innerHTML = '<div id="carousel-slide-' + i + '" class="noshow"><a href="' + linkUrl + 
	    '"><img id="carousel-image-' + i + '" border="0" src="' + imgUrl + '"/></div></a>';
    return innerHTML;
};

var loadInitialItems = function(type, args) {
    var start = args[0];
    var last = args[1]; 

    load(this, start, last);
    spotlight(this);
	preview(this);
};

var loadNextItems = function(type, args) {
    var li = this.getItem(priorCenterItem);
    
    var start = args[0];
    var last = args[1]; 
    var alreadyCached = args[2];

    if(!alreadyCached) {
        load(this, start, last);
    }
    spotlight(this);
	preview(this);
};

var loadPrevItems = function(type, args) {
    var li = this.getItem(priorCenterItem);

    var start = args[0];
    var last = args[1]; 
    var alreadyCached = args[2];
    
    if(!alreadyCached) {
        load(this, start, last);
    }
    spotlight(this);
	preview(this);
};


var load = function(carousel, start, last) {

    for(var i=start;i<=last;i++) {
        carousel.addItem(i, fmtThumb(thumbList[i-1], imgList[i-1], i), 'non-spotlight');
        
        YAHOO.util.Event.addListener('carousel-thumb-'+i, 'click', function(evt) {
            this.carousel.scrollTo(this.index-2);
        }, {carousel:carousel,index:i}, true);
    }

	var innerHTML = "";
	var size = carousel.getProperty("size");
	for(var i=1;i<=size;i++) {
		innerHTML += fmtImg(imgList[i-1], urlList[i-1], i);
    }
	YAHOO.util.Dom.get('preview').innerHTML = innerHTML;
};

function preview(carousel) {
    var firstVisible = carousel.getProperty("firstVisible");
    var size = carousel.getProperty("size");
    var middle = firstVisible + 2;

    for(var i=1; i<=size; i++) {
		var slide = YAHOO.util.Dom.get( 'carousel-slide-' + i );
		var image = YAHOO.util.Dom.get( 'carousel-image-' + i );
        if(i == middle) {
			YAHOO.util.Dom.replaceClass(slide, 'noshow', 'show');
			if( image.height / image.width <= 0.75 )
			{
				newWidth = image.width * ( 330 / image.height );
				newHeight = 330;
			} else {
				newHeight = image.height * (440 / image.width );
				newWidth = 440;
			}
			YAHOO.util.Dom.setStyle(image, 'width', newWidth + 'px'); 
			YAHOO.util.Dom.setStyle(image, 'height', newHeight + 'px'); 
        } else {
			YAHOO.util.Dom.replaceClass(slide, 'show', 'noshow');
        }
    }
}

function spotlight(carousel) {
    var firstVisible = carousel.getProperty("firstVisible");
    var start = firstVisible;
    var revealAmount = carousel.getProperty("revealAmount");
    var size = carousel.getProperty("size");
    
    if(revealAmount && firstVisible > 1) {
        start = firstVisible - 1;
    }
    var lastVisible = firstVisible + carousel.getProperty("numVisible") - 1;
    var end = lastVisible;
    if(revealAmount && lastVisible < size) {
        end = lastVisible + 1;
    }
    
    var middle = firstVisible + 2;
    
    for(var i=start; i<=end; i++) {
        var li = carousel.getItem(i);

        if(i == middle) {
            YAHOO.util.Dom.replaceClass(li, 'non-spotlight', 'spotlight');
            priorCenterItem = i;
        } else {
            YAHOO.util.Dom.replaceClass(li, 'spotlight', 'non-spotlight');
        }
    }
}


var handlePrevButtonState = function(type, args) {
    var enabling = args[0];
    var upImage = args[1];
    if(enabling) {
        upImage.src = up_enabled_img;    
    } else {
        upImage.src = up_disabled_img;    
    }
};

var handleNextButtonState = function(type, args) {
    var enabling = args[0];
    var downImage = args[1];
    
    if(enabling) {
        downImage.src = down_enabled_img;
    } else {
        downImage.src = down_disabled_img;
    }
};

var priorCenterItem = 1;
var carousel; 

var pageLoad = function() 
{
    carousel = new YAHOO.extension.Carousel("mycarousel", 
        {
            numVisible:        5,
            animationSpeed:    0.5,
			autoPlay:          5000,
			orientation:       "vertical",
			wrap:              true,
			scrollBeforeAmount: 2,
			scrollAfterAmount:  2,
            scrollInc:         1,
			firstVisible:      -1,
            navMargin:         0,
            prevElement:     "up-arrow",
            nextElement:     "down-arrow",
            size:              thumb_count,
            loadInitHandler:    loadInitialItems,
            loadNextHandler:    loadNextItems,
            loadPrevHandler:    loadPrevItems,
            prevButtonStateHandler:   handlePrevButtonState,
            nextButtonStateHandler:   handleNextButtonState
        }
    );
};

YAHOO.util.Event.addListener(window, 'load', pageLoad);
