// 
//  vre-compscroller.js
//  VRE myfunDVD
//	JS for scroller for comps on homepage
//  
//  Created by Victor Nguyen on 2008-12-01.
//  Copyright 2008 igloo. All rights reserved.
// 

var scroller = {
	
	els: {
		list: null,
		controls: null,
		up: null,
		down: null
	},
	
	vars: {
		viewport: '238',
		compsperview: 4,
		count: null,
		tracker: 1
	},
	
	active: 'off',
	
	init: function () {
		// if comp scroller is not on page, don't init
		if (!($('featured-items'))) return false;
		
		// assign element variables
		scroller.els.list = $('featured-items');
		scroller.els.controls = $('featured-items-controls');
		scroller.els.up = $('scroll-up');
		scroller.els.down = $('scroll-down');
		
		// calculate scroll count, display scroller controls if necessary
		scroller.vars.count = scroller.getScrollCount();
		if (scroller.vars.count > 1) scroller.els.controls.appear({ duration:.8, afterFinish:function(){ scroller.updateControls(); } });
		
		// listen to clicks in controls container
		Event.observe(scroller.els.controls, 'click', Event.delegate({
			'a': function (e) {
				var element = e.element();
				if (element.identify() == 'scroll-down') scroller.scrollList('-');
				if (element.identify() == 'scroll-up') scroller.scrollList('+');
				Event.stop(e);
			}
		}));
	},
	
	getScrollCount: function () {
		var compcount = scroller.els.list.childElements().length;
		var sc = compcount / scroller.vars.compsperview;
		sc = sc.ceil();
		return sc;
	},
	
	scrollList: function (direction) {		
		if (scroller.active == 'off') {

			var scrollmax = scroller.vars.count;
			if ((direction == '-') && (scroller.vars.tracker < scrollmax)) {
				_scroll(direction);
				scroller.vars.tracker += 1;
				scroller.updateControls();
			} else if ((direction == '+') && ((scroller.vars.tracker <= scrollmax) && (scroller.vars.tracker > 1))) {
				_scroll(direction);
				scroller.vars.tracker -= 1;
				scroller.updateControls();
			}
			
		}
		
		function _scroll (direction) {
			var list = scroller.els.list;
			scroller.active = 'on';
			new Effect.Move(list, { y:direction+scroller.vars.viewport, duration:.6, mode:'relative', afterFinish:function() { scroller.active = 'off'; } });
		}
		
	},
	
	updateControls: function () {
		var t = scroller.vars.tracker;
		var c = scroller.vars.count;
		var up = scroller.els.up;
		var down = scroller.els.down;
		var inactiveopacity = .3;
		var fadeduration = .3;
		
		function _fadeInButton (btn) {
			if (btn.getStyle('opacity') != 1) {
				btn.fade({ duration:fadeduration, from:inactiveopacity, to:1 });
			}
		}
		
		function _fadeOutButton (btn) {
			if (btn.getStyle('opacity') == 1) {
				btn.fade({ duration:fadeduration, from:1, to:inactiveopacity });
			}
		}
		
		// when tracker is at the start
		if (t == 1) {
			_fadeOutButton(up);
			_fadeInButton(down);
		}
		
		// when tracker equals count (at the end)
		if (t == c) {
			_fadeInButton(up);
			_fadeOutButton(down);
		}
		
		// when tracker between start and end of count
		if (t != c) {
			_fadeInButton(up);
			_fadeInButton(down);
		}
		
	}
	
};

Event.observe(document, 'dom:loaded', function () {
	scroller.init();
});