//
// Pager
//
(function ($) {
	//
	// plugin definition
	//
	$.fn.pager = function (options) {
		// build main options before element iteration
		var el_count = 0;
		var opts = $.extend({}, $.fn.pager.defaults, options);
		// iterate and reformat each matched element
		return this.each(function () {
			var $this = $(this);
			// build element specific options
			var data = $this.metadata();
			//debug(inspect(data));
			var o = data ? $.extend({}, opts, data) : opts;
			// call our markup function
			var m = $.fn.pager.markup(o);
			$this.html(m);
			if (o.ra)
				$this.find('.pager-refresh').append('<span class="ui-icon ui-icon-refresh" title="Refresh"></span>').button().removeClass('ui-state-default').click(function () {
					$.post(o.ra, "pi=0&ps=" + o.ps + "&rfilter=" + o.rf + "&filter=" + o.rf + "&sort=", o.ppf ? o.ppf : function (data) { if (data) { $this.parent().html(data).trigger('updated') } });
				});
			$('.pagerleft a, .pagerright a', $this).click(function () {
				var i = $(this).attr('href').replace('#', '');
				//o.pti = Math.floor((i-1) / o.pps) * o.pps + 1;
				if (o.fn)
					o.fn(i - 1, i, o.ps);
				else if (o.pa)
					$.post(o.pa, "pi=" + (i - 1) + "&ps=" + o.ps + "&rfilter=" + o.rf + "&filter=" + o.pf + "&sort=" + o.psort, o.ppf ? o.ppf : function (data) { if (data) { $this.parent().html(data).trigger('updated') } });

				return false;
			});
			$('select', $this).change(function () {
				var i = $(this).val();
				//o.pti = Math.floor((i-1) / o.pps) * o.pps + 1;
				if (o.fn)
					o.fn(i - 1, i, o.ps);
				else if (o.pa)
					$.post(o.pa, "pi=" + (i - 1) + "&ps=" + o.ps + "&rfilter=" + o.rf + "&filter=" + o.pf + "&sort=" + o.psort, o.ppf ? o.ppf : function (data) { if (data) { $this.parent().html(data).trigger('updated') } });

				return false;
			});

			if (el_count == 0) {
				if (o.pfs) {
					if (o.pfs.h) {
						var $ac = o.pfs.h, $f;
						if (!o.pfs.existing) {
							$f = $ac.clone();
							$f.attr('class', 'pager-filter');
							$ac = $f.find('th span');
							o.pfs.h.after($f);
						}
						$ac.ac({ updatee: $this.parent(), aca: o.pfs.a, pa: o.pa, ps: o.ps, pf: o.pf, rf: o.rf, ppf: o.ppf, use_parent: false, use_map: !o.pfs.existing, map: o.pfs.o, wm: o.pfs.wm });
						//if (!o.pfs.existing)
					}
				}
				if (o.psc) {
					o.psc.each(function () {
						var txt = $(this).text();
						var srt = txt.replace(" ", "") + " DESC";
						var lnk = txt.replace(" ", "") + " ASC";
						var asc = true;
						var sorted = false;
						if (lnk == o.psort) {
							lnk = lnk.replace(" ASC", " DESC");
							asc = false;
							sorted = true;
						}
						else if (srt == o.psort)
							sorted = true;

						var $p = $(this).parent();
						$p.html("<div><a class='sort'>" + txt + "</a>" + (sorted ? "<a class='sort ui-icon ui-icon-triangle-1-" + (asc ? "s" : "n") + "'>&nbsp;</a></div>" : ""));
						$p.find("a.sort").click(function () {

							//$(this).removeClass(
							$.post(o.pa, "pi=" + o.pi + "&ps=" + o.ps + "&rfilter=" + o.rf + "&filter=" + o.pf + "&sort=" + lnk, o.ppf ? o.ppf : function (data) { if (data) { $this.parent().html(data).trigger('updated') } });
							return false;
						});
					});
				}
			}
			el_count++;
		});
	};

	function anchor(i, text) {
		if (!text) text = "" + i;
		return "<a href=\"#" + i + "\" >" + text + "</a>&nbsp;"
	};

	function setOption(o, i) {
		return (i == o.pi + 1) ?
			"<option selected=\"selected\" value=" + i + ">" + i + "</option>" :
			"<option value=" + i + ">" + i + "</option>"
	};

	//
	// define and expose our format function
	//
	$.fn.pager.markup = function (o) {
		var pt = Math.ceil(o.ti / o.ps);
		var pti = Math.floor((o.pi) / o.pps) * o.pps + 1;
		var s = "";
		if (pt < 1) return s;
		s += "<div class='pager-refresh'></div><div class='pagerleft'>"
		if (!o.hn) {
			if (pti > 1) s += anchor(pti - 1, "[...]");

			var m = pti + o.pps
			for (var i = pti; i < m && i <= pt; i++) {
				if (i == o.pi + 1)
					s += "<span>" + i + "&nbsp;</span>"
				else
					s += anchor(i);
			}
			if (m < pt) s += anchor(m, "[...]");
		}

		var tii = o.pi * o.ps + 1;
		s += "</div><div class='pagercenter'>" + tii + " ... " + Math.min(tii + o.ps - 1, o.ti) + " of " + o.ti + " </div><div class='pagerright'>"
		if (o.pi > 0) {
			if (!o.hfl) s += anchor(1, o.first);
			s += anchor(o.pi, o.prev);
		}

		if (!o.hdd) {
			if (pt > 1) {
				s += "&nbsp;<select>"
				for (var i = 1; i <= pt; i++)
					s += setOption(o, i);
				s += "</select>&nbsp;of&nbsp;" + pt + "&nbsp;";
			}
			else s += "" + pt + "&nbsp;of&nbsp;" + pt + "&nbsp;";

		}

		if (o.pi + 1 < pt) {
			s += anchor(o.pi + 2, o.next);
			if (!o.hfl) s += anchor(pt, o.last);
		}
		s += "</div>"

		return s;
	}; //
	// plugin defaults
	//
	$.fn.pager.defaults = {
		pi: 0, ps: 20, ti: 0, pps: 5, pf: '', psort: '', next: 'Next', first: 'First', last: 'Last', prev: 'Prev'
	};

})(jQuery);


