/*class*/ function Pagination (id, parent) {
	var dialogid = id;
	var perent   = parent;
	
	var Pagination = {
		parent         : parent,  
		id             : id,
		pgActionUpdate : null,
		pgStack        : null,
		pgReg          : 1, 
		pgStart        : 1,
		pgEnd          : 0,
		pgTotalPages   : 1,
		pgTotalLinks   : 5,
		pgCurrentPage  : 1,
		
		setUpdateAction  : function (fn)  { Pagination.pgActionUpdate = fn;  },
		setNumberOfLinks : function (int) { Pagination.pgTotalLinks   = int; },
		setStack         : function (obj) { Pagination.pgStack        = obj; },
		setNumRegsByPage : function (int) { 
			Pagination.pgReg = int; 
			Pagination.pgEnd = int;
		},
		
		getTotalPages  : function () { return Pagination.pgTotalPages;   },
		getCurrentPage : function () { return Pagination.pgCurrentPage;  },
		getTotalRegs   : function () { return Pagination.pgStack.length; },
		getStart       : function () { return Pagination.pgStart - 1;    },
		getEnd         : function () { return Pagination.pgEnd   - 1;    },
			
		loadpage : function (direction) {
			if(isNaN(parseInt(direction))) {
				
				switch(direction) {
					case 'next':
						Pagination.pgStart += Pagination.pgReg;
						Pagination.pgEnd += Pagination.pgReg;
					break;
					case 'previous':
						Pagination.pgStart -= Pagination.pgReg;
						if(Pagination.pgStart < 0) 
							Pagination.pgStart = 0;
						Pagination.pgEnd -= Pagination.pgReg;
					break;
				}
			}
			else {
				Pagination.pgStart = (parseInt(direction) * Pagination.pgReg);
				Pagination.pgEnd = Pagination.pgReg + (parseInt(direction) -1);
			}
			
			if(Pagination.pgActionUpdate != null) {
				var callback = eval(Pagination.pgActionUpdate);
				callback();
			}
			else
				Pagination.updateNavigation();
		},
		
		updateNavigation : function () {	
			if(!Pagination.pgStack) return;
			
			var element     = document.getElementById('navigationlinks('+Pagination.id+')');
			var btnNext     = document.getElementById('pgbtnnext('+Pagination.id+')');
			var btnPrevious = document.getElementById('pgbtnprevious('+Pagination.id+')'); 
			var offset      = Math.floor(Pagination.pgTotalLinks / 2);
			var html        = '';
			var end         = 0;
			var start       = 0;
			
			Pagination.pgTotalPages = Math.ceil(Pagination.pgStack.length/Pagination.pgReg);
			Pagination.pgCurrentPage = Math.ceil(Pagination.pgStart / Pagination.pgReg)
			
			
			start = (Pagination.pgCurrentPage-offset < 1 ? 1 : Pagination.pgCurrentPage-offset)
			end   = Pagination.pgCurrentPage+offset;
			if(end >= Pagination.pgTotalPages)
				start = Pagination.pgTotalPages - (offset*2);
			for(var i=start; i<end; i++) {
				if(i >= Pagination.pgCurrentPage || i < 1) break;
				html += '<span onclick="'+Pagination.id+'.loadpage('+i+')">|'+i+'</span>';	
			}
			
			html += '<span>|<b>'+Pagination.pgCurrentPage+'</b>|</span>';	
			
			start = Pagination.pgCurrentPage+1
			end   = Pagination.pgCurrentPage+offset;			
			if(Pagination.pgCurrentPage - offset < 1)
				end = (offset*2)+1;
			
			for(var i=start; i<=end; i++) {
				if(i <= Pagination.pgCurrentPage || i > Pagination.pgTotalPages) break;
				html += '<span onclick="'+Pagination.id+'.loadpage('+i+')">'+i+'|</span>';	
			}
			
			if(Pagination.pgEnd + 1 > Pagination.pgStack.length) {
				btnNext.setAttribute('onclick', '');
				btnNext.style.cursor = "";
			}
			else {
				btnNext.setAttribute('onclick', (isBrowserVersion('msie') ? new Function(Pagination.id+'.loadpage(\'next\')') : Pagination.id+'.loadpage(\'next\')'));
				btnNext.style.cursor = "pointer";
			}
	
			if(Pagination.pgStart - 1 <= 0) {
				btnPrevious.setAttribute('onclick', '');
				btnPrevious.style.cursor = "";
			}
			else {
				btnPrevious.setAttribute('onclick', (isBrowserVersion('msie') ? new Function(Pagination.id+'.loadpage(\'previous\')') : Pagination.id+'.loadpage(\'previous\')'));
				btnPrevious.style.cursor = "pointer";
			}
			
			element.innerHTML = html;
		},
		
		paint : function () {
			if(!Pagination.parent) return;
			if(document.getElementById('pagination('+Pagination.id+')')) return;
			
			Pagination.parent.innerHTML = Pagination.toHTML();
		},
		
		toHTML : function () {
			var html = '<div style="width: 100%; padding-left: 10px;" id="pagination('+Pagination.id+')"><div style="float:left; width: 70px;" onclick="'+Pagination.id+'.loadpage(\'previous\')" id="pgbtnprevious('+Pagination.id+')"><< Anterior</div><div style="float:left; width: 360px; text-align:center; display:none" id="navigationlinks('+Pagination.id+')"></div><div style="float:left">&nbsp;|&nbsp;</div><div style="float:left; width: 70px;" onclick="'+Pagination.id+'.loadpage(\'next\')" id="pgbtnnext('+Pagination.id+')">Próxima >></div></div>';
			
			return html;
		}
	}
	
	return Pagination;
}

function createPagination (id, parent) {
	if(!document.getElementById('pagination('+id+')')) {
		eval(id+" = new Pagination('"+id+"', parent)");
		return true;
	}
	
	return false;
}