;(function($) {

	var rotator;
	
	$.fn.wtRotator = function(params) {
		var TOP_LEFT = "TL";
		var TOP_RIGHT = "TR";
		var TOP_CENTER = "TC";
		var BOTTOM_LEFT = "BL";
		var BOTTOM_RIGHT = "BR";		
		var BOTTOM_CENTER = "BC";
		var CENTER = 0;
		var LEFT = 1;
		var RIGHT = 2;
		var DEFAULT_DELAY = 5000;
		var TOOLTIP_DELAY = 800;
		var INTERVAL_DELAY = 100;
		var TRANSPEED = 800;
		
        function Rotator($obj) {
			//set options
			var screenWidth = 573;
			var screenHeight = 380;
			var margin = 6;
			var globalTran = "fade";	
			var tranSpeed = 1500;
			var globalDelay = 3000;
			var rotate = true;			
			var border = 0;
			var cpAlign = "TR";
			var buttonWidth =  69;
			var buttonHeight = 46;
			var blockSize = 100;
			var vertSize = 80;
			var horzSize = 80;
			var displayThumbs = true;
			var displayDBtns = false;
			var displayPlayBtn = false;
			var displayTooltip = false;
			var displayNumber = false;
			var cpMouseover = false;
			var descMouseover = false;
			var cpMargin = 0; //opts.cpanel_margin;
								
			var numItems = 0;
			var currIndex = 0;
			var imgPaths;
			var imgs;
			var currDelay;			
			var currTran;
			var ttX;
			var ttY;
			var ttPos;
			var vStripes;
			var hStripes;
			var blocks;
			var timerId = null;
			var bgColor;
			var cpPos;
			var cpOffset;
			var hover = false;
			var textDisplayed = false;
			var msie = (jQuery.browser.msie) ? true : false;
			var $mainScreen = $(".wt-rotator", $obj);
			var $mainImg = $("#main-img", $obj);
			var $bgImg = $("#bg-img", $obj);
			var $preloader = $("div.preloader", $obj);			
			var $thumbnails = $("div.thumbnails", $obj);
			var $thumbList = $thumbnails.find("li");
            var $currThumb;
			this.$el = $obj;
			
			//init rotator
			this.init = function() {
                numItems = $thumbList.size();	
				bgColor = $mainScreen.css("background-color");
				$mainScreen.css({width:screenWidth, height:screenHeight});
				
				initThumbs();
				
				//init image loading
				initImgLoad();
				
				//display initial image
				loadContent(currIndex);
			}
			
			//set complete
			this.setComplete = function(newImg) {
				displayDesc();
				setImgPosition(newImg);
				$mainImg.attr("src", newImg.src);
				startTimer();
			}
			
			//add to screen
			this.addToScreen = function(s) {
				$mainScreen.find(">a:first").append(s);
			}
			
			//init thumbs
			var initThumbs = function() {	
				$thumbList.each(
					function(n) {
						$(this).css({width:buttonWidth, height:buttonHeight, 
									 "line-height":buttonHeight + "px", 
									 "margin-right":margin});
					}
				);
				if (displayThumbs) {
					$thumbList.click(
							function(e) {
                                stopTimer();
								//currIndex = $(this).index();
								currIndex = $('li').index(this);
								//alert('ThumbFunction : '+currIndex);
                                loadContent(currIndex);
								return false;
							}
						).mouseover(
							function(e) {
								$(this).addClass("thumb-over");
							}
						).mouseout(
							function(e) {
								$(this).removeClass("thumb-over");
							}
						).mousemove(
							function(e) {
								var offset = $mainScreen.offset();
							}
					);
				}
				else {
					$thumbnails.css({display:"none"}).width(0);
				}
			}
			
			//move image back
			var imgBack = function() {
				stopTimer();
				currIndex = (currIndex > 0) ? currIndex - 1 : (numItems - 1);
				loadContent(currIndex);	
				return false;
			}
			
			//move image forward
			var imgFwd = function() {
				stopTimer();
				currIndex = (currIndex < numItems - 1) ? currIndex + 1 : 0;
				loadContent(currIndex);
				return false;
			}
			
			
			
			//load current content
			var loadContent = function(i) {
				//get selected thumb
				$currThumb = $thumbnails.find("li:nth-child(" + (i+1) + ")");
				$thumbList.removeClass("curr-thumb");				
				$currThumb.addClass("curr-thumb");
				
				//set transition
				currTran =  $currThumb.attr("tran") != undefined ? $currThumb.attr("tran") : globalTran;
				
				//set delay
				currDelay =	getPosNumParam($currThumb.attr("delay"), globalDelay);
				
				//set url
				var urlLink = $currThumb.find(">a:last").attr("href");
				var urlTarget = $currThumb.find(">a:last").attr("target");	
				if (urlLink != undefined && urlLink != "") {
                    $("#AdUrl").css({cursor:"pointer"}).attr({href: urlLink});
				}
				else {
					$mainScreen.find(">a:first").css({cursor:"default"}).attr({href: "##", target: "_self"});
				}
				
				
				//load image
				if (imgs[i]) {
					$preloader.hide();
					//display stored image	
					displayContent(imgs[i]);
				}	
				else {	
					//load new image
					var currImg = new Image();		
					$(currImg).attr("src", imgPaths[i]);
                    //alert(i+' : '+imgPaths[i]);
					if (!currImg.complete) {
						$preloader.show();
						$(currImg).load(
							function() {
								$preloader.hide();
								imgs[i] = jQuery.extend(true, {}, this);	
								displayContent(currImg);
                                //alert(currImg);
							}
						).error(
							function() {
								//alert("Error loading image: "+currImg);
							}
						);
					}
					else {
						$preloader.hide();
						imgs[i] = jQuery.extend(true, {}, currImg);
						displayContent(currImg);
					}
				}	    
			}
			
			//display image
			var displayContent = function(newImg) {
				//clear
				fadeInContent(newImg);
			}
			
			//display image (no transition)
			var showContent = function(newImg) {
				setImgPosition(newImg);
				$mainImg.attr("src", newImg.src).show(0, 
					function() {
						displayDesc();
						startTimer();
					}
				);	
			}
			
			//display image (fade transition)
			var fadeInContent = function(newImg) {
				$bgImg.css({top:$mainImg.css("top"), left:$mainImg.css("left"),
							"padding-top":$mainImg.css("padding-top"), 
							"padding-bottom":$mainImg.css("padding-bottom"),	
							"padding-left":$mainImg.css("padding-left"), 
							"padding-right":$mainImg.css("padding-right")})
							.attr("src", $mainImg.attr("src")).show();
				$mainImg.hide();	
				
				setImgPosition(newImg);
				$mainImg.attr("src", newImg.src).fadeIn(tranSpeed, 
					function() {	
						$bgImg.hide();
						//displayDesc();
						startTimer();
					}
				);	
			}
			
			//init image loading
			var initImgLoad = function() {
				
				imgs = new Array(numItems);
				imgPaths = new Array(numItems);
				
				//init image paths
				$thumbList.each(
					function(n){

						imgPaths[n] = $(this).find(">a:first").attr("href");
						
					}
				);
				
				//start image loading		
				var loadIndex = 0;
				var img = new Image();
				$(img).attr("src", imgPaths[loadIndex]);
				
                //load image complete/error event handler
				$(img).load(
					function() {

						imgs[loadIndex] = jQuery.extend(true, {}, this);	//-sdj this was causing an error in browsers and does not appear to be necessary
						
						loadIndex++

						if (loadIndex < imgPaths.length) {

							$(this).attr("src", imgPaths[loadIndex]);            
						}
					}).error(function() {
						//error loading image, continue next
						loadIndex++
						if (loadIndex < imgPaths.length) {
							$(this).attr("src", imgPaths[loadIndex]);
						}
					}
				);
			}
			
			//adjust image padding
			var setImgPosition = function(newImg) {
				var tMargin = (screenHeight - newImg.height)/2;
				var lMargin = (screenWidth  - newImg.width)/2
				var top = -29;  //Set the height of the image based on the over all height of your stage here.
				var left = 0;
				var vertPadding = 0;
				var horzPadding = 0;
				
				if (tMargin > 0) {
					vertPadding = tMargin;
				}
				else if (tMargin < 0) {
					top = tMargin;
				}
				
				if (lMargin > 0) {
					horzPadding = lMargin;
				}
				else if (lMargin < 0) {
					left = lMargin;
				}
				
				$mainImg.css({top:top, left:left, 
							  "padding-top":vertPadding, "padding-bottom":vertPadding,
							  "padding-left":horzPadding, "padding-right":horzPadding});	
			}
			
			//start timer
			var startTimer = function() {

				if (rotate && timerId == null) {
					timerId = setTimeout(imgFwd, currDelay);
				}
			}
			
			//stop timer
			var stopTimer = function() {
				clearTimeout(timerId);
				timerId = null;
			}
			
			var getPosNumParam = function(val, defaultVal) {
				if (val != undefined && !isNaN(val)) {
					val = Number(val);
					if (val > 0) {
						return val;
					}
				}
				
				return Number(defaultVal);
			}
			
			var convertDescSize = function(sizeVal, defaultVal) {
				if (sizeVal && sizeVal != undefined) {
				if (sizeVal != "auto") {
						var i = sizeVal.lastIndexOf("px");
						if (i != -1) {
							sizeVal = sizeVal.slice(0, i);	
							if (sizeVal == undefined || isNaN(sizeVal) || sizeVal <= 0) {
								return defaultVal;
							}
							return Number(sizeVal);
						}
					}
				}
				return defaultVal;
			}
			
		}
		
		var defaults = { 
			width:800,
			height:300,
			button_width:24,
			button_height:24,
			button_margin:4,			
			auto_start:true,
			delay:DEFAULT_DELAY,
			transition:"fade",
			transition_speed:800,			
			block_size:100,
			vert_size:50,
			horz_size:50,
			cpanel_align:"BR",
			cpanel_margin:6,
			display_thumbs:true,
			display_dbuttons:true,
			display_playbutton:true,
			display_tooltip:true,	
			display_numbers:true,
			cpanel_mouseover:false,
			text_mouseover:false
		};
		
		var opts = $.extend({}, defaults, params);		

		return this.each(
			function() {
            	rotator = new Rotator($(this));
				rotator.init();
			}
		);
	}
})(jQuery);
