/*
 * Copyright (c) 2008 Massimiliano Balestrieri
 * 
 * $Date:2008-06-20 18:54:20 +0200 (ven, 20 giu 2008) $
 * $Rev:181 $
 * @requires jQuery v1.2.6
 * @requires History/Remote v0.2.3
 * 
 * Copyright (c) 2008 Massimiliano Balestrieri
 * Examples and docs at: http://maxb.net/blog/
 * Licensed GPL licenses:
 * http://www.gnu.org/licenses/gpl.html
 *
 */
 
jPaging = {
    build : function(options)
    { 
        
        options = jQuery.extend({
            record     : '.record',
            per_pagina : 4,
            lbl_page   : 'Page',
            lbl_next   : 'next',
            lbl_prev   : 'prev',
			finestra   : false
        }, options);
        var that = this;
        
        /*var jp = "\
		    <span class=\"sx\">"+options.lbl_page+":  </span>\n\
		    <span class=\"dx\">\n\
		        <span class=\"numeri\">\
		        </span>\
		    </span>\n\
		";*/
        
        var jp = "\
		    <span class=\"dx\">\n\
		    	<span class=\"numeri\">\
		    	</span>\
		    </span>\n\
		";

        jQuery(this).append('<div class="jp">');
        //SOLO IN FONDO! : jQuery(this).prepend('<div class="jp">');
        //var _pagina = 1;
        var records = jQuery(options.record, that);
        
        var _current = 1;//(location.hash && parseInt(location.hash.slice(1))) ? parseInt(location.hash.slice(1)) :  location.hash = 1;
        //console.log(_current);
        var _pagina = _current;//TODO: pagina iniziale e history?
        var _per_pagina = options.per_pagina;
        var _start = 1 * _per_pagina - 1;
        var _stop = _start + _per_pagina - 1;
        var _pagine = Math.ceil(records.size() / _per_pagina);
        var expando = {
            pagina : _pagina
        };
        
        
        this.expando = expando; 
        
        if(_pagine > 1)        
        	jQuery(".jp").html(jp);
        
        
        function _page_show_or_hide(){
			if(!options.finestra)
				return false;

			var _pagina_attuale = that.expando.pagina;

			//caso semplice. da va da current - 1 o da current se sei a pagina 1
			var _da = _pagina_attuale > 1 ? _pagina_attuale - 1 : _pagina_attuale;
			//se la paginaattuale + finestra supera o è uguale al totale delle pagine
			if(((_pagina_attuale - 1) + options.finestra ) > _pagine)
				_da = _pagine - options.finestra + 1;

			var _a = (_da + options.finestra) - 1;
			
			//console.log((_pagina_attuale - 1) + options.finestra )
			//console.log(_da);
			//console.log(_a);
			//return false;
			$(".jp > .dx > .numeri > a:not(.succ, .prec)").each(function(y){
				var _p = y + 1;

				if(_p != _pagina_attuale && !(_p >= _da && _p <= _a))
					$(this).hide().next().hide();
				else
					$(this).show().next().show();
			})	
		}
		
        for(var x= 1;x <= _pagine; x++){
            
            //wrap
            var _page_start = (x - 1) * _per_pagina;
            var _page_stop = _page_start + _per_pagina;// - 1;
            var _e_page = records.slice(_page_start, _page_stop);
            //console.log("start"   + _page_start);
            //console.log("stop"   + _page_stop);
            //console.log(_e_page);
            _e_page.wrapAll('<div class="pagina" id="page-'+x+'" />');
            
			
            if(x==1 && _pagine > 1)
                jQuery("<a href=\"#\" class=\"prec\"><< "+options.lbl_prev+"</a><span class=\"bugFix\"> &nbsp; </span>")
                .click(function(){
                    
                })
                .appendTo(".jp > .dx > .numeri");
            
            
            if(x == _pagina){
                jQuery("<a class=\"page jp-active\" href=\"#"+x+"\"></a>")
                .text(x)
                .appendTo(".jp > .dx > .numeri")
            
            }else{
				
					
                jQuery("<a class=\"page\" href=\"#"+x+"\"></a>")
                .text(x)
                .appendTo(".jp > .dx > .numeri");
            }
            
			if(!(x == _pagine && _pagine > 1))
            jQuery("<span class=\"bugFix\"> | </span>")
            .appendTo(".jp > .dx > .numeri");
            
            if (x == _pagine && _pagine > 1) {
				jQuery("<span class=\"bugFix\"> &nbsp; </span>")
            	.appendTo(".jp > .dx > .numeri");
    
	        	jQuery("<a href=\"#\" class=\"succ\">" + options.lbl_next + " >></a>").click(function(){
				
				}).appendTo(".jp > .dx > .numeri");
			}
            
        }
        _page_show_or_hide();

        var jpagine = jQuery(".pagina", that);
        //jpagine.hide();
        //jpagine.eq((_pagina - 1)).show();
        
		jpagine.addClass("pagina_nascosta");
        jpagine.eq((_pagina - 1)).removeClass("pagina_nascosta");

        if(_pagina == 1)
            jQuery(".prec").hide();
        if(_pagina == _pagine)
            jQuery(".succ").hide();
            
        //console.log("Primo log: ");
        //console.log(_pagina);
        
        jQuery(".page", that)
        .click(function(){
        
            
            //jQuery(".contEvento", that).hide();
            //jpagine.hide();
			jpagine.addClass("pagina_nascosta");

            //console.log(jQuery(this).parent().parent().find(".jp-active"));
            jQuery(".jp").find(".jp-active").removeClass("jp-active");
            var _id = parseInt(jQuery(this).text()) - 1;
            
            //console.log(that.expando.pagina);
            that.expando.pagina = (_id +1);
            //console.log(that.expando.pagina);
            
            //history
            //location.hash = that.expando.pagina;
            
            jQuery(".jp")
            .eq(0)
            .find(".page").eq(_id).addClass("jp-active")
            .end();
            
            jQuery(".jp")
            .eq(1)
            .find(".page").eq(_id).addClass("jp-active");
            
            //jQuery(".contEvento", that).eq(_id).show();
            //jpagine.eq(_id).show();
            jpagine.eq(_id).removeClass("pagina_nascosta");

            var _pagina = _id + 1;
            if(_pagina != 1)
                jQuery(".prec").show();
            else
                jQuery(".prec").hide();
            
            if(_pagina != _pagine)
                jQuery(".succ").show();
            else
                jQuery(".succ").hide();
            
            _page_show_or_hide();
            return false;
        });
        
        
        jQuery(".prec", that)
        .click(function(){
            //jQuery(".contEvento", that).hide();
            //jpagine.hide();
			jpagine.addClass("pagina_nascosta");
            jQuery(".jp").find(".jp-active").removeClass("jp-active");
            
            //console.log(that.expando.pagina);
            if(that.expando.pagina > 1)
                that.expando.pagina--;
            //console.log(that.expando.pagina);
            
            //history
            //location.hash = that.expando.pagina;    
            
            
            //jQuery(this).addClass("jp-active");
            var _id = that.expando.pagina -1;
            //console.log(_id); 
            //jQuery(".contEvento", that).eq(_id).show();
            //jpagine.eq(_id).show();
            jpagine.eq(_id).removeClass("pagina_nascosta");

            jQuery(".jp")
            .eq(0)
            .find(".page").eq(_id).addClass("jp-active")
            .end();
            
            jQuery(".jp")
            .eq(1)
            .find(".page").eq(_id).addClass("jp-active");
            
            var _pagina = _id + 1;
            if(_pagina != 1)
                jQuery(".prec").show();
            else
                jQuery(".prec").hide();
            
            if(_pagina != _pagine)
                jQuery(".succ").show();
            else
                jQuery(".succ").hide();
             
			_page_show_or_hide();    
            return false;   
        });
        
        jQuery(".succ", that)
        .click(function(e){
            //jQuery(".contEvento", that).hide();
            //jpagine.hide();
			jpagine.addClass("pagina_nascosta");
            jQuery(".jp").find(".jp-active").removeClass("jp-active");

            //console.log(e.data._pagina);
            //if(e.data._pagina < e.data._pagine)
            //  e.data._pagina++;
            //console.log(e.data._pagina);
            //console.log(that.expando.pagina);
            if(that.expando.pagina < _pagine)
                that.expando.pagina++;
            //console.log(that.expando.pagina);
            
            //history
            //location.hash = that.expando.pagina;
            
            var _id = that.expando.pagina -1; 
            //jQuery(".contEvento", that).eq(_id).show();
            //jpagine.eq(_id).show();
            jpagine.eq(_id).removeClass("pagina_nascosta");

            jQuery(".jp")
            .eq(0)
            .find(".page").eq(_id).addClass("jp-active")
            .end();
            
            jQuery(".jp")
            .eq(1)
            .find(".page").eq(_id).addClass("jp-active");
            
            
            var _pagina = _id + 1;
            if(_pagina != 1)
                jQuery(".prec").show();
            else
                jQuery(".prec").hide();
            
            if(_pagina != _pagine)
                jQuery(".succ").show();
            else
                jQuery(".succ").hide();
            
            _page_show_or_hide();
            return false;
        });
    }
};

jQuery.fn.jpaging = jPaging.build;



