/*
* Functions for making slider objects
* Copyright Maks Levin 2009
*/
function Slider(sliderObject, memberWidth) {
	var firstVisible = 0;
	var thisClass = this;

	var windowWidth;
	var membersSize;
	var leftPosition = 0;
	var backDisabled = true;
	var forwardDisabled = false;

	var backObject = $('.prev', sliderObject);
	var forwardObject = $('.next', sliderObject);

	function fixHidden() {
		var hiddenLiIndex = windowWidth + firstVisible;

		$('.h_elements li', sliderObject).css('visibility', 'visible');
		if ($('.h_elements li', sliderObject)[hiddenLiIndex]) {
			$('.h_elements li', sliderObject)[hiddenLiIndex].style.visibility = 'hidden';
		}

		redrawBackAndForwardButtons()
	};

	function redrawBackAndForwardButtons() {
		if (firstVisible == 0) {
			backObject.addClass('disabled').unbind('click', slideBack);
			backDisabled = true;
		} else {
			backObject.removeClass('disabled');
			if (backDisabled) {
				backDisabled = false;
				backObject.bind('click', slideBack);
			}
		}

		if (firstVisible + windowWidth < membersSize) {
			forwardObject.removeClass('disabled');
			if (forwardDisabled) {
				forwardDisabled = false;
				forwardObject.addClass('next').bind('click', slideForward);
			}
		} else {
			forwardObject.removeClass('next');
			forwardObject.addClass('disabled').unbind('click', slideForward);
			forwardDisabled = true;
		}
	};

	function slideBack() {
		firstVisible--;
		redrawBackAndForwardButtons();

		$('.h_elements', sliderObject).animate(
		{ marginLeft: leftPosition + memberWidth + 'px' },
		function () {
			fixHidden();
			leftPosition += memberWidth;
		}
		);
	};

	function slideForward() {
		if (firstVisible < membersSize - 1) {
			firstVisible++;
		}

		redrawBackAndForwardButtons();
		fixHidden();

		//alert (leftPosition - memberWidth + 'px');

		$('.h_elements', sliderObject).animate(
		{ marginLeft: leftPosition - memberWidth + 'px' },
		function () {
			leftPosition -= memberWidth;
		}
		);
	};

	function onResize() {
		windowWidth = Math.floor(parseInt(sliderObject.width()/memberWidth));
		fixHidden();
	}

	function onLoad() {
		windowWidth = Math.floor(parseInt(sliderObject.width()/memberWidth));
		membersSize = $('.h_elements li', sliderObject).size();

		//alert (sliderObject.width()+' - '+windowWidth+' - '+membersSize);

		fixHidden();
		forwardObject.bind('click', slideForward);
	}

	$(window).resize(onResize);
	onLoad();
}


function VerticalSlider(sliderObject, memberHeight) {
	var thisClass = this;

	var windowSize = 3;
	var membersSize = $('ul li', sliderObject).size();

	var backDisabled = true;
	var forwardDisabled = true;

	var backObject = $('.back', sliderObject);
	var forwardObject = $('.forward', sliderObject);
	var ulObject = $('ul', sliderObject);

	var topPosition = parseInt(ulObject.css('margin-top'));
	var firstVisible = parseInt(-topPosition/memberHeight);

	function redrawBackAndForwardButtons() {
		if (firstVisible == 0) {
			backObject.addClass('disabled').unbind('click', slideBack);
			backDisabled = true;
		} else {
			backObject.removeClass('disabled');
			if (backDisabled) {
				backDisabled = false;
				backObject.bind('click', slideBack);
			}
		}

		if (firstVisible + windowSize < membersSize) {
			forwardObject.removeClass('disabled');
			if (forwardDisabled) {
				forwardDisabled = false;
				forwardObject.bind('click', slideForward);
			}
		} else {
			forwardObject.addClass('disabled').unbind('click', slideForward);
			forwardDisabled = true;
		}
		$('.count', backObject).html(''+firstVisible);
		$('.count', forwardObject).html(membersSize - firstVisible - 3+'');
	};

	function slideBack() {
		firstVisible--;
		redrawBackAndForwardButtons();

		ulObject.animate(
		{ marginTop: topPosition + memberHeight + 'px' },
		function () {
			topPosition += memberHeight;
		}
		);
	};

	function slideForward() {
		if (firstVisible < membersSize - 1) {
			firstVisible++;
		}

		redrawBackAndForwardButtons();

		ulObject.animate(
		{ marginTop: topPosition - memberHeight + 'px' },
		function () {
			topPosition -= memberHeight;
		}
		);
	};

	redrawBackAndForwardButtons();
}


/*
$(
function () {
new Slider($('#h_elements_slider'), 10);
}
);
*/



