var jQuerySlideshow_init = {
	"disableOnMobile": true,
	"pauseTime": "7000",
	"align":"left",
	"auto":true,
	"hideOnMouseOut":true,
	"vertical":false,
	"ease":"linear",
	"continuous":true,
	"loop":true,
	"sliderEffect":"slide",
	"speed":"1000",
	"fadeDuration":"1000",
	"pause":"1000",
	"stopAtInteraction":"false",
	"resumeDuration":"3000",
	"innernavbaritem.spacing":"0px",
	"innernumbers.spacing":"0px",

	"tooltip.show" : false,
	"tooltip.offsX" : "0px",
	"tooltip.offsY" : "0px",
   	 "tooltip.width": "50px",
  	  "tooltip.height": "50px",
	"tooltip.speed": "1000",
	"tooltip.easing": "linear",
	"tooltip.side": "right",
	"tooltip.reverseSide": false,

	"innerbutton.back.opacity":1,
	"innerbutton.back.hideOnMouseOut":false,
	"innerbutton.back.mouseOutEffect":"fadeIn",
	"innerbutton.back.mouseOutEffectDuration":"1000",
	"innerbutton.back.mouseOutEffectEasing":"linear",


	"innerbutton.back.halign":"left",
	"innerbutton.back.valign":"middle",
	"innerbutton.back.left":"10px",
	"innerbutton.back.top":"0px",

	"innerbutton.next.opacity":1,
	"innerbutton.next.hideOnMouseOut":false,
	"innerbutton.next.mouseOutEffect":"fadeIn",
	"innerbutton.next.mouseOutEffectDuration":"1000",
	"innerbutton.next.mouseOutEffectEasing":"linear",


	"innerbutton.next.halign":"left",
	"innerbutton.next.valign":"top",
	"innerbutton.next.left":"0px",
	"innerbutton.next.top":"0px",

	"innerplaypause.opacity":1,
	"innerplaypause.hideOnMouseOut":false,
	"innerplaypause.mouseOutEffect":"fadeIn",
	"innerplaypause.mouseOutEffectDuration":"1000",
	"innerplaypause.mouseOutEffectEasing":"linear",
	 
	"innerplaypause.halign":"left",
	"innerplaypause.valign":"top",
	"innerplaypause.left":"0px",
	"innerplaypause.top":"0px",


	"innernavbar.hideOnMouseOut":false,
	"innernavbar.mouseOutEffect":"fadeIn",
	"innernavbar.mouseOutEffectDuration":"1000",
	"innernavbar.mouseOutEffectEasing":"linear",

	"innernavbar.halign":"left",
	"innernavbar.valign":"top",
	"innernavbar.left":"0px",
	"innernavbar.top":"0px",
	"innernavbaritem.orientation":"horizontal",
	"innernavbar.orientation":"horizontal",
	"innernavbar.scrollerOrientation" : "horizontal",
	"innernavbar.scrollerType": "noScroll",
	"innernavbar.opacity": "1",
	 
	"innernavbaritem.contentType": "image & text to right",
	
	"innerbullets.valign":"middle",
	"innerbullets.halign":"left",
	"innerbullets.left":"40px",
	"innerbullets.hideOnMouseOut":false,
	"innerbullets.mouseOutEffect":"fadeIn",
	"innerbullets.mouseOutEffectEasing":"linear",
	"innerbullets.mouseOutEffectDuration":"1000",
	"innerbulletsitem.orientation":"horizontal",
	"innerbullets.orientation":"horizontal",
	"innerbullets.opacity": "1",

	"innernumbers.valign":"middle",
	"innernumbers.halign":"left",
	"innernumbers.left":"40px",
	"innernumbers.hideOnMouseOut":false,
	"innernumbers.mouseOutEffect":"fadeIn",
	"innernumbers.mouseOutEffectEasing":"linear",
	"innernumbers.mouseOutEffectDuration":"1000",
	"innernumbersitem.orientation":"horizontal",
	"innernumbers.orientation":"horizontal",
	"innernumbers.scrollerOrientation" : "horizontal",
	"innernumbers.scrollerType": "noScroll",
	"innernumbers.opacity": "1",
	
	"innerthumbscroll.opacity": "1",
	"innerthumbscroll.scrollerOrientation" : "horizontal",
	"innerthumbscroll.scrollerType": "noScroll",
	"thumbscroll.scrollerOrientation" : "horizontal",
	"innerthumbscrollitem.orientation" : "horizontal",
	"thumbscrollitem.orientation" : "horizontal",

	"innerthumbscrollitemthumb.hover.mouseOverEffect": false,
	"innerthumbscrollitemthumb.hover.mouseOverEffectEasing": "linear",
	"innerthumbscrollitemthumb.hover.mouseOverEffectDuration": "2000",
	
	"innernavbaritemthumb.hover.mouseOverEffect": false,
	"innernavbaritemthumb.hover.mouseOverEffectEasing": "linear",
	"innernavbaritemthumb.hover.mouseOverEffectDuration": "2000",
	
	"innerthumbscrollitemthumb.opacity": "1",
	"innerthumbscrollitemthumb.hover.opacity": "1",
	"innerthumbscrollitemthumb.active.opacity": "1",


	"innercurrentslide.halign":"left",
	"innercurrentslide.valign":"top",
	"innercurrentslide.left":"0px",
	"innercurrentslide.top":"0px",

	"innerthumbscroll.halign":"left",
	"innerthumbscroll.valign":"top",
	"innerthumbscroll.left":"0px",
	"innerthumbscroll.top":"0px",
	"innerthumbscrollitemthumb.opacity": "1",
	"innerthumbscrollitemthumb.hover.opacity": "1",
	"innerthumbscrollitemthumb.active.opacity": "1",

	"innernavbaritemthumb.opacity": "1",
	"innernavbaritemthumb.hover.opacity": "1",
	"innernavbaritemthumb.active.opacity": "1",


	"currentslide.opacity" : "1",
	"innercurrentslide.opacity" : "1",

	"thumbscroll_next.opacity": "1",
	"thumbscroll_back.opacity": "1",

	"innerthumbscroll_next.opacity": "1",
	"innerthumbscroll_back.opacity": "1",


	"caption.opacity": "1",
	"innercaption.opacity": "1",
	"subcaption.opacity": "1",
	"innersubcaption.opacity": "1",

	"navbar_back.opacity": "1",
	"navbar_next.opacity": "1",

	"innernavbar_back.opacity": "1",
	"innernavbar_next.opacity": "1",

	"innernumbers_back.opacity": "1",
	"innernumbers_next.opacity": "1",

	"innernumbers_back.opacity": "1",
	"innernumbers_next.opacity": "1",

	"innernumbers_back.halign":"left",
	"innernumbers_back.valign":"top",
	"innernumbers_back.left":"0px",
	"innernumbers_back.top":"0px",

	"innernumbers_next.halign":"left",
	"innernumbers_next.valign":"top",
	"innernumbers_next.left":"0px",
	"innernumbers_next.top":"0px",


	"innerbullets_back.opacity": "1",
	"innerbullets_next.opacity": "1",



	"innercurrentslide.hideOnMouseOut":false,
	"innercurrentslide.slideEffectEasing":"linear",
	"innercurrentslide.mouseOutEffectEasing":"linear",
	"innercurrentslide.mouseOutEffectDuration":"1000",
	"innercurrentslide.mouseOutEffect" : "fadeIn",
	"innercurrentslide.slideEffect" : "fadeIn",

	"innercaption.hideOnMouseOut":false,
	"innercaption.slideEffectEasing":"linear",
	"innercaption.mouseOutEffectEasing":"linear",
	"innercaption.mouseOutEffectDuration":"1000",
	"innercaption.mouseOutEffectDelay":"0",
	"innercaption.mouseOutEffect" : "fadeIn",
	"innercaption.slideEffect" : "fadeIn",

	"innersubcaption.hideOnMouseOut":false,
	"innersubcaption.slideEffectEasing":"linear",
	"innersubcaption.mouseOutEffectEasing":"linear",
	"innersubcaption.mouseOutEffectDuration":"1000",
	"innersubcaption.mouseOutEffect" : "fadeIn",
	"innersubcaption.mouseOutEffectDelay":"0",
	"innersubcaption.slideEffect" : "fadeIn",
	"relPath" : ""
};

function trace(msg){
	if (this.console && typeof console.log != "undefined") {
		console.log(msg);
	}
}

/*
 * jQuery Nivo Slider v2.6
 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * March 2010
 */

(function($) {

  // For debugging
	var trace = function(msg){
		//if (this.console && typeof console.log != "undefined")
			//console.log(msg);
	}

	this.trace = trace;
	
	
	$.fn.nivoSlider = function(options) {
		//Defaults are below
		var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
		
		var baseSlider = this;
		var applyEffect;
		var hasLink; 
		var startSlider;
		
        return this.each(function (options){
			
			element = $(this);
			var timer = 0;
			
			var preloadingImg = $('<img/>').attr('src', settings.preloading).css({'display' : 'none', 'position' : 'absolute', 'z-indez' : '10000'}).load(function() {
				
				var left = ((slider.outerWidth() - $(this).width()) /2)  + (settings.preloaderLeft ? parseInt(settings.preloaderLeft) : 0);
				var top =  ((slider.outerHeight() -  $(this).height()) / 2) + (settings.preloaderTop ? parseInt(settings.preloaderTop) : 0);
		
				$(this).css({'top' : top, 'left' : left});
			});
			
			settings.manualAdvance = (settings.auto == true) ? false : true;
			
			//Useful variables. Play carefully.
			var vars = {
				currentSlide: 0,
				currentImage: '',
				totalSlides: 0,
				randAnim: '',
				running: false,
				paused: false,
				stop: false,
				preloaded : [],
				loading : [],
				preloadingImg : preloadingImg
			};
			
			//Get this slider
			var slider = $(this);
			slider.data('nivo:vars', vars);
			//slider.css('position','relative');
			slider.addClass('nivoSlider');
	
			slider.parent().append(preloadingImg);
			
			
			var _this = this;
			
			var oneError = false;
			
			function pause() {
				vars.paused = true;
				clearInterval(timer);
				timer = '';
			}
			
			function play() {
				vars.paused = false;
				//Restart the timer
				if(timer == '' && !settings.manualAdvance){
					timer = setInterval(function(){ nivoRun(slider, null, settings, false); }, settings.pauseTime);
				}
			}
			

			//alert("anim speed " + settings.animSpeed);
			
			// preloads one image and a number of others if asked and needed//
			function preloadImage(slider, settings, index, call) {
				var vars = slider.data('nivo:vars');
				
				// pause the slideshow until finish loading//
				pause();
				
				// display preloading image until finish loading//
				vars.preloadingImg.show();
				
				//alert(settings.source.length + "##" + index);
				
				var src = settings.source[index].src;
				var img;
			
				if (!vars.preloaded[index] && !vars.loading[index]) {
					/*img = $('<img/>').attr({src: src + "?" + (new Date()).getTime()});
					//trace('in img create');*/
					img = $('<img/>');
					vars.loading[index] = img;
				} else {
					img	= vars.loading[index];
				}
				
				//alert('settings.source[index].title=' + settings.source[index].title + "##" + img);
				
				img.attr('title', settings.source[index].title);
				img.data('name', settings.source[index].description);
				
				img.bind('load', function() {
					trace('first preload## image = ' + src + "##index = " + index);
					
					//alert('this##' + this);
					vars.preloaded[index] = this;
					vars.loading[index] = false;
					
					$(this).css('display','none');
					
					// hide preloading image//
					vars.preloadingImg.hide();
					
					// resume slideshow play//
					play();
				
					// callback//
					if (call) call();
				}).error( function(e) { 
					
					if (!oneError) {
						oneError = true;
						alert('Image was not found. Please upload the includes folder to the server. (includes folder is located in the site root)');
					}
					
				}).attr({src: src})

				function addClick(img, link, target) {
					//alert('addClick##' + img + "##" + link + "##" + target);
					if(link && link != "#") { 
						addClickBehavior();
					}
				}
				//alert(settings.source[index].link);
				// add on click behaviour//
			
				if (settings.source[index].link) {
					addClick(img, settings.source[index].link, settings.source[index].target)
				}
				
				//img.unbind('load');
				
				
				var additionalImgs = $("");
				
				function preloadOneImage(src, index) {
					if (!vars.preloaded[index] && !vars.loading[index]) {
						trace(src)
						
						var adImg = $('<img/>').attr('src', src).bind('load', function() {
							vars.preloaded[index] = this;
							vars.loading[index] = false;
							$(this).css('display','none');
						});
						
						vars.loading[index] = adImg;
						adImg.css('display','none');
						
						return adImg;
					}
					
					return null;
				}
				
				// preload additional images after the current one if asked and needed//
				var toPreload = settings.preload || 0;
				for( var p = 1; p <= toPreload; p++) {
					var imgIndex = index + p;
	
					trace("toPreload " + imgIndex + "##" + vars.totalSlides);
					
					if (imgIndex >= vars.totalSlides) {
						imgIndex = imgIndex - vars.totalSlides;
					}
					
					var adImg = preloadOneImage(settings.source[imgIndex].src, imgIndex).attr('title', settings.source[imgIndex].title);
					// add on click behaviour//
					if (settings.source[imgIndex].link) {
						addClick(adImg, settings.source[imgIndex].link, settings.source[imgIndex].target)
					}
					additionalImgs.add(adImg)
				}
				
				if (!vars.preloaded[index] && !vars.loading[index]) {
					img.add(additionalImgs);
					return img;
				}
				
				return $("");
			}
			
			
			
	
			//alert($(this).attr('id'));
			
			/* 
				caption processing code
			*/
			var captionHolder = $(this).parent();
			var caption = $('#' +  captionHolder.attr('id') + '_caption_in');
			var subcaption = $('#' + captionHolder.attr('id') + '_subcaption_in');
			
			var captionEffect, captionEffectEase, subcaptionEffect, subcaptionEffectEase; 
			
			
			
			/* 
				subcaption processing code 
			*/
						
			var processElement = function(elementName, element, captionEffect, captionEffectBase, settings, firstRun){
				var caption = element;
				
				if(caption.length == 0) { 
					return;
				}

				var animDelay = settings["inner" + elementName + ".mouseOutEffectDelay"] ? parseFloat(settings["inner" + elementName + ".mouseOutEffectDelay"]) : 0;
				var animSpeedIn = parseFloat(settings["inner" + elementName + ".mouseOutEffectDuration"]) / 2;
				var animSpeedOut = parseFloat(settings["inner" + elementName + ".mouseOutEffectDuration"]) / 2;		

				if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
					var title = elementName == "caption" ? vars.currentImage.attr('title') : vars.currentImage.data('name');
					if(title.substr(0,1) == '#') title = $(title).html();	
					
					if(caption.css('display') == 'block' && settings["inner" + elementName + ".useSlideEffect"] == true && !firstRun  && animSpeedOut > 0){
						try {
							//caption.children().css('opacity', "");
							
							var both = !$.isEmptyObject(captionEffect['out']) && !$.isEmptyObject(captionEffect['out-opacity']);
							if (!$.isEmptyObject(captionEffect['out'])) {
								caption.stop(true, true).delay(animDelay).animate(captionEffect['out'], animSpeedOut, captionEffectEase, function() { 
									caption.children().filter('.text').html(title);
									if (!$.isEmptyObject(captionEffect['in'])) {
										caption.animate(captionEffect['in'],animSpeedIn,captionEffectEase);
									}
								});
							}
						
							if (!$.isEmptyObject(captionEffect['out-opacity'])) {
								caption.children().not('.text').stop(true, true).delay(animDelay).animate(captionEffect['out-opacity'], animSpeedOut, captionEffectEase, function() { 
									if (!both) caption.children().filter('.text').html(title);
									caption.children().not('.text').animate(captionEffect['in-opacity'],animSpeedIn,captionEffectEase);
								});
							
								caption.children().filter('.text').stop(true).delay(animDelay).animate(captionEffect['out-opacity'], animSpeedOut, captionEffectEase, function() {
									caption.children().filter('.text').animate({opacity : 1},animSpeedIn,captionEffectEase);
								});
							}
						} catch (e) {
						
						}
					} else {
						caption.children().first().html(title);
					}	
					
					//caption.append(captionBackground);		
					caption.css('display','block');
					
					if(settings["inner" + elementName + ".useSlideEffect"] == true && animSpeedIn > 0) {
						
						if (!$.isEmptyObject(captionEffect['in'])) {
							caption.animate(captionEffect['in'],  animSpeedIn, captionEffectEase);
						}
						
						if (!$.isEmptyObject(captionEffect['in-opacity'])) {
							caption.children().not('.text').animate(captionEffect['in-opacity'],  animSpeedIn, captionEffectEase);
						}
						
						caption.children().filter('.text').animate({opacity : 1}, animSpeedIn, captionEffectEase);
					}
				} 
				
			}
			
			var processSubCaption = function(settings, firstRun) { 
				processElement("caption", caption, captionEffect, captionEffectEase, settings, firstRun);
			}
			
			// Process caption function
			var processCaption = function(settings, firstRun){
				processElement("subcaption", subcaption, subcaptionEffect, subcaptionEffectEase, settings, firstRun);
			}
		
			function init() {
				
				//Set startSlide
				if(settings.startSlide > 0){
					if(settings.startSlide >= vars.totalSlides) settings.startSlide = vars.totalSlides - 1;
					vars.currentSlide = settings.startSlide;
				}
				
				vars.currentImage = $(vars.preloaded[vars.currentSlide]);
				
				//Set first background//
				slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
			
				/* creates the effect objects for caption and subcaption */
				if(caption.length > 0 && settings["innercaption.useSlideEffect"]) { 
					//alert(baseSlider.applyEffect);
					captionEffect = baseSlider.applyEffect(caption,settings["innercaption.slideEffect"],settings["innercaption.opacity"]);
					captionEffectEase = settings["innercaption.slideEffectEasing"];
				}
				
				if(subcaption.length > 0 && settings["innersubcaption.useSlideEffect"]) { 
					subcaptionEffect = baseSlider.applyEffect(subcaption,settings["innersubcaption.slideEffect"],settings["innersubcaption.opacity"]);
					subcaptionEffectEase = settings["innersubcaption.slideEffectEasing"];
				}
				
				//alert('vars.currentImage####' + JSON.stringify(vars.currentImage));
				
				 //Process initial  caption
				processCaption(settings,true);
				processSubCaption(settings,true);
				
				if(timer == '' && !settings.manualAdvance){
					timer = setInterval(function(){ nivoRun(slider, null, settings, false); }, settings.pauseTime);
				}
				
				 //Trigger the afterLoad callback
				 settings.afterLoad.call(this);
			}
			
			if (settings.source) {
	
				vars.totalSlides = settings.source.length;
				
				var startSlide =  settings.startSlide;
				if(startSlide >= vars.totalSlides) startSlide = vars.totalSlides - 1;
				
				//trace('first preload## preload = ' + startSlide);
				//trace('first preload## preload = ' + settings.source[startSlide].src);
			}  else {
				//Find our slider children
				var kids = slider.children();
				kids.each(function() {
					var child = $(this);
					var link = '';
					if(!child.is('img')){
						if(child.is('a')){
							child.addClass('nivo-imageLink');
							link = child;
						}
						child = child.find('img:first');
					}
					
					if(link != ''){
						link.css('display','none');
					}
					
					child.css('display','none');
					vars.totalSlides++;
				});
			}
			
			baseSlider.startSlider = function() {
					var imgs = preloadImage(slider, settings, startSlide, function() {
						init();
					});
					
					slider.append(imgs);
			}
			
			/*
			//Add Direction nav
			if(settings.directionNav){
				slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
				
				//Hide Direction nav
				if(settings.directionNavHide){
					$('.nivo-directionNav', slider).hide();
					slider.hover(function(){
						$('.nivo-directionNav', slider).show();
					}, function(){
						$('.nivo-directionNav', slider).hide();
					});
				}
				
				$('a.nivo-prevNav', slider).live('click', function(){
					if(vars.running) return false;
					clearInterval(timer);
					timer = '';
					vars.currentSlide -= 2;
					nivoRun(slider, kids, settings, 'prev');
				});
				
				$('a.nivo-nextNav', slider).live('click', function(){
					if(vars.running) return false;
					clearInterval(timer);
					timer = '';
					nivoRun(slider, kids, settings, 'next');
				});
			}
			
			//Add Control nav
			if(settings.controlNav){
				var nivoControl = $('<div class="nivo-controlNav"></div>');
				slider.append(nivoControl);
				for(var i = 0; i < kids.length; i++){
					if(settings.controlNavThumbs){
						var child = kids.eq(i);
						if(!child.is('img')){
							child = child.find('img:first');
						}
						if (settings.controlNavThumbsFromRel) {
							nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('rel') + '" alt="" /></a>');
						} else {
							nivoControl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('src').replace(settings.controlNavThumbsSearch, settings.controlNavThumbsReplace) +'" alt="" /></a>');
						}
					} else {
						nivoControl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
					}
					
				}
				//Set initial active link
				$('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
				
				$('.nivo-controlNav a', slider).live('click', function(){
					if(vars.running) return false;
					if($(this).hasClass('active')) return false;
					clearInterval(timer);
					timer = '';
					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
					vars.currentSlide = $(this).attr('rel') - 1;
					nivoRun(slider, kids, settings, 'control');
				});
			}
			*/
			
			//Keyboard Navigation
			if(settings.keyboardNav){
				$(window).keypress(function(event){
					//Left
					if(event.keyCode == '37'){
						if(vars.running) return false;
						clearInterval(timer);
						timer = '';
						vars.currentSlide-=2;
						nivoRun(slider, kids, settings, 'prev');
					}
					//Right
					if(event.keyCode == '39'){
						if(vars.running) return false;
						clearInterval(timer);
						timer = '';
						nivoRun(slider, kids, settings, 'next');
					}
				});
			}
			
			
			//For pauseOnHover setting
			if(settings.pauseOnHover){
				slider.add(slider.parent()).hover(function(){
					pause();
				}, function(){
					var isPlay;
					var instanceName = slider.parent().attr("id")

					if ($.browser.msie){
						isPlay = $("#" + instanceName + "_playpause_in").children().filter(".play_state").css("display") == "block";
					} else {
					
						isPlay = $("#" + instanceName + "_playpause_in").children().filter(".play").css("display") == "block";

					}

					if (!isPlay) {
						play();
					}
					
				});
				
			}
			
			//Event when Animation finishes
			slider.bind('nivo:animFinished', function(){ 
				vars.running = false; 
				//Restart the timer
				if(timer == '' && !vars.paused && !settings.manualAdvance){
					timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
				}
				//Trigger the afterChange callback
				settings.afterChange.call(this);
			});
			
			// Add slices for slice animations
			var createSlices = function(slider, settings, vars){
				for(var i = 0; i < settings.slices; i++){
					var sliceWidth = Math.round(slider.width()/settings.slices);
					if(i == settings.slices-1){
						slider.append(
							$('<div class="JQuerySlideshowSlice"></div>').css({ 
								left:(sliceWidth*i)+'px', width:(slider.width()-(sliceWidth*i))+'px',
								height:'0px', 
								opacity:'0', 
								background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
							})
						);
					} else {
						slider.append(
							$('<div class="JQuerySlideshowSlice"></div>').css({ 
								left:(sliceWidth*i)+'px', width:sliceWidth+'px',
								height:'0px', 
								opacity:'0', 
								background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
							})
						);
					}
				}
			}
			
			// Add boxes for box animations
			var createBoxes = function(slider, settings, vars){
				var boxWidth = Math.round(slider.width()/settings.boxCols);
				var boxHeight = Math.round(slider.height()/settings.boxRows);
				
				for(var rows = 0; rows < settings.boxRows; rows++){
					for(var cols = 0; cols < settings.boxCols; cols++){
						if(cols == settings.boxCols-1){
							slider.append(
								$('<div class="JQuerySlideshowBox"></div>').css({ 
									opacity:0,
									left:(boxWidth*cols)+'px', 
									top:(boxHeight*rows)+'px',
									width:(slider.width()-(boxWidth*cols))+'px',
									height:boxHeight+'px',
									background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
								})
							);
						} else {
							slider.append(
								$('<div class="JQuerySlideshowBox"></div>').css({ 
									opacity:0,
									left:(boxWidth*cols)+'px', 
									top:(boxHeight*rows)+'px',
									width:boxWidth+'px',
									height:boxHeight+'px',
									background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((boxWidth + (cols * boxWidth)) - boxWidth) +'px -'+ ((boxHeight + (rows * boxHeight)) - boxHeight) +'px'
								})
							);
						}
					}
				}
			}
			
			function addClickBehavior() { 
				if(hasLink != true) { 
					slider.click(function (e) {
						var link = settings.source[vars.currentSlide].link;
						var target = (settings.source[vars.currentSlide].target) ? settings.source[vars.currentSlide].target : "_blank";
						if(link) { 
							window.open(link, target);
						}
					});
					slider.css('cursor','pointer');
					hasLink = true;
				} 
			}
			
			function preloaded(index) {
			
				var vars = slider.data('nivo:vars');
				if (vars.preloaded[index]) {
					return true;
				}
				return false;
			}
				
		   
		   var nivoRun = function(slider, kids, settings, nudge){
				
				trace("nivoRun");
				
	
				//Get our vars
				var vars = slider.data('nivo:vars');
				
				var nextSlide = vars.currentSlide + 1;
				
				if (nextSlide >= vars.totalSlides) nextSlide = 0;
				if (nextSlide < 0) nextSlide = (vars.totalSlides - 1);
				
				//alert(vars.currentSlide + "##" + nextSlide + "##" + vars.preloaded[nextSlide] + "##" + vars.currentImage.src);
				
				trace("nivoRun##next slide = " + nextSlide + "##" + vars.preloaded[nextSlide]);
				
				if (!preloaded(nextSlide)) {
					
					//trace("nivoRun##next slide preloading" + nextSlide);
					//trace("nivoRun##next slide src = " + settings.source[nextSlide].src);
					
					// preload next image//
					var img = preloadImage(slider, settings, nextSlide, function() {
						// rerun this function with same parameters//
						nivoRun(slider, kids, settings, nudge);	
					});
					
					// add the image to the slideshow container//
					slider.append(img);
					//kids.add(img);
					
					trace("nivoRun##return false");
					
					// return, we'll be back on image load//
					return false;
				}
							
				
				//Trigger the lastSlide callback
				if(vars && (vars.currentSlide == vars.totalSlides - 1)){ 
					settings.lastSlide.call(this);
				}
				
				// Stop
				if((!vars || vars.stop) && !nudge) return false;
				
				
						
				//Set current background before change
				if(!nudge){
					trace('##set background image##src=' + /*settings.source[vars.currentSlide].src +*/ "##vars.currentSlide=" + vars.currentSlide);
					//alert(vars.currentSlide + "##" + settings.source[vars.currentSlide].src)
					slider.css('background','url("' + settings.source[vars.currentSlide].src + '") no-repeat');
				} else {
					
					trace(nudge + '##nudge##set background image##src=' /*+ settings.source[vars.currentSlide].src */+ "##vars.currentSlide=" + vars.currentSlide);
					if(nudge == 'prev'){
						slider.css('background','url("' + settings.source[vars.currentSlide].src  + '") no-repeat');
					}
					if(nudge == 'next'){
						slider.css('background','url("' + settings.source[vars.currentSlide].src  + '") no-repeat');
					}
				}
				
				vars.currentSlide++;
				//alert(settings.loop);
				//Trigger the slideshowEnd callback
				if(vars.currentSlide == vars.totalSlides && settings.loop){ 
					vars.currentSlide = 0;
					settings.slideshowEnd.call(this);
				}
				
				
				if(vars.currentSlide < 0) vars.currentSlide = (vars.totalSlides - 1);
			
			
				//Set vars.currentImage
				if($(vars.preloaded[vars.currentSlide]).is('img')){
					vars.currentImage = $(vars.preloaded[vars.currentSlide]);
				} else {
					vars.currentImage = $(vars.preloaded[vars.currentSlide]).find('img:first');
				}
				
				//alert(vars.totalSlides + "##" + vars.currentSlide + "vars.currentImage##" + vars.currentImage);
				/*
					//Set active links
					if(settings.controlNav){
						$('.nivo-controlNav a', slider).removeClass('active');
						$('.nivo-controlNav a:eq('+ vars.currentSlide +')', slider).addClass('active');
					}
				*/
				
				//Process caption
				processCaption(settings, false);
				processSubCaption(settings, false);
				
				// Remove any slices from last transition
				$('.JQuerySlideshowSlice', slider).remove();
				
				// Remove any boxes from last transition
				$('.JQuerySlideshowBox', slider).remove();
				
				if(settings.effect == 'random'){
					var anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
					'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
					vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];
					if(vars.randAnim == undefined) vars.randAnim = 'fade';
				}
				
				//Run random effect from specified set (eg: effect:'fold,fade')
				if(settings.effect.indexOf(',') != -1){
					var anims = settings.effect.split(',');
					vars.randAnim = anims[Math.floor(Math.random()*(anims.length))];
					if(vars.randAnim == undefined) vars.randAnim = 'fade';
				}
				
				//Trigger the beforeChange callback
				settings.beforeChange.call(this);
				
				slider.trigger('xtd:beforeEffect', [vars.currentSlide]);
				
				//alert(slider);
				
				//Run effects
				vars.running = true;
				
				if(settings.effect == 'sliceDown' || settings.effect == 'sliceDownRight' || vars.randAnim == 'sliceDownRight' ||
					settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft'){
					createSlices(slider, settings, vars);
					var timeBuff = 0;
					var i = 0;
					var slices = $('.JQuerySlideshowSlice', slider);
					if(settings.effect == 'sliceDownLeft' || vars.randAnim == 'sliceDownLeft') slices = $('.JQuerySlideshowSlice', slider)._reverse();
					
					slices.each(function(){
						var slice = $(this);
						slice.css({ 'top': '0px' });
						if(i == settings.slices-1){
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed), '', function(){ slider.trigger('nivo:animFinished'); });
							}, (100 + timeBuff));
						} else {
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed));
							}, (100 + timeBuff));
						}
						timeBuff += 50;
						i++;
					});
				} 
				else if(settings.effect == 'sliceUp' || settings.effect == 'sliceUpRight' || vars.randAnim == 'sliceUpRight' ||
						settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft'){
					createSlices(slider, settings, vars);
					var timeBuff = 0;
					var i = 0;
					var slices = $('.JQuerySlideshowSlice', slider);
					if(settings.effect == 'sliceUpLeft' || vars.randAnim == 'sliceUpLeft') slices = $('.JQuerySlideshowSlice', slider)._reverse();
					
					slices.each(function(){
						var slice = $(this);
						slice.css({ 'bottom': '0px' });
						if(i == settings.slices-1){
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed), '', function(){ slider.trigger('nivo:animFinished'); });
							}, (100 + timeBuff));
						} else {
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed));
							}, (100 + timeBuff));
						}
						timeBuff += 50;
						i++;
					});
				} 
				else if(settings.effect == 'sliceUpDown' || settings.effect == 'sliceUpDownRight' || vars.randAnim == 'sliceUpDown' || 
						settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft'){
					createSlices(slider, settings, vars);
					var timeBuff = 0;
					var i = 0;
					var v = 0;
					var slices = $('.JQuerySlideshowSlice', slider);
					if(settings.effect == 'sliceUpDownLeft' || vars.randAnim == 'sliceUpDownLeft') slices = $('.JQuerySlideshowSlice', slider)._reverse();
					
					slices.each(function(){
						var slice = $(this);
						if(i == 0){
							slice.css('top','0px');
							i++;
						} else {
							slice.css('bottom','0px');
							i = 0;
						}
						
						if(v == settings.slices-1){
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed), '', function(){ slider.trigger('nivo:animFinished'); });
							}, (100 + timeBuff));
						} else {
							setTimeout(function(){
								slice.animate({ height:'100%', opacity:'1.0' }, parseFloat(settings.animSpeed));
							}, (100 + timeBuff));
						}
						timeBuff += 50;
						v++;
					});
				} 
				else if(settings.effect == 'fold' || vars.randAnim == 'fold'){
					createSlices(slider, settings, vars);
					var timeBuff = 0;
					var i = 0;
					
					$('.JQuerySlideshowSlice', slider).each(function(){
						var slice = $(this);
						var origWidth = slice.width();
						slice.css({ top:'0px', height:'100%', width:'0px' });
						if(i == settings.slices-1){
							setTimeout(function(){
								slice.animate({ width:origWidth, opacity:'1.0' }, parseFloat(settings.animSpeed), '', function(){ slider.trigger('nivo:animFinished'); });
							}, (100 + timeBuff));
						} else {
							setTimeout(function(){
								slice.animate({ width:origWidth, opacity:'1.0' }, parseFloat(settings.animSpeed));
							}, (100 + timeBuff));
						}
						timeBuff += 50;
						i++;
					});
				}  
				else if(settings.effect == 'fade' || vars.randAnim == 'fade'){
					createSlices(slider, settings, vars);
					
					var firstSlice = $('.JQuerySlideshowSlice:first', slider);
					firstSlice.css({
						'height': slider.height() + 'px',
						'width': slider.width() + 'px'
					});
		
					firstSlice.animate({ opacity:'1.0' }, (parseFloat(settings.animSpeed)*2), '', function(){ slider.trigger('nivo:animFinished'); });
				}
				else if(settings.effect == 'none' || vars.randAnim == 'none'){
					  setTimeout(slider.trigger('nivo:animFinished'), (parseFloat(settings.animSpeed)*2));	
				}
				else if(settings.effect == 'slideInRight' || vars.randAnim == 'slideInRight'){
					createSlices(slider, settings, vars);
					
					var firstSlice = $('.JQuerySlideshowSlice:first', slider);
					firstSlice.css({
						'height': '100%',
						'width': '0px',
						'opacity': '1'
					});
		
					firstSlice.animate({ width: slider.width() + 'px' }, (parseFloat(settings.animSpeed)*2), '', function(){ slider.trigger('nivo:animFinished'); });
				}
				else if(settings.effect == 'slideInLeft' || vars.randAnim == 'slideInLeft'){
					createSlices(slider, settings, vars);
					
					var firstSlice = $('.JQuerySlideshowSlice:first', slider);
					firstSlice.css({
						'height': '100%',
						'width': '0px',
						'opacity': '1',
						'left': '',
						'right': '0px'
					});
		
					firstSlice.animate({ width: slider.width() + 'px' }, (parseFloat(settings.animSpeed)*2), '', function(){ 
						// Reset positioning
						firstSlice.css({
							'left': '0px',
							'right': ''
						});
						slider.trigger('nivo:animFinished'); 
					});
				}
				else if(settings.effect == 'boxRandom' || vars.randAnim == 'boxRandom'){
					createBoxes(slider, settings, vars);
					
					var totalBoxes = settings.boxCols * settings.boxRows;
					var i = 0;
					var timeBuff = 0;
					
					var boxes = shuffle($('.JQuerySlideshowBox', slider));
					boxes.each(function(){
						var box = $(this);
						if(i == totalBoxes-1){
							setTimeout(function(){
								box.animate({ opacity:'1' }, parseFloat(settings.animSpeed), '', function(){ slider.trigger('nivo:animFinished'); });
							}, (100 + timeBuff));
						} else {
							setTimeout(function(){
								box.animate({ opacity:'1' }, parseFloat(settings.animSpeed));
							}, (100 + timeBuff));
						}
						timeBuff += 20;
						i++;
					});
				}
				else if(settings.effect == 'boxRain' || vars.randAnim == 'boxRain' || settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' || 
						settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' || settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
					createBoxes(slider, settings, vars);
					
					var totalBoxes = settings.boxCols * settings.boxRows;
					var i = 0;
					var timeBuff = 0;
					
					// Split boxes into 2D array
					var rowIndex = 0;
					var colIndex = 0;
					var box2Darr = new Array();
					box2Darr[rowIndex] = new Array();
					var boxes = $('.JQuerySlideshowBox', slider);
					if(settings.effect == 'boxRainReverse' || vars.randAnim == 'boxRainReverse' ||
					   settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
						boxes = $('.JQuerySlideshowBox', slider)._reverse();
					}
					boxes.each(function(){
						box2Darr[rowIndex][colIndex] = $(this);
						colIndex++;
						if(colIndex == settings.boxCols){
							rowIndex++;
							colIndex = 0;
							box2Darr[rowIndex] = new Array();
						}
					});
					
					// Run animation
					for(var cols = 0; cols < (settings.boxCols * 2); cols++){
						var prevCol = cols;
						for(var rows = 0; rows < settings.boxRows; rows++){
							if(prevCol >= 0 && prevCol < settings.boxCols){
								/* Due to some weird JS bug with loop vars 
								being used in setTimeout, this is wrapped
								with an anonymous function call */
								(function(row, col, time, i, totalBoxes) {
									var box = $(box2Darr[row][col]);
									var w = box.width();
									var h = box.height();
									if(settings.effect == 'boxRainGrow' || vars.randAnim == 'boxRainGrow' ||
									   settings.effect == 'boxRainGrowReverse' || vars.randAnim == 'boxRainGrowReverse'){
										box.width(0).height(0);
									}
									if(i == totalBoxes-1){
										setTimeout(function(){
											box.animate({ opacity:'1', width:w, height:h }, parseFloat(settings.animSpeed)/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
										}, (100 + time));
									} else {
										setTimeout(function(){
											box.animate({ opacity:'1', width:w, height:h }, parseFloat(settings.animSpeed)/1.3);
										}, (100 + time));
									}
								})(rows, prevCol, timeBuff, i, totalBoxes);
								i++;
							}
							prevCol--;
						}
						timeBuff += 100;
					}
				}
			}
			
			// Shuffle an array
			var shuffle = function(arr){
				for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
				return arr;
			}
			
			
			baseSlider.init = init;
			
			// Start / Stop
			baseSlider.stop = function(){
				if(!$(element).data('nivo:vars').stop){
					$(element).data('nivo:vars').stop = true;
					trace('Stop Slider');
				}
			}
			
			baseSlider.start = function(){
				if($(element).data('nivo:vars').stop){
					$(element).data('nivo:vars').stop = false;
					trace('Start Slider');
				}
			}
			
			baseSlider.stopAuto = function() { 
				baseSlider.stop();
			}
			
			baseSlider.startAuto = function() { 
				baseSlider.start();
			}
			
			baseSlider.goToSlide = function(i){
				//alert(i + "##" + vars.currentImage.attr('src'));
				
				if (i == "prev") {
					i = vars.currentSlide;
				}
				
				if (i == "next") {
					i = vars.currentSlide + 2;
				}
				
				//image change should be instant as its more a gallery than a slider//
				// so don't wait for effect finish//

				if(vars.running) return false;
				
					
				//if($(this).hasClass('active')) return false;
				clearInterval(timer);
				timer = '';
				if (vars.currentImage) {
					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
				}
				
				vars.currentSlide = i - 2;
				nivoRun(slider, kids, settings, 'control');
			}
		});
    };
	
	
	
        
   
	
	//Default settings
	$.fn.nivoSlider.defaults = {
		effect: 'random',
		slices: 15,
		boxCols: 8,
		boxRows: 4,
		animSpeed: 500,
		pauseTime: 3000,
		startSlide: 0,
		directionNav: true,
		directionNavHide: true,
		controlNav: true,
		controlNavThumbs: false,
        controlNavThumbsFromRel: false,
		controlNavThumbsSearch: '.jpg',
		controlNavThumbsReplace: '_thumb.jpg',
		keyboardNav: true,
		pauseOnHover: false,
		manualAdvance: false,
		captionOpacity: 1,
		prevText: 'Prev',
		nextText: 'Next',
		beforeChange: function(){},
		afterChange: function(){},
		slideshowEnd: function(){},
        lastSlide: function(){},
        afterLoad: function(){}
	};
	
	$.fn._reverse = [].reverse;
	
})(xtd_jQuerySlideshow);



///MIDDLE///



(	function($) {
		$.fn.jQuerySlideShow = function(){
			
			var jQuery = $;
			var instanceName = $(this).attr("id");
			
			// get the global context//
			jQuery.globalEval("var global = this;")
			
			// get the json object//
			var jsonObj = global[instanceName + "_json"];
			
			jsonObj = jQuery.extend({}, jQuerySlideshow_init, jsonObj);
			jsonObj.directionNav = false;
			jsonObj.directionNavHide = false;
			jsonObj.controlNav = false;
			jsonObj.source = global[instanceName + "_source"];
			jsonObj.thumbsource = global[instanceName + "_thumbsource"];
			jsonObj.tooltipsource = global[instanceName + "_tooltipsource"];
			
			
			if ($.browser.msie && parseInt($.browser.version, 10) < 7) {
				jsonObj.effect = "none";
			}
			
			function isMobileDevice() {
				var uagent = navigator.userAgent.toLowerCase();
				if (uagent.match(/iphone|ipad|ipod|android/gi)) {
					return true;
				}
				
				return false;
			}
			
			if (jsonObj.disableOnMobile && isMobileDevice()) {
				jsonObj.effect = "fade";
			}
			
			if (!jsonObj.thumbsource) {
				jsonObj.thumbsource = jsonObj.source;
			}
			
			if (!jsonObj.tooltipsource) {
				jsonObj.tooltipsource = jsonObj.thumbsource;
			}
			
						
			function updateThumbs(thumbs) {
				if (!thumbs) return;
				for (var i = 0; i < thumbs.length; i++) {
					thumbs[i].src = jsonObj.relPath + thumbs[i].src
				}
			}
			
			updateThumbs(jsonObj.source);
			updateThumbs(jsonObj.thumbsource);
			updateThumbs(jsonObj.tooltipsource);
			
			var elements = ["innernavbar", "innerbutton.back", "innerbutton.next", "innerplaypause", "innercurrentslide","innersubcaption","innercaption"];
			var ids = [["navbar", "bullets", "numbers", "thumbscroll"], ["back"], ["next"], ["playpause"],["currentslide"],["subcaption"],["caption"]];
			var jsids = [["navbar", "bullets", "numbers", "thumbscroll"]];
			
			var sliderContainer =  $("#" + instanceName + "Container");
			
			// hides the list of images from the HTML
			$(this).children('ul').first().hide();
			
			var navigationULs = $("div[id^='" + instanceName + "_numbers'], div[id^='" + instanceName + "_bullets'], div[id^='" + instanceName + "_navbar'], div[id^='" + instanceName + "_thumbscroll']" ).has('ul');
			
			// create nav bar items 
			navigationULs.each(function () { 
				var ohtml, nhtml;
				if($(this).attr('id').indexOf('navbar') >= 0) { 
					ohtml = $(this).children('ul').children('li').first().html();
				}

				$(this).children('ul').empty();

				for(var i=0;i < jsonObj.source.length; i++) { 
					if($(this).is("div[id^='" + instanceName + "_numbers']")) {
						if ($(this).is("#" + instanceName + "_numbers")) {
							if (jsonObj["numbers.add0"] && i < 9 && i >= 0) {
								li = $("<li />").append($('<a />').html("0" + (i + 1)));
							} else {
								li = $("<li />").append($('<a />').html((i + 1)));
							}
						} else {
							if (jsonObj["innernumbers.add0"] && i < 9 && i >= 0) {
								li = $("<li />").append($('<a />').html("0" + (i + 1)));
							} else {
								li = $("<li />").append($('<a />').html((i + 1)));
							}
						}
					} else if($(this).attr('id').indexOf('navbar') >= 0) { 
					// navbar items copy the structure of the first slide from DW
						nhtml = ohtml.replace("Title of slide",jsonObj.source[i].title);
						nhtml = nhtml.replace("Subtitle of slide",jsonObj.source[i].description);			
						
						nhtml = nhtml.replace('src=""','src="' + jsonObj.thumbsource[i].src + '"');
						
						li = $("<li />").html(nhtml);
						if(jsonObj["innernavbaritemthumb.opacity"]) { 
							li.children('a').find('img').css({opacity: jsonObj["innernavbaritemthumb.opacity"]});
						}
					} else { 
						li = $("<li />").append($('<a />'));
					}
					
					$(this).children('ul').first().append(li);
				}
			});
			
			
			
			for (var i = 0; i < ids[0].length; i++) {
				var align = jsonObj["inner" + ids[0][i] + ".itemsalign"];
				var container = $("div[id='" + instanceName + "_" + ids[0][i] + "_in'] ul");
				var mainDiv = $("div[id='" + instanceName + "_" + ids[0][i] + "_in']");
				var orientation = jsonObj["inner" + ids[0][i] + "item.orientation"];
				

				if (!container.length) continue;
				
				container.parent().cleanWhitespace();
				container.children().cleanWhitespace();
				
				container.children().css("display", "block");
				
				mainDiv.css("width", mainDiv.width() + "px");
				mainDiv.css("height", mainDiv.height() + "px");
				
				if (container.length > 0 && orientation && orientation == "horizontal") {
					var totalWidth = calculateChildrenWidth(container);//container.outerWidth(true) * container.length;
					
					//alert($("div[id='" + instanceName + "_bullets_in']").width() + "##zzz222");
					
					//alert(mainDiv.innerWidth() + '$$totalWidth##' + totalWidth + "##container=" + container[0].outerHTML);
					
					container.css("width", totalWidth  + "px");
					
					if (align){
						if (align == "left" || align == "center") {

							container.css("margin-right", "auto");
						}
						
						if (align == "right" || align == "center") {
							container.css("margin-left", "auto");
						}
					}
				} else {
					container.css("float", "left");
					container.children().css({"float" : "left", "clear" : "left"});	
				}
			}


			var caption = $('#' + instanceName + '_caption_in');
			var subcaption = $('#' + instanceName + '_subcaption_in');
			
			if(caption.length > 0) {
				caption.html('');
				
				var subTop = (caption.css('borderTopWidth')) ? parseInt(caption.css('borderTopWidth').replace('px','')) : 0;
				var subLeft = (caption.css('borderLeftWidth')) ? parseInt(caption.css('borderLeftWidth').replace('px','')) : 0;
				subTop = (caption.css('paddingTop')) ?  subTop + parseInt(caption.css('paddingTop').replace('px','')) : subTop;
				subLeft = (caption.css('paddingLeft')) ?  subLeft + parseInt(caption.css('paddingLeft').replace('px','')) : subLeft;
				
				var captionText = $("<div/>").css({position:'absolute',zIndex:1,top:subTop,left:subLeft,overflow:'hidden',textAlign:caption.css('text-align'),width:caption.width(),height:caption.height()});
				captionText.addClass('text')
				caption.append(captionText);		
			
				var captionBackground = caption.clone().empty().attr('id','').css({ display:'block',  backgroundColor:caption.css('background-color')});
				captionBackground.css({position:'relative',width:caption.width(),height:caption.height(),zIndex:0});
				captionBackground.css('opacity', jsonObj["innercaption.opacity"]);
				
				//alert(jsonObj["innercaption.opacity"]);
				
				//captionBackground.applyOpacity(jsonObj["innercaption.opacity"]);
				
				//, opacity:jsonObj["innercaption.opacity"]
				// copy background image
				
				//captionBackground.css({backgroundImage: caption.css('background-image'), backgroundRepeat:caption.css('background-repeat'),backgroundPosition:caption.css('background-position')});
				
				var normalStateBg = caption.getBgImage(jsonObj.gifPath, caption);
				captionBackground.append(normalStateBg);
				
				captionBackground.css({paddingLeft: caption.css('paddingLeft'),paddingRight:caption.css('paddingRight'),paddingTop:caption.css('paddingTop'),paddingBottom:caption.css('paddingBottom'),
										borderLeftWidth:caption.css('border-left-width'),borderRightWidth:caption.css('border-right-width'),borderTopWidth:caption.css('border-top-width'),borderBottomWidth:caption.css('border-right-width'),
										borderLeftColor:caption.css('border-left-color'),borderRightColor:caption.css('border-right-color'),borderTopColor:caption.css('border-top-color'),borderBottomColor:caption.css('border-right-color'),
										borderLeftStyle:caption.css('border-left-style'),borderRightStyle:caption.css('border-right-style'),borderTopStyle:caption.css('border-top-style'),borderBottomStyle:caption.css('border-right-style')
				});
				/*
				var bgTop = 0;//(caption.css('paddingTop')) ? -parseInt(caption.css('paddingTop').replace('px','')) : 0;
				var bgLeft = 0;//(caption.css('paddingLeft')) ? -parseInt(caption.css('paddingLeft').replace('px','')) : 0;
				bgTop = (caption.css('borderTopWidth')) ? bgTop - parseInt(caption.css('borderTopWidth')) : bgTop;
				bgLeft = (caption.css('borderLeftWidth')) ? bgLeft - parseInt(caption.css('borderLeftWidth')) : bgLeft;
				*/
				
				captionBackground.css({top: 0, left: 0, right:0, bottom:0});
				
				caption.css({paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0,borderLeftWidth:0,borderRightWidth:0,borderTopWidth:0,borderBottomWidth:0,
								borderLeftColor:0,borderRightColor:0,borderTopColor:0,borderBottomColor:0,
								borderLeftStyle:'none',borderRightStyle:'none',borderTopStyle:'none',borderBottomStyle:'none', 
								width : caption.outerWidth(), height : caption.outerHeight()//, 'line-height' : 'normal'
				});
				
				caption.append(captionBackground).css({backgroundColor:'transparent',backgroundImage:'none'});
			}
			
		
			if(subcaption.length > 0) {
				
				subcaption.html('');
				var subTop = (subcaption.css('borderTopWidth')) ? parseInt(subcaption.css('borderTopWidth').replace('px','')) : 0;
				var subLeft = (subcaption.css('borderLeftWidth')) ? parseInt(subcaption.css('borderLeftWidth').replace('px','')) : 0;
				subTop = (subcaption.css('paddingTop')) ?  subTop + parseInt(subcaption.css('paddingTop').replace('px','')) : subTop;
				subLeft = (subcaption.css('paddingLeft')) ?  subLeft + parseInt(subcaption.css('paddingLeft').replace('px','')) : subLeft;
				
				var subcaptionText = $("<div/>").css({position:'absolute',zIndex:1,top:subTop,left:subLeft,overflow:'hidden',textAlign:subcaption.css('text-align'),width:subcaption.width(),height:subcaption.height()}).addClass('text');
				subcaption.append(subcaptionText);		
				
				var subcaptionBackground = subcaption.clone().empty().attr('id','').css({ display:'block', backgroundColor:subcaption.css('background-color')});
				subcaptionBackground.css({position:'relative', opacity:jsonObj["innersubcaption.opacity"],width:subcaption.width(),height:subcaption.height(), zIndex:0});
				
				
				// copy background image
				//subcaptionBackground.css({backgroundImage: subcaption.css('background-image'), backgroundRepeat:subcaption.css('background-repeat'),backgroundPosition:subcaption.css('background-position')});
				
				var subcaptionBg = subcaption.getBgImage(jsonObj.gifPath, subcaption);
				subcaptionBackground.append(subcaptionBg);
				
				subcaptionBackground.css({paddingLeft: subcaption.css('paddingLeft'),paddingRight:subcaption.css('paddingRight'),paddingTop:subcaption.css('paddingTop'),paddingBottom:subcaption.css('paddingBottom'),
										borderLeftWidth:subcaption.css('border-left-width'),borderRightWidth:subcaption.css('border-right-width'),borderTopWidth:subcaption.css('border-top-width'),borderBottomWidth:subcaption.css('border-right-width'),
										borderLeftColor:subcaption.css('border-left-color'),borderRightColor:subcaption.css('border-right-color'),borderTopColor:subcaption.css('border-top-color'),borderBottomColor:subcaption.css('border-right-color'),
										borderLeftStyle:subcaption.css('border-left-style'),borderRightStyle:subcaption.css('border-right-style'),borderTopStyle:subcaption.css('border-top-style'),borderBottomStyle:subcaption.css('border-right-style')
				});
				/*
				var bgsTop = 0;//(subcaption.css('paddingTop')) ? -parseInt(subcaption.css('paddingTop')) : 0;
				var bgsLeft = 0;//(subcaption.css('paddingLeft')) ? -parseInt(subcaption.css('paddingLeft').replace('px','')) : 0;
				bgsTop = (subcaption.css('borderTopWidth')) ? bgsTop - parseInt(subcaption.css('borderTopWidth')) : bgsTop;
				bgsLeft = (subcaption.css('borderLeftWidth')) ? bgsLeft - parseInt(subcaption.css('borderLeftWidth')) : bgsLeft;
				*/
				subcaptionBackground.css({top: 0, left: 0, bottom:0, right:0});
				
				subcaption.css({padding:0,borderLeftWidth:0,borderRightWidth:0,borderTopWidth:0,borderBottomWidth:0,
								borderLeftColor:0,borderRightColor:0,borderTopColor:0,borderBottomColor:0,
								borderLeftStyle:'none',borderRightStyle:'none',borderTopStyle:'none',borderBottomStyle:'none',
								width : subcaption.outerWidth(), height : subcaption.outerHeight()//, 'line-height' : 'normal'
				});
				subcaption.append(subcaptionBackground).css({backgroundColor:'transparent',backgroundImage:'none'});
				
			}
			
			
			var lis;
			var lisOut;
				
			//alert($("div[id='" + instanceName + "_bullets_in']").width() + "##zzz");			
			// update navigation bar elements
			jsonObj.beforeChange = function(){ 
			
				var t = $("#" + instanceName + "SlideShow").data('nivo:vars').currentSlide + 1;
				//trace(t + "##" + slider + "##" + slider.data('nivo:vars').currentSlide);
			
				if ($.browser.msie){
					
					for (var i = 0; i < ids[0].length; i++) {
						lis = $("#" + instanceName + "_" + ids[0][i] + "_in ul").children("li");
						lisOut = $("#" + instanceName + "_" + ids[0][i] + " ul").children("li");
						
						lis.add(lisOut).each(function() {
							$(this).children().each(function() {
								if ($(this).is('.active') && $(this).css('display') == 'block') {
									$(this).css("display", "none");
									$(this).parent().children("a").not(".active, .hover").css("display", "block");
								}
								
							})
		
						});
						
						//trace("t: " + t + " .. " + lis.eq(t-1).not(".active").html());
						lis.eq(t-1).children().not(".active").css("display", "none");
						lis.eq(t-1).children().filter(".active").css("display", "block");
						
						lisOut.eq(t-1).children().not(".active").css("display", "none");
						lisOut.eq(t-1).children().filter(".active").css("display", "block");
					}
				} else {
					for (var i = 0; i < ids[0].length; i++) {
						lisOut = $("#" + instanceName + "_" + ids[0][i] + " ul").children("li");
						lisOut.children().removeClass("active");
						lisOut.eq(t-1).children().addClass("active");	
						
						lis = $("#" + instanceName + "_" + ids[0][i] + "_in ul").children("li");
						lis.children().removeClass("active");
						lis.eq(t-1).children().addClass("active");
						
						//alert('zaaz');
					}
				}
			}
			
			/*
			jsonObj.afterChange = function(){ 
				var t = slider.data('nivo:vars').currentSlide + 1;
				if (jsonObj.loop == false && slider && slider.getValue("autoAnimation") == true && t == slider.getValue("totalSlides")) {
						showPlay();
						slider.stopAuto();
				}
			}*/
			/*
			jsonObj.afterChange = function(){ 
				alert('after change');
			}
			jsonObj.slideshowEnd  = function(){ 
				alert('slideshowEnd');
			} //jsonObj.afterChange;*/
			
			jsonObj.afterLoad = jsonObj.beforeChange;
			
			
			var owidth = sliderContainer.outerWidth(true);
			var oheight = sliderContainer.outerHeight(true);
			
			//alert(owidth + "##" + oheight);
			
			var newContainer = $('<div/>');
			newContainer.attr("id", "" + instanceName + "ContainerJS");
			newContainer.css("width", owidth);
			newContainer.css("height", oheight);
			newContainer.css("overflow", "hidden");
			newContainer.css("position", sliderContainer.css("position"));
			
			
			newContainer.css("top", sliderContainer.css("top"));
			newContainer.css("left", sliderContainer.css("left"));
			newContainer.css("bottom", sliderContainer.css("bottom"));
			newContainer.css("right", sliderContainer.css("right"));
			
			
			if (jsonObj.align == "left" || jsonObj.align == "center") {
				newContainer.css("margin-right", "auto");
			}
			
			if (jsonObj.align == "right" || jsonObj.align == "center") {
				newContainer.css("margin-left", "auto");
			}
			
			sliderContainer.wrap(newContainer).css("overflow", "visible");
			
			newContainer = $("#" + instanceName + "ContainerJS");

			var ml = parseInt(sliderContainer.css("margin-left"));
			var mr =  parseInt(sliderContainer.css("margin-right"));
			var mb =  parseInt(sliderContainer.css("margin-bottom"));
			var mt =  parseInt(sliderContainer.css("margin-top"));
			
			ml = isNaN(ml) ? 0 : ml;
			mr = isNaN(mr) ? 0 : mr;
			mb = isNaN(mb) ? 0 : mb;
			mt = isNaN(mt) ? 0 : mt;
			
			//alert(sliderContainer.css("margin-right"));
			
			var bl = parseInt(sliderContainer.css("border-left-width"));
			var br = parseInt(sliderContainer.css("border-right-width"));
			var bb = parseInt(sliderContainer.css("border-bottom-width"));
			var bt = parseInt(sliderContainer.css("border-top-width"));
			
			bl = isNaN(bl) ? 0 : bl;
			br = isNaN(br) ? 0 : br;
			bb = isNaN(bb) ? 0 : bb;
			bt = isNaN(bt) ? 0 : bt;
			
			var pl = parseInt(sliderContainer.css("padding-left"));
			var pr = parseInt(sliderContainer.css("padding-right"));
			var pb = parseInt(sliderContainer.css("padding-bottom"));
			var pt = parseInt(sliderContainer.css("padding-top"));
			
			pl = isNaN(pl) ? 0 : pl;
			pr = isNaN(pr) ? 0 : pr;
			pb = isNaN(pb) ? 0 : pb;
			pt = isNaN(pt) ? 0 : pt;
			
			function getEffectObject(effect, slider, element) {

				var inObj = {};
				var outObj = {};
				
				var inOpacity = {};
				var outOpacity = {};
				
				var initialData = element.data("xtd:initial");
				
				trace('in get effect initialData.top ' + initialData.opacity);
				
				switch(effect) {
					case "fadeIn" : 
						inOpacity.opacity = parseFloat(initialData.opacity);
						outOpacity.opacity =  0;
					break;
					
					case "slideFromLeft" : 
						if (initialData.right == "auto") {
							inObj.left = initialData.left;
							outObj.left = - (element.outerWidth(true) + ml + bl)+ "px";
						} else {
							
							inObj.right = initialData.right;
							outObj.right = (slider.innerWidth() + ml + bl) + "px";
							
							if (initialData.left != "auto") {
								element.css('left', 'auto')
							}
						}
					break;
					case "slideFromRight" : 
						if (initialData.right == "auto") {
							inObj.left = initialData.left;
							outObj.left =  (slider.innerWidth() + mr + br) + "px";
						} else {
							
							inObj.right = initialData.right;
							outObj.right =  -(element.outerWidth(true) + mr + br) + "px";
								
							
							if (initialData.left != "auto") {
								element.css('left', 'auto')
							}
						}
						
					break;
					case "slideFromTop" : 
						if (initialData.bottom == "auto") {
							inObj.top= initialData.top;
							outObj.top= - (element.outerHeight(true) + mt + bt) + "px";	
						} else {
							inObj.bottom = initialData.bottom;
							outObj.bottom = (slider.innerHeight() + mt + bt) + "px";	
							
							if (initialData.top != "auto") {
								element.css('top', 'auto')
							}
						}
					break;
					case "slideFromBottom" : 
						if (initialData.bottom == "auto") {
							//alert('1##' + initialData.top + "##" + initialData.bottom);
							inObj.top= initialData.top;
							outObj.top= (slider.innerHeight() + mb + bb) + "px";	
						} else {
							//alert('2##' + initialData.top + "##" + initialData.bottom);
							inObj.bottom= initialData.bottom;
							outObj.bottom= -(element.outerHeight(true) + mb + bb) + "px";//"-100px";
							if (initialData.top != "auto") {
								element.css('top', 'auto')
							}
						}
					break;
					case "wipeLeft" : 
						inObj.width = initialData.width + "px";
						outObj.width = '0px';

						inOpacity.opacity = parseFloat(initialData.opacity);
						outOpacity.opacity =  0;
					break;
					case "wipeRight" : 
						inObj.width = initialData.width + "px";
						outObj.width = '0px';
						if (initialData.right == "auto") {
							inObj.left = initialData.left;
							outObj.left =  (parseInt(initialData.left) + initialData.width) + "px";
						} else {
							inObj.right = initialData.right;
							outObj.right =  (parseInt(initialData.right)/* + initialData.width*/) + "px";
							if (initialData.left != "auto") {
								element.css('left', 'auto')
							}
						}

						inOpacity.opacity = parseFloat(initialData.opacity);
						outOpacity.opacity =  0;
					break;
					case "wipeTop" : 
						inObj.height = initialData.height + "px";
						outObj.height = '0px';

						inOpacity.opacity = parseFloat(initialData.opacity);
						outOpacity.opacity =  0;
					break;
					case "wipeBottom" : 
						inObj.height = initialData.height + "px";
						outObj.height = '0px';
						
						if (initialData.bottom == "auto") {
							inObj.top = initialData.top;
							outObj.top =  (parseInt(initialData.top) + initialData.height) + "px";
						} else {
							inObj.bottom = initialData.bottom;
							outObj.bottom =  (parseInt(initialData.bottom)/* + initialData.height*/) + "px";
							if (initialData.top != "auto") {
								element.css('top', 'auto')
							}
						}
						
						inOpacity.opacity = parseFloat(initialData.opacity);
						outOpacity.opacity =  0;
					break;
				}
				
				//alert('zaza##');

				return {'in' : inObj, 'out' : outObj, 'in-opacity' : inOpacity, 'out-opacity' : outOpacity};
			}
			

			var pLeft, pRight, pTop, pBottom = 0;
			
			
			// add overflow hidden on main container//
			//sliderContainer.css("overflow", "hidden");
			
			pLeft = sliderContainer.css("padding-left") ? parseInt(sliderContainer.css("padding-left").replace("px", "")) : 0;
			pRight = sliderContainer.css("padding-right") ? parseInt(sliderContainer.css("padding-right").replace("px", "")) : 0;
			pTop = sliderContainer.css("padding-top") ? parseInt(sliderContainer.css("padding-top").replace("px", "")) : 0;
			pBottom = sliderContainer.css("padding-bottom") ? parseInt(sliderContainer.css("padding-bottom").replace("px", "")) : 0;
			
			// on ie6 move background image to an absolute positioned div//
			// else the png fix will brake the mouse interactivity//
			if ($.browser.msie && parseInt($.browser.version, 10) < 7) {
				var newDiv = $("<div/>");
				newDiv.css({top:'0px', left:'0px', position : 'absolute'});
				sliderContainer.prepend(newDiv);
				newDiv.css("background-image", sliderContainer.css("background-image"));
				newDiv.css("width", sliderContainer.outerWidth());
				newDiv.css("height", sliderContainer.outerHeight());
				sliderContainer.css("background-image", "none");		
			}
			
			function addElementListener(element, jsid, opacity) {
				// save original offsets //
				//alert(jsid + " .. " + opacity);[0].style.left
				//alert("##" + window.getDeclaredStyle(element[0]).bottom+ "##");
				element.data("xtd:initial", {
					left : element.css("left"), right : element.css("right"),
					top : element.css("top"), bottom : element.css("bottom"),
					opacity : opacity,
					width : element.width(), height : element.height()
				});
				
				//alert(jsid + "##" + element.css("left") + "##" + element.css("right") + "##" + element.css("top") + "##" + element.css("bottom"));
				
				var effectIn = jsonObj[jsid + ".mouseOutEffect"]; 
				var effectObj = getEffectObject(effectIn, sliderContainer, element);

				var effectDuration = parseFloat(jsonObj[jsid + ".mouseOutEffectDuration"]);
				var effectEase = jsonObj[jsid + ".mouseOutEffectEasing"];
				
				if (element.children().filter('.text').length) {
					if (!$.isEmptyObject(effectObj["out"])) {
						element.stop().animate(effectObj.out, 0);
					}
					
					if (!$.isEmptyObject(effectObj["out-opacity"])) {
						element.children().animate(effectObj["out-opacity"], 0);
					}
				} else {
					if (!$.isEmptyObject(effectObj["out"]) || !$.isEmptyObject(effectObj["out-opacity"])) {
						var effect = $.extend(true, {}, effectObj["out"], effectObj["out-opacity"]);
						
						element.stop().animate(effect, parseInt(effectDuration), effectEase);
					}
				}
				
				function show(el) {
					return function(ev) {
						// if has text, do a special opacity //
						if (el.children().filter('.text').length) {
							
							if (!$.isEmptyObject(effectObj["in"])) {
								el.stop().animate(effectObj["in"], parseInt(effectDuration), effectEase);
							}
							
							if (!$.isEmptyObject(effectObj["in-opacity"])) {
								el.children().not('.text').animate(effectObj["in-opacity"], parseInt(effectDuration), effectEase);
							}
							
							el.children().filter('.text').animate({"opacity" : 1}, parseInt(effectDuration), effectEase);
						} else {
							
							if (!$.isEmptyObject(effectObj["in"]) || !$.isEmptyObject(effectObj["in-opacity"])) {
								var effect = $.extend(true, {}, effectObj["in"], effectObj["in-opacity"]);
								
								el.stop().animate(effect, parseInt(effectDuration), effectEase);
							}
						}
					}
				}
				
				function hide(el) {
					return function(ev) {

						// if has text, do a special opacity //
						if (el.children().filter('.text').length) {
							if (!$.isEmptyObject(effectObj["out"])) {
								el.stop().animate(effectObj["out"], parseInt(effectDuration), effectEase);
							}
							
							if (!$.isEmptyObject(effectObj["out-opacity"])) {
								el.children().animate(effectObj["out-opacity"], parseInt(effectDuration), effectEase);
							}
						} else {
							if (!$.isEmptyObject(effectObj["out"]) || !$.isEmptyObject(effectObj["out-opacity"])) {
								var effect = $.extend(true, {}, effectObj["out"], effectObj["out-opacity"]);
								el.stop().animate(effect, parseInt(effectDuration), effectEase);
							}
						}
					}
				}
				
				newContainer.mouseenter(show(element)).mouseleave(hide(element));
			}		

			
			//alert($("div[id='" + instanceName + "_bullets_in']").width() + "##zzz");
			
			
			
			
			var backButtons = $("div[id^='" + instanceName + "_back']");
			var nextButtons = $("div[id^='" + instanceName + "_next']");
			
			
			var playButtons = $("#" + instanceName + "_playpause_in").add($("#" + instanceName + "_playpause")).children().filter(".play");
			var pauseButtons = $("#" + instanceName + "_playpause_in").add($("#" + instanceName + "_playpause")).children().filter(".pause");
			
			var backScrollButtons = $("#" + instanceName + "_thumbscroll_back_in");
			backScrollButtons.add($("#" + instanceName + "_bullets_back_in"));
			backScrollButtons.add($("#" + instanceName + "_numbers_back_in"));
			backScrollButtons.add($("#" + instanceName + "_navbar_back_in"));
			
			var nextScrollButtons = $("#" + instanceName + "_thumbscroll_next_in");
			nextScrollButtons.add($("#" + instanceName + "_bullets_next_in"));
			nextScrollButtons.add($("#" + instanceName + "_numbers_next_in"));
			nextScrollButtons.add($("#" + instanceName + "_navbar_next_in"));
			
			if ($.browser.msie){
				
				playButtons.attr("id", instanceName + "_playpause_in_play");
				pauseButtons.attr("id", instanceName + "_playpause_in_pause");
	
				playButtons = $("#" + instanceName + "_playpause_in_play").add("#" + instanceName + "_playpause_play");
				pauseButtons = $("#" + instanceName + "_playpause_in_pause").add("#" + instanceName + "_playpause_pause");
				 
				function wrapButton(normalButtons, wrappedbuttons) {
					normalButtons.each(
						function(index) {
							var newButtonDiv = $('<div id="' + $(this).attr('id') + '_wrapper"></div>');
							
							if ($(this).attr("class")) {
								newButtonDiv.attr("class", $(this).attr("class") + "_state");
							}
							
							var normalState = $(this).clone();
							var hoverState = $(this).clone();
							
							
							
							//alert(normalStateBg + "##" + hoverStateBg);
							
							normalState.addClass("normal");
							normalState.attr("style", "");
							normalState.css("position", "relative");
							normalState.css("top", "0px");
							normalState.css("left", "0px");
							normalState.css("display", "block");
							normalState.css("background-image", "none");
							normalState.appendTo(newButtonDiv);
							
							var normalStateBg = $(this).getBgImage(jsonObj.gifPath, $(this));
							
							normalState.append(normalStateBg);
							
							hoverState.addClass("hover");
							hoverState.attr("style", "");
							hoverState.css("top", "0px");
							hoverState.css("left", "0px");
							hoverState.css("display", "none");
							hoverState.css("background-image", "none");
							hoverState.attr("id", hoverState.attr("id"));
							hoverState.appendTo(newButtonDiv);
							
							$(this).addClass('hover');
							
							var hoverStateBg = $(this).getBgImage(jsonObj.gifPath, $(this));
							
							$(this).removeClass('hover');
							
							hoverState.append(hoverStateBg);
							
							newButtonDiv.css("top", $(this).css("top"));
							newButtonDiv.css("bottom", $(this).css("bottom"));
							newButtonDiv.css("left", $(this).css("left"));
							newButtonDiv.css("right", $(this).css("right"));
							
							newButtonDiv.css("position", "absolute");
							newButtonDiv.css("width", $(this).css("width"));
							newButtonDiv.css("height", $(this).css("height"));
							newButtonDiv.css("z-index", $(this).css("z-index"));
							
							$(this).replaceWith(newButtonDiv);
						
							//newButtonDiv.attr("class", "");
							
							wrappedbuttons.push(newButtonDiv);
						}
					);
				}
			
				var backButtonsWrapped = [];
				var nextButtonsWrapped = [];
				var playButtonsWrapped = [];
				var pauseButtonsWrapped = [];
				var liButtonsWrapped = [];
				var backScrollButtonsWrapped = [];
				var nextScrollButtonsWrapped = [];
				
				wrapButton(backButtons, backButtonsWrapped);
				wrapButton(nextButtons, nextButtonsWrapped);
				
				wrapButton(playButtons, playButtonsWrapped);
				wrapButton(pauseButtons, pauseButtonsWrapped);
				
				wrapButton(backScrollButtons, backScrollButtonsWrapped);
				wrapButton(nextScrollButtons, nextScrollButtonsWrapped);
				
				backButtons = $(backButtonsWrapped[0]);				
				nextButtons = $(nextButtonsWrapped[0]);
				playButtons = $(playButtonsWrapped[0]);				
				pauseButtons = $(pauseButtonsWrapped[0]);
				
				backScrollButtons = $(backScrollButtonsWrapped[0]);
				nextScrollButtons = $(nextScrollButtonsWrapped[0]);
				
				playButtons.css("position", "static");
				pauseButtons.css("position", "static");
				
				
				//backButtons.css("z-index", 1000);
				//nextButtons.css("z-index", 1000);
				//playButtons.css("z-index", 1000);
				
			}
			
			//$("div[id^='" + instanceName + "_playpause_in']").css("z-index", 1000);
			
			function showHover(button) {
				if ($.browser.msie){
					button.children().filter('.hover').css("display", "block");
					button.children().filter('.normal').css("display", "none");
				} else {
					button.addClass("hover");
				}
			}
			
			function showNormal(button) {
				if ($.browser.msie){
					button.children().filter('.hover').css("display", "none");
					button.children().filter('.normal').css("display", "block");
				} else {
					button.removeClass("hover");
				}
			}

			$(backButtons).add(nextButtons).add(playButtons).add(pauseButtons).hover(
				function(e){
					showHover($(this))
					if(jsonObj.pauseOnHover == true) {
						slider.stopAuto();
						//showPlay();
					}
				}
			).mouseleave(function(e) {
					showNormal($(this))
					if(jsonObj.pauseOnHover == true) {
						slider.startAuto();
						//showStop();
					}
				}
			);
			
			
			//alert($("div[id='" + instanceName + "_bullets_in']").width() + "##zzz");
			
			var numbersbg = $("div[id='" + instanceName + "_numbers'], div[id='" + instanceName + "_numbers_in']").css("background-image");
			var navbarbg = $("div[id='" + instanceName + "_navbar'], div[id='" + instanceName + "_navbar_in']").css("background-image");
			var bulletsbg = $("div[id='" + instanceName + "_bullets'], div[id='" + instanceName + "_bullets_in']").css("background-image");
			var thumbsbg = $("div[id='" + instanceName + "_thumbscroll'], div[id='" + instanceName + "_thumbscroll_in']").css("background-image");
			
			//alert('numbersbg##' + numbersbg);
			
			
			
			//alert(sliderContainer.children().children().html());
			
			$("div[id='" + instanceName + "_numbers'], div[id='" + instanceName + "_numbers_in']").css("filter" ,"")
			$("div[id='" + instanceName + "_numbers'], div[id='" + instanceName + "_numbers_in']").css("background-image" , numbersbg);
			
			$("div[id='" + instanceName + "_navbar'], div[id='" + instanceName + "_navbar_in']").css("filter" ,"")
			$("div[id='" + instanceName + "_navbar'], div[id='" + instanceName + "_navbar_in']").css("background-image" , navbarbg);
			
			$("div[id='" + instanceName + "_bullets'], div[id='" + instanceName + "_bullets_in']").css("filter" ,"")
			$("div[id='" + instanceName + "_bullets'], div[id='" + instanceName + "_bullets_in']").css("background-image" , bulletsbg);
			
			$("div[id='" + instanceName + "_thumbscroll'], div[id='" + instanceName + "_thumbscroll_in']").css("filter" ,"")
			$("div[id='" + instanceName + "_thumbscroll'], div[id='" + instanceName + "_thumbscroll_in']").css("background-image" , thumbsbg);
			
			// add on click listener on back button
			backButtons.click(
				function(event){
					event.preventDefault();
					if (jsonObj.stopAtInteraction) {
						slider.stopAuto();
						showPlay()
					}
					slider.goToSlide("prev");
				}
			);
			
			
			// add on click listener on next button
			nextButtons.click(
				function(event){
					event.preventDefault();
					
					if (jsonObj.stopAtInteraction) {
						slider.stopAuto();
						showPlay()
					}
					slider.goToSlide("next");
				}
			);
			
			// scale background//
			for (var i = 0; i < ids[0].length; i++) {
				var mainDiv = $("div[id='" + instanceName + "_" + ids[0][i] + "_in']");
				var orientation = jsonObj["inner" + ids[0][i] + "item.orientation"];
				
				if (!mainDiv.length) continue;
				
				//alert(mainDiv.width() + "##" + mainDiv.get(0).outerHTML);
				
				if (jsonObj["inner" + ids[0][i] + ".scaleBg"]) {
					mainDiv.scale3({orientation : orientation});
				} else {
					if (1){
						var newDiv = $('<div/>').css({
							position : 'absolute'
						}).attr('class' , 'bgDiv');
						
						
						
						newDiv.css({
							width : mainDiv.innerWidth(),
							height :  mainDiv.innerHeight(),
							top : '0px',
							left : '0px'
						});
						
						mainDiv.append(newDiv);
						
						if ($.browser.msie) {
							var mainDivBg = mainDiv.getBgImage(jsonObj.gifPath, mainDiv, true, true);
							if (mainDivBg) {
								newDiv.append(mainDivBg);						
							}
						} else {
							newDiv.css({
								backgroundImage: mainDiv.css('background-image'), 
								backgroundRepeat:mainDiv.css('background-repeat'),
								backgroundPosition:mainDiv.css('background-position')
							});
						}
						
						newDiv.css({
							backgroundColor:mainDiv.css('background-color')
						});
						
						mainDiv.css({
							"background-image" : "none",
							"background-color" : "transparent"
						});
						
					}
				}
			}
			
			for (var i = 0; i < elements.length; i++) {
				for (var j = 0; j < ids[i].length; j++) {
					element = $("#" + instanceName + "_" + ids[i][j] + "_in_wrapper");
					
					if (!element.length) {
						element = $("#" + instanceName + "_" + ids[i][j] + "_in");
					}
					
					var jsid = (jsids[i] ? "inner" + jsids[i][j] : elements[i]);
					
					var opacity = "";
					if (jsonObj[jsid + ".opacity"]) {
						opacity = parseFloat(jsonObj[jsid + ".opacity"]);
					}
					
					if (element.children().filter('.bgDiv').length) {
						element.children().filter('.bgDiv').css('opacity', opacity);
						opacity = "";
					}
					
					if (!(jsid == "innercaption" || jsid == "innersubcaption")) {
						//element.children().css('opacity', opacity);
						//opacity = "";
						element.css('opacity', opacity);
					}

					if (jsonObj[jsid + ".hideOnMouseOut"] && element.length) {
						
						addElementListener(element, jsid, !opacity ? 1 : opacity);
						
						var backEl = $("#" + instanceName + "_" + ids[i][j] + "_back_in");
						if (backEl.length) {
							addElementListener(backEl, jsid, !opacity ? 1 : opacity);
						}
						
						var nextEl = $("#" + instanceName + "_" + ids[i][j] + "_next_in");
						if (nextEl.length) {
							addElementListener(nextEl, jsid, !opacity ? 1 : opacity);
						}
						
					}
					
					if(jsonObj["pauseOnHover"] && element.length) { 
						element.hover(function () { 
							if(jsonObj.pauseOnHover == true) {
								slider.stopAuto();
								//showStop();
							}
						}, function() { 
							if(jsonObj.pauseOnHover == true) {
								slider.startAuto();
								//showStop();
							}
						});
					}
				}
			}
			
			// play pause main wrapper//
			var pp = $("#" + instanceName + "_playpause_in");
			
			// add on click listener on play/pause button
			pp.click(
				function(event){
					event.preventDefault();
					
					var isPlay;
					
					if ($.browser.msie){
						isPlay = $(this).children().filter(".play_state").css("display") == "block";
					} else {
						isPlay = $(this).children().filter(".play").css("display") == "block";
					}
					
					
										
					if (isPlay) {
						slider.startAuto();
						showStop();
					} else {
						slider.stopAuto();
						showPlay()
					}
				}
			);
			
			function showStop() {
				if ($.browser.msie){
					pp.children().filter(".play_state").css({display:'none'});
					pp.children().filter(".pause_state").css({display:'block'});
				} else {
					$("div[id^='" + instanceName + "_playpause']").children().filter(".play").css({display:'none'});
					$("div[id^='" + instanceName + "_playpause']").children().filter(".pause").css({display:'block'});
				}
			}
			
			function showPlay() {
				if ($.browser.msie){
					pp.children().filter(".play_state").css({display:'block'});
					pp.children().filter(".pause_state").css({display:'none'});
				} else {
					$("div[id^='" + instanceName + "_playpause']").children().filter(".play").css({display:'block'});
					$("div[id^='" + instanceName + "_playpause']").children().filter(".pause").css({display:'none'});
				}
			}
			
		
						
			var imageArea = $('<div/>').attr("id", instanceName);
			
			$("#" + instanceName + "").css({
				width : $("#" + instanceName + "").css('width'),
				height : $("#" + instanceName + "").css('height'),
				position : "relative"
			})
						 
			$("#" + instanceName + "").attr('id', instanceName + 'SlideShow').wrap(imageArea);
			
			//imageArea.append($("#" + instanceName + "").children());
			//$("#" + instanceName + "").empty().append(imageArea);
			
			
			
				
			
			
			if ($.browser.msie){
					var numbers = $("div[id^='" + instanceName + "_numbers']");

					$("div[id^='" + instanceName + "_bullets'] ul, div[id^='" + instanceName + "_numbers'] ul, div[id^='" + instanceName + "_navbar'] ul, div[id^='" + instanceName + "_thumbscroll'] ul" ).children("li").each(
					function (i) {
						
						var child = $(this).children();
						
						if ($(this).parent().parent().parent().is($("div[id^='" + instanceName + "_bullets']"))) {
							child.css({"fontSize" : "0px", "lineHeight" : "0px"});
						}
						
						//trace($(this).css("height") + "##child##" + child.css("height"));
						
						child.css("z-index", "1");
						child.css("position", "relative");
						
						var cloneActive = child.clone();
						cloneActive.addClass("active");
						
						$(this).append(cloneActive);
						cloneActive.css("display", "none");
						
						var cloneHover = child.clone();
						cloneHover.addClass("hover");
						
						$(this).append(cloneHover);
						cloneHover.css("display", "none");
						
						child.addClass("normal");
						child.css("display", "block");
						
						//alert($(this).parents("div[id^='" + instanceName + "_bullets'], div[id^='" + instanceName + "_numbers'], div[id^='" + instanceName + "_thumbscroll']").length);
						
						if ($(this).parents("div[id^='" + instanceName + "_bullets'], div[id^='" + instanceName + "_numbers'], div[id^='" + instanceName + "_thumbscroll']").length) {
							//alert("activebg0##");
							var activebg = cloneActive.getBgImage(jsonObj.gifPath, cloneActive);
							//alert("activebg##" + activebg);
							if (activebg) {
								activebg.css({
									"padding" : "0px",
									"margin" : "0px",
									"background" : "background: transparent none repeat-x left top scroll",
									"border" : "0px transparent none",
									"position" : "absolute", 
									"top" : 0, 
									"left" : 0, 
									'z-index' : '-1'
								}).addClass('bgImg');
								
								cloneActive.prepend(activebg);
								cloneActive.css("background-image", "none");
							}
							
							var hoverbg = cloneHover.getBgImage(jsonObj.gifPath, cloneHover);
							//alert("hoverbg##" + hoverbg);
							if (hoverbg) {
								hoverbg.css({
									"padding" : "0px",
									"margin" : "0px",
									"background" : "background: transparent none repeat-x left top scroll",
									"border" : "0px transparent none",
									"position" : "absolute", 
									"top" : 0, 
									"left" : 0, 
									'z-index' : '-1'
								}).addClass('bgImg');
								
								cloneHover.prepend(hoverbg);
								cloneHover.css("background-image", "none");
							}
							
							var normalbg = child.getBgImage(jsonObj.gifPath, child);
							if (normalbg) {
								normalbg.css({
									"padding" : "0px",
									"margin" : "0px",
									"background" : "background: transparent none repeat-x left top scroll",
									"border" : "0px transparent none",
									"position" : "absolute", 
									"top" : 0, 
									"left" : 0, 
									'z-index' : '-1'
								}).addClass('bgImg');
								
								child.prepend(normalbg);
								child.css("background-image", "none");
							}
						}
					}
				);
				
				// fix background images//
				sliderContainer.children().fixPng(jsonObj.gifPath, false);
				
				//alert('sliderContainer.find("ul")##' + sliderContainer.find("ul").length);
				
				//alert('##' + sliderContainer.find("ul").html());
				
				// fix images from content//
				sliderContainer.children().fixPng(jsonObj.gifPath, true);
				
			}
			
			// png fix for main div container//
			for (var i = 0; i < ids[0].length; i++) {
				var mainDiv = $("div[id='" + instanceName + "_" + ids[0][i] + "_in']");
				if ($.browser.msie){
					mainDiv.fixPng(jsonObj.gifPath, true, true, true);
				}
			}
			
			//caption.children().applyOpacity(jsonObj["innercaption.opacity"]);
			
			var slider = $("#" + instanceName + "SlideShow").nivoSlider(jsonObj);
			
			slider.applyEffect = function(element,effectName,opacity){ 
				
				element.data("xtd:initial", {
					left : element.css("left"), right : element.css("right"),
					top : element.css("top"), bottom : element.css("bottom"),
					opacity : opacity,
					width : element.width(), height : element.height()
				});
				
				var effectIn = effectName;//"fadeIn"//jsonObj[jsid + ".mouseOutEffect"]; 
				//var sliderContainer =  $("#" + instanceName + "Container");
				//trace(sliderContainer + " .. " + instanceName);
				
				//alert('effectIn##' + effectIn);
				
				var effectObj = getEffectObject(effectIn, sliderContainer, element);
				
				//alert(JSON.stringify(effectObj));
				//element.animate(effectObj.out, 0);
				return effectObj;
			};
			
			slider.startSlider();
			
			//slider = $("#" + instanceName + "").data('nivoslider');
			
			//alert(slider);
			
			if (jsonObj.auto == true) {
				showStop();
			} else {
				slider.stopAuto();
				showPlay();
			}
			
			
			function calculateChildrenWidth(container) {
				var totalW = 0;
				
				container.children().each(function(i){ 
					totalW += $(this).outerWidth(true);
				});
				
				return totalW;
			}
			
			var li;
			
			
			function addHover(navA, target) {
					
					if (!navA || navA.length == 0) {
						return;
					}
					
					//navA.children().css("display", "block");
					navA.children().css("float", "left");
					navA.children().css("clear", "left");
	
					navA.hover(
						function (event) {
							
							
							if ($.browser.msie) {
								if ($(this).children().filter('.active').css("display") == "block") {
									return;
								}
								
								$(this).children().not('.hover').css("display", "none");
								$(this).children().filter('.hover').css("display", "block");
							} else {
								$(this).children().addClass('hover');
								
								// apply opacity on image//
								if (target == "navbar" || target == "thumbscroll") {
									var normalOpacity = jsonObj['inner' + target + 'itemthumb.opacity'];
									var hoverOpacity = jsonObj['inner' + target + 'itemthumb.hover.opacity'];
									var activeOpacity = jsonObj['inner' + target + 'itemthumb.active.opacity'];
								
									if(!$(this).children().hasClass('active') && $(this).children().children('li').length > 0) { 
										$(this).find('img').css({opacity: jsonObj[hoverOpacity]});
									}	
								}
							}
							
							if(jsonObj.pauseOnHover == true) {
								slider.stopAuto();
								showPlay();
							}
						}
					, function(event) {
						
						if ($.browser.msie) {
							var activeA = $(this).parent().children().children().filter(".active");
							var activeli;
							activeA.each(
								function(index) {
									if ($(this).css("display") == "block") {
										activeli = $(this).parent();
									}
								}
							);
							
							$(this).children('a').filter('.hover').css("display", "none");
							
							// active slide is the current one//
							if (!activeli || activeli.is(this)) {
								//alert('$(this)1##' + $(this).html());
								$(this).children('a').filter('.active').css("display", "block");
							} else {
								//alert('$(this)2##' + $(this).html());
								$(this).children('a').not('.hover, .active').css("display", "block");
								
							}
						} else {
							$(this).children('a').removeClass('hover');
						
							// apply opacity on image//
							if (target == "navbar" || target == "thumbscroll") {
								var normalOpacity = jsonObj['inner' + target + 'itemthumb.active.opacity'];
								var hoverOpacity = jsonObj['inner' + target + 'itemthumb.active.opacity'];
								var activeOpacity = jsonObj['inner' + target + 'itemthumb.active.opacity'];
								
								
								
								if(!$(this).children().hasClass('active') && $(this).children().children('img').length > 0) { 
									$(this).find('img').css({opacity: normalOpacity});
								}
								
								if($(this).children().hasClass('active') && $(this).children().children('img').length > 0) { 
									$(this).find('img').css({opacity: activeOpacity});
									
									//alert($(this).children().hasClass('active') + "##" +activeOpacity);
								}
							}
						}
						
						if(jsonObj.pauseOnHover == true) {
							slider.startAuto();
							//showStop();
						}
					})
				}
			
			for (var i = 0; i < ids[0].length; i++) {
				var navA = $("div[id='" + instanceName + "_" + ids[0][i] + "_in'] ul li");
				addHover(navA, ids[0][i]);
			}
			
			
			// add on click listener on nav bar items
			$("div[id^='" + instanceName + "_numbers'] ul, div[id^='" + instanceName + "_bullets'] ul, div[id^='" + instanceName + "_navbar'] ul, div[id^='" + instanceName + "_thumbscroll'] ul" ).children("li").click(
				function(event){

					event.preventDefault();
					if (jsonObj.stopAtInteraction) {
						slider.stopAuto();
						showPlay()
					}
					
					slider.goToSlide($(this).index() + 1);
				}
			)
			var thumbSettings = getThumbSettings(jsonObj, 'innerthumbscroll');
			var outerThumbSettings = getThumbSettings(jsonObj, 'thumbscroll');
			
			
			var navigationScrollers = [];
			var navigationElements = ['numbers', 'bullets', 'navbar', 'innernumbers', 'innerbullets', 'innernavbar'];
			for(var i=0;i<navigationElements.length;i++) { 
				var nav = (navigationElements[i].indexOf("inner") >= 0) ? navigationElements[i].replace("inner","") + "_in" : navigationElements[i];
				//alert("div[id='" + instanceName + "_" + nav  + "']");
				var el = $("div[id='" + instanceName + "_" + nav  + "']");
				if(el.length > 0) { 
					try { 
						
						var navScroller = initNavScroller(el, getThumbSettings(jsonObj, navigationElements[i]));
						slider.bind('xtd:beforeEffect', function(event, index) {
							navScroller.selectThumb(index);
						});
						navigationScrollers.push(navScroller);
						if(jsonObj["tooltip.show"]) { 
							el.find('ul').thumbTooltips(getTooltipSettings(jsonObj, navigationElements[i], instanceName));
						}
					} catch(e) { 
						alert(e);
					}
				}
				
			}
			
			// handle current slide feature 
			
			var currentSlide = $("div[id^='" + instanceName + "_currentslide']").add($("div[id^='" + instanceName + "_currentslide_in']"));
			currentSlide.each(function () { 
				var cs = $(this);
				var initialValue = cs.html().replace("{total}",jsonObj.source.length);
				var val = initialValue.replace("{index}", "1");
				cs.html(val);
				
				slider.bind('xtd:beforeEffect', function(event, index) {
					val = initialValue.replace("{index}", index+1);
					cs.html(val);
				});
			});
						
			thumbSettings.changed = function(index) {
				if (jsonObj.stopAtInteraction) {
					slider.stopAuto();
					showPlay()
				}
					
				slider.goToSlide(index + 1);
			}
			
			outerThumbSettings.changed = function(index) {
				if (jsonObj.stopAtInteraction) {
					slider.stopAuto();
					showPlay()
				}
					
				slider.goToSlide(index + 1);
			}
			
			thumbSettings.mouseChanged = function(change) { 
				if(!jsonObj.pauseOnHover == true) return;
				switch(change) { 
					case "in":
						slider.stopAuto();

						//showPlay()
					break;
					case "out":
						slider.startAuto();
						//showStop();
					break;
				}
			}
			
			outerThumbSettings.mouseChanged = function(change) { 
				if(!settings.pauseOnHover == true) return;
				switch(change) { 
					case "in":
						slider.stopAuto();
						//showPlay();
					break;
					case "out":
						slider.startAuto();
						//showStop();
					break;
				}
			}
			
			//alert(JSON.stringify(thumbSettings) + "##" + JSON.stringify(outerThumbSettings));
			
			var thumbScroller = initThumbScroller(instanceName, thumbSettings, true) 
			var outerThumbScroller = initThumbScroller(instanceName, outerThumbSettings, false) 
			
			if (thumbScroller.length > 0 || outerThumbScroller.length > 0) {
				//thumbScroller.add(outerThumbScroller);
				if(jsonObj["tooltip.show"]) { 
				
				outerThumbScroller.find('ul').thumbTooltips(getTooltipSettings(jsonObj, 'thumbscroll', instanceName));
				
				//thumbTooltipsSettings.direction = "vertical";
				thumbScroller.find('ul').thumbTooltips(getTooltipSettings(jsonObj, 'innerthumbscroll', instanceName));
				}
				/*
				$("#goToSlide").click(function(){
					var slide = parseInt($("#slideNo").val());
					thumbScroller.scrollToIndex(slide);
				});
				
				$("#goBack").click(function(){
					thumbScroller.prevThumb();
					slider.goToSlide('prev');
				});
				
				$("#goNext").click(function(){
					thumbScroller.nextThumb();
					slider.goToSlide('next');
				});*/
				
				//alert(slider);
				slider.bind('xtd:beforeEffect', function(event, index) {
					if (thumbScroller.length) thumbScroller.selectThumb(index);
					if (outerThumbScroller.length) outerThumbScroller.selectThumb(index);
				});
				
				thumbScroller.selectThumb(0);
			}
			
			
			
			
			return slider;
		}
	
		
		function initThumbScroller(instanceName, thumbSettings, inner) {
		//alert('init thumbScroller');
			//return;
			var thumbScroller = $("#" + instanceName + "_thumbscroll" + (inner ? '_in' : ''));
			if(!thumbScroller) return;
			
			thumbScroller.thumbnailScroller(thumbSettings);
			
			//thumbScroller.css('z-index', 999);

			thumbScroller.mouseenter(function() {
				thumbScroller.data({'mouseover' : true});
			}).mouseleave(function() {
				thumbScroller.data({'mouseover' : false});
			})
			
			return thumbScroller;
		}
		
		function initNavScroller(navElem, thumbSettings) { 			
			navElem.thumbnailScroller(thumbSettings);
			//navElem.css('z-index',10000);
			return navElem;
		}
		
		
		
		function getThumbSettings(jsonObj, propertyHolder) { 
			var obj = {
				itemsalign : "left",
				scrollerType : "hoverPrecise", 
				scrollerOrientation : "horizontal", 
				thumbs : jsonObj.thumbsource,
				"hover.mouseOverEffect" : true,
				"hover.mouseOverEffectDuration" : 1000,
				"hover.mouseOverEffectEasing" : 'swing',
				"opacity" : 1,
				"hover.opacity" : 1,
				"active.opacity" : 1,
				"back.opacity" : 1,
				"next.opacity" : 1
				
			}
			
			for (var prop in obj) {
				var jsonProp = propertyHolder + "." + prop;
				if(prop == "back.opacity" || prop == "next.opacity") { 
					jsonProp = propertyHolder + "_" + prop;
					//alert(jsonProp);
				}
				
				if (jsonObj[jsonProp] && prop != "opacity") {
					obj[prop] = jsonObj[jsonProp];
				} else { 
					// check if it's items property//
					jsonProp = propertyHolder + "item." + prop;
					if(jsonObj[jsonProp] != undefined) {
						obj[prop] = jsonObj[jsonProp]
					}
					
					if(propertyHolder.indexOf('thumbscroll') > -1 || propertyHolder.indexOf('navbar') > -1) { 
						// check if it's a thumb property
						jsonProp = propertyHolder + "itemthumb." + prop;
						if(jsonObj[jsonProp] != undefined) {
							obj[prop] = jsonObj[jsonProp];
						}
					}
					
				}
			
			}
		//	obj.scrollerTarget = propertyHolder;
			return obj;
		}
		
		function getTooltipSettings(jsonObj, propertyHolder, instanceName) { 
			var obj = {
				speed		: (jsonObj["tooltip.speed"]) ? jsonObj["tooltip.speed"].replace("px","") : 100,
				easing		: (jsonObj["tooltip.easing"]) ? jsonObj["tooltip.easing"].replace("px","") : 'jswing',
				thumb_width : (jsonObj["tooltip.width"]) ? jsonObj["tooltip.width"].replace("px","") : 100,
				thumb_height : (jsonObj["tooltip.height"]) ? jsonObj["tooltip.height"].replace("px","") : 75,
				
				side : (jsonObj["tooltip.side"]) ? jsonObj["tooltip.side"].replace("px","") : '',
				
				reverseSide :  jsonObj["tooltip.reverseSide"] ? jsonObj["tooltip.reverseSide"] : false,
				
				zoom		: false,
				zoomratio	: 1.3,
				zoomspeed	: 15000,
				
				source : jsonObj.tooltipsource,
				
				previewWrapperClass : instanceName + '_tooltip_in_preview_wrapper',
				thumbnailsClass : instanceName + '_tooltip_in',
				previewClass : instanceName + '_tooltip_in_preview',
				direction : jsonObj[propertyHolder + "item.orientation"],
				scrollDir : jsonObj[propertyHolder + "item.orientation"],
				
				offsX : (jsonObj["tooltip.offsX"]) ? jsonObj["tooltip.offsX"].replace("px","") : 100,
				offsY : (jsonObj["tooltip.offsY"]) ? jsonObj["tooltip.offsY"].replace("px","") : 100
			}
			/*
			for (var prop in obj) {
				var jsonProp = propertyHolder + "." + prop;
				if (jsonObj[jsonProp]) {
					obj[prop] = jsonObj[jsonProp];
				}
			}
			*/
			return obj;
		}
		
	}
)(xtd_jQuerySlideshow);


(function ($) {
	//$this.css('position', 'relative');
	
	$.fn.scale3 = function(options){
		
		return this.each(function(){ 
			
			var $this = $(this);
			
			var isVertical = options.orientation == "vertical"
			
			//alert($this.outerHeight());
			
			var bgImage =  $this.css('background-image');
			var src = bgImage.replace(/url\(['"]*/gi, '').replace(/['"]*\)/gi, '');
			
			
			$bgContainer = $('<div />').css({
				top : '0px',
				left : '0px',
				position : 'absolute',
				width : $this.innerWidth(),
				height : $this.innerHeight(),
				'z-index' : -1
			});
			
			var top = '0px';
			var left = '0px';
			var right = 'auto';
			var bottom = 'auto';
			var width = isVertical ? $this.innerWidth() : '25px';
			var height = isVertical ? '25px' : $this.innerHeight();
			var position = isVertical ? 'left top' : 'left top';
			
			$bgContainerLeft = $('<div />').css({
				top : top,
				left : left,
				right : right,
				bottom : bottom,
				position : 'absolute',
				width : width,
				height : height,
				overflow : 'hidden',
				//'background-repeat' : 'no-repeat',
				//'background-position' : position,
				//'background-image' :  $this.css('background-image'),
				'z-index' : -1
			});
			
			width = isVertical ? $this.innerWidth() : '1000px';
			height = isVertical ? 'auto' : $this.innerHeight();
			
			var align = isVertical ? 'top': 'left';

			$bgContainerLeftImg = $('<img />').attr({
				'src' : src,
				align : align
			}).css({
				position : 'absolute',
				height : height,
				width:  width,
				'z-index' : -2
			});
			
			
			top = isVertical ? 'auto': '0px';
			left = isVertical ? '0px': 'auto';

			right = isVertical ? 'auto': '0px';
			bottom = isVertical ? '0px': 'auto';
			
			width = isVertical ? $this.innerWidth() : '25px';
			height = isVertical ? '25px' : $this.height();
			position = isVertical ? 'left bottom' : 'right top',

			$bgContainerRight = $('<div />').css({
				top : top,
				left : left,
				right : right,
				bottom : bottom,
				position : 'absolute',
				width : width,
				height : height,
				overflow : 'hidden',
				//'background-repeat' : 'no-repeat',
				//'background-position' :  position,
				//'background-image' :  $this.css('background-image'),
				'z-index' : -1
			});

			width = isVertical ? $this.innerWidth() : '1000px';
			height = isVertical ? 'auto' : $this.innerHeight();
		
			right = isVertical ? 'auto': '0px';
			bottom = isVertical ? '0px': 'auto';
			
			var align = isVertical ? 'bottom': 'right';

			$bgContainerRightImg = $('<img />').attr({
				'src' : src,
				align : align
			}).css({
				
				right : right,
				bottom : bottom,
				position : 'absolute',
				height : height,
				width:  width,
				'z-index' : -2
			});
			
			
						
			top = isVertical ? '25px': '0px';
			left = isVertical ? '0px': '25px';
			right = isVertical ? 'auto': '25px';
			bottom = isVertical ? '25px': 'auto';
			
			width = isVertical ? $this.innerWidth() : 'auto';
			height = isVertical ? 'auto' : $this.innerHeight();
		
			$bgContainerMiddle = $('<div />').css({
				top : top,
				left : left,
				right : right,
				bottom : bottom,
				position : 'absolute',
				width : width,
				height : height,
				overflow: 'hidden',
				'z-index' : -2
			});
			
			width = isVertical ? $this.innerWidth() : '1000px';
			height = isVertical ? '1000px' : $this.innerHeight();
		
			top = isVertical ? '-100px': '0px';
			left = isVertical ? '0px': '-100px';
			right = isVertical ? 'auto': '-100px';
			bottom = isVertical ? '-100px': 'auto';
			var align = isVertical ? 'left': 'top';
			
			$bgContainerMiddleImg = $('<img />').attr({
				'src' : src,
				align : align
			}).css({
				top : top,
				left : left,
				right : right,
				bottom : bottom,
				position : 'absolute',
				height : height,
				width:  width,
				'z-index' : -2
			});
			
			$bgContainerLeft.append($bgContainerLeftImg);
			$bgContainerMiddle.append($bgContainerMiddleImg);
			$bgContainerRight.append($bgContainerRightImg);
			$bgContainer.append($bgContainerLeft).append($bgContainerMiddle).append($bgContainerRight);
			
			$(this).append($bgContainer);
			
			$this.css('background-image', 'none')
		});
	}
}

)(xtd_jQuerySlideshow);


/*
Thumbnail scroller jQuery plugin
Author: malihu [http://manos.malihu.gr]
Homepage: manos.malihu.gr/jquery-thumbnail-scroller
*/
(function($){  
 $.fn.thumbnailScroller=function(options){  
	var defaults={ //default options
		scrollerType:"clickButtons", //values: "hoverPrecise", "hoverAccelerate", "clickButtons"
		scrollerOrientation:"horizontal", //values: "horizontal", "vertical"
		scrollEasing:"easeOutCirc", //easing type
		scrollEasingAmount:800, //value: milliseconds
		acceleration:2, //value: integer
		scrollSpeed:600, //value: milliseconds
		noScrollCenterSpace:0, //value: pixels
		autoScrolling:0, //value: integer
		autoScrollingSpeed:8000, //value: milliseconds//
		autoScrollingEasing:"easeInOutQuad", //easing type//
		autoScrollingDelay:2500, //value: milliseconds,
		thumbs : [], //thumbs data source,
		changed : function(index){}
	};
	
	var activeSlide = 0;
	
	var options=$.extend(defaults,options);
	
	function applyOpacity() {
 		return !(options["active.opacity"] == options["hover.opacity"] == options["opacity"] == 1)
	}
	
	function showActive(el) {
		if (!$.browser.msie) {	
			el.children('a').removeClass("hover"); 
			el.children('a').removeClass("normal"); 
			el.children('a').addClass("active"); 
		}
		
		//alert('showActive$$' + el.children('a').filter('.active').find('img').length);
		if (applyOpacity()) {
			//alert(el.children('a').filter('.active').find('img').not('.bgImg').length);
			el.children('a').filter('.active').find('img').not('.bgImg').css('opacity', options["active.opacity"]);//.applyOpacity(options["active.opacity"])//.css('opacity', options["active.opacity"]);
		}
	}
	
	
	function hideActive(el) {
		if (!$.browser.msie) {	
			trace('hide active thumb');
			el.children('a').removeClass("active"); 
			el.children('a').addClass("normal"); 
		}
		//alert(el.find('img').length);
		if (applyOpacity()) {
			el.children('a').filter('.normal').find('img').not('.bgImg').css('opacity', options["opacity"]);//.applyOpacity(options["opacity"])//.css('opacity', options["opacity"]);
		}
	}
	
	
	function showNormal(el) {

		if (!$.browser.msie) {		
			trace('show normal thumb');
			el.children('a').removeClass("hover"); 
			el.children('a').addClass("normal");
		}
		
		//alert('showNormal');
		if (applyOpacity()) {
			if(!(el.children('a').hasClass('active') && el.children('a').filter('.active').css("display") != 'none')) { 
				el.children('a').filter('.normal').find('img').not('.bgImg').css('opacity', options["opacity"]);//.applyOpacity(options["opacity"])
				//el.find('img').css('opacity', options["opacity"]);
			} else {
				el.children('a').filter('.active').find('img').not('.bgImg').css('opacity', options["active.opacity"])//.applyOpacity(options["active.opacity"])
				//el.find('img').css('opacity', options["active.opacity"]);
			}
		}
	}
	
	function showHover(el) {
		if (!$.browser.msie) {
			trace('show hover thumb');
			el.children('a').removeClass("normal"); 
			el.children('a').addClass("hover"); 			
		}
		
		if (applyOpacity()) {
			//if(!(el.children('a').hasClass('active') && el.children('a').filter('.active').css("display") != 'none')) {
				el.children('a').filter('.hover').find('img').not('.bgImg').css('opacity', options["hover.opacity"]);//.applyOpacity(options["active.opacity"])
				//el.find('img').css('opacity', options["hover.opacity"]);
			//} 
		}
	}
	
	
	
	function nextThumb() {
		if (activeSlide < $scroller.children().length - 1) {
			var thumb = $scroller.children().eq(activeSlide);
			//thumb.children('a').removeClass('active');
			
			showNormal(thumb);
			
			activeSlide++;
			
			thumb = $scroller.children().eq(activeSlide);
			//thumb.children('a').addClass('active');
			
			showActive(thumb);
			
			/*
			if (options.changed) {
				options.changed(activeSlide);
			}*/
			
			scrollToIndex(activeSlide);
		}
	}
	
	function prevThumb() {
		if (activeSlide > 0) {
			var thumb = $scroller.children().eq(activeSlide);
			//thumb.children('a').removeClass('active');
			
			showNormal(thumb);
			
			activeSlide--;
			
			thumb = $scroller.children().eq(activeSlide);
			//thumb.children('a').addClass('active');
			
			showActive(thumb);
			
			/*
			if (options.changed) {
				options.changed(activeSlide);
			}*/
			
			scrollToIndex(activeSlide);
		}
	}
	
	function selectThumb(index) {
		
		var prev = $scroller.children().eq(activeSlide);
		hideActive(prev);
		
		trace('in select thumb ' + index);
		activeSlide = index;
		
		var scroll = !($(this).data('mouseover'));
		
		if (scroll) {
			scrollToIndex(index);
		}
		
		var thumb = $scroller.children().eq(index);
		
		
		//trace(thumb.html());
		//$scroller.children().children('a').removeClass('active');
		//showNormal($scroller.children());
		
		//alert('thumb##' + thumb[0]);
		
		showActive(thumb);
		
		//thumb.children('a').addClass('active');
	}
	
	this.nextThumb = nextThumb;
	this.prevThumb = prevThumb;
	this.selectThumb = selectThumb;
	
	function scrollToIndex(index){
		
		//trace('in scroll to index');
		var thumb = $scroller.children().eq(index);
		var noOfThumbs = $scroller.children().length;
		//alert(noOfThumbs);
		
		if(options.scrollerOrientation=="horizontal"){
			noOfThumbs = $this.width() / thumb.outerWidth(true);
		} else {
			noOfThumbs = $this.height() / thumb.outerHeight(true);
		}
		
		noOfThumbs = Math.floor(noOfThumbs/2);
		
		var newLeft = - thumb.position().left;
		newLeft += noOfThumbs * thumb.outerWidth(true);
		
		//alert(thumb.outerWidth(true));
		
		if (totalWidth + newLeft < $this.width()) {
			newLeft = - (totalWidth - $this.width());
		}
		
		if (newLeft > 0 ) {
			newLeft = 0;
		}
		
		var newTop = - thumb.position().top;
		newTop += noOfThumbs * thumb.outerHeight(true);
		
		if (totalHeight + newTop < $this.height()) {
			newTop = - (totalHeight - $this.height());
		}
		
		if (newTop > 0 ) {
			newTop = 0;
		}

		if(options.scrollerOrientation=="horizontal"){
			$scroller.stop().animate({left:newLeft}, options.scrollSpeed, options.scrollEasing, showHideButtons(newLeft,newTop));
		} else {
			$scroller.stop().animate({top:newTop}, options.scrollSpeed, options.scrollEasing, showHideButtons(newLeft,newTop));
		}
		
	}
	
	this.scrollToIndex = scrollToIndex;
	
	function showHideButtons(posX, posY) {
		return;
		
		if(options.scrollerType != "clickButtons") return;
		//var posX = $scroller.position().left;
		//var posY = $scroller.position().top;
		
		var diffX = totalWidth + (posX - $this.width());
		var diffY = totalHeight + (posY - $this.height());	
		
		if(options.scrollerOrientation == "horizontal") { 
			if(diffX <= 0) { 
				$scrollerNextButton.stop().hide("fast");
			} else {
				$scrollerNextButton.stop().show("fast");
			}
			
			if(posX >= 0) { 
				$scrollerPrevButton.stop().hide("fast");
			} else { 
				$scrollerPrevButton.stop().show("fast");
			}
		} else { 
			//alert(diffY);
			if(diffY <= 0) { 
				$scrollerNextButton.stop().hide("fast");
			} else {
				$scrollerNextButton.stop().show("fast");
			}
			//alert(posY);
			if(posY >= 0) { 
				$scrollerPrevButton.stop().hide("fast");
			} else { 
				$scrollerPrevButton.stop().show("fast");
			}
		}
	}
	
	function nextPage(){
		var posX = $scroller.position().left;
		var posY = $scroller.position().top;
		
		var diffX = totalWidth + (posX - $this.width());
		var diffY = totalHeight + (posY - $this.height());
		
		//$scrollerPrevButton.stop().show("fast");
		//alert(diffX + " = " + totalWidth + " + " + posX  + " - " + $this.width());
		
		if(options.scrollerOrientation=="horizontal"){
			if(diffX >= $this.width()){
				$scroller.stop().animate({left:"-="+$this.width()},options.scrollSpeed,options.scrollEasing,function(){
					//if(diffX==$this.width()){
						//$scrollerNextButton.stop().hide("fast");
					//}
				});
			} else {
				//$scrollerNextButton.stop().hide("fast");
				$scroller.stop().animate({left:$this.width()-totalWidth},options.scrollSpeed,options.scrollEasing);
			}
		}else{
			if(diffY>=$this.height()){
				$scroller.stop().animate({top:"-="+$this.height()},options.scrollSpeed,options.scrollEasing,function(){
					//if(diffY==$this.height()){
						//$scrollerNextButton.stop().hide("fast");
					//}
				});
			} else {
				//$scrollerNextButton.stop().hide("fast");
				$scroller.stop().animate({top:$this.height()-totalHeight},options.scrollSpeed,options.scrollEasing);
			}
		}
	}
	
	function prevPage() {
		var posX=$scroller.position().left;
		var diffX=totalWidth+(posX-$this.width());
		var posY=$scroller.position().top;
		var diffY=totalHeight+(posY-$this.height());
		//$scrollerNextButton.stop().show("fast");
		if(options.scrollerOrientation=="horizontal"){
			if(posX + $this.width() <= 0){
				$scroller.stop().animate({left : "+=" + $this.width()}, options.scrollSpeed, options.scrollEasing, function(){
					//if(posX+$this.width()==0){
					//	$scrollerPrevButton.stop().hide("fast");
					//}
				});
			} else {
				//$scrollerPrevButton.stop().hide("fast");
				$scroller.stop().animate({left:0},options.scrollSpeed,options.scrollEasing);
			}
		}else{
			if(posY + $this.height() <= 0){
				$scroller.stop().animate({top:"+="+$this.height()}, options.scrollSpeed, options.scrollEasing, function(){
					//if(posY+$this.height()==0){
					//	$scrollerPrevButton.stop().hide("fast");
					//}
				});
			} else {
				//$scrollerPrevButton.stop().hide("fast");
				$scroller.stop().animate({top:0},options.scrollSpeed,options.scrollEasing);
			}
		}	
	}
	
	var $scroller, $scrollerContainer, $scrollerNextButton, $scrollerPrevButton, totalWidth, totalHeight, $this;
	
	var isNav;
	
    return this.each(function(){
		
		//cache vars
		$this = $(this);
		this.scrollToIndex = scrollToIndex;

		
		var hasThumbs = false;
		var thumbsType;
		
		if($(this).attr('id').indexOf('thumbscroll') > 0 ) { 
			hasThumbs = true;
			thumbsType = 'thumbscroll';
		} 
		if($(this).attr('id').indexOf('navbar') > 0) { 
			hasThumbs = true;
			thumbsType = 'navbar';
		}
		
		$(this).hover(function() { 
			if(options.mouseChanged) { 
				options.mouseChanged('in');
			}
		}, function() { 
			if(options.mouseChanged) { 
				options.mouseChanged('out');
			}
		});
		
		
		$scrollerContainer = $('<div />');
		$this.append($scrollerContainer);
		
		
		$scrollerContainer.append($this.children('ul').clone(true,true));
		$this.children('ul').first().remove();
		$scroller = $scrollerContainer.children('ul');
		
		
		
		if(hasThumbs) { 
			//var thumbsImgs = createThumbsImgs(options.thumbs);
			
			$scroller.children().each(function (i) { 
				var source = options.thumbs;
				var img;
				if(thumbsType == "navbar") { 
					
					img = $(this).children('a').children('img').attr('src', source[i].src).css({'width' : source[i].width + 'px', 'height' : source[i].height + 'px'});
				} else { 
					
					var pw = $(this).children('a').width();
					var ph =  $(this).children('a').height();
					
					img = $('<img/>').attr('src', source[i].src);
					
					$(this).children('a').append(img);
					
					var bl = parseInt(img.css('border-left-width')) - parseInt(img.css('padding-left'));
					var br = parseInt(img.css('border-right-width')) - parseInt(img.css('padding-right'));
					var bt = parseInt(img.css('border-top-width')) - parseInt(img.css('padding-top'));
					var bb = parseInt(img.css('border-bottom-width')) - parseInt(img.css('padding-bottom'));
							
					$(this).children('a').children('img').css({'width' : (pw - ( bl + br)) + 'px', 'height' : (ph - (bt + bb)) + 'px'});
					$(this).children('a').children('img').attr({'width' : (pw - ( bl + br)), 'height' : (ph - (bt + bb))})
					
				}
				
				
				var el = $(this);
				var img = el.find('img').not('bgImg');
				img.css('opacity', options["opacity"]);
				
				var a = el.children('a').first();
				var duration = parseFloat(options["hover.mouseOverEffectDuration"]);

				el.hover(function () { 
					if(options["hover.mouseOverEffect"] == true) {
					//	alert(el.hasClass('active'));
						if(!el.children('a').hasClass('active')) { 
							img.stop().animate({opacity:options["hover.opacity"]},options["hover.mouseOverEffectDuration"],options["hover.mouseOverEffectEasing"]);
						} else {
							trace("########## it's active ##############");
							showActive(el)
						}
					} else { 
						if(!(el.children('a').hasClass('active') && el.children('a').filter('.active').css('display') == "block")) { 
						//el.css({opacity: options["hover.opacity"]});
							showHover(el);
						}
					}
				}, function () { 
					if(options["hover.mouseOverEffect"] == true) {
						if(!(el.children('a').hasClass('active') && el.children('a').filter('.active').css('display') == "block")) { 
							
							img.stop().animate({opacity:options["opacity"]}, parseFloat(options["hover.mouseOverEffectDuration"]),options["hover.mouseOverEffectEasing"]);
						} else {
							showActive(el);
						}
						//animateThumb(a, "out");
					} else {
						//el.css({opacity: options["opacity"]});
						if(!(el.children('a').hasClass('active') && el.children('a').filter('.active').css('display') == "block")) { 
							showNormal(el);
						}
					}
				});
			});
		}
		
		$scrollerContainer.css("overflow", "hidden");
		//alert("attr id " + $(this).attr('id') + " html : " + $scroller.html());
		//var clipValues = ['-9999px', $this.width() + "px", 'auto', '0px'];
		$scrollerContainer.css({
			'width' : $(this).width(),
			'position' : 'relative',
			'height' : $(this).height()
		});
	
		$scrollerNextButton = $('#' + $this.attr('id').replace("_in","_next_in"));
		if(options["next.opacity"]) { 
			$scrollerNextButton.css({opacity: options["next.opacity"]}); 
		}
		
		$scrollerPrevButton = $('#' + $this.attr('id').replace("_in","_back_in"));
		if(options["back.opacity"]) { 
			$scrollerPrevButton.css({opacity: options["back.opacity"]}); 
		}
		$scrollerNextButton.add($scrollerPrevButton).hover(function() { 
			$(this).addClass('hover');
		}, function() { 
			$(this).removeClass('hover');
		});
		//set scroller width
		if(options.scrollerOrientation == "horizontal"){
			//alert('outerWidth : ' + $scroller.outerWidth(true));
			totalWidth = 0;
			$scroller.children('li').each (function() {
				//var over = $(this).children('a').first().data("overCSS");
				totalWidth += $(this).outerWidth(true)// + over.borderLeftWidth + over.borderRightWidth + over.paddingRight + over.paddingLeft;			
			});
			
			$scroller.css("width",totalWidth); 
			
		
			totalHeight = $scroller.outerHeight(true);
		}else{
			totalWidth = $scroller.outerWidth(true);
			totalHeight = 0;
			$scroller.children('li').each (function() {
				totalHeight += $(this).outerHeight(true);			
			});
		
			$scroller.css("height",totalHeight);
		}
		 //scroller height
		 
		//alert(totalWidth + "##" + $scroller.width()  + "##" + $scrollerContainer.width())

		//do the scrolling//
		if((totalWidth > $this.width() && options.scrollerOrientation == "horizontal") || (totalHeight > $this.height() && options.scrollerOrientation == "vertical")){ //needs scrolling		
			var pos;
			var mouseCoords;
			var mouseCoordsY;
			//alert(options.scrollerType);
			switch (options.scrollerType){ //type hoverAccelerate
				case "hoverAccelerate" : 
					var animTimer;
					var interval = 8;
					$this.hover(function(){
						$this.mousemove(function(e){
							pos = findPos(this);
							//trace('mousemove##' + pos[0] + "##" + pos[1]);
							mouseCoords = (e.pageX-pos[1]);
							mouseCoordsY = (e.pageY-pos[0]);
						});
						
						clearInterval(animTimer);
						animTimer = setInterval(Scrolling, interval);
					}, function(){
						clearInterval(animTimer);
						$scroller.stop();
					});
					
					$scrollerPrevButton.add($scrollerNextButton).hide(); //hide buttons
				break;
				
				case "clickButtons" : 
					ClickScrolling();
				break;
				
				case "hoverPrecise" : 		
			
					pos = findPos(this);
				
					//alert('pos[0] + "##" + pos[1]##' + pos[0] + "##" + pos[1]);
					//trace(pos[0] + "##" + pos[1]);
					
					$this.mousemove(function(e){
						//trace('mousemove##' + pos[0] + "##" + pos[1]);
						
						mouseCoords = (e.pageX - pos[1]);
						mouseCoordsY = (e.pageY - pos[0]);
						
						var mousePercentX = mouseCoords/$this.width(); if(mousePercentX > 1) {mousePercentX = 1;}
						var mousePercentY = mouseCoordsY/($this.outerHeight()); if(mousePercentY > 1){mousePercentY = 1;}
						
						if (mousePercentX < 0.1) { 
							mousePercentX = 0;
						} 
						if (mousePercentX > 0.9) { 
							mousePercentX = 1;
						} 
						
						if (mousePercentY < 0.1) { 
							mousePercentY = 0;
						} 
						if (mousePercentY > 0.9) { 
							mousePercentY = 1;
						} 
						
						var destX = Math.round(-((totalWidth - $this.width())*(mousePercentX)));
						var destY = Math.round(-((totalHeight - $this.height())*(mousePercentY)));
						
						//alert(destX + "##" + totalWidth + "##" + $this.width() + "##" + mousePercentX);
						if(options.scrollerOrientation=="horizontal"){
							$scroller.stop(true, false).animate({left:destX}, options.scrollEasingAmount, options.scrollEasing); 
						} else { 
							$scroller.stop(true, false).animate({top:destY}, options.scrollEasingAmount, options.scrollEasing); 
						}
						
					});
					
					$scrollerPrevButton.add($scrollerNextButton).hide(); //hide buttons
				break;
			}
			//auto scrolling
			if(options.autoScrolling){
				AutoScrolling();
			}
			
		} else {
			//no scrolling needed
			//$scrollerPrevButton.add($scrollerNextButton).hide(); //hide buttons
			
			// align thumbs
			if(options.scrollerOrientation == "horizontal") { 
				if(options.itemsalign == "right") { 
					$scrollerContainer.children('ul').css({"marginRight" : "0px", "marginLeft" : "auto"});
				} else { 
					if(options.itemsalign == "center") { 
						$scrollerContainer.children('ul').css({"marginRight" : "auto", "marginLeft" : "auto"});
					}	
				}
			}
			
			
		}
		
		//"hoverAccelerate" scrolling fn
		var scrollerPos;
		var scrollerPosY;
		function Scrolling(){
			if((mouseCoords<$this.width()/2) && ($scroller.position().left>=0)){
				$scroller.stop(true,true).css("left",0); 
			}else if((mouseCoords>$this.width()/2) && ($scroller.position().left<=-(totalWidth-$this.width()))){
				$scroller.stop(true,true).css("left",-(totalWidth-$this.width())); 
			}else{
				if((mouseCoords<=($this.width()/2)-options.noScrollCenterSpace) || (mouseCoords>=($this.width()/2)+options.noScrollCenterSpace)){
					scrollerPos=Math.round(Math.cos((mouseCoords/$this.width())*Math.PI)*(interval+options.acceleration));
					$scroller.stop(true,true).animate({left:"+="+scrollerPos},interval,"linear"); 
				}else{
					$scroller.stop(true,true);
				}
			}
			if((mouseCoordsY<$this.height()/2) && ($scroller.position().top>=0)){
				$scroller.stop(true,true).css("top",0); 
			}else if((mouseCoordsY>$this.height()/2) && ($scroller.position().top<=-(totalHeight-$this.height()))){
				$scroller.stop(true,true).css("top",-(totalHeight-$this.height())); 
			}else{
				if((mouseCoordsY<=($this.height()/2)-options.noScrollCenterSpace) || (mouseCoordsY>=($this.height()/2)+options.noScrollCenterSpace)){
					scrollerPosY=Math.cos((mouseCoordsY/$this.height())*Math.PI)*(interval+options.acceleration);
					$scroller.stop(true,true).animate({top:"+="+scrollerPosY},interval,"linear"); 
				}else{
					$scroller.stop(true,true);
				}
			}
		}
		//auto scrolling fn
		var autoScrollingCount=0;
		function AutoScrolling(){
			
			$scroller.delay(options.autoScrollingDelay).animate(
				{
					left : -(totalWidth-$this.width()),
					top : -(totalHeight-$this.height())
				},
				
				options.autoScrollingSpeed,
				options.autoScrollingEasing, 
				function(){
					$scroller.animate({left:0,top:0},
						options.autoScrollingSpeed,options.autoScrollingEasing,function(){
							autoScrollingCount++;
							if(options.autoScrolling>1 && options.autoScrolling!=autoScrollingCount){
								AutoScrolling();
							}
						});
				}
			);
		}
		
		
		
		//click scrolling fn
		function ClickScrolling(){
			$scrollerPrevButton.show();
			$scrollerNextButton.show();
			
			$scrollerNextButton.click(function(e){
				e.preventDefault();
				nextPage();
			});
			
			$scrollerPrevButton.click(function(e){ //previous button
				e.preventDefault();
				prevPage();
			});
		}
		
		selectThumb(0);
	});  
	

	//global js functions
	//find element Position
	function findPos(obj){
		var curleft=curtop=0;
		if (obj.offsetParent){
			curleft=obj.offsetLeft
			curtop=obj.offsetTop
			while(obj=obj.offsetParent){
				curleft+=obj.offsetLeft
				curtop+=obj.offsetTop
			}
		}
		return [curtop,curleft];
	}
	
 };  
 

})(xtd_jQuerySlideshow); 




(function($){  

	$.fn.thumbTooltips = function(options){ 
		var defaults={};
		var opts = $.extend({}, $.fn.thumbTooltips.defaults, options);
		
  	    return this.each(function(){
		
			
			var $this 				= $(this),
				o 					= $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;
			
			var currentHovered = -1,
				current	= 0;
				
			var thumbsImgs = createThumbsImgs(o.source, o);//{width : o.thumb_width, height : o.thumb_height});
			
			var $nav_elems = $(this).children('li');
			var total_elems = $nav_elems.length;
			
			var $ts_preview_wrapper = $('<div/>').addClass(options.previewWrapperClass);//'ts_preview_wrapper'
			var $ts_thumbnails = $('<div/>').addClass(options.thumbnailsClass).css({'z-index' : 1001});
			var $ts_preview = $('<ul/>').addClass(options.previewClass).append(thumbsImgs);
			
			$ts_preview_wrapper.append($ts_preview);
			
			$ts_preview_wrapper.css({
				width	: o.thumb_width + 'px',
				height	: o.thumb_height + 'px'
			});
			
			$ts_thumbnails.append($ts_preview_wrapper);
			$arrow = $('<span/>')
			//$ts_thumbnails.append($arrow);
			
			$('body').append($ts_thumbnails);
			

			
			var $first_nav		= $nav_elems.eq(0),

				w_ts_thumbnails	=  $first_nav.outerWidth(true),
				h_ts_thumbnails	= $first_nav.outerHeight(true)
				
			var t_ts_thumbnails
			var	l_ts_thumbnails	= $first_nav.offset().left/* - 0.5*w_ts_thumbnails + 0.5*$first_nav.width()*/;
			
			//alert(o.direction);
				
			if (o.direction == "horizontal") {
				l_ts_thumbnails	= $first_nav.offset().left;
				t_ts_thumbnails = $this.offset().top - $ts_thumbnails.outerHeight(true);
			} else {
				l_ts_thumbnails	= $this.offset().left - $ts_thumbnails.outerWidth(true);
				t_ts_thumbnails = $first_nav.offset().top - o.thumb_height;
			}

			$ts_thumbnails.css({
				/*width	: w_ts_thumbnails + 'px',
				height	: h_ts_thumbnails + 'px',*/
				top		: t_ts_thumbnails + 'px',
				left	: l_ts_thumbnails + 'px'
			});
			
			/*
			calculate the top and left for the arrow of the tooltip
			top		-> thumb height + border(2*5)
			left	-> (thumb width + border)/2 -width/2
			*/
			
			var t_arrow	= o.thumb_height + 2*5,
				l_arrow	= (o.thumb_width + 2*5) / 2 - $arrow.width() / 2;
			$arrow.css({
				left	: l_arrow + 'px',
				top		: t_arrow + 'px'
			});
			
			if (o.scrollDir == "horizontal") {
				$ts_preview.css('width' , total_elems * o.thumb_width + 'px');	
			} else {
				$ts_preview.css('height' , total_elems * o.thumb_height + 'px');	
			}
			
			$nav_elems.bind('mousemove', showTooltip).bind('mouseleave', hideTooltip);
	
			var firstTime = true;
			
			function showTooltip(e, positionElement){
				var $nav_elem	= $(this),
					idx			= $nav_elem.index();

				var new_left, new_top;
				
				if (o.direction == "horizontal") {
					new_left = e.pageX - /*o.thumb_width*/$ts_thumbnails.outerWidth(true) * 0.5;
				} else {
					if (o.reverseSide) {
						new_left = $this.offset().left + $this.children().outerWidth(true);
						//trace('$this.children().outerWidth(true)##' + $this.children().outerWidth(true))
					} else {
						new_left = $this.offset().left - $ts_thumbnails.outerWidth();
					}
				}
				
				if (o.direction == "horizontal") {
					if (o.reverseSide) {
						new_top = $this.offset().top + $this.children().outerHeight(true);
					} else {
						new_top	= $this.offset().top - $ts_thumbnails.outerHeight();
					}
				} else {
					new_top = e.pageY - $ts_thumbnails.outerHeight(true)*0.5;
				}
				
				if (opts.offsX) {
					if (opts.reverseSide) {
						new_left += parseFloat(opts.offsX);
					} else {
						new_left -= parseFloat(opts.offsX);
					}
				}
				
				if (opts.offsY) {
					if (opts.reverseSide) {
						new_top += parseFloat(opts.offsY);
					} else {
						new_top -= parseFloat(opts.offsY);
					}
				}
				
				//trace('top##' + new_top + "##");
				
				if (firstTime) {
					$ts_thumbnails.css({
						left	: new_left + 'px',
						top : new_top + 'px'
					});
					firstTime = false;
				} else {
					$ts_thumbnails.stop(true)
								  .show().animate({
									left	: new_left + 'px',
									top : new_top + 'px'
								  },  parseFloat(o.speed), o.easing);
				}
			
				/*
				animate the left of the $ts_preview to show the right thumb 
				*/
				
				var prop, val;
				if (o.scrollDir == "horizontal") {
					prop = "left"
					val =  -idx*o.thumb_width + 'px';
				} else {
					prop = "top"
					val =  -idx*o.thumb_height + 'px';
				}
				
				var anim = {};
				anim[prop] = val;
				
				// ie6//
				$ts_preview.css('display' , "block");
				$ts_preview.stop(true).animate(anim, parseFloat(o.speed), o.easing);
				
				//zoom in the thumb image if zoom is true
				if(o.zoom && o.zoomratio > 1){
					var new_width	= o.zoomratio * o.thumb_width,
						new_height	= o.zoomratio * o.thumb_height;
					
					//increase the $ts_preview width in order to fit the zoomed image
					var ts_preview_w	= $ts_preview.width();
					$ts_preview.css('width' , (ts_preview_w - o.thumb_width + new_width)  + 'px');
					
					//alert(new_width + "##" + new_height);
					
					var imgToZoom = $ts_preview.children().eq(idx).find('img');
					
					var originalW = imgToZoom;
					
					
					
					$ts_preview.children().eq(idx).find('img').stop().animate({
						width		: new_width + 'px',
						height		: new_height + 'px'
					},o.zoomspeed);
				}		
				
			}
			
			function hideTooltip(){
				//if zoom set the width and height to defaults
				if(o.zoom && o.zoomratio > 1){
					var $nav_elem	= $(this),
						idx			= $nav_elem.index();
					$ts_preview.children().eq(idx).find('img').stop().css({
						width	: o.thumb_width + 'px',
						height	: o.thumb_height + 'px'	
					});	
				}
				
				$ts_thumbnails.stop(true)
							  .hide();
							  
			}
			
			
			function createThumbsImgs(source, settings) {
				var img, a;
				var container = $('<ul/>');
		
				for (var i = 0; i < source.length; i++) {
					img = $('<img/>').attr('src', source[i].src).css({'width' : settings.thumb_width + 'px', 'height' : settings.thumb_height + 'px'});
					a = $('<li/>').append(img);//$('<a/>').append(img));
					container.append(a);
				}
				
				return container.children();
			}
			
		 });
	}
	
	
	$.fn.thumbTooltips.defaults = {
		speed		: 100,//speed of each slide animation
		easing		: 'jswing',//easing effect for the slide animation
		thumb_width	: 100,//your photos width
		thumb_height: 75,//your photos height
		zoom		: false,//zoom animation for the thumbs
		zoomratio	: 1.8,//multiplicator for zoom (must be > 1)
		zoomspeed	: 15000,//speed of zoom animation
		onClick		: function(){return false;},//click callback,
		direction	: 'vertical',
		scrollDir	: 'horizontal'
	};
	
})(xtd_jQuerySlideshow); 

