﻿

function PagesNav()
{
    if(arguments.length != 4)
    {
        throw new Error('Constructor of PagesNav expects 4 arguments');
    }
	
	var vars = new Array();
    
    this.linkURL = arguments[0];
	vars.push('linkURL: ' + this.linkURL);
    this.start = arguments[1];
	vars.push('start: ' + this.start);
    this.count = arguments[2];
	vars.push('count: ' + this.count);
    this.searchCount = parseInt(arguments[3]);
	vars.push('searchCount: ' + this.searchCount);
    this.pageCount = Math.ceil(this.searchCount / this.count);
	vars.push('pageCount: ' + this.pageCount);
    this.currentPage = this.getCurrentPageNum();
	vars.push('currentPage: ' + this.currentPage);
    this.navPages = this.getPageNums();
	vars.push('navPages[type]: ' + typeof this.navPages);
	
	if(Secondary._LOG_ENABLED)LOG.printULwithH1('PagesNav variables',vars);	
}

PagesNav.prototype.getCurrentPageNum = function()
{
    for(var i = 1; i <= this.searchCount; i = i + this.count)
    {
        if(!nCount)var nCount = 0;
        ++nCount;
        if(i == this.start)
        {
            if(Secondary._LOG_ENABLED)LOG.printH1('Search current page: ' + nCount);
            return nCount;
        }
    }
    throw new Error('PagesNav.getCurrentPageNum() - current page is undefined');
};

PagesNav.prototype.getPageNums = function()
{
    var smallNav = (this.pageCount <= 10) ? true : null;
    var bottomNav = (!smallNav && this.currentPage <= 10) ? true : null;
    var topNav = (!smallNav && this.currentPage > (this.pageCount - 9)) ? true : null;
    var middleNav = (!smallNav && !bottomNav && !topNav) ? true : null;
										  
    if(smallNav)
    {
        var navPages = this.getPageNumsSmallNav();
		if(Secondary._LOG_ENABLED)LOG.printH1('Search Page Nav: smallNav');
    } else if(bottomNav) {
        var navPages = this.getPageNumsBottomNav();
		if(Secondary._LOG_ENABLED)LOG.printH1('Search Page Nav: bottomNav');
    } else if(topNav){
        var navPages = this.getPageNumsTopNav();
		if(Secondary._LOG_ENABLED)LOG.printH1('Search Page Nav: topNav');
    } else {
        var navPages = this.getPageNumsMiddleNav();
		if(Secondary._LOG_ENABLED)LOG.printH1('Search Page Nav: middleNav');
    }
    return navPages;
};


PagesNav.prototype.getPageNumsSmallNav = function()
{
    var pages = new Array();
    for(var i = 0; i < this.pageCount; i++)
    {
        pages.push(i + 1);
    }
    return pages;
};

PagesNav.prototype.getPageNumsBottomNav = function()
{
    var pages = new Array();
    for(var i = 0; i < 10; i++)
    {
        pages.push(i + 1);
    }
    pages.push(-1);
    if((this.pageCount - 1) > 10)pages.push(this.pageCount - 1);
    pages.push(this.pageCount);
    return pages;
};

PagesNav.prototype.getPageNumsTopNav = function()
{
    var pages = new Array();
    pages.push(1);
    pages.push(2);
    pages.push(-1);
    
    for(var i = (this.pageCount - 9); i <= this.pageCount; i++)
    {
        pages.push(i);
    }
    return pages;
};

PagesNav.prototype.getPageNumsMiddleNav = function()
{
    var pages = new Array();
    pages.push(1);
    pages.push(2);
    pages.push(-1);
	
    var startPage = this.currentPage.toString().split('');
    startPage[startPage.length - 1] = '0';
    startPage = parseInt(startPage.join(''));
    
    for(var i = startPage; i < (startPage + 10); i++)
    {
        pages.push(i);
    }
    
    pages.push(-1);
    
    if((this.pageCount - 1) > (startPage + 9))pages.push(this.pageCount - 1);
    pages.push(this.pageCount);
    return pages;
};


PagesNav.prototype.attach = function(oHolder)
{
    if(this.pageCount < 2)return;
    
    var ul = document.createElement('ul');
    //ul.setAttribute('id','searchNav');
	ul.className = 'searchNav';
    
	//Attach previous button
    if(this.currentPage != 1)
    {
        var sHref = this.linkURL + '&start=' + (this.start - this.count) + '&count=' + this.count;
        var anchor = document.createElement('a');
        anchor.setAttribute('href',sHref);
        anchor.appendChild(document.createTextNode('<< previous'));
        var li = document.createElement('li');
        li.appendChild(anchor);
        ul.appendChild(li);
    } else {
        var span = document.createElement('span');
        span.appendChild(document.createTextNode('<< previous'));
        var li = document.createElement('li');
        li.appendChild(span);
        ul.appendChild(li);
    }   
     
	//Attach pages
    for(var i = 0; i < this.navPages.length; i++)
    {
    	if(this.navPages[i] == -1)
		{
			var element = document.createElement('span');
			element.className = 'dots';
		} else {
			var start = (this.navPages[i] * this.count) - (this.count - 1);
			var sHref = this.linkURL + '&start=' + (start) + '&count=' + this.count;
			var element = document.createElement('a');
			if(this.navPages[i] == this.currentPage)element.className = 'current';
			element.setAttribute('href',sHref);
			element.appendChild(document.createTextNode(this.navPages[i]));
		}
		var li = document.createElement('li');
		li.appendChild(element);
		ul.appendChild(li);
    }
	
	//Attach next button
	if(this.currentPage != this.pageCount)
	{
		var sHref = this.linkURL + '&start=' + (this.start + this.count) + '&count=' + this.count;
        var anchor = document.createElement('a');
        anchor.setAttribute('href',sHref);
        anchor.appendChild(document.createTextNode('next >>'));
        var li = document.createElement('li');
        li.appendChild(anchor);
        ul.appendChild(li);
	} else {
        var span = document.createElement('span');
        span.appendChild(document.createTextNode('next >>'));
        var li = document.createElement('li');
        li.appendChild(span);
        ul.appendChild(li);
    }  
	
	oHolder.appendChild(ul);
};