/*
*	Lorel Slideshow Plugin - Reloaded
*	(c) 2011, Lorel Marketing Group
*	Author: Matt Thomas
*/
(function($) {
		  
	$.fn.lorelSlider = function(xmlpath, settings) {
		
		var xmlObj = {};
		var slideTimer; // global timer that controls duration between slides when auto sliding
		var $this = $(this); // the container this plugin is attached to
		var settings = jQuery.extend({
			enableKeyNav: true, // enable keyboard navigation?
			preloader: "preloader", // preloader class name
			containerWidth: $this.width(), // width of slideshow container [int]
			containerHeight: $this.height() - 88, // height of slideshow container [int]. The minus 60 acounts for the navigation
			slideDuration: 5, // default duration for auto sliding
			currSlide: -1,
			autoSlide: true, // boolean, if false, won't automatically slide
			aNav: [], // don't change this
			mobileSite: false //change urls for mobile
		}, settings);
		
		function _addPreloader(container) {
			container.addClass("lorelSlidePreloader");
		}
		
		function _removePreloader(container){
			container.removeClass("lorelSlidePreloader");
		}
		
		function _init(container) {
			_addPreloader(container);
			_parseXML(xmlpath);
		}
		
		function _parseXML(xmlpath) {
			var xmlData;
			$.ajax({
				type: "GET",
				url: xmlpath,
				success: function(xml) {
					_xmlToObj(xml);
				},
				error: function(error) {
					alert("Failed to find path to XML! Error: " + error);
				}
			});
		}
		
		/**
		* converts the retrieved xml data into an object (associative) that we can work with
		*/
		function _xmlToObj(xmldata) {
			var i = -1;
			
			$(xmldata).find("banner").each(function() {
				
				i++;
						
				xmlObj[i] = {
					bannerpath: $(this).find("bannerpath").text(),
					banneralttext: $(this).find("banneralttext").text(),
					thumbpath: $(this).find("thumbpath").text(),
					url: $(this).find("url").text(),
					duration: $(this).find("duration").text(),
					slideNum: i
				}
				
				xmlObj.length = i+1;
			});
			
			//alert(xmlObj.length);
			
			try {
				console.log('Total slides: ' + xmlObj.length);
			} catch(err) {
				
			}
				
			
			
			
			_setupInterface(xmlObj);
		}
		
		function _setupInterface(obj) {
			// Create the slides width images
			
			var numSlides = parseInt(obj.length);
			
			var slideContainer = $("<div></div>").attr("id", "lorelSlideContainer").css({
				width: numSlides*settings.containerWidth + "px",
				height: settings.containerHeight + "px"
			});
			var slideNav = $("<ul></ul>").attr("id", "lorelSlideNav");
			var slideNavContainer = $("<div></div>").attr("id", "lorelSlideNavContainer");
			var slideIndicator = $("<div></div>").attr("id", "lorelSlideIndicator");
			
			for(var i=0; i < obj.length; i++) {
				if(settings.mobileSite == true){
					var tempurl = obj[i].url;
					tempurl = tempurl.substr(1);
					obj[i].url = "mobile-"+tempurl
				}
				
				var slide = $("<div></div>").addClass("slide");
				var slideLink = $("<a></a>").attr({
					href: obj[i].url
				}).addClass('slideLink');
				var slideImage = $("<img />").attr({
					src: obj[i].bannerpath,
					width: settings.containerWidth,
					height: settings.containerHeight,
					alt: obj[i].banneralttext
				});
				
				slideImage.appendTo(slideLink);
				slideLink.appendTo(slide);
				slide.appendTo(slideContainer);
				
				
				// Now create the nav
				var slideNavItem = $("<li></li>");
				var slideNavImg = $("<img />").attr({
					src: "/site/grayscale_converter.php?img=http://70.32.86.239/" + obj[i].thumbpath,
					alt: obj[i].banneralttext
				});
				
				var currClass;
				
				i == 0 ? currClass = "currSlide" : currClass = "";
				
				var slideNavLink = $("<a></a>").attr({
					href: 'javascript:void(0)',
					rel: i
				}).addClass(currClass).click(function(){
				
					if(slideContainer.is(':animated') || $(this).hasClass("currSlide")){ // prevent call if the slide is animating
						return false;
					}
					else {
						clearTimeout(slideTimer);
						var which = parseInt($(this).attr("rel"));
						var n = which * settings.containerWidth;
						_slide(n, which);
						return false;
					}
				});
				
				settings.aNav.push(slideNavLink);
				
				slideNavImg.appendTo(slideNavLink);
				slideNavLink.appendTo(slideNavItem);
				slideNavItem.appendTo(slideNav);
			}
			
			// Append the navigation
			
			slideIndicator.appendTo(slideNavContainer);
			slideNav.appendTo(slideNavContainer);
			slideNavContainer.appendTo($this);
			slideContainer.appendTo($this);
			
			$this.removeClass("preloader");
			
			var n = parseInt(settings.containerWidth) * parseInt(settings.currSlide);
			
			settings.autoSlide ? _autoSlide() : _initSlide();
			
			//_enableKeyboardNav();
		}
		
		function _changeSlideText(txt) {
			$(".slideTextLink").text(txt);
		}
		function _initSlide() {
			//alert('hello');
			settings.currSlide++;
			settings.currSlide == xmlObj.length ? settings.currSlide = 0 : settings.currSlide = settings.currSlide;
			$("#slideTextLink").text(xmlObj[settings.currSlide].text);
			$("#slideTextLink").attr("href", xmlObj[settings.currSlide].url);
			$("#slideText").fadeIn("normal");
		}
		
		function _autoSlide() {
			settings.currSlide++;
			settings.currSlide == xmlObj.length ? settings.currSlide = 0 : settings.currSlide = settings.currSlide;
			
			var pos = parseInt(settings.currSlide)*parseInt(settings.containerWidth);
			
			var duration = parseInt(xmlObj[settings.currSlide].duration)*1000;
			
			clearTimeout(slideTimer);
			slideTimer = setTimeout(function(){ _autoSlide(); }, duration);
			_slide(pos, settings.currSlide);
			
		}
		
		function _updateCurrSlide(n) {
			settings.currSlide = n;
			
		}
		
		function _enableKeyboardNav() {
			if(settings.enableKeyNav == true) {
				$(document).keydown(function(objEvt){
					_keyboardNav(objEvt);
				});
			} else {
				return; // do nothing
			}
			
		}
		
		function _keyboardNav(objEvent) {

			if(objEvent == null) {
				keycode = event.keyCode;
				escapeKey = 27;
			} else {
				keycode = objEvent.keyCode;
				escapeKey = objEvent.DOM_VK_ESCAPE;
			}
			key = String.fromCharCode(keycode).toLowerCase();
			if($("#lorelSlideContainer").is(':animated')) {
				return false;
			} else {
				
				if ( ( key == 'p' ) || ( keycode == 37 ) ) {
					clearTimeout(slideTimer);
					settings.currSlide--;
					settings.currSlide < 0 ? settings.currSlide = xmlObj.length-1 : settings.currSlide = settings.currSlide;
					var which = parseInt(settings.currSlide);
					var n = which * settings.containerWidth;
					_slide(n, which);
				}
				
				if ( ( key == 'n' ) || ( keycode == 39 ) ) {
					clearTimeout(slideTimer);
					settings.currSlide++;
					settings.currSlide == xmlObj.length ? settings.currSlide = 0 : settings.currSlide = settings.currSlide;
					var which = parseInt(settings.currSlide);
					var n = which * settings.containerWidth;
					_slide(n, which);
				}
				
			}
			
		}
		
		function _disableKeyboardNav() {
			$(document).unbind();
		}
		
		function _slide(position, slideNum) {
			
			var navBtn = $(settings.aNav[slideNum]);
			$("#slideText").css("display", "none")
			$("#lorelSlideContainer").animate({
				right: position + "px"
			}, $.browser.safari && $.browser.version <= 526 ? 0 : 1000, 'easeOutExpo');
			
			$("#slideTextLink").text(xmlObj[slideNum].text);
			$("#slideTextLink").attr("href", xmlObj[slideNum].url);
			$("#slideText").fadeIn("normal");
			
			_updateCurrSlide(slideNum);
			_slideIndicator(slideNum);
			
			$("#lorelSlideNav li a").each(function(){
				$(this).removeClass("currSlide");
			});
			navBtn.addClass("currSlide");
		}
		
		function _slideIndicator(slideNum) {
			//console.log(slideNum);
			$slideWidth = $("#lorelSlideIndicator").width();
			$("#lorelSlideIndicator").animate({
				left: (slideNum*$slideWidth) + (slideNum*10) + "px"
			}, $.browser.safari && $.browser.version <= 526 ? 0 : 1000, 'easeOutExpo');
			
		}
		
		return this.each(function() {
			_init($(this));
		});
	}
	
})(jQuery);

