/* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 *
 * Requires: 1.2.2+
 */
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);

/**
 * HScrollPanel, horizontal scrollable panel
 *
 * @param {String} panelId The ID of the panel
 * @param {String} sliderId The ID of the slider
 */
var HScrollPanel = function(panel, slider) {
	this.panel = panel;
	this.slider = slider;
	this.container = null;
	this.init();
};

HScrollPanel.prototype = {
	init: function() {

		if(this.panel) {
			var self = this;

			var children = $(this.panel).children().toArray();
			if(children.length) {
				$(this.panel).width((children[0].offsetWidth * children.length) + 'px');
			}

			if($(self.panel).width() > $(self.panel).parent().eq(0).width()) {
				// Slider
				this.slider = $(this.slider).slider({
					slide: function(e, ui) {
						self.setPosition(ui.value);
					}
				});

				// Mousewheel
				$(this.panel).parent().parent().mousewheel(function(e, delta) {
					e.preventDefault();
					delta = delta * -1;
					var perc = delta * ((($(self.panel).width() / $(self.panel).children().length) * 100) / $(self.panel).width());
					self.slider.slider('value', self.slider.slider('value') + perc);
					self.setPosition(self.slider.slider('value'));
				});
			}
		}
	},
	setPosition: function(perc) {
		var cWidth = $(this.panel).parent()[0].offsetWidth;
		var pWidth = parseInt($(this.panel).width());
		var posPx = ((cWidth * (perc / 100)) - (pWidth * (perc / 100)));		
		$(this.panel).css('left', posPx + 'px');
	},
	getSliderPosition: function() {
		return this.slider.slider('value');
	},
	setSliderPosition: function(perc) {
		if(perc < 0) {
			perc = 0;
		}
		else if(perc > 100) {
			perc = 100;
		}
		this.slider.slider('value', perc);
		this.setPosition(perc);
	}
};
