(function($){  
	$.fn.scroll = function(options, urls, postUrl) {    
		var defaults = {  
			width: 150,
			height: 150,
			scrollMode: "scroller",
			scrollType: "auto",  
			orientation: "vertical",
			direction: "up",
			speed:	1,
			background: "transparent",
			borderSize: "1px",
			borderColor: "black",
			watermark: "",
			draggable: false
		};
		
		var options = $.extend(defaults, options);
		var data = [];
		var $container;
		
		function initData(index) {
			if (index == urls.length) {
				switch(options.scrollMode) {
					case "scroller":
						displayScroller();
						break;
					case "slideshow":
						displaySlideShow();
						break;
				}
				return;
			}
			
			for (var i=0; i<urls.length;i++) {
			    if (urls[i].toLowerCase().indexOf("page_generatepreview.aspx") == 0) {
			        var location = document.location.toString();
			        var domain = document.location.host;
			        domain = location.substr(0, location.indexOf("index.html")) + "//" + domain + "/MemberArea/";
			        urls[i] = domain + urls[i];
			    } else if (urls[i].toLowerCase().indexOf("http") != 0) {
				var location = document.location.toString();
			        var domain = document.location.host;
			        domain = location.substr(0, location.indexOf("index.html")) + "//" + domain + "/";
			        urls[i] = domain + urls[i];
			    }
			}

			$.post(postUrl, { url: encodeURI(urls[index]) },
				function(result) {
					data.push(result);
					if (urls.length == 1) {
						data.push(result);
					}
					initData(index+1);
				}
			);
		}
		
		function displaySlideShow() {
			if (data.length == 0) {
				return;
			}
			
			$container.html(data[0]);
			$container.css("visibility", "visible")
				  .data("index", 0)
				  .data("interval", null);
				  
			$container
				.mouseenter(function(e) { stopSlideShow(); })
		   		.mouseleave(function(e) { startSlideShow(); });

			startSlideShow();
		}
		
		function startSlideShow() {
			if ($container.data("interval") != null) {
			    return;
			}
			
			var interval = setInterval(function() { setSlideShow(); }, 1000 * options.speed);
			$container.data("interval", interval);
		}
		
		function stopSlideShow() {
			if ($container.data("interval") == null) {
			    return;
			}
			
			clearInterval($container.data("interval"));
			$container.data("interval", null);
		}
		
		function setSlideShow() {			
			var index = $container.data("index") + 1;

			if (index == data.length) {
				index = 0;
			}
			
			$container.html(data[index]);
			$container.data("index", index);
		}
		
		function setContainer(container) {
			$container = container;
		}
		
		function displayScroller() {
			$(data).each(function(i) {
				var $li = $("<li></li>").html(this.toString())
				
				if (options.orientation == "horizontal") {
					$li.css("float","left");
				} else if (options.orientation == "vertical") {
					$li.css("display", "block");
				}
				
				$li.attr("id","li-"+i);
				$container.find("ul").append($li);
			});
			
			setTimeout(startScroller, 1000);
		}
		
		function startScroller() {
			$container.find("ul").css("visibility","visible");
			
			if ($container.data("scrolling")) {
				return;
			}
			
			switch(options.orientation) {
				case "vertical":
					if (options.direction == "up") {
						moveUp();
					} else {
						moveDown();
					}
					break;
				case "horizontal":
					if (options.direction == "right") {
						moveRight();
					} else {
						moveLeft();
					}
					break;
			}
			$container.data("scrolling", true);
		}
		
		function moveUp() {
	            var $ul = $container.find("ul");
	            
		    var interval = setInterval(function() {
	            	var $top = toInt($ul.css("top"), 0);
		        var height = $ul.find("li:first").outerHeight();
	            	var indent = height*-1;
	            	
	        	if ($container.data("hover") != "1") {	
		            	if ($top <= indent) {
			            	$ul.find("li:last").after($ul.find('li:first'));
			            	var _top = $top + height;
			            	$ul.css({'top' : _top});
		            	} else {
		            		$ul.css("top", $top-1);
			    	}
		    	}
		    }, options.speed * 2);
		}
		
		function moveDown() {
	            var $ul = $container.find("ul");

		    var interval = setInterval(function() {
	            	var $top = toInt($ul.css("top"), 0);
		        var height = $ul.find("li:last").outerHeight();
	            	var indent = $ul.outerHeight() - height;
	            	
	        	if ($container.data("hover") != "1") {	
		            	if ($top >= 0) {
			            	$ul.find("li:first").after($ul.find('li:last'));
			            	var _top = $top - height;
			            	$ul.css({'top' : _top});
		            	} else {
		            		$ul.css("top", $top+1);
			    	}
		    	}
		    }, options.speed * 2);
		}
		
		function toInt(num, defaultValue) {
			var i = parseInt(num);
			if (isNaN(i) || typeof(i) != "number") {
				return defaultValue;
			}
			return i;
		}
		
		function moveLeft() {
	            var $ul = $container.find("ul");

		    var interval = setInterval(function() {
	            	var $left = toInt($ul.css("left"), 0);
		        var width = $ul.find("li:first").outerWidth();
	            	var indent = width*-1;
	            	
	        	if ($container.data("hover") != "1") {	
		            	if ($left <= indent) {
			            	$ul.find("li:last").after($ul.find('li:first'));
			            	var _left = $left + width;
			            	$ul.css({'left' : _left});
		            	} else {
		            		$ul.css("left", $left-1);
			    	}
		    	}
		    }, options.speed * 2);
		}
		
				
		function moveRight() {
	            var $ul = $container.find("ul");

		    var interval = setInterval(function() {
	            	var $left = toInt($ul.css("left"), 0);
		        var width = $ul.find("li:last").outerWidth();
	            	var indent = $ul.outerWidth() - width;
	            	
	        	if ($container.data("hover") != "1") {	
		            	if ($left >= 0) {
			            	$ul.find("li:first").after($ul.find('li:last'));
			            	var _left = $left - width;
			            	$ul.css({'left' : _left});
		            	} else {
		            		$ul.css("left", $left+1);
			    	}
		    	}
		    }, options.speed * 2);
		}
		
		return this.each(function() {  
			var $c = $("<div></div>")
				.css("width", options.width)
				.css("height", options.height)
				.css("background", options.background)
				.css("background-color", options.background)
				.css("border-color", options.borderColor)
				.css("border-style", "solid")
				.css("border-width", options.borderSize)
				.css("overflow", "hidden")
				.data("hover", "0")
				.data("scrolling", false);
			
			if (options.scrollMode == "scroller") {
				$c.css("float", "left");
				$c.append("<ul style='position:relative;list-style-type: none;margin: 0px;padding: 0px;width:9999px;'></ul>");
			}
			
			if (options.watermark != "") {
				$c.css("background-image", "url("+options.watermark+")");
				$c.css("background-repeat", "no-repeat");
			}
			
			var $ul = $c.find("ul");

			$ul.css("height", options.height);
			
			$ul.mouseenter(function(e) { $container.data("hover", "1"); })
			   .mouseleave(function(e) { $container.data("hover", "0"); });
			
			$(this).replaceWith($c);
			
			setContainer($c);
			
			$c.after("<div style='clear:both;'></div>");
			initData(0);
		});
	};
})(jQuery); 
