/**
 * Paginator Loader
 *
 * @author Thilo Haas
 * @created Thu Jul  3 16:53:35 CEST 2008
 **/


var PaginatorLoader = Class.create();
PaginatorLoader.prototype = {
	
	controller: 		null,
	pagingContainer:	null,
	container:			null,
	pagingUrl:			null,
	callback:			null,
	
	initialize: function(pagingContainer, container) {
		this.pagingContainer = pagingContainer;
		this.container = container;
		this.initializeController();
	},
	
	initializeController: function() {
		this.controller = new PaginatorController();
		this.controller.constraints = {
			currentPage: 			1,
			totalNumberOfItems: 	0,
			numberOfItemsPerPage: 	30,
			numberOfPagesPerSet: 	6,
			pagesLimit: 			10
		};
		
	},
	
	setCurrentPage: function(page) {
		this.controller.constraints.currentPage = page;
	},
	
	setTotalNumberOfItems: function(page) {
		this.controller.constraints.totalNumberOfItems = page;
	},
	
	setNumberOfItemsPerPage: function(page) {
		this.controller.constraints.numberOfItemsPerPage = page;
	},
	
	setNumberOfPagesPerSet: function(page) {
		this.controller.constraints.numberOfPagesPerSet = page;
	},
	
	setPagesLimit: function(page) {
		this.controller.constraints.pagesLimit = page;
	},
	
	render: function() {
		var childNodes = this.pagingContainer.childNodes;
		for(var i = childNodes.length - 1; i >= 0; i--){
			Element.remove(childNodes[i]);
		}
		
		this.controller.container = this.pagingContainer.id;
		
		if(this.callback) {
			this.controller.addCallback({ render : this.callback });
		} else {
			this.controller.addCallback( {
				render: function (transport, json){
					this.container.innerHTML = transport.responseText;
					// reattach event for member flyout
					attachFlyoutEvent();
			}.bind(this)});
		}
		
		this.controller.pagingUrl = this.pagingUrl;
		
		this.controller.recalculateConstraints(this.controller.constraints.currentPage);
		var constraints = this.controller.constraints;
		
		var prevPageSet = document.createElement('div');
		Element.addClassName(prevPageSet, 'previousPageSet');
		
		if(constraints.previous > 0) {
			var number = document.createElement('a');
			number.setAttribute('href', this.pagingUrl + '/' + constraints.previous);
			number.innerHTML = '<<';
			prevPageSet.appendChild(number);
		}
		
		this.pagingContainer.appendChild(prevPageSet);
		
		for(var i = constraints.startIndex; i < (constraints.startIndex + constraints.numberOfPagesPerSet); i++) {
			var pageDiv = document.createElement('div');
			Element.addClassName(pageDiv, 'paginatorNumber');
			if(i <= constraints.endIndex) {
				var number;
				if(i == constraints.currentPage) {
					number = document.createElement('span');
					Element.addClassName(number, 'currentPage');
					number.innerHTML = '[' + i + ']';
				} else {
					number = document.createElement('a');
					//number.setAttribute('href', this.pagingUrl + '/' + i);
					number.setAttribute('href', '#');
					number.innerHTML = i;
				}
				pageDiv.appendChild(number);
			}
			this.pagingContainer.appendChild(pageDiv);
		}
		
		var nextPageSet = document.createElement('div');
		Element.addClassName(nextPageSet, 'nextPageSet');
		
		if(constraints.next > 0) {
			var number = document.createElement('a');
			number.setAttribute('href', this.pagingUrl + '/' + constraints.next);
			number.innerHTML = '>>';
			nextPageSet.appendChild(number);
		}
		
		this.pagingContainer.appendChild(nextPageSet);
		
		var statusDiv = document.createElement('div');
		Element.addClassName(statusDiv, 'paginatorStatus ' + this.pagingContainer.id);
		this.pagingContainer.appendChild(statusDiv);
		
		this.controller.addPaginatorNavigation(this.pagingContainer.id);
		this.controller.showPage(constraints.currentPage);
	}
}