//
// EidoxPaginator
//
// History:
// - Thomas Brattli
// - David G. Miles
// - Carlos Castillo
// - Edgard Pineda
//
// This will hold the main eidoxPaginator object
//
var ep = null;
// Class constructor
function EidoxPaginator(contentDiv,pagesDiv,firstButton,prevButton,nextButton,lastButton,firstEnabled,lastEnabled,prevEnabled,nextEnabled,prevDisabled,nextDisabled,firstDisabled,lastDisabled,pageHeight,pageText,pagesDiv_top,firstButton_top,prevButton_top,nextButton_top,lastButton_top,pageText_top) {
this.contentDiv = document.getElementById(contentDiv); // Internal div
this.pagesDiv = document.getElementById(pagesDiv); // Page nums
this.fullHeight = this.contentDiv.offsetHeight; // Total height
this.pageHeight = +pageHeight; // Force int
this.totalPages = Math.ceil( this.fullHeight / this.pageHeight );
this.firstButton = firstButton;
this.prevButton = prevButton;
this.nextButton = nextButton;
this.lastButton = lastButton;
this.pageText = pageText;
this.pagesDiv_top = document.getElementById(pagesDiv_top); // Page nums
this.firstButton_top = firstButton_top;
this.prevButton_top = prevButton_top;
this.nextButton_top = nextButton_top;
this.lastButton_top = lastButton_top;
this.pageText_top = pageText_top;
// Methods
this.scroll = EidoxPaginatorScroll;
this.first = EidoxPaginatorFirst;
this.prev = EidoxPaginatorPrev;
this.next = EidoxPaginatorNext;
this.last = EidoxPaginatorLast;
this.buttons = EidoxPaginatorButtons;
this.go = EidoxPaginatorGo;
// Images
this.firstEnabled = firstEnabled;
this.lastEnabled = lastEnabled;
this.prevEnabled = prevEnabled;
this.nextEnabled = nextEnabled;
this.prevDisabled = prevDisabled;
this.nextDisabled = nextDisabled;
this.firstDisabled = firstDisabled;
this.lastDisabled = lastDisabled;
// Init
this.scroll(0);
return this
}
function EidoxPaginatorGo(n) {
var y = 0;
var p = 1;
while( p < n && p < this.totalPages && this.fullHeight - this.pageHeight > -y ) {
y -= this.pageHeight;
p += 1;
}
this.scroll(y);
this.buttons();
}
// Scrolling function
function EidoxPaginatorScroll(y){
this.y=y
this.contentDiv.style.top=this.y + 'px'; // 'px' important for mozilla
var currentPage = 1;
if( this.y != 0 ) {
currentPage = Math.round( (-this.y) / this.pageHeight ) + 1;
}
var msg = this.pageText;
if( msg.length ) {
msg = msg.replace( /\$page/g, currentPage );
msg = msg.replace( /\$total/g, this.totalPages );
} else {
msg = currentPage + "/" + this.totalPages;
}
this.pagesDiv.innerHTML = "" + msg + "";
if(this.pagesDiv_top && this.pageText_top) {
msg = this.pageText_top;
if( msg.length ) {
msg = msg.replace( /\$page/g, currentPage );
msg = msg.replace( /\$total/g, this.totalPages );
} else {
msg = currentPage + "/" + this.totalPages;
}
this.pagesDiv_top.innerHTML = "" + msg + "";
}
}
// First/last page function
function EidoxPaginatorFirst() {
this.scroll(0);
this.buttons();
}
function EidoxPaginatorLast() {
var y = this.y;
while( this.fullHeight - this.pageHeight > -y ) {
y -= this.pageHeight;
}
this.scroll(y);
this.buttons();
}
// Previous/next page function
function EidoxPaginatorPrev(delta,objtimeout,timeout) {
if( this.y < 0 ) {
if(delta) {
this.scroll(this.y+delta);
} else {
this.scroll(this.y+this.pageHeight);
}
if(objtimeout && timeout) {
this.scrollPrevTimer = setTimeout(objtimeout + '.prev(' + delta + ',"' + objtimeout + '",' + timeout + ')',timeout);
}
}
this.buttons();
}
function EidoxPaginatorNext(delta,objtimeout,timeout) {
if( this.fullHeight - this.pageHeight > -this.y ) {
if(delta) {
this.scroll(this.y-delta);
} else {
this.scroll(this.y-this.pageHeight);
}
if(objtimeout && timeout) {
this.scrollNextTimer = setTimeout(objtimeout + '.next(' + delta + ',"' + objtimeout + '",' + timeout + ')',timeout);
}
}
this.buttons();
}
// Update buttons to enable/disable state
function EidoxPaginatorButtons() {
if( this.y < 0 ) {
if( this.prevButton ) {
if( this.prevButton.src != this.prevEnabled.src ) {
this.prevButton.src = this.prevEnabled.src;
if( this.firstButton ) this.firstButton.src = this.firstEnabled.src;
}
}
if( this.prevButton_top ) {
if( this.prevButton_top.src != this.prevEnabled.src ) {
this.prevButton_top.src = this.prevEnabled.src;
if( this.firstButton_top ) this.firstButton_top.src = this.firstEnabled.src;
}
}
} else {
if( this.prevButton ) {
if( this.prevButton.src != this.prevDisabled.src ) {
this.prevButton.src = this.prevDisabled.src;
if( this.firstButton ) this.firstButton.src = this.firstDisabled.src;
}
}
if( this.prevButton_top ) {
if( this.prevButton_top.src != this.prevDisabled.src ) {
this.prevButton_top.src = this.prevDisabled.src;
if( this.firstButton_top ) this.firstButton_top.src = this.firstDisabled.src;
}
}
}
if( this.fullHeight - this.pageHeight > -this.y ) {
if( this.nextButton ) {
if( this.nextButton.src != this.nextEnabled.src ) {
this.nextButton.src = this.nextEnabled.src;
if( this.lastButton ) this.lastButton.src = this.lastEnabled.src;
}
}
if( this.nextButton_top ) {
if( this.nextButton_top.src != this.nextEnabled.src ) {
this.nextButton_top.src = this.nextEnabled.src;
if( this.lastButton_top ) this.lastButton_top.src = this.lastEnabled.src;
}
}
} else {
if( this.nextButton ) {
if( this.nextButton.src != this.nextDisabled.src ) {
this.nextButton.src = this.nextDisabled.src;
if( this.lastButton ) this.lastButton.src = this.lastDisabled.src;
}
}
if( this.nextButton_top ) {
if( this.nextButton_top.src != this.nextDisabled.src ) {
this.nextButton_top.src = this.nextDisabled.src;
if( this.lastButton_top ) this.lastButton_top.src = this.lastDisabled.src;
}
}
}
}