///
/// paginate.js
///  handles pagination in conjunction with
///  paginate.py.
///

/// args - page, page_count, leading container, following container, AJAX function name (leave blank for default)

var Paginate = {
	init : function (p, pc, lead, follow, options) {
		if (isNaN(p) || (p < 1))
			var current_page = 1;
		else
			var current_page = p;
			
		if (isNaN(pc) || (pc < 1))
			var total_pages = 1;
		else
			var total_pages = pc;
		
		var _before = document.getElementById(lead);
		var _after = document.getElementById(follow);
		
		// if the containers that house the leading and following
		// page links are non-existant, don't try to do anything else.
		if (!_before || !_after) {
			alert("Leading and/or following containers for\npagination are non-existant!");
			return false;
		}
		
		// AJAX / Request Options
		if (options.useAjax)
			var use_ajax = options.useAjax;
		else
			var use_ajax = true;
			
		if (options.ajaxFunction)
			var ajax_func = options.ajaxFunction;
		else if (use_ajax) {
			alert("Attempted to use AJAX, yet no AJAX\nfunction specified!");
			return false;
		}
			
		if (use_section)
			var section_arg = ', '+section;
		else
			var section_arg = '';
		
		///
		/// Create page links
		///
		// if we're on the first page
		if (current_page == 1) {
			_before.innerHTML = '';
			var temp = "";
			if ((current_page + 3) <= total_pages)
				var end = current_page+3;
			else
				var end = total_pages;
			
			for (i=2; i<=end; i++) {
				if (i != total_pages)
					temp += '<a href="javascript:'+ajax_func+'('+i+section_arg+');">'+i+'</a> ';
			}
			_after.innerHTML = temp;
			
			if ((total_pages - end) > 1)
				_after.innerHTML += '... <a href="javascript:'+ajax_func+'('+total_pages+section_arg+');">'+total_pages+'</a> ';
			else
				_after.innerHTML += '<a href="javascript:'+ajax_func+'('+total_pages+section_arg+');">'+total_pages+'</a> ';
		}
		
		// if we're on the last page
		if (current_page == total_pages) {
			_after.innerHTML = '';
			var temp = "";
			if (total_pages > 3)
				var start = total_pages - 3;
			else
				var start = 2;
			
			for (i=start; i<total_pages; i++) {
				temp += '<a href="javascript:'+ajax_func+'('+i+section_arg+');">'+i+'</a> ';
			}
			_before.innerHTML = temp;
			
			if ((total_pages - start) > 1)
				_before.innerHTML = '<a href="javascript:'+ajax_func+'(1'+section_arg+');">1</a> ... '+_before.innerHTML;
			else if (total_pages != 1)
				_before.innerHTML = '<a href="javascript:'+ajax_func+'(1'+section_arg+');">1</a> '+_before.innerHTML;
		}
		
		// if we're in between...
		if ((current_page > 1) && (current_page < total_pages)) {
			_before.innerHTML = '';
			_after.innerHTML = '';
		
			if ((current_page - 2) > 1) 
				var start = current_page-2;
			else
				var start = 1;
			
			if ((current_page + 2) < total_pages)
				var end = current_page+2;
			else
				var end = total_pages;
			
			var temp = "";
			for (i=start; i<current_page; i++) {
				temp += '<a href="javascript:'+ajax_func+'('+i+section_arg+');">'+i+'</a> ';
			}
			_before.innerHTML = temp;
			
			var temp = "";
			if ((current_page+1) >= total_pages)
				var end_start = total_pages;
			else
				var end_start = current_page + 1;
				
			for (i=end_start; i<=end; i++) {
				temp += '<a href="javascript:'+ajax_func+'('+i+section_arg+');">'+i+'</a> ';
			}
			_after.innerHTML = temp;
			
			// truncate the end?
			if ((total_pages - current_page) > 3)
				_after.innerHTML += '... <a href="javascript:'+ajax_func+'('+total_pages+section_arg+');">'+total_pages+'</a>';
			else if ((total_pages - current_page) == 3)
				_after.innerHTML += '<a href="javascript:'+ajax_func+'('+total_pages+section_arg+');">'+total_pages+'</a>';
				
			// truncate the beginning?
			if ((current_page - 1) > 3)
				_before.innerHTML = '<a href="javascript:'+ajax_func+'(1'+section_arg+');">1</a> ... ' + _before.innerHTML;
			else if ((current_page - 1) == 3)
				_before.innerHTML = '<a href="javascript:'+ajax_func+'(1'+section_arg+');">1</a> ' + _before.innerHTML;
		}
	}
}