// var pager = new Pager('results', 4, 'slot', 'div', 'pageNavPosition');

function Pager(targetName, itemsPerPage, pageClass, pageElement, pageNavigation) {
    this.targetName = targetName;
    this.itemsPerPage = itemsPerPage;
    this.pageClass = pageClass;
    this.pageElement = pageElement;
    this.pageNavigation = pageNavigation;
    this.currentPage = 1;
    this.pages = 0;

    this.showRecords = function(from, to) {
        var rows = this.getElementsByClassName(pageClass, pageElement, document.getElementById(targetName));
        for (var i = 0; i < rows.length; i++) {
            if (i < from || i > to)
                rows[i].style.display = 'none';
            else
                rows[i].style.display = '';
        }
    }

    this.showPage = function(pageNumber) {
        this.currentPage = pageNumber;
        var from = (pageNumber - 1) * itemsPerPage;
        var to = from + itemsPerPage -1;
        this.showRecords(from, to);
        this.showPageNav(this.pageNavigation);
    }

    this.init = function() {
        var rows = this.getElementsByClassName(pageClass, "div", document.getElementById(targetName));
        var records = (rows.length - 1);
        this.pages = Math.ceil((records + 1)/ itemsPerPage);
    }

    this.showPageNav = function(pageNavigationTarget) {
        var element = document.getElementById(pageNavigationTarget);
        this.clearElement(element);
        var txt = document.createTextNode("Page: ");
        var obj = this;
        element.appendChild(txt);
        for (var page = 1; page <= this.pages; page++){
            if (page != this.currentPage){
                var a = document.createElement("a");
                a.setAttribute("href", "#");
                a.className = "pg-normal";
                a.id = "pg" + page;
                a.onclick = this.scopepreserver(obj, page);
                a.appendChild(document.createTextNode(page));
                element.appendChild(a);
            } else {
                element.appendChild(document.createTextNode(page));
            }
            element.appendChild(document.createTextNode(" "));
        }
    }

    this.clearElement = function(el) {
        while(el.firstChild) {
            el.removeChild(el.firstChild);
        }
    }

    this.scopepreserver = function(obj, page) {
        return function () {
            obj.showPage(page);
            return false;
        };
    }


    this.getElementsByClassName = function(strClass, strTag, objContElm) {
        strTag = strTag || "*";
        objContElm = objContElm || document;
        var objColl = objContElm.getElementsByTagName(strTag);
        if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
        var arr = new Array();
        var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
        var arrClass = strClass.split(delim);
        for (var i = 0, j = objColl.length; i < j; i++) {
            var arrObjClass = objColl[i].className.split(' ');
            if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
            var c = 0;
            comparisonLoop:
            for (var k = 0, l = arrObjClass.length; k < l; k++) {
                for (var m = 0, n = arrClass.length; m < n; m++) {
                    if (arrClass[m] == arrObjClass[k]) c++;
                    if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
                        arr.push(objColl[i]);
                        break comparisonLoop;
                    }
                }
            }
        }
        return arr;
    }


    this.init();
    this.showPage(1);
}
