/**
 * @author Stéphane Roucheray 
 * @extends jquery
 */


jQuery.fn.carousel = function(previous, next, options){
	var sliderList = jQuery(this).children()[0];
	
	if (sliderList) {
		var increment = jQuery(sliderList).children().outerWidth("true"),
		elmnts = jQuery(sliderList).children(),
		numElmts = elmnts.length,
		sizeFirstElmnt = increment,
		shownInViewport = Math.round(jQuery(this).width() / sizeFirstElmnt),
		firstElementOnViewPort = 1,
		isAnimating = false;
		
		
		//alert(jQuery(this).width()); alert(sizeFirstElmnt),
		
		jQuery(elmnts).each(function(i) {
            jQuery(this).attr({'id': "imgid_"+i});            
            lastIndex = i;
        });
		//alert(shownInViewport);
		center_ele = shownInViewport/2;
		
		for (i = 0; i < shownInViewport; i++) {
			
			jQuery(sliderList).css('width',(numElmts+shownInViewport)*increment + increment + "px");
			$clone = jQuery(elmnts[i]).clone().attr({
                'id': "imgid_"+(lastIndex+1)
            })
			jQuery(sliderList).append($clone);
			lastIndex++;
		}
		//alert(lastIndex);
		total_input = numElmts*2;
		total_output = shownInViewport*2;
		
		difference = total_output - total_input;		
		
		/*if(difference > 0){
			//alert(total_input);
			lastIndex = total_input;
			for (i = 0; i < difference; i++) {
				
				jQuery(sliderList).css('width',(numElmts+shownInViewport+difference)*increment + increment + "px");
				
				$clone = jQuery(elmnts[i]).clone().attr({
					'id': "imgid_"+lastIndex
				})
				jQuery(sliderList).append($clone);	
				fin_lastIndex = lastIndex;
				lastIndex++;
			}
		}*/
		/*alert(fin_lastIndex);
		abs_fin_lastIndex = fin_lastIndex - 1;
		jQuery(elmnts).filter('[index=' + abs_fin_lastIndex + ']').attr('next', 0);
		
		jQuery(elmnts).filter('[prev=-1]').attr('prev', fin_lastIndex-1);
		//jQuery(sliderList).filter('[index=0]').attr({'prev': lastIndex});
		
		//alert(center_ele);
		//alert(elmnts[center_ele-1]);*/
		def_current_index = center_ele-1;
		current_index = center_ele-1;
		
		jQuery(elmnts[current_index]).css('width','153px').addClass('active');
		
		//jQuery("#imgid_14").css('width','153px').addClass('active');
		
		jQuery(previous).click(function(event){
			if (!isAnimating) {
				if (firstElementOnViewPort == 1) {
					jQuery(sliderList).css('left', "-" + numElmts * sizeFirstElmnt + "px");
					firstElementOnViewPort = numElmts;
				}
				else {
					firstElementOnViewPort--;
				}
				
				/*alert(current_index);
				
				alert(numElmts - def_current_index);*/
				
				prec_current_index = current_index;				
				if(def_current_index == current_index){
					pre_current_index = numElmts+def_current_index;
					pre_index = pre_current_index - 1;
				}
				else{
					pre_current_index = current_index;
					pre_index = pre_current_index - 1;
				}
				jQuery('#imgid_'+prec_current_index).css('width','auto').removeClass('active');
				jQuery('#imgid_'+pre_index).css('width','153px').addClass('active');				
				current_index = pre_index;
				
				
				
				
				
				
				
				jQuery(sliderList).animate({
					left: "+=" + increment,
					y: 0,
					queue: true
				}, "swing", function(){isAnimating = false;});
				isAnimating = true;
			}
			
		});
		
		jQuery(next).click(function(event){
			if (!isAnimating) {
				if (firstElementOnViewPort > numElmts) {
					firstElementOnViewPort = 2;
					jQuery(sliderList).css('left', "0px");
				}
				else {
					firstElementOnViewPort++;
				}
				
				
				curr_current_index = current_index;
				if(def_current_index+numElmts == current_index){
					current_index = def_current_index;
					next_index = current_index + 1;
				}
				else{
				current_index = current_index;
				next_index = current_index + 1;
				}				
				jQuery('#imgid_'+curr_current_index).css('width','auto').removeClass('active');
				jQuery('#imgid_'+next_index).css('width','153px').addClass('active');				
				current_index = next_index;
				
				
				
				jQuery(sliderList).animate({
					left: "-=" + increment,
					y: 0,
					queue: true
				}, "swing", function(){isAnimating = false;});
				isAnimating = true;
			}
		});
	}
};

