/**
 * General Paginator and Products paginator for inspirations guide
 */
if(!garant){
    var garant = {};
}
/**
 * Get all the products in the DOM element. 
 */
garant.getProducts = function(id){
    var products = [];
    var images = $(id).getElements('img');   

    console.log('images', images);
    
    for(var i = 0; i < images.length; i++){
        var img = images[i];
        var link = img.getParent();
        var product = garant.product({'link':link, 'img': img});
        products.push(product);
    }

    console.log('products', products);

    return products;
};

/**
 * Create new product.
 * @param {object} obj with properties link and img.
 */ 
garant.product = function(obj){
    var that = {};
    
    that.as_html = function(){

        var product_div = new Element(
            'div', {'class':'product'});

        var link = new Element(
            'a', {'href': obj.link.href, 'html': obj.link.title
             }
        );

        var img = new Element(
            'img', { 'src': obj.img.src, 'alt': obj.img.alt
            }
        );
        
        img.inject(product_div);
        link.inject(product_div);

        return product_div;
    };
    
    return that;
};

garant.paginator = function(obj){
    
    var that = {};

    that.page_size = obj.page_size || 9;

    that.current_page = obj.current_page || 0;

    that.objects = obj.objects || [];
    
    that.getNumberOfPages = function(){
        return Math.ceil(that.objects.length / that.page_size);
    };
    
    /**
     * Get current page number 1,2, ...
     */
    that.getCurrentPageNum = function(){
        return that.current_page + 1;
    };

    that.setCurrentPageNum = function(page_num){
        if(page_num > 0 && 
           page_num <= that.getNumberOfPages()){
            page_num--;
            that.current_page = page_num;
        }
    };

    that.getNumberOfObjects = function(){
        return that.objects.length;
    };

    that.getIndexFrom = function(){
        return that.current_page * that.page_size + 1;
    };

    that.getIndexTo = function(){
        var index = that.current_page * that.page_size + that.page_size;
        // handle indexTo going above total
        return index < that.objects.length ? index : that.objects.length;
    };

    /**
     * Get page 1,2,...
     */
    that.getPage = function(page_num){
        // index in array from 0
        page_num--;
        var page = [];
        var index_begin = page_num * that.page_size;
        var index_end = index_begin + that.page_size;
        
        for(var i = index_begin; i < index_end; i++){
            if(i < that.objects.length){
                page.push(that.objects[i]);
            }
        }    
        return page;
    };

    return that;
    
};

garant.productPaginator = function(obj){

    // handles to DOM objects
    var objectFromElem = $(obj.objectFrom);
    var objectToElem = $(obj.objectTo);
    var objectTotalElem = $(obj.objectTotal);

    var pageNumElem = $(obj.pageNum);
    var totalPageNumElem = $(obj.totalPageNum);

    var nextPageLink = $(obj.nextPageLink);
    var previousPageLink = $(obj.previousPageLink);

    var products = garant.getProducts(obj.productsId);    
    var results_id = obj.results;

    var paginator = garant.paginator(
        {
            'objects': products,
            'page_size': 9,
            'current_page': 0
        });



    // totals, never changes    

    totalPageNumElem.set('html', paginator.getNumberOfPages());

    objectTotalElem.set('html', paginator.getNumberOfObjects() || 1);


    function refresh(){
        var current_page_num = paginator.getCurrentPageNum(); 
        var products_page = paginator.getPage(current_page_num);
        
        objectFromElem.set('html', paginator.getIndexFrom());
        objectToElem.set('html', paginator.getIndexTo());
    
        pageNumElem.set('html', current_page_num);
	
        var results = $('results');
	    results.set({'html':'<div></div>'});

	
        for(var i = 0; i < products_page.length; i++){
		  var p = products_page[i].as_html();
		  p.inject(results);
            }
    }

    function nextPageClick(){
        var page_num = paginator.getCurrentPageNum();
        paginator.setCurrentPageNum(++page_num);
        refresh();
    }

    function previousPageClick(){
        var page_num = paginator.getCurrentPageNum();
        paginator.setCurrentPageNum(--page_num);
        refresh();
    }
    
    function addListeners(){
        nextPageLink.addEvent('click', nextPageClick);
        previousPageLink.addEvent('click', previousPageClick);
        
    };

    addListeners();
    refresh();
};

garant.initProductPaginator = function(){		
    garant.productPaginator(
        {'objectFrom':'object-from', 
         'objectTo': 'object-to',
         'objectTotal':'object-total',
         'pageNum': 'page-num',
         'totalPageNum': 'total-page-num',
         'nextPageLink': 'next-page',
         'previousPageLink': 'previous-page',
	 'results': 'results',
	 'productsId': 'external-content'
        });
};

/*window.addEvent(
    'load', function() {
	        
});*/