﻿/*
  jQuery paginator plugin v 1.0.1
  - based on Paginator 3000  
  - coded by Radik special for Syber Engine
  - (c) Лаборатория разработки web сайтов
  
  Exampel:
    $('.class').paginator(options);
	 options = {
	   pagesTotal  : 100, //all pages count
	   pagesSpan   : 10,  //display pages count
	   pageCurrent : 50,  //current page number
	   baseUrl     : './page/', //may be link "http://www.youwebsite.ru/index.php?page=" or http://www.youwebsite.ru/index.php?page=%page%&limit=1
	                              or function 
								  function (page_number){
								  	
								  }
	   returnOrder : false, //if true display return order pages false display normal order pages
	   lang        : {next  : "Следующая", //language next
	                  last  : "Последняя", //language last
	    		      prior : "Предыдущая",//language prior
					  first : "Первая",    //language first
					  arrowRight : String.fromCharCode(8594), //language left arrow 
					  arrowLeft  : String.fromCharCode(8592)} //language right arrow
     };
*/
;(function($){$.fn.paginator=function(s){
	var options={
			pagesTotal:1,
			pagesSpan:10,
			pageCurrent:50,
			baseUrl:'./page/',
			returnOrder:false,
			lang:{
				next:"Следующая",
				last:"Последняя",
				prior:"Предыдущая",
				first:"Первая",
				arrowRight:String.fromCharCode(8594),
				arrowLeft:String.fromCharCode(8592)
				}
	};
	$.extend(options,s);
	options.pagesSpan=options.pagesSpan<options.pagesTotal?options.pagesSpan:options.pagesTotal;
	options.pageCurrent=options.pagesTotal<options.pageCurrent?options.pagesTotal:options.pageCurrent;
	if(!$.isFunction(options.baseUrl)&&!options.baseUrl.match(/%page%/i))options.baseUrl+='%page%';
	var html={
			holder:null,
			table:null,
			trPages:null,
			trScrollBar:null,
			tdsPages:null,
			scrollBar:null,
			scrollThumb:null,
			pageCurrentMark:null
			};
	function prepareHtml(el){
		html.holder=el;
		$(html.holder).html(makePagesTableHtml());
		html.table=$(html.holder).find('table:last');
		html.trPages=$(html.table).find('tr:first');
		html.tdsPages=$(html.trPages).find('td');
		html.scrollBar=$(html.holder).find('div.scroll_bar');
		html.scrollThumb=$(html.holder).find('div.scroll_thumb');
		html.pageCurrentMark=$(html.holder).find('div.current_page_mark');
		if(options.pagesTotal==options.pagesSpan){
			$(html.holder).addClass('fulsize');
		};
		};
		function makePagesTableHtml(){
			var tdWidth=(100/(options.pagesSpan+2))+'%';
			var isFunc=$.isFunction(options.baseUrl);
			var next_page=(parseInt(options.pageCurrent)<parseInt(options.pagesTotal))?parseInt(options.pageCurrent)+1:options.pagesTotal;
			var next='<a href="';next+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,next_page);
			next+='" rel="'+next_page+'">%next%</a>';
			var last='<a href="';last+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,options.pagesTotal);
			last+='" rel="'+options.pagesTotal+'">%last%</a>';
			var prior_page=(parseInt(options.pageCurrent)>1)?parseInt(options.pageCurrent)-1:1;
			var prior='<a href="';prior+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,prior_page);
			prior+='" rel="'+prior_page+'">%prior%</a>';
			var first='<a href="';first+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,1);
			first+='" rel="'+1+'">%first%</a>';
			
			if(options.returnOrder){
				var top_left=options.lang.arrowLeft+' '+options.lang.next;
				var bottom_left=options.lang.last;
				var top_right=options.lang.prior+' '+options.lang.arrowRight
				var bottom_right=options.lang.first;
				
				if(options.pageCurrent!==options.pagesTotal){
					var top_left=next.replace(/%next%/,top_left);
					var bottom_left=last.replace(/%last%/,bottom_left);
				};
				
				if(options.pageCurrent!==1){
					var top_right=prior.replace(/%prior%/,top_right);
					var bottom_right=first.replace(/%first%/,bottom_right);
				};
			}else{
				var bottom_right=options.lang.last;
				var top_right=options.lang.next+' '+options.lang.arrowRight;
				var top_left=options.lang.arrowLeft+' '+options.lang.prior;
				var bottom_left=options.lang.first;
				
				if(options.pageCurrent!==options.pagesTotal){
					var top_right=next.replace(/%next%/,top_right);
					var bottom_right=last.replace(/%last%/,bottom_right);
				};
				
				if(options.pageCurrent!==1){
					var top_left=prior.replace(/%prior%/,top_left);
					var bottom_left=first.replace(/%first%/,bottom_left);
				};
			};
			
			var html=''+'<table width="100%">'+'<tr>'+''+''+'<td rowspan="2" align="center">'+'<table>'+'<tr>'
for(var i=1;i<=options.pagesSpan;i++){html+='<td width="'+tdWidth+'"></td>';}
html+=''+'</tr>'+'<tr>'+'<td colspan="'+options.pagesSpan+'">'+'<div class="scroll_bar">'+'<div class="scroll_trough"></div>'+'<div class="scroll_thumb">'+'<div class="scroll_knob"></div>'+'</div>'+'<div class="current_page_mark"></div>'+'</div>'+'</td>'+'</tr>'+'</table>'+'</td>'+''+''+'</tr>'+'</table>';return html;};function initScrollThumb(){html.scrollThumb.widthMin='8';html.scrollThumb.widthPercent=options.pagesSpan/options.pagesTotal*100;html.scrollThumb.xPosPageCurrent=(options.pageCurrent-Math.round(options.pagesSpan/2))/options.pagesTotal*$(html.table).width();if(options.returnOrder){html.scrollThumb.xPosPageCurrent=$(html.table).width()-(html.scrollThumb.xPosPageCurrent+Math.round(options.pagesSpan/2)/options.pagesTotal*$(html.table).width());};html.scrollThumb.xPos=html.scrollThumb.xPosPageCurrent;html.scrollThumb.xPosMin=0;html.scrollThumb.xPosMax;html.scrollThumb.widthActual;setScrollThumbWidth();};function setScrollThumbWidth(){$(html.scrollThumb).css({width:html.scrollThumb.widthPercent+"%"});html.scrollThumb.widthActual=$(html.scrollThumb).width();if(html.scrollThumb.widthActual<html.scrollThumb.widthMin)
$(html.scrollThumb).css('width',html.scrollThumb.widthMin+'px');html.scrollThumb.xPosMax=$(html.table).width-html.scrollThumb.widthActual;};function moveScrollThumb(){$(html.scrollThumb).css({left:html.scrollThumb.xPos+"px"});}
function initPageCurrentMark(){html.pageCurrentMark.widthMin='3';html.pageCurrentMark.widthPercent=100/options.pagesTotal;html.pageCurrentMark.widthActual;setPageCurrentPointWidth();movePageCurrentPoint();};function setPageCurrentPointWidth(){$(html.pageCurrentMark).css({width:html.pageCurrentMark.widthPercent+'%'});html.pageCurrentMark.widthActual=$(html.pageCurrentMark).width();if(html.pageCurrentMark.widthActual<html.pageCurrentMark.widthMin)
$(html.pageCurrentMark).css("width",html.pageCurrentMark.widthMin+'px');};function movePageCurrentPoint(){var pos=0;if(html.pageCurrentMark.widthActual<$(html.pageCurrentMark).width()){pos=(options.pageCurrent-1)/options.pagesTotal*$(html.table).width()-$(html.pageCurrentMark).width()/2;}else{pos=(options.pageCurrent-1)/options.pagesTotal*$(html.table).width();};if(options.returnOrder)pos=$(html.table).width()-pos-$(html.pageCurrentMark).width();$(html.pageCurrentMark).css({left:pos+'px'});};function initEvents(){moveScrollThumb();options.returnOrder?drawReturn():drawPages();$(html.scrollThumb).bind('mousedown',function(e){var dx=e.pageX-html.scrollThumb.xPos;$(document).bind('mousemove',function(e){html.scrollThumb.xPos=e.pageX-dx;moveScrollThumb();options.returnOrder?drawReturn():drawPages();});$(document).bind('mouseup',function(){$(document).unbind('mousemove');enableSelection();});disableSelection();});if($.isFunction(options.baseUrl)){$(html.holder).find('a[rel!=""]').bind('click',function(e){var n=parseInt($(this).attr('rel'));options.baseUrl(n);});};$(window).resize(function(){setPageCurrentPointWidth();movePageCurrentPoint();setScrollThumbWidth();});};function drawPages(){var percentFromLeft=html.scrollThumb.xPos/$(html.table).width();var cellFirstValue=Math.round(percentFromLeft*options.pagesTotal);var data="";if(cellFirstValue<1){cellFirstValue=1;html.scrollThumb.xPos=0;moveScrollThumb();}else if(cellFirstValue>=options.pagesTotal-options.pagesSpan){cellFirstValue=options.pagesTotal-options.pagesSpan+1;html.scrollThumb.xPos=$(html.table).width()-$(html.scrollThumb).width();moveScrollThumb();};var isFunc=$.isFunction(options.baseUrl);for(var i=0;i<html.tdsPages.length;i++){var cellCurrentValue=cellFirstValue+i;if(cellCurrentValue==options.pageCurrent){data='<span> <strong>'+cellCurrentValue+'</strong> </span>';}else{data='<span> <a href="';data+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,cellCurrentValue);data+='">'+cellCurrentValue+'</a> </span>';};$(html.tdsPages[i]).html(data);if(isFunc){$(html.tdsPages[i]).find('a').bind('click',function(){options.baseUrl($(this).text());});}};};function drawReturn(){var percentFromLeft=html.scrollThumb.xPos/$(html.table).width();var cellFirstValue=options.pagesTotal-Math.round(percentFromLeft*options.pagesTotal);var data="";if(cellFirstValue<options.pagesSpan){cellFirstValue=options.pagesSpan;html.scrollThumb.xPos=$(html.table).width()-$(html.scrollThumb).width();moveScrollThumb();}else if(cellFirstValue>=options.pagesTotal){cellFirstValue=options.pagesTotal;html.scrollThumb.xPos=0;moveScrollThumb();};var isFunc=$.isFunction(options.baseUrl);for(var i=0;i<html.tdsPages.length;i++){var cellCurrentValue=cellFirstValue-i;if(cellCurrentValue==options.pageCurrent){data='<span> <strong>'+cellCurrentValue+'</strong> </span>';}else{data='<span> <a href="';data+=isFunc?'javascript:void(0)':options.baseUrl.replace(/%page%/i,cellCurrentValue);data+='">'+cellCurrentValue+'</a> </span>';};$(html.tdsPages[i]).html(data);if(isFunc){$(html.tdsPages[i]).find('a').bind('click',function(){options.baseUrl($(this).text());});}};};function enableSelection(){document.onselectstart=function(){return true;};};function disableSelection(){document.onselectstart=function(){return false;};$(html.scrollThumb).focus();};prepareHtml(this);initScrollThumb();initPageCurrentMark();initEvents();};})(jQuery);
