/*
*	jQuery paginator plugin
* 	@author Andrew A Valeynis
*	@version 0.8
*/
jQuery.fn.paginator = function(options){
	var options = jQuery.extend({
		page_total:false,
		page_count:10,
		href_page_pattern:/(page=)(\d+)/,
		prev_passiv: '&laquo;',
		prev_active: '<-',
		next_passiv: '&nbsp;&nbsp;&raquo;',
		next_active: '&nbsp;&nbsp;->',
		ajax:{before: false},
		ajax:{after: false}
	},options);
	if(options.page_total==1)return;
	var url=document.location.href;
	var page_current=1;
	var out='';
	options.ajax.before=options.ajax.before?options.ajax.before:function(){};
	options.ajax.after=options.ajax.after?options.ajax.after:function(){};
	res=url.match(options.href_page_pattern);
	
	if(res&&res[2]){
		page_current=res[2];	
	}
	page_current=page_current>options.page_total?options.page_total:page_current;
	out='<ul class="paginator">';
	for(i=1;i<=options.page_total;i++){
		if(res&&res[0]){
			href=url.replace(res[0], 'page.'+i);
		}else{
			href=url+'/page.'+i;
		}
		if(page_current!=i){
			a_class="paginator-page_link";
		}else{
			a_class="paginator-current_page";
		}
		out+='<li class="paginator-page"><a href="'+href+'" class="'+a_class+'">'+i+'</a></li>';
	}
	out+="</ul>";

	prev_passiv=document.createElement('div');$(prev_passiv).addClass('paginator-prev_passiv').html(options.prev_passiv);
	prev_active=document.createElement('div');$(prev_active).addClass('paginator-prev_active').html(options.prev_active).click(f_prev);
	
	next_passiv=document.createElement('div');$(next_passiv).addClass('paginator-next_passiv').html(options.next_passiv);
	next_active=document.createElement('div');$(next_active).addClass('paginator-next_active').html(options.next_active).click(f_next);
	
	var pages=document.createElement('div');$(pages).addClass('paginator-pages').html(out);
	
	table=document.createElement('table');
	$(table).attr({'cellspacing':0,'cellpadding':0});
	tr=document.createElement('tr');
	td=document.createElement('td');
	
	pages_container=document.createElement('div');
	$(pages_container).addClass('paginator-pages_container').css({'overflow':'hidden'});
	$(pages_container).append($(pages));
	
	td_prev=$(td).clone().append($(prev_passiv)).append($(prev_active));
	td_pages=$(td).clone().append($(pages_container)).addClass('paginator_all_pages');
	td_next=$(td).clone().append($(next_passiv)).append($(next_active));
	
	$(tr).append($(td_prev)).append($(td_pages)).append($(td_next));
	
	$(table).append($(tr)).width(options.width);
	
	$(this).append($(table));
	
	a_all=$('.paginator-page');
	a_len=a_all.length;
	var max_width=0,left=0,len_left=0,max_width_el=0;
	for(i=0;i<a_len;i++){
		w_e=$(a_all[i]).width();
		if(w_e>max_width_el)max_width_el=w_e;
		max_width+=w_e;
		if(i<page_current-3)left+=w_e;
	}
	
	width_block_pages=max_width_el*options.page_count;
	
	$('.paginator-pages_container').width(width_block_pages);
	$('.paginator-page').css('width',max_width_el);
	$('.paginator-pages').css('width',(options.page_total)*max_width_el);
	
	$(pages).css({'left':-left});
	
	chk();
	
	if(options.ajax){
		if(options.ajax.method=='post'){
			$("a.paginator-page_link").click(function(){
				options.ajax.before();
				$('a.paginator-current_page').removeClass('paginator-current_page').addClass('paginator-page_link');
				$(this).removeClass('paginator-page_link').addClass('paginator-current_page');
				$.post(
					$(this).attr('href'),
					options.ajax.data,
					function(data){
						$(options.ajax.to).html(data);
						options.ajax.after();
					}
				);
				return false;
			});
		}else{
			$("a.paginator-page_link").click(function(){
				options.ajax.before();
				$('a.paginator-current_page').removeClass('paginator-current_page').addClass('paginator-page_link');
				$(this).removeClass('paginator-page_link').addClass('paginator-current_page');
				$.get(
					$(this).attr('href'),
					options.ajax.data,
					function(data){
						$(String(options.ajax.to)).html(data);
						options.ajax.after();
					}
				);
				return false;
			});
		}
	}

	function f_next(){
		$(prev_passiv).hide();
		$(prev_active).show();

		if(parseInt($(pages).css('left'))-width_block_pages<=max_width*-1){
			$(next_passiv).show();
			$(next_active).hide();
			//return;
		}
	
		$(pages).animate({'left':'-='+width_block_pages},'fast', chk);
	}
	function f_prev(){
		$(next_passiv).hide();
		$(next_active).show();
		if(parseInt($(pages).css('left'))>=0||$(pages).css('left')=='auto')
		{
			$(pages).css('left', 0);
			$(prev_passiv).show();
			$(prev_active).hide();
			//return;
		}
		$(pages).animate({'left':'+='+width_block_pages}, 'fast', chk);
	}
	function chk(){
		shift_left=parseInt($('.paginator-pages').css('left'));
		if(shift_left>0){
			$(pages).css('left','0');
			$(prev_passiv).show();$(prev_active).hide();
			return;
		}else{
			shift_left=shift_left*-1;
		}
		
		pages_container=$('.paginator-pages_container').width();
		all_width=$('.paginator-pages').width();

		if(all_width<=pages_container){
			$(prev_passiv).show();$(prev_active).hide();
			$(next_passiv).show();$(next_active).hide();
			return;
		}
		
		if(shift_left>0){
			if(shift_left<pages_container)
			{
				$(pages).css('left','0');
				$(prev_passiv).show();$(prev_active).hide();
			}else{
				$(prev_passiv).hide();$(prev_active).show();
			}
		}else{
			$(prev_passiv).show();$(prev_active).hide();
		}
		
		if(shift_left+pages_container<all_width){			
			$(next_passiv).hide();$(next_active).show();
		}else{
			if(shift_left+pages_container>=all_width){
				$(pages).css({'left':(all_width-pages_container)*-1});
				$(next_passiv).show();$(next_active).hide();
			}else{
				$(next_passiv).show();$(next_active).hide();
			}
		}
	}
	function debug(str){
		$('#debug').html(str);
	}
}
