/**
 * Paginator Class
 * 
 * Class that allows you to design a set of link-images showing it in pages
 * 
 */
var Paginator = Class.create({
	initialize: function( ) {
		this.currentPage=1;
		this.pagesCount = 0;
		this.elementsPerPage = 0;
		this.elementsTotal = 0;
		this.numCols = 0;
		this.contentUrl = "";
		this.orderby = "";
	},
	
	/**
	 * Initialize the paginator -> call it ON LOAD page to read all needed parameters
	 */
	initPaginator: function(){
		this.elementsPerPage = $('elementsPerPage').value;
		this.elementsTotal = $('elementsTotal').value;
		this.numCols = $('numCols').value;
		this.contentUrl = "./"+$('contentUrl').value;
		if ($('orderby')) this.orderby = $('orderby').value;
		
		var residu = this.elementsTotal % this.elementsPerPage;
		this.pagesCount = ( this.elementsTotal - residu ) / this.elementsPerPage; 
		
		if (residu!=0)		
			this.pagesCount++;
		
		$('totalPages').innerHTML = this.pagesCount;
		$('totalPages').show();
		
		this.manageArrows();
	},
	
	/**
	 * Enables and disable arrows when it's necessary
	 */
	manageArrows: function()
	{
		var isoff_left = '';
		var isoff_right = '';
		if(this.currentPage >= this.pagesCount || this.pagesCount < 1)
			isoff_right = '_off';
		
		if(this.currentPage < 2)
			isoff_left = '_off';
		
		$('arrowLeft').src = '/images/Pizq' + isoff_left + '.gif';
		$('arrowRight').src = '/images/Pder' + isoff_right + '.gif';
	},
	
	/**
	 * Updates the current paginator page
	 */
	updateCurrentPage: function(){
		$('currentPage').innerHTML = this.currentPage;
	},
	
	
	/**
	 * Simulates the system thinking
	 */
	markElementsAsWaiting: function(clean){
		
		var visibility = 'visible';
			
		if (clean){//not the last page
			visibility = 'hidden';
		}
		
		for (var i = 0; i < this.elementsPerPage; i++) {
			var col = i % this.numCols;
			var row = Math.floor(i / this.numCols);
			
			var imgId = "imgElement"+row+"_"+col;
			$(imgId).src = '/images/cargando.gif';
			$(imgId).alt = '';
			$(imgId).title = '';			
			
			var elementId = "linkElement"+row+"_"+col;
			$(elementId).href = '';		
			
			var cellId = "celda"+row+"_"+col;
			$(cellId).style.visibility = visibility;
			
		}
	},
	
	/**
	 * Goes to the next set of images
	 */
	goNextPage: function(imgPrefix, imgExt){
		if(this.currentPage < this.pagesCount){
			this.currentPage++;
			this.updateCurrentPage();
			
			if(this.currentPage == this.pagesCount)
				this.markElementsAsWaiting(true);
			else
				this.markElementsAsWaiting(false);
			
			this.loadElements(imgPrefix, imgExt);
		}
		this.manageArrows();
	},
	
	/**
	 * Goes the the previous set of images
	 * @param imgPrefix: image prefix (eg. per sets: tset)
	 * @param imgExt: image extension (eg. .png, .jpg)
	 */
	goPreviousPage: function(imgPrefix, imgExt){
		if(this.currentPage > 1){
			this.currentPage--;
			this.updateCurrentPage();
			this.markElementsAsWaiting(false);
			this.loadElements(imgPrefix, imgExt);
		}
		this.manageArrows();
	},
	
	/**
	 * Loads view elements 
	 */
	loadElements: function(imgPrefix, imgExt){
		var current = this;
		
		var url = current.contentUrl+"/?page="+current.currentPage+"&nelem="+current.elementsPerPage+"&orderby="+current.orderby;
		
		new Ajax.Request(url, {
			method: 'get',
		  	onSuccess: function(transport) {
				var xmldoc = transport.responseXML;
	        	
	        	var root = xmldoc.getElementsByTagName('elements').item(0);
	            var elements = root.getElementsByTagName('element');
	            
	            for (var iNode = 0; iNode < elements.length; iNode++) {
            		
               		var node = elements.item(iNode);
               		
               		var elementId = node.attributes.getNamedItem('id').nodeValue;
               		var name = node.getElementsByTagName('name').item(0).firstChild.nodeValue;
               		var link = node.getElementsByTagName('link').item(0).firstChild.nodeValue;
               		
               		var col = iNode % current.numCols;
               		var row = Math.floor(iNode /current.numCols);
               		
               		var imgId = "imgElement"+row+"_"+col;
               		var linkId = "linkElement"+row+"_"+col;
               		var imgSrc = imgPrefix + elementId + imgExt + "?" + Math.random();
               		var cellId = "celda"+row+"_"+col;
        			$(cellId).style.visibility = 'visible';
               		
               		
               		//fix new link ref
               		$(linkId).href = link;
               		
               		//fix new [SET] img src               		
               		$(imgId).src = base_url_amazon_js +imgSrc;   
               		$(imgId).alt = name;
               		$(imgId).title = name;
	            }	            
			}
		
		});//End Ajax.Request
		
	}
	
	
	
});

var paginator = new Paginator();