﻿Type.registerNamespace("Finatica");
Type.registerNamespace("Finatica.Controls");
Type.registerNamespace("Finatica.Controls.SliderPager");

Finatica.Controls.SliderPager = function(element) {
	Finatica.Controls.SliderPager.initializeBase(this, [element]);
	this.ulID = null;
	this.currentPage = 1;
	this.pagesCount = 1;
	this.parentClientID = '';
}

Finatica.Controls.SliderPager.prototype =
{
	createPager: function() {
		var ulElement = $("#" + this.ulID);
		ulElement.html('');
		if (this.get_pagesCount() > 1) {
			var offset = this.get_initialOffset();
			for (var i = offset; i < offset + this.get_buttonsCount(); i++) {
				var li = "<li><a href='#' class='pagerButton ";
				if (i == this.get_currentPage())
					li += " active";
				li += "'>";
				li += i;
				li += "</a></li>";
				ulElement.append(li);
			}

			ulElement.append("<li class='total'>Страниц: " + this.get_pagesCount() + "</li>");


			$("#" + this.ulID).find("a.pagerButton").bind("click", { eventSender: this }, this.get_events().getHandler('pageChanged'));

			$("#" + this.ulID + " > li > a").bind("click", { eventSender: this }, function(event) {
				$("#" + $(this).parent().parent().attr("id") + " > li > a").removeClass("active");				
				event.data.eventSender.currentPage = Number($(this).text());
				if (event.data.eventSender.get_pagesCount() > event.data.eventSender.get_buttonsCount())
					event.data.eventSender.redrawPager();
				else
					$(this).addClass("active");
			});
		}
	},

	redrawPager: function() {
		$("#" + this.ulID + "> li").find("a.active").removeClass(".active");
		var offset = this.get_initialOffset();
		for (var i = 1; i <= this.get_buttonsCount(); i++) {
			$("#" + this.ulID + " > li:nth-child(" + i + ") > a").text(i + offset - 1);
			if(i + offset - 1 == this.currentPage)
				$("#" + this.ulID + "  > li:nth-child(" + i + ") > a").addClass("active")
		
		}
	},

	get_currentPage: function() {
		if (this.currentPage != null) {
			this.currentPage = this.currentPage < 1 ? 1 : this.currentPage;
		}
		return this.currentPage;
	},

	get_buttonsCount: function() {
		var pagesCount = this.get_pagesCount();
		return 10 < pagesCount ? 10 : pagesCount;
	},

	get_pagesCount: function() {
		return this.pagesCount;
	},

	set_pagesCount: function(value) {
		this.pagesCount = value < 1 ? 1 : value;
	},

	get_initialOffset: function() {
		if (this.get_pagesCount() > this.get_buttonsCount()) {
			if (this.get_currentPage() + this.get_buttonsCount() - 1 > this.get_pagesCount())
				return this.get_pagesCount() - this.get_buttonsCount() + 1;
			if (this.get_currentPage() > 1)
				return this.get_currentPage() - 1;
			return this.get_currentPage();
		}
		return 1;
	},

	add_pageChanged: function(handler) {
		this.get_events().addHandler('pageChanged', handler);
	},

	remove_pageChanged: function(handler) {
		this.get_events().removeHandler('pageChanged', handler);
	},

	initialize: function() {
		Finatica.Controls.SliderPager.callBaseMethod(this, 'initialize');
	},

	dispose: function() {
		Finatica.Controls.SliderPager.callBaseMethod(this, 'dispose');
	},

	clear: function() { $("#" + this.ulID).html(''); }
}

Finatica.Controls.SliderPager.descriptor =
{
	properties: [{ name: 'ulID', type: String },
				 { name: 'currentPage', type: Number },
				 { name: 'parentClientID', type: String },
				 { name: 'pagesCount', type: Number }
				 ],
	events: [{ name: 'pageChanged'}]
}

Finatica.Controls.SliderPager.registerClass("Finatica.Controls.SliderPager", Sys.UI.Control);
