function jcRequest(carousel, searchScript, lang, template, onloadCallback, paramsCallback) {
	if (carousel.has(carousel.first, carousel.last)) {
		//return;
	}

	carousel.params = '';
	if (paramsCallback) {
		var evaldFunction = eval(paramsCallback);
		carousel.params = '&' + evaldFunction();
	}
	
	$.ajax({
		type:'POST',
		url:'index.php',
		data:'ajax=scroll&lang=' + lang + '&first=' + carousel.first + '&last=' + carousel.last + '&searchScript=' + searchScript + '&template=' + template + carousel.params,
		success: function(response){
			responseObject = eval('(' + response + ')');
			jcResponse(carousel, responseObject);
			
			if (onloadCallback) {
				var evaldFunction = eval(onloadCallback);
				evaldFunction();
			}
		}
	});
};

function jcResponse(carousel, responseObject) {
	var items = parseInt(responseObject['items']);
	var html = responseObject['html'];
	
	//carousel.size(items);

	var pager_items = carousel.last - carousel.first + 1;
	if (carousel.params && items < pager_items) {
		$.each($(carousel.options.divid).find('li.jcarousel-item'), function(i) {
			currentJcarouselIndex = $(this).attr('jcarouselindex');
			if (i > carousel.first - 1) {
				$(this).empty();
			}
		});
	}
	
	var currentIndex;
	$.each(html, function(i) {
		currentIndex = parseInt(carousel.first) + parseInt(i);
		carousel.add(currentIndex, html[i]);
	});	
	
	var currentJcarouselIndex;
	$.each($(carousel.options.divid).find('li.jcarousel-item'), function(i) {
		currentJcarouselIndex = $(this).attr('jcarouselindex');		
		if (currentJcarouselIndex < carousel.first || currentJcarouselIndex > carousel.last) {
			carousel.remove(currentJcarouselIndex);
		}
	});
	
	$(carousel.options.divid).find('li.jcarousel-item:first').addClass('jcarousel-item-first');
	$(carousel.options.divid).find('li.jcarousel-item:last').addClass('jcarousel-item-last');
};


function jcNextAndPrev(carousel, nextSelector, prevSelector) {
    $(nextSelector).live('click', function() {
        carousel.next();
        return false;
    });
    $(prevSelector).live('click', function() {
        carousel.prev();
        return false;
    });    
}

function jc(divSelector, lang, items, autostartTimerSeconds, speed, vertical, fade, searchScript, template, itemCallback, onloadCallback, paramsCallback) {
	var jDivSelector = $(divSelector);
	
	if (jDivSelector.length > 0) {
		var nextSelector = divSelector + '-next';
		var prevSelector = divSelector + '-prev';
	
		var jcContaner = $('<div>');
		jcContaner.addClass('jcarousel_container');
		
		var jcUl = $('<ul>');
		jcContaner.append(jcUl);
		
		jDivSelector.prepend(jcContaner);
	    
		var jcOptions = {};
	
		$.extend(jcOptions, {divid: divSelector} );
		$.extend(jcOptions, {scroll: parseInt(items)} );
		$.extend(jcOptions, {animation: speed} );
		$.extend(jcOptions, {wrap: 'circular'} );
		$.extend(jcOptions, {
			itemLoadCallback: function(carousel){	
				jcRequest(carousel, searchScript, lang, template, onloadCallback, paramsCallback);
			}
		});
		$.extend(jcOptions, {
			initCallback: function(carousel){
				jcNextAndPrev(carousel, nextSelector, prevSelector);
			}
		});
		$.extend(jcOptions, {
			buttonNextHTML: null,
			buttonPrevHTML: null
		});
		
		if (autostartTimerSeconds) {
			$.extend(jcOptions, {auto: autostartTimerSeconds} );
		}
		
		if (vertical) {
			$.extend(jcOptions, {vertical: true} );
		}
		
		if (fade) {
			$.extend(jcOptions, {fade: true} );
		}
		
		jcUl.jcarousel(jcOptions);
		

		if (itemCallback) {
			var evaldFunction = eval(itemCallback);
			jDivSelector.find('.jcarousel-item').live('click', evaldFunction);
		}
		


		var resetId = divSelector.replace(/^#/, '') + '-reset';
		
	    var reset = $('<a>');
	    reset.attr('href', '#');
		reset.attr('id', resetId);
	    reset.text('reset');
	    reset.css('display', 'none');
	    jcContaner.append(reset);
	    
	    $('#' + resetId).live('click', function(){
	    	jcUl.data('jcarousel').scroll(1);
	    	return false;
	    });
	}
}

