iTunesSlider = Class.create();
Object.extend(Object.extend(iTunesSlider.prototype, AC.Slider.prototype), {

	render: function(itemsPerList) {
		
		this.itemsPerPage = itemsPerList;

		this.list = this.container.getElementsByTagName('ul')[0];
		
		var listItems = this.list.getElementsByTagName('li');
		var processedList = this.renderItems(listItems);
		
		this.list.innerHTML = '';
		for (var i = 0; i < processedList.length; i++) {
			this.list.appendChild(processedList[i]);
		};
		
		//positioning requires this not be the child of a display: none element
		//cloning to ensure that
		var clonedContainer = this.container.cloneNode(false);
		var body = document.getElementsByTagName('body')[0];
		clonedContainer.setStyle({position: 'absolute', top: '-999px'})
		body.appendChild(clonedContainer);
		
		this.positionWithinMask(clonedContainer);
		
		body.removeChild(clonedContainer);

		this.createArrows();
		
		this.totalPages = Math.ceil(this.items.length/this.itemsPerPage);
		this.createDots();
	},

	renderItems: function(listItems) {
		var list = [];
		
		var lastPageStart = this.items.length-this.items.length%this.itemsPerPage;
		if (lastPageStart == this.items.length) { 
			lastPageStart = this.items.length-this.itemsPerPage;
		}
		
		var overflowAmount = this.itemsPerPage-this.items.length%this.itemsPerPage;
		if (overflowAmount == this.itemsPerPage) {
			overflowAmount = 0;
		}
		
		// copy the last page before the first page
		list = list.concat(this.renderPlaceholderItems(lastPageStart, this.items.length));

		// empty nodes as space filler before the all the pages
		for (var i=0; i<overflowAmount; i++) {
			var listItem = Builder.node('li', {'class': 'empty'});
			list.push(listItem);
		}

		// create all the pages
		for (var i=0; i<this.items.length; i++) {
			var listItem = this.items[i].render().cloneNode(true);
			list.push(listItem);
		}

		// empty nodes as space filler before the copy of the first page
		for (var i=0; i<overflowAmount; i++) {
			var listItem = Builder.node('li', {'class': 'empty'});
			list.push(listItem);
		}

		// copy the first page after the last page
		list = list.concat(this.renderPlaceholderItems(0, this.itemsPerPage));

		return list;
	},

	populate: function(sliderElements) {
		
		for (var i = 0; i < sliderElements.length; i++) {
			var sliderItem = new iTunesSliderItem(sliderElements[i]);
			this.items.push(sliderItem);
		}
		
		//ensure we're left positioning to the first page
		this.currentPage = 1;
		this.render(4);
	}
	
});

iTunesSliderItem = Class.create();
Object.extend(iTunesSliderItem.prototype, AC.SliderItem.prototype);
Object.extend(iTunesSliderItem.prototype, {

	render: function() {
		return this.html;
	}	

})
