$(document).ready(function(){
	$('.resize-container').each(function(){
		
		var paneWidth = 0;
		
		$('.resize-child', this).each(function(){
			var thisWidth = $(this).DOMsize();
			paneWidth += thisWidth.fullwidth;
		});

		paneWidth = (paneWidth < 871) ? 871 : paneWidth;

		$(this).width(paneWidth);
	});

	if($('#scroll-pane').length) {

		$('#scroll-pane').horizontalScroll();
		$('.in-page').click(function(){
			$('#scroll-pane')[0].scrollTo(this.hash, '0');
			return false;
		});
	};
	
	if($('#profile-video').length) {
		$('#profile-video').click(function(){
		
			Shadowbox.open({
				content:    this.href,
				player:     'flv',
				width:      480,
				height:     270, //subtracted controlbar height (-20)
				options:	{
					flashParams: {
						bgcolor:'#FFFFFF'
					},
					flashVars: {
						skin : "/_swf/player_skin.swf"
					}
				}
			});
			
			return false;
		});
	};
	
	if($('#event-list').length) {
		
		Calendar.init();
	};
});


var Calendar = {
	
	init : function(){
		this.step	= 4;
		this.list	= $('#event-list');
		this.items	= $('li', this.list);
		this.total	= this.items.size();
		this.first	= true;
		this.last	= false;
		this.current= this.step;

		// Paginate if more than 4 items available
		if(this.total > this.step) {
			this.items.hide().each(function(i){
				if(i < Calendar.step) $(this).show();
			});
			this._append();
		};
	},
	
	_append : function(){
		Calendar.nav		= $('<div id="calendar-nav"></div>').insertAfter(Calendar.list);
		Calendar.navPrev	= $('<a href="#prev" id="calendar-nav-prev">&laquo; Prev</a>').css('visibility','hidden').click(Calendar._prev).appendTo(Calendar.nav);
		Calendar.navNext	= $('<a href="#next" id="calendar-nav-next">Next &raquo;</a>').css('visibility','visible').click(Calendar._next).appendTo(Calendar.nav);
	},
	
	_next : function(){
		if(!Calendar.last) {
			Calendar.next = Calendar.current+Calendar.step;
			Calendar.items.hide().slice(Calendar.current, Calendar.next).slideDown('fast');
			Calendar.current = Calendar.next;
			
			if(Calendar.current >= Calendar.total) {
				Calendar.last = true;
				Calendar.navNext.css('visibility','hidden');
			};
			
			Calendar.navPrev.css('visibility','visible');
			Calendar.first = false;
		};

		return false;
	},
	
	_prev : function(){
		if(!Calendar.first) {
			Calendar.next = Calendar.current-Calendar.step;
			Calendar.items.hide().slice((Calendar.next-Calendar.step), Calendar.next).slideDown('fast');
			Calendar.current = Calendar.next;

			if(Calendar.current == Calendar.step) {
				Calendar.first = true;
				Calendar.navPrev.css('visibility','hidden');
			};
			
			Calendar.navNext.css('visibility','visible');
			Calendar.last = false;
		};
		
		return false;
	}
};

(function($){

	/**
	 * --------------------------------------------------
	 * @desc Gets the exact width including media params
	 * 		 such as margin, padding and border
	 		 dimensions.
	 * @param bool vertical
	 * @param bool horizontal
	 * @package WWW
	 * @author Atif Qureshi <atif@opx.co.uk>
	 * --------------------------------------------------
	 */
	$.fn.DOMsize = function() {

		var e 	= $(this),
			w 	= e.width(),
			h 	= e.height(),
			vb 	= (parseInt(e.css("border-top-width"))+parseInt(e.css("border-bottom-width"))),
			vp 	= (parseInt(e.css("padding-top"))+parseInt(e.css("padding-bottom"))),
			hb 	= (parseInt(e.css("border-left-width"))+parseInt(e.css("border-right-width"))),
			hp 	= (parseInt(e.css("padding-left"))+parseInt(e.css("padding-right")));

		return {
			fullheight		  : h+((isNaN(vb))?0:vb)+((isNaN(vp))?0:vp),
			fullwidth		  : w+((isNaN(hb))?0:hb)+((isNaN(hp))?0:hp),
			height			  : (isNaN(h))?0:h,
			width			  : (isNaN(w))?0:w,
			verticalBorder	  : (isNaN(vb))?0:vb,
			horizontalBorder  : (isNaN(hb))?0:hb,
			verticalPadding	  : (isNaN(vp))?0:vp,
			horizontalPadding : (isNaN(hp))?0:hp
		};
	};
})(jQuery);


var _originalSizes = new Array(),
	_differenceSizes = new Array(),
	_previousWindowSize = new Array(),
	_originalPercentages = new Array(),
	_intervals = new Array(),
	_trackInt = new Array(),
	_originalPos = new Array(),
	_globalProperties = new Array();

$.horizontalScroll = {active:[]};

$.fn.horizontalScroll = function(options){

	var settings = $.extend({
			scrollbarHeight : 17,
			scrollbarMargin : 0,
			wheelSpeed : 18,
			showArrows : false,
			arrowSize : 10,
			animateTo : false,
			dragMinWidth : 201,
			dragMaxWidth : 201,
			animateInterval : 100,
			animateStep: 3,
			maintainPosition: true, 
			resize: true,
			minimumWidth: 200,
			_reset: false
		}, options
	);

	return this.each(function() {

		if(settings._reset == true) $.fn.horizontalScroll.reset();

		var $this = $(this),
			mouseWheelNext = 0,
			mouseWheelMove = false,
			// Generate ID if no ID attribute is given
			currentId = (typeof($this.attr('id')) != 'undefined') ? $this.attr('id') : $this.attr('id','scrollPane'+Math.ceil(Math.random())),
			previousWindow = _previousWindowSize[currentId],
			percentageWidth;

			_originalPos[currentId] = -1;
			_globalProperties[currentId] = settings;
			_previousWindowSize[currentId] = $(window).width();

		// On initial load, set values needed for percentage resizing.
		if(typeof(_originalSizes[currentId]) == 'undefined') {		

			// IE6 hack, since jQuery width doesnt get the right value on an inproper refresh
			if(($.browser.msie) && (parseInt($.browser.version) == 6)) {
				var outerWidth = parseInt($this.outerWidth()) - parseInt($this.offset().left);
				_differenceSizes[currentId] = $this.offset().left / $(window).width();
			} else {
				var outerWidth = $this.outerWidth();
				_differenceSizes[currentId] = $this.position().left / $(window).width();
			};

			percentageWidth = (outerWidth / $(window).width());			
			_originalPercentages[currentId] = percentageWidth;
			_originalSizes[currentId] = $(window).width();
		} else { 
			percentageWidth = _originalPercentages[currentId];
			var diff = _differenceSizes[currentId] - (($this.offset().left + _originalPos[currentId])/ $(window).width());
			percentageWidth = percentageWidth + diff;
		};

		var halfIntervals = new Array(),
			margin = $this.position().left,
			offset = 1;

		_intervals = new Array();
		halfIntervals[0] = 0;
		_intervals[0] = 0;
		margin = (margin < 0) ? 0 : margin;
		
		// Handle interval code
		$('.scroll-interval', $this).each(function(i,e){
			var pos = $(e).position().left - margin;
			if(pos != 0) _intervals[i+offset] = pos;
			else offset--;
		});

		if(_intervals.length <= 1) _intervals = new Array();

		if($this.parent().is('.jScrollPaneContainer')) {

			var currentScrollPosition = settings.maintainPosition ? $this.offset({relativeTo:$this.parent()[0]}).left : 0;
			var $c = $this.parent();
			var paneWidth = $c.outerWidth();
			var paneHeight = $c.innerHeight();
			var rightPos = $this.offset().left + _originalPos[currentId] + paneWidth;
				
			if((previousWindow != $(window).width()) && ((rightPos > $(window).width()) || (previousWindow < $(window).width())) && (settings.resize == true)) {

				paneWidth = ($(window).width() >= _originalSizes[currentId]) ? ($(window).width() *  percentageWidth) : paneWidth = $(window).width() - ($this.offset().left + _originalPos[currentId]) - 10;

				if(paneWidth < settings.minimumWidth) paneWidth = settings.minimumWidth;
				$this.parent().css({'height':paneHeight+'px', 'width': paneWidth + 'px'});
			}
				
			var trackWidth = paneWidth;

			if($c.unmousewheel) {

				if($.browser.opera) $c.unbind("mousewheel", fn = function(){});
				else $c.unmousewheel();
			};

			$('>.jScrollPaneTrack, >.jScrollArrowLeft, >.jScrollArrowRight', $c).remove();
			$this.css({'left':0});
			_originalPos[currentId] = -1;
		} else {

			var currentScrollPosition = 0;
			this.originalPadding = $this.css('paddingTop') + ' ' + $this.css('paddingRight') + ' ' + $this.css('paddingBottom') + ' ' + $this.css('paddingLeft');
			this.originalSidePaddingTotal = (parseInt($this.css('paddingLeft')) || 0) + (parseInt($this.css('paddingRight')) || 0);

			var paneWidth = $this.outerWidth(),
				rightPos = $this.offset().left + _originalPos[currentId] + paneWidth;

			if((rightPos) > $(window).width()) paneWidth = $(window).width() *  percentageWidth;
			if(paneWidth < settings.minimumWidth) paneWidth = settings.minimumWidth;

			var paneHeight = $this.innerHeight(),
				trackWidth = paneWidth;

			$this.wrap($('<div></div>').addClass('jScrollPaneContainer').css({'height':paneHeight+'px','width':paneWidth+'px'}));

			// deal with text size changes (if the jquery.em plugin is included)
			// and re-initialise the scrollPane so the track maintains the
			// correct size
			$(document).bind('emchange', function(e, cur, prev){ $this.horizontalScroll(settings); });
		};

		var p = this.originalSidePaddingTotal;

		$this.css({'height': paneHeight - settings.scrollbarHeight - p + 'px', 'width': 'auto', 'paddingRight':settings.scrollbarMargin + 'px'});

		var contentWidth = $this.outerWidth();

		// IE6 and 7, outside width does not always guarantee the full size of the div is returned for outerWidth
		if($.browser.msie || $.browser.opera || $.browser.safari) {
			var ieWidth = 0;
			$this.children().each(function(i, e){ if($(e).outerWidth() > ieWidth) ieWidth = $(e).outerWidth(); });
			if(ieWidth > contentWidth) contentWidth = ieWidth;
		};

		var percentInView = paneWidth / contentWidth,
			trackIntervals = new Array();

		if(percentInView < 0.99) {

			var $container = $this.parent();

			$container.append(
				$('<div></div>').addClass('jScrollPaneTrack').css({'height':settings.scrollbarHeight+'px'}).append(
					$('<div></div>').addClass('jScrollPaneDrag').css({'height':settings.scrollbarHeight+'px'}).append(
						$('<div></div>').addClass('jScrollPaneDragLeft').css({'height':settings.scrollbarHeight+'px'}),
						$('<div></div>').addClass('jScrollPaneDragRight').css({'height':settings.scrollbarHeight+'px'})
					)
				)
			);
				
			var $track = $('>.jScrollPaneTrack', $container);

			// Attach the intervals to the track
			for(inter in _intervals) { 
				
				scrollOffset = (settings.showArrows == true) ? settings.arrowSize : 0;
				intervalTrackPos = _intervals[inter] / contentWidth * $track.width() - (scrollOffset);
				trackIntervals[inter] = intervalTrackPos;

				if(trackIntervals[inter - 1] != undefined) halfIntervals[inter-1] = (trackIntervals[inter] + trackIntervals[inter-1]) / 2;

				if(inter != 0) {
					$interObj = $('<div>|</div>').addClass('jScrollIntervalTrack').css({'left':intervalTrackPos + 'px'});
					$track.append($interObj);
				}
			}

			var $drag = $('>.jScrollPaneTrack .jScrollPaneDrag', $container),
				$pane = $(this).css({'position':'absolute', 'overflow':'visible'}),
				
				currentOffset,
				maxX,
				mouseWheelMultiplier,
				
				// store this in a seperate variable so we can keep track more accurately than just updating the css property..
				dragPosition = 0;
				dragMiddle = percentInView * paneWidth / 2,

				// pos function borrowed from tooltip plugin and adapted...
				getPos = function (event, c) {
					var p = c == 'X' ? 'Left' : 'Bottom';
					return event['page' + c] || (event['client' + c] + (document.documentElement['scroll' + p] || document.body['scroll' + p])) || 0;
				},
				ignoreNativeDrag = function() {	return false; },
				currentInterval = 0,
				direction = 1,
				arrowUp = false,
				intervalMove = false;

			_trackInt[currentId] = -1;

			var initDrag = function(){
				ceaseAnimation();
				currentOffset = $drag.offset(false);
				currentOffset.left -= dragPosition;
				maxX = trackWidth - $drag[0].offsetWidth;
				mouseWheelMultiplier = 2 * settings.wheelSpeed * maxX / contentWidth;
			};
				
			var onStartDrag = function(event) {
				initDrag();
				dragMiddle = getPos(event, 'X') - dragPosition - currentOffset.left;
				$('body').bind('mouseup', onStopDrag).bind('mousemove', updateScroll);
				if($.browser.msie) $('body').bind('dragstart', ignoreNativeDrag).bind('selectstart', ignoreNativeDrag);
				return false;
			};

			var onStopDrag = function(){
				$('body').unbind('mouseup', onStopDrag).unbind('mousemove', updateScroll);
				dragMiddle = percentInView*paneWidth/2;
				moveIntervals();
				
				if($.browser.msie) $('body').unbind('dragstart', ignoreNativeDrag).unbind('selectstart', ignoreNativeDrag);
			};

			var positionDrag = function(destX){
				// Figure out if we need to adjust because of intervals.
				evaluateIntervals(dragPosition, destX);
				destX = destX < 0 ? 0 : (destX > maxX ? maxX : destX);
				dragPosition = destX;

				$drag.css({'left':destX +'px'});
				var p = destX / maxX;
				_originalPos[currentId] = (paneWidth-contentWidth) * p * -1;
				$pane.css({'left':((paneWidth-contentWidth)*p) + 'px'});
				$this.trigger('scroll');
			};

			var updateScroll = function(e){
				positionDrag(getPos(e, 'X') - currentOffset.left - dragMiddle);
			};
				
			var evaluateIntervals = function(position, destX){ 

				if((intervalMove == false) && (mouseWheelMove != true)) { 
					_trackInt[currentId] = -1;
					halfInter = -1;
					smallInter = -1;
					bigInter = -1;
					endDragPos = destX + $drag.width();
					fullTrackWidth = $('.jScrollPaneTrack').width();

					for(inter in trackIntervals) { 
						if((endDragPos >= fullTrackWidth) && (endDragPos >= trackIntervals[inter])) {
							_trackInt[currentId] = inter;
						} else if(destX >= trackIntervals[inter]) {
							smallInter = inter;
						} else { 
							bigInter = inter;
							break;
						}
					};

					if(_trackInt[currentId] == -1) {
						smallDistance = destX - trackIntervals[smallInter];
						largeDistance = trackIntervals[bigInter] - destX;

						_trackInt[currentId] = (smallDistance <= largeDistance) ? smallInter : bigInter;
					}
				} else { 
					intervalMove = false;
				}
			};

			var moveIntervals = function() { 

				if(_trackInt[currentId] != -1) { 
					// Catching arrow clicks
					if(arrowUp == true) { 
						if((direction == -1) && (_trackInt[currentId] != 0)) { 
							_trackInt[currentId] = currentInterval - 1;
						} else if((direction == 1) && (_trackInt[currentId] != (_intervals.length -1))) {
							_trackInt[currentId] = parseInt(currentInterval) + 1;
						};
						arrowUp = false;
					} 
					
					intervalMove = true;
					positionDrag(trackIntervals[_trackInt[currentId]]);
					currentInterval = _trackInt[currentId];
				}
			};
				
			var arrowSize = 0;
			
			if(settings.showArrows == true) arrowSize = settings.arrowSize;

			var dragH = Math.max(Math.min(percentInView*(paneWidth-arrowSize*2), settings.dragMaxWidth), settings.dragMinWidth),
				trackScrollInterval,
				trackScrollInc,
				trackScrollMousePos;

			$drag.css({'width':dragH+'px'}).bind('mousedown', onStartDrag);

			var doTrackScroll = function(){
				if (trackScrollInc > 8 || trackScrollInc%4==0) positionDrag((dragPosition - ((dragPosition - trackScrollMousePos) / 2)));
				trackScrollInc ++;
			};

			var onStopTrackClick = function(){
				clearInterval(trackScrollInterval);
				moveIntervals();
				$('body').unbind('mouseup', onStopTrackClick).unbind('mousemove', onTrackMouseMove);
			};

			var onTrackMouseMove = function(event){
				trackScrollMousePos = getPos(event, 'X') - currentOffset.left - dragMiddle;
			};

			var onTrackClick = function(event){
				initDrag();
				onTrackMouseMove(event);
				trackScrollInc = 0;
				$('body').bind('mouseup', onStopTrackClick).bind('mousemove', onTrackMouseMove);
				trackScrollInterval = setInterval(doTrackScroll, 100);
				doTrackScroll();
			};

			$track.bind('mousedown', onTrackClick);

			// if the mousewheel plugin has been included then also react to the mousewheel
			if($container.mousewheel) {
				$container.mousewheel(function(event, delta){
					var movePos = -1;
					if($.browser.opera) delta = event.wheelDelta / 120;

						// The following handles intervals with the mouse wheel
					if(trackIntervals.length > 1) {

						mouseWheelMove = true;
								
						//increase or decrease the interval we are currently on, depending
						//on the direction of the mouse wheel
						if(delta < 0) {
							_trackInt[currentId] = parseInt(_trackInt[currentId]) + 1;
							if((_trackInt[currentId]) >= trackIntervals.length - 1) _trackInt[currentId] = trackIntervals.length - 1;
							//If the next interval is beyond the dragWidth then recalculate.
							if((parseInt($drag.width())+ parseInt(trackIntervals[_trackInt[currentId]])) > parseInt($('.jScrollPaneTrack').width())) {
								movePos = parseInt($('.jScrollPaneTrack').width()) - $drag.width();
							}
						} else { 
							_trackInt[currentId] = parseInt(_trackInt[currentId]) - 1;
							if(_trackInt[currentId] < 0) _trackInt[currentId] = 0;
						}
					};

					initDrag();
					ceaseAnimation();
					var d = dragPosition;
						
					//when intervals are in use, mouseWheelMove is set to true
					if(mouseWheelMove == true) {
						if(movePos == -1) positionDrag(trackIntervals[_trackInt[currentId]]);
						else positionDrag(movePos);
					} else {
						positionDrag(dragPosition - delta * mouseWheelMultiplier);
					};

					moveIntervals();
					var dragOccured = d != dragPosition;
					mouseWheelMove = false;
					return !dragOccured;
				},false);					
			};

			var _animateToPosition, _animateToInterval;

			function animateToPosition(){
				var diff = (_animateToPosition - dragPosition) / settings.animateStep;

				if ((diff > 1 || diff < -1) && ((dragPosition + diff + $drag.width()) < (paneWidth))) {
					positionDrag(dragPosition + diff);
				} else {
					positionDrag(_animateToPosition);
					ceaseAnimation();
				}
			};

			var ceaseAnimation = function(){
				if(_animateToInterval) {
					clearInterval(_animateToInterval);
					delete _animateToPosition;
				}
			};
			
			var scrollTo = function(pos, preventAni){
				if (typeof pos == "string") {
					$e = jQuery(pos, this);
					if (!$e.length) return;
					pos = $e.position().left;
				};

				ceaseAnimation();
				var destDragPosition = -pos/(paneWidth-contentWidth) * maxX;
				if (!preventAni || settings.animateTo) {
					_animateToPosition = destDragPosition;
					_animateToInterval = setInterval(animateToPosition, settings.animateInterval);
	
				} else {
					positionDrag(destDragPosition);
				}	
			};
			
			$this[0].scrollTo = scrollTo;
			$this[0].scrollBy = function(delta){
				var currentPos = -parseInt($pane.css('left')) || 0;
				scrollTo(currentPos + delta);
			};

			initDrag();
			scrollTo(-currentScrollPosition, true);

			$.horizontalScroll.active.push($this[0]);
		} else {
			var scrollTo = function(pos, preventAni) {}
			$this[0].scrollTo = scrollTo;
			$this.css({'height':paneHeight-this.originalSidePaddingTotal+'px', 'width': paneWidth+'px', 'padding':this.originalPadding});
		};
			
	});
};

$.fn.horizontalScroll.reset = function(){
	_originalSizes = new Array();
	_differenceSizes = new Array();
	_previousWindowSize = new Array();
	_originalPercentages = new Array();
	_intervals = new Array();
	_trackInt = new Array();
	_originalPos = new Array();
	_globalProperties = new Array();
};

// clean up the scrollTo expandos
$(window).bind('unload', function(){
	var els = $.horizontalScroll.active; 
	for(var i=0; i<els.length; i++) els[i].scrollTo = els[i].scrollBy = null;
});

(function($){
	
$.dimensions = {version: '@VERSION'};
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
$.each( [ 'Height', 'Width' ], function(i, name){
	
	// innerHeight and innerWidth
	$.fn[ 'inner' + name ] = function() {
		if (!this[0]) return;
		
		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right

		return num(this, name.toLowerCase()) + num(this, 'padding' + torl) + num(this, 'padding' + borr);
	};
	
	// outerHeight and outerWidth
	$.fn[ 'outer' + name ] = function(options) {
		if (!this[0]) return;
		
		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
		
		options = $.extend({ margin: false }, options || {});
		
		return num(this, name.toLowerCase())
				+ num(this, 'border' + torl + 'Width') + num(this, 'border' + borr + 'Width')
				+ num(this, 'padding' + torl) + num(this, 'padding' + borr)
				+ (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
	};
});

// Create scrollLeft and scrollTop methods
$.each( ['Left', 'Top'], function(i, name) {
	$.fn[ 'scroll' + name ] = function(val) {
		if (!this[0]) return;
		
		return val != undefined ?
		
			// Set the scroll offset
			this.each(function() {
				this == window || this == document ?
					window.scrollTo( 
						name == 'Left' ? val : $(window)[ 'scrollLeft' ](),
						name == 'Top'  ? val : $(window)[ 'scrollTop'  ]()
					) :
					this[ 'scroll' + name ] = val;
			}) :
			
			// Return the scroll offset
			this[0] == window || this[0] == document ?
				self[ (name == 'Left' ? 'pageXOffset' : 'pageYOffset') ] ||
					$.boxModel && document.documentElement[ 'scroll' + name ] ||
					document.body[ 'scroll' + name ] :
				this[0][ 'scroll' + name ];
	};
});

$.fn.extend({
	position: function() {
		var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
		
		if (elem) {
			// Get *real* offsetParent
			offsetParent = this.offsetParent();
			
			// Get correct offsets
			offset       = this.offset();
			parentOffset = offsetParent.offset();
			
			// Subtract element margins
			offset.top  -= num(elem, 'marginTop');
			offset.left -= num(elem, 'marginLeft');
			
			// Add offsetParent borders
			parentOffset.top  += num(offsetParent, 'borderTopWidth');
			parentOffset.left += num(offsetParent, 'borderLeftWidth');
			
			// Subtract the two offsets
			results = {
				top:  offset.top  - parentOffset.top,
				left: offset.left - parentOffset.left
			};
		}
		
		return results;
	},
	
	offsetParent: function() {
		var offsetParent = this[0].offsetParent;
		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
			offsetParent = offsetParent.offsetParent;
		return $(offsetParent);
	}
});

function num(el, prop) {
	return parseInt($.css(el.jquery?el[0]:el,prop))||0;
};

})(jQuery);

/* Copyright (c) 2006 Brandon Aaron (brandon.aaron@gmail.com || 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.
 *
 * $LastChangedDate: 2007-06-20 16:25:35 -0500 (Wed, 20 Jun 2007) $
 * $Rev: 2125 $
 *
 * Version: 2.2
 */
(function($){$.fn.extend({mousewheel:function(f){if(!f.guid)f.guid=$.event.guid++;if(!$.event._mwCache)$.event._mwCache=[];return this.each(function(){if(this._mwHandlers)return this._mwHandlers.push(f);else this._mwHandlers=[];this._mwHandlers.push(f);var s=this;this._mwHandler=function(e){e=$.event.fix(e||window.event);$.extend(e,this._mwCursorPos||{});var delta=0,returnValue=true;if(e.wheelDelta)delta=e.wheelDelta/120;if(e.detail)delta=-e.detail/3;if(window.opera)delta=-e.wheelDelta;for(var i=0;i<s._mwHandlers.length;i++)if(s._mwHandlers[i])if(s._mwHandlers[i].call(s,e,delta)===false){returnValue=false;e.preventDefault();e.stopPropagation();}return returnValue;};if($.browser.mozilla&&!this._mwFixCursorPos){this._mwFixCursorPos=function(e){this._mwCursorPos={pageX:e.pageX,pageY:e.pageY,clientX:e.clientX,clientY:e.clientY};};$(this).bind('mousemove',this._mwFixCursorPos);}if(this.addEventListener)if($.browser.mozilla)this.addEventListener('DOMMouseScroll',this._mwHandler,false);else this.addEventListener('mousewheel',this._mwHandler,false);else
this.onmousewheel=this._mwHandler;$.event._mwCache.push($(this));});},unmousewheel:function(f){return this.each(function(){if(f&&this._mwHandlers){for(var i=0;i<this._mwHandlers.length;i++)if(this._mwHandlers[i]&&this._mwHandlers[i].guid==f.guid)delete this._mwHandlers[i];}else{if($.browser.mozilla&&!this._mwFixCursorPos)$(this).unbind('mousemove',this._mwFixCursorPos);if(this.addEventListener)if($.browser.mozilla)this.removeEventListener('DOMMouseScroll',this._mwHandler,false);else this.removeEventListener('mousewheel',this._mwHandler,false);else
this.onmousewheel=null;this._mwHandlers=this._mwHandler=this._mwFixCursorPos=this._mwCursorPos=null;}});}});$(window).one('unload',function(){var els=$.event._mwCache||[];for(var i=0;i<els.length;i++)els[i].unmousewheel();});})(jQuery);
