// Depends on browser_detect-1.1.js

(function($) {
	$.fn.scroll_n_stick = function ( options ) {
		var obj = this;
		var settings = $.extend({
			left_anchor: 'body',		// object to base x position off of
			left_anchor_edge: 'left',	// anchor edge to base x position off of
			left_anchor_offset: 0, 		// offset from left_anchor_edge to left position of obj
			top_anchor: 'body',			// object to base y start/catch off of
			top_anchor_edge: 'top',		// anchor edge to base start/catch off of
			top_anchor_offset: 0,		// offset from top_anchor_edge to start/catch position
			screen_top_offset: 0,		// offset the catch point from the top of the screen
			handheld_on: true,			// turn off on handheld devices
			handheld_animate: true		// animate the upward position slide
		},options||{});
		
		
		function position_obj () {
			var top_pos;
			var left_pos;
			var top_margin;
			var top_reference;
			var left_reference;
			var left_anchor_offset = $( settings.left_anchor ).offset();
			var top_anchor_offset = $( settings.top_anchor ).offset();
			var left_anchor_width = $( settings.left_anchor ).width();
			var top_anchor_height = $( settings.top_anchor ).height();
			var window_scrollTop = $(window).scrollTop();
			var window_scrollLeft = $(window).scrollLeft();
						
			if ( settings.top_anchor_edge == "top" ) {
				top_reference = top_anchor_offset.top + settings.top_anchor_offset;
			} else {
				top_reference = top_anchor_offset.top + top_anchor_height + settings.top_anchor_offset;
			}
						
			if ( window_scrollTop + settings.screen_top_offset <= top_reference ) {
				top_pos = top_reference - window_scrollTop;
				top_margin = top_reference;
			} else {
				top_pos = settings.screen_top_offset;
				top_margin = window_scrollTop + settings.screen_top_offset;
			}
			
			if ( settings.left_anchor_edge == "left" ) {
				left_reference = left_anchor_offset.left + settings.left_anchor_offset;
			} else {
				left_reference = left_anchor_offset.left + left_anchor_width + settings.left_anchor_offset;
			}
						
			left_pos = left_reference - $(window).scrollLeft();
				
			
			// if handheld, use absolute positioning
			if ( BrowserDetect.handheld ) {
				if ( settings.handheld_on ) {
					$(obj).each(function(){
						var cur_top_margin = parseInt( $(this).css('marginTop') );
						var animation_duration = 500;
					
						$(this).css({
								float: 'none',
								position: 'absolute',
								top: 0,
								left: left_pos
							});

						if ( !settings.handheld_animate && ( cur_top_margin > top_margin || window_scrollTop == 0 ) ) {
							$(this).css( { marginTop: top_margin } );
						} else {
							$(this).animate( { marginTop: top_margin }, animation_duration );
						}			
					});
				}
			} else {
				$(obj).css({
					float: 'none',
					position: 'fixed',
					marginTop: 0,
					top: top_pos,
					left: left_pos
				});
			}
			
		}
		
		position_obj();
		
		$(window)
			.scroll(function() {
				position_obj();
			})
			.resize(function() {
				position_obj();
			});	
	}
})(jQuery);

