(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 = [];

		function initData(index, info) {
			if (index == urls.length) {
				switch(options.scrollMode) {
					case "scroller":
						displayScroller(info);
						break;
					case "slideshow":
						displaySlideShow(info);
						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("/")) + "//" + 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("/")) + "//" + domain + "/";
			        urls[i] = domain + urls[i];
			    }
			}
			$.post(postUrl, { url: encodeURI(urls[index]) },
				function(result){
					data.push(result);
					initData(index+1, info);
				}
			);
		}
		
		function displaySlideShow(info) {
			if (data.length == 0) {
				return;
			}
			
			$("#"+info.container).html(data[0]);
			$("#"+info.wrapper).css("visibility", "visible");
						
			$("#"+info.id).bind("mouseover", function() {
				stopSlideShow(info);
			});
			
			$("#"+info.id).bind("mouseout", function() {
				startSlideShow(info);
			});
			
			info.index = -1;
			startSlideShow(info);
		}
		
		function displayScroller(info) {
			if (data.length == 0) {
				return;
			}
			
			$("#"+info.container).html(data[0]);
			var outerHeight = $("#"+info.id).outerHeight();
			var outerWidth = $("#"+info.id).outerHeight();
			var height = $("#"+info.wrapper).outerHeight();
			var width = $("#"+info.wrapper).outerWidth();

			switch (options.orientation) {
				case "vertical":
					$("#"+info.wrapper).css("left", "0");
					if (options.direction == "up") {
						$("#"+info.wrapper).css("top", outerHeight);
					} else {
						$("#"+info.wrapper).css("top", height*-1);
					}
					break;
				case "horizontal":
					$("#"+info.wrapper).css("top", "0");
					if (options.direction == "right") {
						$("#"+info.wrapper).css("left", outerWidth);
					} else {
						$("#"+info.wrapper).css("left", width*-1);
					}
					break;
			}
			$("#"+info.wrapper).css("visibility", "visible");
						
			if (options.draggable) {
				$("#"+info.wrapper).css("cursor", "move");
				$("#"+info.id).mousemove(function(e){
					handleDrag(info, e.pageX, e.pageY);
				});
			}
			
			$("#"+info.id).bind("mouseover", function() {
				stopScroll(info);
			});
			
			$("#"+info.id).bind("mouseout", function() {
				startScroll(info);
			});
			
			$("#"+info.wrapper).bind("mousedown", function(e) {
				info.dragging = true;
				
				var obj = $("#"+info.wrapper);
				var top = parseInt(obj.css("top").replace("pt", "").replace("pt", ""));
				var left = parseInt(obj.css("left").replace("pt", "").replace("pt", ""));
				
				info.dragOrigTop = top;
				info.dragOrigLeft = left;
				info.dragOrigX = left+e.pageX;
				info.dragOrigY = top+e.pageY;
			});
			
			$("#"+info.id).bind("mouseup", function() {
				info.dragging = false;
			});
			
			startScroll(info);
		}
		
		function handleDrag(info, newX, newY) {
			if (info.dragging) {
				var obj = $("#"+info.wrapper);
				switch(options.orientation) {
					case "vertical":
						break;
					case "horizontal":
						break;
				}
			}
		}
		
		function startSlideShow(info) {
			if (info.scrolling) {
			    return;
			}
			
			info.moveInterval = setInterval(function() {
				slideShow(info);
			}, 1000*options.speed);
			info.scrolling = true;
		}
		
		function startScroll(info) {
			if (info.scrolling) {
			    return;
			}
			
			info.moveInterval = setInterval(function() {
				move(info);
			}, 20*options.speed);
			info.scrolling = true;
		}
		
		function stopSlideShow(info) {
		    if (!info.scrolling) {
			    return;
			}
			
			if (info.moveInterval) {
				clearInterval(info.moveInterval);
			}
			info.moveInterval = null;
			info.scrolling = false;
		}
		
		function stopScroll(info) {
			if (!info.scrolling) {
			    return;
			}
			
			if (info.moveInterval) {
				clearInterval(info.moveInterval);
			}
			info.moveInterval = null;
			info.scrolling = false;
		}
		
		function slideShow(info) {
			var index = info.index
			if (info.index == data.length-1) {
				info.index = 0;
			} else {
				info.index = info.index+1;
			}
			
			$("#"+info.container).html(data[info.index]);
		}
		
		function move(info) {
			var obj = $("#"+info.wrapper);
			var top = parseInt(obj.css("top").replace("px", "").replace("pt", ""));
			var left = parseInt(obj.css("left").replace("px", "").replace("pt", ""));
			var height = obj.outerHeight();
			var width = obj.outerWidth();
			var optionsHeight = options.height.replace("px","").replace("pt","");
			var optionsWidth = options.width.replace("px","").replace("pt","");
			
			switch (options.orientation) {
				case "vertical":
					if (options.direction == "up") { // up
						if (top + height <= 0) {
							var index = info.index
							if (info.index == data.length-1) {
								info.index = 0;
							} else {
								info.index = info.index+1;
							}
							
							$("#"+info.container).html(data[info.index]);
							obj.css("top", options.height);
						} else {
							obj.css("top", top-1);
						}
					} else { // down
						if (top >= optionsHeight) {
							var index = info.index
							if (info.index == data.length-1) {
								info.index = 0;
							} else {
								info.index = info.index+1;
							}
							
							$("#"+info.container).html(data[info.index]);
							obj.css("top", height*-1);
						} else {
							obj.css("top", top+1);
						}
					}
					break;
				case "horizontal":
					if (options.direction == "right") { // right
					} else { // left
					}
					break;
				default:
					return;
			}
		}
		
		function alphaNumeric(amount) {
		    var alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		    var retval = "";
		    for (var i=1; i<= amount; i++) {
		        var index = Math.ceil(Math.random()*25);
		        retval += alph.substr(index, 1);
		    }
		    return retval;
		}
		
		return this.each(function() {  
			var obj = $(this);
			var id = alphaNumeric(6);
			
			while (document.getElementById(id)) {
			    id = alphaNumeric(6);
			}
			
			var contentWrapperId = "cwrap"+id;
			var contentContainerId = "ccont"+id;
			var container = $('<div id="'+id+'" class="scrollContainer"></div>');
			container.css("width", options.width);
			container.css("height", options.height);
			container.css("background-color", options.background);
			container.css("border-color", options.borderColor);
			container.css("border-style", "solid");
			container.css("border-width", options.borderSize);
			
			if (options.watermark != "") {
				container.css("background-image", "url("+options.watermark+")");
				container.css("background-repeat", "no-repeat");
			}
			container.css("position", "relative");		
			container.append($('<div id="'+contentWrapperId+'" style="visibility:hidden;position:absolute;top:0;left:0;width:100%"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td id="'+contentContainerId+'"></td></tr></table></div>'));
			obj.replaceWith(container);
			
			var info = { scrolling:false, dragging: false, index:0, id: id, wrapper: contentWrapperId, container: contentContainerId, moveInterval: null };
			initData(0, info);
		});  
	};  
})(jQuery); 