﻿var ImageSlider = new function () {

	var me = this;
	this.Holder;
	this.PageCount;
	this.PageWidth;
	this.CurrentPage;
	this.Seconds;

	this.CurrentLeft;
	this.TargetLeft;
	this.StartTime;
	this.TimeOutID;
	this.Paused;
	this.CallBackFunction;

	this.Setup = function (sHolder, iPageCount, iPageWidth, iSeconds) {
		this.Holder = f.GetObject(sHolder);
		this.PageCount = iPageCount;
		this.PageWidth = iPageWidth;
		this.Seconds = iSeconds;
		this.CurrentPage = 1;
		this.CurrentLeft = 0;
		this.TimeOutID = -1;
		this.Paused = false;
	}

	this.Forward = function () {

		if (me.Paused) return;
		if (me.CurrentPage < me.PageCount) {
			me.TargetLeft = me.CurrentLeft - me.PageWidth;
			me.CurrentPage += 1;
		} else {
			me.TargetLeft = 0;
			me.CurrentPage = 1;
		}
		this.StartTime = new Date();
		ImageSlider.Slide();
	}

	this.Backward = function () {
		if (me.CurrentPage > 1) {
			me.TargetLeft = me.CurrentLeft + me.PageWidth;
			me.CurrentPage -= 1;
		} else {
			me.TargetLeft = -((me.PageCount - 1) * me.PageWidth);
			me.CurrentPage = me.PageCount;
		}
		this.StartTime = new Date();

		for (var i = 0; i < 10; i++) {
			setTimeout('ImageSlider.Slide()', i * 50);
		}

	}


	this.Slide = function () {

		var nFractionDone = Math.abs((new Date() - me.StartTime) / me.Seconds / 1000);
		if (nFractionDone < 1) {
			me.Holder.style.left = me.CurrentLeft + (me.TargetLeft - me.CurrentLeft) * Math.sin(Math.PI / 2 * nFractionDone) + 'px';
			me.TimeOutID = setTimeout('ImageSlider.Slide();', 20);
		} else {
			me.Holder.style.left = me.TargetLeft + 'px';
			me.CurrentLeft = me.TargetLeft;
			me.TimeOutID = setTimeout('ImageSlider.Forward();', 5000);
		}
	}


	this.Pause = function () {
		this.Paused = true;
		clearTimeout(me.TimeOutID);
	}


}
