var currentStep = new Array();
var currentPage = new Array();
var pageCount = new Array();
var count = new Array();
var formats = new Array('dvd', 'cinema', 'music', 'games');
var show = 5;


function buildHtml(item, i) {
	var li_class = i == 0 ? ' first' : '';
	var html = '<li class="last' + li_class + '"><div class="item_holder"><a href="' + item.url + '" title="' + item.title + '"><img src="/img/' + item.packshot.medium + '" alt="' + item.title + '" /></a></div><a href="' + item.url + '" class="item_button" title="' + item.title + '"><span>' + item.title.truncate(18) + '</span></a></li>';
	return html;
}

function steppingButtons(format,prev, next) {
	
	if (!prev) {
		$('.' + format + ' .list_pagination_prev').addClass('list_pagination_prev_disabled').removeClass('list_pagination_prev');		
	} else {
		$('.' + format + ' .list_pagination_prev_disabled').addClass('list_pagination_prev').removeClass('list_pagination_prev_disabled');
	}	
	if (!next) {
		$('.' + format + ' .list_pagination_next').addClass('list_pagination_next_disabled').removeClass('list_pagination_next');
	} else {
		$('.' + format + ' .list_pagination_next_disabled').addClass('list_pagination_next').removeClass('list_pagination_next_disabled');
	}
}
function paginationButtons(format,prev, next) {
	
	if (!prev) {
		$('.' + format + ' .pagination .previous').addClass('previous_disabled').removeClass('previous');
		$('.' + format + ' .pagination .first').addClass('first_disabled').removeClass('first');
	} else {
		$('.' + format + ' .pagination .previous_disabled').addClass('previous').removeClass('previous_disabled');
		$('.' + format + ' .pagination .first_disabled').addClass('first').removeClass('first_disabled');		
	}	
	if (!next) {
		$('.' + format + ' .pagination .next').addClass('next_disabled').removeClass('next');
		$('.' + format + ' .pagination .last').addClass('last_disabled').removeClass('last');
	} else {
		$('.' + format + ' .pagination .next_disabled').addClass('next').removeClass('next_disabled');
		$('.' + format + ' .pagination .last_disabled').addClass('last').removeClass('last_disabled');
	}
}

function doStep(dir,format, step) {
	if (!step) {
		step = dir == 'next' ? currentStep[format] + 1 : currentStep[format] - 1;
		step = step < 0 ? 0 : step;
	}
	
	page = Math.floor((step-1)/show + 1);
	if (currentStep[format] == step || page == pageCount[format]) return false;
	animate(format, step);
}

function changePage(dir, format, page) {
	if (!page) {
		page = dir == 'next' ? currentPage[format] + 1 : currentPage[format] - 1;
		page = page < 1 ? 1 : page;
		page = page > pageCount[format] ? pageCount[format] : page;
	}
	
	if (page == 1) {
		step = 0;
	} else {
		step = ((page - 1) * show);
	}
	
	//if (currentPage[format] == page) return false;
	if (currentStep[format] == step) return false;
	animate(format, step);
}

function animate(format, step) {
	$("." + format + " .item_list").animate({ 
	        left: "-" + (step * 167) + "px"}, 
			500 
	);
	
	page = Math.floor(step/show + 1);
	currentStep[format] = step;
	
	steppingButtons(format,(step > 0), (page < pageCount[format]));
	paginationButtons(format,(step > 0), (page < pageCount[format]));
	if (currentPage[format] != page) {
		currentPage[format] = page;
		pagination(format,page, pageCount[format], page > 1, (page < pageCount[format]))
	}
}


function addItems(data, format) {
	$.each(data.items, function(i,item){
		var li = buildHtml(item.Item, i);
    	$("." + format + " .item_list").append(li);
	});
}
function addItem(item, format, i) {
	if (i == 0) {
		$("." + format + " .item_list").prepend(buildHtml(item, i));
	} else {
		$("." + format + " .item_list").append(buildHtml(item, i));
	}
	
}


function pagination(format,current, count, hasPrev, hasNext) {
	$("."+ format +" .pagination ul.pages").empty();
	
	var start = 1;
	
	if (current <= 1 || count <= 3){ 
		start = 1;
	} else if (hasNext && current > 2){ 	
		start = current - 2;
	} else {
		start = current - 1;
	}
	
	var html = '';
	for(i=start;i<start+3;i++) {
		if (i <= count) {
			var li_class = i == current ? 'class="active"' : '';
			html = '<li ' + li_class + '><a href="?page=' + i +'">' + i + '</a></li>';
		} else {
			html = '<li><span>' + i + '</span></li>';
		}
		$("." + format + " .pagination ul.pages").append(html);
	}
	
	$("." + format + " .pagination ul.pages li a").click(function() {
		changePage('page', format, $(this).text())
		return false;
	});
}



function initPaging(format) {
	$("." + format + " .prev_page").click(function() {
		changePage('prev', format)
		return false;
	});
	$("." + format + " .next_page").click(function() {
		changePage('next', format)
		return false;
	});	
	$("." + format + " .first_page").click(function() {
		changePage('first', format, 1)
		return false;
	});		
	$("." + format + " .last_page").click(function() {
		changePage('last', format, pageCount[format])
		return false;
	});
	$("." + format + " .pagination ul.pages li a").click(function() {
		changePage('page', format, $(this).text())
		return false;
	});
	$("." + format + " .prev_step").click(function() {
		doStep('prev', format)
		return false;
	});	
	$("." + format + " .next_step").click(function() {
		doStep('next', format)
		return false;
	});
}


function init() {
	for (x in formats){
		initPaging(formats[x]);
		currentPage[formats[x]] = 1;
		count[formats[x]] = $("." + formats[x] + " .item_list li").size();
		currentStep[formats[x]] = 0;
		pageCount[formats[x]] = Math.ceil($("." + formats[x] + " .item_list li").size() / 5);
	}
}


$(document).ready(init);
