//
//	Zakladna trieda pre scoll objekty na stranky
//	 vyuziva sa pri vsetky tych sipkach a gulickach ktorych ovladanie bude cez javascript
//
//	MONOGRAM Technologies
//	Tomas Majer <majer@monogram.sk>
//
var InlandScroll = Class.create({
	actualPage: 0,
	totalPages: 0,
	prevpage: null,
	nextpage: null,
	actualClass: "active",
	prevDisabledClass: "prev-disabled",
	nextDisabledClass: "next-disabled",
	wrapperId: 'new-articles',
	headers: [],
	elementsName: 'div',
	elements: [],

	duration: 0.5,			// dlzka trvania efektu v sekundach
	boxWidth: 5,			// sirka jednej strany
	actualPos: 0,			// aktualna pozicia ktora je viditelna (pre zobrazenie prvej strany to je 0, pre druhu to je presne 'boxWidth')
	contentElementId: '',	// id elementu v ktorom sa bude hybat strany

	//
	//	Konstruktor objektu.
	//	 inicializuje premnne - vyhlada potebne objekty a natavi aktualny podla vybraneho elementu
	//
	initialize: function(options) {

		Object.extend(this, options || {});

		this.elements = $$('#' + this.wrapperId + " " + this.elementsName);

		this.boxWidth = this.elements[0].clientWidth;

		this.totalPages = this.elements.length;
		

		this.addOnClickMethods();
		this.actualizeControls();
		this.actualizeHeader();
 	},

	//
	//	Prida linkam v pageri onlclick metody
	//
	addOnClickMethods: function() {
		this.nextpage.observe('click', this.moveToNext.bindAsEventListener(this));
		this.prevpage.observe('click', this.moveToPrev.bindAsEventListener(this));
	},

	//
	//	Podla eventu zisti na ktoru linku boli kliknute (vyuziva sa pri stalacani na gulicky)
	//
	getClickedItem: function(event) {

		// podla eventu zisti na ktoru gulku sa kliklo
		var index = 0;
		var i = 0;
		var len = this.pages.length;
		for (i = 0; i < len; i++) {
			if (this.pages[i] == event.target) {
				index = i;
				break;
			}
		}
		return index;
	},

	//
	//	Metoda na ktoru je nabindovany button pre posunutie na dalsi prvok
	//
	moveToNext: function(event) {
		if (this.actualPage < this.totalPages - 1) {
			this.moveTo(1);
		}
		return false;
	},

	//
	//	Metoda na ktoru je nabindovany button pre posunutie na predchadzajuci prvok
	//
	moveToPrev: function(event) {
		if (this.actualPage > 0) {
			this.moveTo(-1);
		}
		return false;
	},

	//
	//	Metoda na ktoru su nebindovane vsetky linky priamo na danu stranu (tie gulky)
	//
	moveToIndex: function(event) {

		// podla eventu zisti na ktoru gulku sa kliklo
		var index = this.getClickedItem(event);
		var len = this.totalPages;

		// presunie sa na potrebnu stranu
		if (index >= 0 && index < len && index != this.actualPage) {
			this.moveTo(index - this.actualPage);
		}

		return false;
	},

	//
	//	Aktualizuje ovladacie prvky
	//	 disablne krjane butony ak je na konci, aktualizuje vyselektovanu gulicku
	//
	actualizeControls: function() {

		this.actualizeHeader();

		// aktualizuj krajne butony
		if (this.actualPage == 0) {
			this.prevpage.setAttribute('disabled', 'disabled');
			this.prevpage.addClassName(this.prevDisabledClass);
		} else {
			var _page = this.prevpage.getAttribute('href').split('#')[0];
			this.prevpage.setAttribute('disabled', '');
			this.prevpage.removeClassName(this.prevDisabledClass);
			this.prevpage.setAttribute('href', _page + '#' + this.wrapperId + '?page=' + (this.actualPage -1));
		}
		if (this.actualPage == this.totalPages - 1) {
			this.nextpage.setAttribute('disabled', 'disabled');
			this.nextpage.addClassName(this.nextDisabledClass);
		} else {
			var _page = this.nextpage.getAttribute('href').split('#')[0];
			this.nextpage.setAttribute('disabled', '');
			this.nextpage.removeClassName(this.nextDisabledClass);
			this.nextpage.setAttribute('href', _page + '#' + this.wrapperId + '?page=' + (this.actualPage +1));
		}
	},

	//
	//	Aktualizuje nazov v priapde ze ma scroller zadane pole headrov pre jednotlive polozky
	//
	actualizeHeader: function() {
		// this.actualPage
		if (this.headers.length != 0)
		{
			$(this.wrapperId + '-header').innerHTML = this.headers[this.actualPage];
		}
	},

	//
	//
	//	Nastavuje headre pre jednotlive polozky v scrolleri
	//
	setHeaders: function(headers) {
		this.headers = headers;
	},

	//
	//	Realizuje konkretne posunutie o dany pocet stran s efektom
	//	 'num' predstavuje pocet stran o ktory sa bude posuvat (aj zaporny)
	//
	moveTo: function(num) {

		var newPos = this.actualPos + (this.boxWidth * num); // vypocita si novu poziciu
		this.actualPage += num;

		// slide efekt
		new Effect.ScrollHorizontal(this.contentElementId,
		{	duration: this.duration,
			transition: Effect.Transitions.linear,
			from: this.actualPos, to: newPos
		});

		this.actualPos = newPos;
		this.actualizeControls();
	}
});


var GaleryScroll = Class.create(InlandScroll, {
	//
	//	Realizuje konkretne posunutie o dany pocet stran s efektom
	//	 'num' predstavuje pocet stran o ktory sa bude posuvat (aj zaporny)
	//
	moveTo: function(num) {

		this.boxWidth = this.elements[this.actualPos].clientHeight;

		var newPos = this.actualPos + (this.boxWidth * num); // vypocita si novu poziciu
		this.actualPage += num;

		// slide efekt
		new Effect.ScrollHorizontal(this.contentElementId,
		{	duration: this.duration,
			transition: Effect.Transitions.linear,
			from: this.actualPos, to: newPos
		});

		this.actualPos = newPos;
		this.actualizeControls();
	}
});
