/**
 * Add events to sliders automatically
 *
 * @param options object. Allowed options:
 *  - bool ajaxLoad - shows pointer and progressSlide if not ajax
 *  - sting url - for ajax loading
 */
$(document).ready(function(){
	$('.sliderOptions').each(function(index, input) {
		var sliderBoxId = $(input).attr('id').replace(/^.*_/, '');
		$('#'+sliderBoxId).sliderBox($.evalJSON($(input).val()));
	});
});


/**
 * Slider events handler
 *
 * @param options object. Allowed options:
 *  - bool ajaxLoad - shows pointer and progressSlide if not ajax
 *  - sting url - for ajax loading
 *  - bool showPointSelector - only non ajax slider!
 *  - bool showHorizontalScroll - only non ajax slider!
 */
$.fn.sliderBox = function(options){
	// set default options
	options = $.extend({
		ajaxLoad				: false,
		url						: '',
		showPointSelector		: true,
		showHorizontalScroll	: true
	}, options || {});

	var slider = $(this);
	var countPage = 1;
	var page = 1;
	var lastPage = 0;

	if (slider.find('.item').length > 0) {
		
		var boxWidth = slider.find('div.box').width();
		var item = slider.find('.item');
		var mLeft = item.css('margin-left');
		var mRight = item.css('margin-right');
		var itemWidth = slider.find('.item').outerWidth() + Number(mLeft.substr(0, mLeft.length - 2)) + Number(mRight.substr(0, mRight.length - 2));
		var countItem = Math.ceil(boxWidth / itemWidth);
		var countAllItem = slider.find('.item').length;
		countPage = Math.ceil(countAllItem / countItem);
		
		checkNavigation(page);
		positionMarks();
		
		if (!options.ajaxLoad) {
			// point selector handlers
			if (options.showPointSelector) {
				var point = '<div class="pointSelector"><ul>';
				for (var i = 1; i <= countPage; i++) {
					point = point + '<li>&nbsp;</li>'
				}
				point = point +'</ul><div class="clear"></div></div>';
				slider.prepend(point);
				slider.find('div.pointSelector li').each(function(i){
					if (i == 0) {
						$(this).addClass('active');
					}
					$(this).attr('id','liId_' + (i + 1));
					if (countAllItem > countItem) {
						$(this).bind('click', function(){
							page = $(this).attr('id').substr(5);
							slide(page);
						});
					}
				});
			}

			// horizontal scroll handlers
			if (options.showHorizontalScroll) {
				//set option progrees slider
				slider.children('table').append('<tr><td colspan="3" class="progressSlide"><div id="slider_' + slider.attr('id') + '"></div></td></tr>');
				if (countAllItem <= countItem) {
					slider.find('.progressSlide').not("a").css('padding','0 25px').find('div').addClass('oneList');
				}
				else {
					$('#slider_' + slider.attr('id')).slider({
						values: [0],
						step: 1,
						max: countAllItem - 5,
						slide: function(event, ui) {
							slider.find('.items').css('left','-' + (itemWidth * ui.values[0]) + 'px');
							page = Math.floor(((ui.values[0] + countItem) / countItem));
							if ((ui.values[0] + countItem) == countAllItem) {
								page  = countPage;
							}
							checkLastPage(page);
							checkNavigation(page);
							slider.find('.pointSelector li').removeClass('active')
							slider.find('li#liId_' + page).addClass('active');
						}
					})
				}
				// set progressBar width
				if (countPage > 0) {
					var progressBarWidth = boxWidth / countAllItem;
					if (progressBarWidth < 40) {
						progressBarWidth = 40;
					}
					slider.find('.progressSlide .ui-slider-handle').width(progressBarWidth);
				}
				checkLastPage();
			}
		}
	}
	else {
		checkNavigation(page);
	}
	
	// navigation events
	slider.find('div.nextPage').bind('click', function(){
		if ($(this).hasClass('active')) {
			page++;
			slide(page);
			// ajax loading
			if (options.ajaxLoad && page == countPage && page != lastPage){
				var filter = slider.parents('div.sliderContainer').find('dl.titleSlider dd.filter a.active');
				if (filter.length > 0) {
					options.url = filter.attr('href');
				}
				$.ajax({
					url: options.url + '/' + page,
					success: function(data){
						if (data != '') {
							slider.find('.items').append(data);
							recalculateParameters(page);
							positionMarks();
							decorCount();
						}
						else {
							lastPage = page;
						}
					},
					error: function(XMLHttpRequest){
						pwh.show(XMLHttpRequest.responseText);
					}
				});
			}
		}
	});
	slider.find('div.prevPage').bind('click', function(){
		if ($(this).hasClass('active')) {
			page--;
			slide(page);
		}
	});

	// interval filters
	slider.parents('div.sliderContainer').find('dl.titleSlider dd.filter a').bind('click', function(e){
		e.preventDefault();
		page = 1;
		lastPage = 0;
		slide(page);
		slider.parents('div.sliderContainer').find('dl.titleSlider dd.filter .active').removeClass('active');
		$(this).addClass('active').prev('div').addClass('active');
		var interval = $(this).attr('href').replace(/(^.*\/)*/, '');

		$.ajax({
			url: this.href,
			success: function(data){
				if (interval && $('.slideBlogBox a.rss').length){
					$('.slideBlogBox a.rss').attr('href', baseUrl + 'blog/rss/best/' + interval);
				}
				slider.find('.items').html(data);
				recalculateParameters(page);
				positionMarks();
				decorCount();
			},
			error: function(XMLHttpRequest){
				pwh.show(XMLHttpRequest.responseText);
			}
		});
	});

	/**
	 * moves items
	 */
	function slide(page)
	{
		var shift = (page - 1) * itemWidth * countItem;
		if (countAllItem < (page * countItem)) {
			shift = shift - (((page * countItem) - countAllItem) * itemWidth);
		}
		checkNavigation(page);
		if (!options.ajaxLoad) {
			if (options.showPointSelector) {
				eventToProgress(page);
			}

			if (options.showHorizontalScroll) {
				checkLastPage(page);
			}
			slider.find('.pointSelector li').removeClass('active');
			slider.find('li#liId_' + page).addClass('active');
		}
		if (countPage > 1) {
			slider.find('.items').animate({left:"-"+shift+"px"});
		}
	}

	/**
	 * disable/enable
	 */
	function checkNavigation(page)
	{
		if (page == 1) {
			slider.find('div.prevPage').removeClass('active');
		}
		else {
			slider.find('div.prevPage').addClass('active');
		}

		if (page == countPage) {
			slider.find('div.nextPage').removeClass('active');
		}
		else {
			slider.find('div.nextPage').addClass('active');
		}
	}

	function recalculateParameters(page)
	{
		countAllItem = slider.find('.item').length;
		if (countAllItem == 0) {
			countPage = 1;
		}
		else {
			countPage = Math.ceil(countAllItem / countItem);
		}
		checkNavigation(page);
	}

	/**
	 * moves progressSlide in case of using other controls
	 */
	function eventToProgress(page)
	{
		var shift
		if (1 == page) {
			shift = 0;
		}
		else {
			shift = (page - 1) * countItem;
		}
		$('#slider_' + slider.attr('id')).slider(
			"values", [shift]
		)
	}

	/**
	 * checks first and last position for horizontal scroll
	 */
	function checkLastPage(page)
	{
		var slideBar = slider.find('.ui-slider-handle');
		if (page == countPage) {
			slideBar.css('margin-left','-' + (slideBar.width() - 5) + 'px');
		}
		else {
			slideBar.css('margin-left','-6px');
		}
		if (1 == countPage) {
			slideBar.css({'margin-left':'-6px','left':'0'});
		}
	}

	function positionMarks(){
	$('.scrollable .item').each(function(){
		$(this).find('span.rating').css({'margin-top':($(this).find('img').offset().top-$(this).offset().top+2)+'px'});
	})
}

};



