/*
	jQuery Homepage Banner Slideshow / Product viewer
 	Copyright (c) 2011 Subramanian 
	codecanyon.net/user/FMedia/
	
	Version: 1.0 
	Release Date: 04 OCT 2011
	
	Built using: jQuery 		version:1.6.2	http://jquery.com/
	
	
*/

(function( $ ){

	function fmslideshow(selector, params){
		
		var defaults = $.extend({}, {
				
				// default variables
				
				banner_width : "",									// Banner width ( default value is 100% )
				banner_height : "",									// Banner height (default value is 100%)

				image_sprite : "http://www.fundesa.es/indipro/fmslideshow_assets/sprite.png",		// Navigation image path
				image_background : "",								// Background pattern image path
				image_topShadow : "",								// Top shadow pattern image path
				image_bottomShadow : "",							// Bottom shadow pattern image path
				image_loader : "http://www.fundesa.es/indipro/fmslideshow_assets/loader_img.png",	// Loader image path
				
				background_fullScreen : false,						// choose whether the background width is taken to browser width or not
				background_move : false,							// Enable/Disable background moving animation
				background_moveDistance : 1250,						// Background image moving distance
				
				buttons_type : 0,									// Choose the dot buttons type, choose the value 0, 1 or 2
				buttons_autoHide : false,							// Enable/Disable dot buttons auto hide
				buttons_align : "BC",								// Dot buttons alignment Options(TL, TC, TR, BL, BC, BR, LC, RC, C)
				buttons_spacing :"15,0",							// Dot buttons spacing, this value is corresponding to buttons_align
				
				button_nextPrevious_type : 0,						// Choose the Next Previous button type, choose the value 0, 1 or 2
				button_nextPrevious_autoHide : true,				// Enable/Disable Next Previous button auto hide

				button_next_align : "RC",							// Next button alignment Options(TL, TC, TR, BL, BC, BR, LC, RC, C)
				button_next_spacing : "20,0",						// Next button spacing, this value is corresponding to button_next_align
				button_previous_align : "LC",						// Previous button alignment Options(TL, TC, TR, BL, BC, BR, LC, RC, C)
				button_previous_spacing : "20,0",					// Previous button spacing, this value is corresponding to button_previous_align
				
				slideShow : true,									// Enable or disable the slideshow
				slideShow_delayTime : 1.5,							// Slideshow Delay time. setting 1 value is equal to one second
				slideShow_loop : true,								// Slideshow play loop or not
				
				default_data_align : "LC",							// Default Slideshow image/text alignment Options(TL, TC, TR, BL, BC, BR, LC, RC, C)
				default_data_spacing : "70,0",						// Default Slideshow image/text spacing, this value is corresponding to default_data_align
				default_data_inOutDirection : "LR",					// Default Slideshow image/text In/Out direction (any combination of direction will work)
				default_data_inOutDistance : "60"					// Default Slideshow image/text In/Out distance
				
				
			} , params);
		

		// IE Browser detection
		var IE8 = $.browser.msie && parseInt($.browser.version, 10) ==8 ? true : false;
		var IE7 = $.browser.msie && parseInt($.browser.version, 10) ==7 ? true : false;
		var IE6 = $.browser.msie && parseInt($.browser.version, 10) ==6 ? true : false;
		
		var curBanner = $(selector);
		var banSliders;
		
		$(curBanner.children()).each(function() {
			if($(this).attr("id") == "fmslideshow"){
				banSliders = $(this);
			}
		});
	
		// Define Required variables 
		var spriteImg = defaults.image_sprite;
		var spriteImgWid = 0;
		var spriteImgHig = 0;
		
		var bannerWidth = defaults.banner_width;
		var curNo = 0;
		var curNoEle = 0;
		var cNo = 0;
		var preNoEle = 0;
		var fullScreen = false;
		var fullScreenChk = false;
		var navAlignCenter = false;
		var slideArr = [];
		var slideConArr = [];
		
		var aniSpd = 400;
		var fadeInTime = 500;
		var fadeOutTime = 200;
		var inTimer = 200;
		var outTimer = 100;
		var bgMoveDis = defaults.background_moveDistance;
		var bgMove = defaults.background_move;
		
		var easyType = "easeOutSine";
		var easyTypeOut = "easeInQuad";
		var easyTypeBackground = "easeInOutQuad";
		
		var lodReqImg = [];
		var lodReqImgNum = 0;
		
		var ln = 0;
		var lns = -1;
		
		var tpShd;
		var btShd;
		
		var navHolder;
		var navArr = [];
		var navBtns;
		
		var slideShow = defaults.slideShow;
		var slideShowZ = slideShow;
		var delayTime = Number(defaults.slideShow_delayTime)*2500;
		var ssInt;
		
		
		var iconsType = Number(defaults.buttons_type) ? Number(defaults.buttons_type)>0 && Number(defaults.buttons_type)<3? Number(defaults.buttons_type) : 0:0;
		var btnWid = iconsType == 0 ? 24 : (iconsType == 1 ? 22 : 25);
		var btnHig = iconsType == 0 ? 24 : (iconsType == 1 ? 30 : 44);
		var btnYpos = iconsType == 0 ? 0 : (iconsType == 1 ? 39 : 80);
		var btnBgSpacing = iconsType == 1 ? 15 : iconsType == 2 ? 7 : 0;
		
		var rightBtn;
		var leftBtn;
		var autoplayLoop = defaults.slideShow_loop;
		var npBtnType = Number(defaults.button_nextPrevious_type)? Number(defaults.button_nextPrevious_type) : 0;
		
		//npBtnType = npBtnType == 1 ? 0 : (npBtnType == 2 ? 2 :1);
		
		var npBtnSiz = npBtnType == 2 ? 36 : (npBtnType == 0 ? 29 : 40);
		var npBtnYpos = npBtnType == 2 ? 0 : (npBtnType == 0 ? 43 : 80);
		

		var buttonsAlign = defaults.buttons_align.toUpperCase();
		var buttonsSpacing = defaults.buttons_spacing .split(",");
		
		var nBtnAlign = defaults.button_next_align.toUpperCase();
		var nBtnSpacing = defaults.button_next_spacing.split(",");

		var pBtnAlign = defaults.button_previous_align.toUpperCase();
		var pBtnSpacing = defaults.button_previous_spacing.split(",");
		
		var autoHide = defaults.button_nextPrevious_autoHide || defaults.buttons_autoHide;
		var autoHideNP = defaults.button_nextPrevious_autoHide;
		var autoHideNavs = [];
		var autoHideBtns = defaults.buttons_autoHide;
		var loadingHolder;
		var loaderCirImg = defaults.image_loader ;
		
		var touchSpacer;
		if ('ontouchstart' in document.documentElement) {
			autoHideBtns = autoHideNP = false;
		}
		
		// Change the sprite image for IE6
		if(IE6){
			var spI2 = spriteImg.split(".");
			spriteImg = spI2[0]+"_ie6.gif";
		}

        var slideLoaded = [];
		var ii = -1;

		$("<style type='text/css'> .cufon_fm{} </style>").appendTo(curBanner);
		curBanner.css({"background-position" : "0px 0px" , "visibility":"hidden"});
		
		if(defaults.banner_height != ""){
			banSliders.css({"height":defaults.banner_height});
		}
		
		banSliders.css({"position":"relative", "margin" : "0 auto", "overflow" : "hidden", "visibility" : "hidden"});

		// Store each images and content on array variable slideConArr and slideArr
		

		$(banSliders.children()).each(function() {
			ii = ii+1;
			slideConArr[ii]=[];
            slideLoaded[ii] = false;
			slideArr[ii] = $(this);
			
			var jj=-1;
			
			$(this).children().each(function() {
				var sel = $(this);

				jj = jj+1;

				if(sel.get(0).nodeName.toUpperCase() == "A"){
					sel = sel.children();
				}
				sel.wrap('<div />');
				
				sel.css({"position": "absolute"});


				if(sel.attr("data-align")){
					sel.parent().data('data-align', sel.attr("data-align").toUpperCase());
				}else{
					sel.parent().data('data-align', defaults.default_data_align.toUpperCase());
					sel.removeAttr("data-align")
				}
				
				if(sel.attr("data-spacing")){
					sel.parent().data('spacingObj',  sel.attr("data-spacing"));
				}else{
					sel.parent().data('spacingObj',  defaults.default_data_spacing);
					sel.removeAttr("data-spacing")
				}
				
				if(sel.attr("data-inOutDirection")){
					sel.parent().data('inOutDirection', sel.attr("data-inOutDirection").toUpperCase());
				}else{
					sel.parent().data('inOutDirection', defaults.default_data_inOutDirection.toUpperCase());
					sel.removeAttr("data-inOutDirection")
				}
				
				if(sel.attr("data-inOutDirection")){
					sel.parent().data('inOutDistance',  sel.attr("data-inOutDistance"));
				}else{
					sel.parent().data('inOutDistance',   defaults.default_data_inOutDistance);
					sel.removeAttr("data-inOutDistance")
				}
				
				// set background transparency for text area
				
				if(sel.children().length>1){
					var bgSel;
					var isBg = false;
					var dd;
					sel.children().each(function() {
						dd = $(this);
						if(dd.attr("id") == "bg"){
							bgSel = dd;
							isBg = true;
						}else{
							if(isBg){
								dd.css({"position":"relative"});
							}
						}
					});
					
					if(isBg){
						if(!IE6){
							bgSel.css({"width":"100%", "height":"100%", "position":"absolute"});
						}else{
							bgSel.css({"width":"100%", "height":dd.height()+12+"px", "position":"absolute"});
						}
					}
				}
				
				// ----
				
				if(sel.html() == "" ){
					sel.parent().data('img-src', sel.attr("src"));
					sel.attr("src","");
					sel.parent().css({
									"overflow":"hidden",
									"background-repeat":"no-repeat",
									"position":"absolute",
									"visibility":"hidden"
									});
					sel.parent().append('<div />');
					slideConArr[ii][jj]=(sel.parent());
				}else{
					sel.parent().css({
									"width":sel.width(),
									"height":sel.height(),
									"position": "absolute"
									});
				}
				
				slideConArr[ii][jj]= (sel.parent());
				if(sel.html() == "" ){sel.remove();}
				slideConArr[ii][jj].css({"visibility":"hidden"});
					
			});
				
		});

		$(banSliders.children()).wrapAll('<div />');
		var allSli = $(banSliders.children());
		allSli.css({"position":"absolute","visibility":"visible","width":"100%","height":banSliders.height()+"px"});
		
		banSliders.prepend('<div />');
		touchSpacer = banSliders.children(':first-child');
		touchSpacer.attr("id","ts");
		touchSpacer.css({"position":"absolute","visibility":"visible","width":"100%","height":banSliders.height()+"px"});
			
		// store required image on array for preload
		
		if(!defaults.background_fullScreen){ 
			curBanner.css({"width":bannerWidth+"px"}); 
		}

		if(defaults.image_background != ""){ 
			lodReqImg.push(defaults.image_background); 
		}
		
		if(defaults.image_topShadow !=""){ 
				lodReqImg.push(defaults.image_topShadow );
		}
		
		if(defaults.image_bottomShadow!=""){ 
				lodReqImg.push(defaults.image_bottomShadow); 
		}
			
		if(loaderCirImg!=""){ 
			lodReqImg.push(loaderCirImg); 
		}
		
		lodReqImg.push(spriteImg);


		var sHigT = 0;
		var sHigB = 0;
	
		// Load the required images
		
		var startReqImgLoad = function (){
            
			if(lodReqImgNum<lodReqImg.length){

                var _im =$("<img />");
                _im.hide();
                _im.bind("load",function(){
					if(lodReqImg[lodReqImgNum] == defaults.image_topShadow ){ sHigT = _im.height();}
					if(lodReqImg[lodReqImgNum] == defaults.image_bottomShadow){ sHigB = _im.height();}
					if(lodReqImg[lodReqImgNum] == spriteImg){ spriteImgWid = _im.width(); spriteImgHig = _im.height();}
					$(this).remove();
					lodReqImgNum++;
					startReqImgLoad();
                }).error(function () { 
					$(this).remove();
					lodReqImgNum++;
					startReqImgLoad();
				});
				
                banSliders.append(_im);
                _im.attr('src',lodReqImg[lodReqImgNum]);

			} else {
				
				// create background, top shadow and bottom shadow
				
                curBanner.css({"visibility":"hidden"});
				curBanner.css({"display": "none"});
				curBanner.prepend('<div ></div>');
				
				tpShd = curBanner.children(':first-child');
				tpShd.css({"width":"100%","height":sHigT+"px",
							"position":"absolute","top":"0px","left":"0px",
							"background-repeat":"repeat-x"});
			
	
				curBanner.prepend('<div ></div>');
				btShd = curBanner.children(':first-child');
				btShd.css({"width":"100%","height":sHigB+"px",
							"position":"absolute","bottom":"0px","left":"0px",
							 "background-repeat":"repeat-x"});
							 
				if(IE6){ btShd.css({"bottom":-sHigB+"px"}); }
				if(defaults.image_background!=""){curBanner.css({"background-image":"url("+defaults.image_background+")", "background-position":"0px" });	}
				if(defaults.image_topShadow !=""){	tpShd.css({"background-image":"url("+defaults.image_topShadow +")"});	}
				if(defaults.image_bottomShadow!=""){	btShd.css({"background-image":"url("+defaults.image_bottomShadow+")"});	}
				
				curBanner.css({"visibility":"visible"});	
				curBanner.fadeIn(aniSpd);
				processBanner();
                createButton(btnWid, btnHig, slideArr.length);
				
				loadSlider();
				
				var intr;
				$(window).resize(function() {
					clearInterval(intr);
					intr = setInterval(function(){clearInterval(intr);windowRez();},200);
				});
			
			}

		};
		
		// Start processing the slideshow

		var processBanner = function ()	{
			
			if((curBanner.css("width")=="0px" || curBanner.css("width")=="auto") && bannerWidth == 0){
				bannerWidth = parseInt(curBanner.css("width"));
			}


			if(bannerWidth > $(window).width()){
				banSliders.css("width","100%");
			}else{
				banSliders.css("width",bannerWidth+"px");
			}
		
			if(!fullScreenChk){
				fullScreenChk = true;
				if(parseInt(banSliders.css("height")) == 0){
					fullScreen = true;
					banSliders.css("height",$(window).height()+"px");
				}
			}
		
			
			var eleNos=slideConArr.length;
			
			for(var cn=0; cn<slideConArr.length; cn++){
				$(slideConArr[cn]).css("z-index",eleNos);
                for (var idNo=0; idNo < slideConArr[cn].length; idNo++){
					(slideConArr[cn][idNo]).css({"width":"auto","height":"auto"});
				     setImagePos(cn, idNo);
                 }
            }

			tpShd.css("z-index",eleNos+1);
			btShd.css("z-index",eleNos+2);

			banSliders.prepend('<div />');
			navHolder = banSliders.children(':first-child');
			navHolder.css({"position":"absolute","z-index":2});
			
			navHolder.append('<div />');
			navBtns = $(navHolder.children(":first-child"));
			
			navHolder.css({"display":"none"});

			
			// Create a loading objects
			
            banSliders.prepend('<div />');
			loadingHolder = banSliders.children(":first-child");
            loadingHolder.css({"position":"absolute", "height":"18px",  "z-index":eleNos+6, "visibility":"visible", "display":"none"});
            loadingHolder.prepend('<div />');
	
			var loadingbar = loadingHolder.children(":first-child");
			loadingbar.css({"position":"absolute", "width":"22px", "height":"18px", "overflow":"hidden"});
			loadingbar.prepend('<div />');
			var loaderIm  = loadingbar.children(":first-child");
			loaderIm.css({"position":"absolute", "width":"22px", "height":"200px", "top":"0px", "left":"0px"});
			if ($.browser.msie){
				loaderIm.css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+loaderCirImg+", sizingMethod='noscale')"});
			}else{
				 loaderIm.css({"background-image" : "url("+loaderCirImg+")"});
			}

			alignObject(loadingHolder,"C",[0,0],
				(parseInt(banSliders.width())-parseInt(loadingHolder.width())),(parseInt(banSliders.height())-parseInt(loadingHolder.height())));
			loadingHolder.fadeIn(500);
			loadAniStart(loaderIm);
			
			
			
				
		};
		
		// Window resize function
		var windowRez = function (){
			
			if(fullScreen){ 
				if(bannerWidth > $(window).width()){ 
					banSliders.css("width","100%");
					allSli.css("width","100%");
				}else{ 
					banSliders.css("width",bannerWidth+"px"); 
					allSli.css("width",bannerWidth+"px"); 
				}
			}
			

			if(navAlignCenter){ 
				navHolder.css({"left":Math.round((parseInt(banSliders.width())-parseInt(navHolder.width()))/2)+"px"}); 
			}
 
            for (var idNo=0; idNo < slideConArr[selId].length; idNo++){  
				setImagePos(selId, idNo); 
			}
				 
			if(rightBtn && leftBtn){
				alignObject(rightBtn,nBtnAlign,nBtnSpacing,
				(parseInt(banSliders.width())-parseInt(rightBtn.width())),(parseInt(banSliders.height())-parseInt(rightBtn.height())));
	
				alignObject(leftBtn,pBtnAlign,pBtnSpacing,
				(parseInt(banSliders.width())-parseInt(leftBtn.width())),(parseInt(banSliders.height())-parseInt(leftBtn.height())));
			}
			
			if(navHolder){
				alignObject(navHolder,buttonsAlign,buttonsSpacing,
				(parseInt(banSliders.width())-parseInt(navHolder.width())),(parseInt(banSliders.height())-parseInt(navHolder.height())));
			}
			if(loadingHolder){
			alignObject(loadingHolder,"C",[0,0],
				(parseInt(banSliders.width())-parseInt(loadingHolder.width())),(parseInt(banSliders.height())-parseInt(loadingHolder.height())));
			}

		};


		// Loading animation functions
		
		var loadAniStart = function (sel){
			loaderIntr = setInterval(function(){loadingAni(sel);},30);
		};

		var loaderIntr;
		var val = 0;	
		var loadingAni = function(sel){
			val = val < 162 ? val+18 : 0;
			sel.css({"top":-val+"px"});
		};
		
		
		// Load the slideshow images
		
		var loadSlider = function (){

			lns++;
			if(lns >= slideConArr[ln].length){
				lns=0;
                slideLoaded[ln] = true;
				ln++;
			}
			
			// If first slide images load finished, than start the slideshow to display

			if(ln == 1 && lns == 0){
				loadingHolder.fadeOut(300);
				banSliders.css({"display":"show"});

				
				for(var na=0; na<autoHideNavs.length; na++){
					autoHideNavs[na].show();
					autoHideNavs[na].fadeTo("fast", 1); 
				}	

				if(autoplayLoop){ 
					leftBtn.show();
					leftBt.fadeTo("fast",1);
				}else{
					leftBtn.fadeTo("fast",.2); 
					
				}
				
				navHolder.css({"visibility":"visible"});

				for(na=0; na<autoHideNavs.length; na++){
					autoHideNavs[na].fadeTo("slow", 0);
				}
				banSliders.hide();
				banSliders.fadeIn(500,function(){		
					startAni(0,true);
				});
						
				slideShowFn();
				
			}
            
			if(ln < slideConArr.length ){ 
				loadImg(); 
			}else{ 
				// Remove the loading object after all images are loaded
				loadingHolder.fadeOut(300,function(){loadingHolder.remove();}); 
				
			}
			
		};
		
		var itsLod = false;
		var itsIntr;
		
		var itsLodChk = function(){
			clearInterval(itsIntr); 
			if(itsLod){
				itsLod = false;
				loadSlider();
			}else{
				itsIntr = setInterval(function(){itsLodChk();},20);
			}
		};
		
		// Load image function
		var loadImg = function (){

			var sel1 = (slideConArr[ln][lns]);
			var sel2 = ((sel1.children()));
				
			if(sel1.text() == ""){

                var _im =$("<img>");
				_im.hide();
                _im.bind("load",function(){

                    sel1.css({
							"width":_im.width()+"px",
							"height":_im.height()+"px"
							});

					sel2.css({
							"width":_im.width()+"px",
							"height":_im.height()+"px"
							});
							
                   // If IE than load the image using filter 
					if ($.browser.msie) {
						sel2.css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+sel1.data("img-src")+", sizingMethod='noscale')"});
					}else{
						sel2.css({"background-image":"url("+sel1.data("img-src")+")"});
					}

                    $(this).remove();
					itsLod = true;

                }).error(function () {

                    sel1.css({
							"width":_im.width()+"px",
							"height":_im.height()+"px"
							});
					sel2.css({
							"width":_im.width()+"px",
							"height":_im.height()+"px"
							});
                    $(this).remove();
					itsLod = true;
                 
                 });
                
                banSliders.append(_im);
                _im.attr('src',sel1.data("img-src"));
				
			}else{
				itsLod = true;
			}
			
			itsIntr = setInterval(function(){itsLodChk();},20);

		};
	
		// Start slide animation function

		var startAni = function (sId,sho){
			
			for(var s=0; s<sliderInTimer.length; s++){
				clearInterval(sliderInTimer[s]);
			}
			for(var p=0; p<sliderOutTimer.length; p++){
				clearInterval(sliderOutTimer[p]);
			}
			
			if(sho){
				allSli.css({"left":"0px"});		
				for (var i=0; i < slideConArr[curNo].length; i++){
					inTimerStart(i);
				}
				
			}else{
				
				// Background image Horizontal moving animation
				
				if(bgMove){
					if ($.browser.msie) {
						if( cNo>sId){
							curBanner.animate({"background-position-x": "+=1000"+"px"},{queue:false, duration:bgMoveDis, easing: easyTypeBackground});
						}else{
							curBanner.animate({"background-position-x": "-=1000"+"px"},{queue:false, duration:bgMoveDis, easing: easyTypeBackground});
						}
					}else{
						if( cNo>sId){
							curBanner.animate({"background-position": "+=1000"+"px"},{queue:false, duration:bgMoveDis, easing: easyTypeBackground});
						}else{
							curBanner.animate({"background-position": "-=1000"+"px"},{queue:false, duration:bgMoveDis, easing: easyTypeBackground});
						}					
					}
				}
				
				cNo = sId;
				for (var j=0; j < slideConArr[curNo].length; j++){
					outTimerStart(j);
				}

			}
		
		};
	
		// Align and position the image and text function 
		
        var setImagePos = function (cn,sn){
				var sel1 = $(slideConArr[cn][sn]);
				var sel2 = $(slideConArr[cn][sn-1]);

				sel1.css({"left":"auto", "right":"auto", "top":"auto", "bottom":"auto"});
				
				var imgAli = String(sel1.data("data-align"));
				var spacing=[];
					spacing[0] = spacing[1] = 0;

				if(String(sel1.data("spacingObj")) != "undefined"){
					spacing = sel1.data("spacingObj").split(",");
					spacing[0] = isNaN(spacing[0]) ? 0 : spacing[0];
					spacing[1] = isNaN(spacing[1]) ? 0 : spacing[1];
				}

                 sel1.show();

				alignObject(sel1,imgAli,spacing,parseInt(banSliders.width())-parseInt(sel1.width()),parseInt(banSliders.height())-parseInt(sel1.height()));

              if(sel1.children(":first-child").text() != ""){
				    sel1.children(":first-child").css({"position":""});
			    }
				if((sel1.data("data-align") == sel2.data("data-align"))){
					
					if((sel1.children(":first-child").html() != "")){
						if(imgAli.substring(0,1)=="B"){
							sel1.css({"bottom" : Number(sel2.data("pB"))- Number(sel1.height())-Number(spacing[0])+"px"});	
						}else{
							if(!isNaN(sel2.height())){
							if(imgAli =="LC" || imgAli =="RC" ){
								sel1.css({"top" : Number(sel2.data("pT"))+ Number(sel2.height())+Number(spacing[1])+"px"});
							}else{
								sel1.css({"top" : Number(sel2.data("pT"))+ Number(sel2.height())+Number(spacing[0])+"px"});
							}
							}
						}
						
					}else{
						if((sel1.children(":first-child").html() == "") ){
							if(imgAli.substring(0,1)=="L"){
								sel1.css({"left" : Number(sel2.data("pL"))+ Number(sel2.width())+Number(spacing[0])+"px"});
							}else{
								sel1.css({"right" : Number(sel2.data("pR"))- Number(sel1.width())-Number(spacing[0])+"px"});
							}
						}
					}
				}

			 	if((sel1.children(":first-child").html() != "") ){
					sel1.data({"pT":parseInt(sel1.css("top"))});
					sel1.data({"pB":parseInt(sel1.css("bottom"))});
				}
				if((sel1.children(":first-child").html() == "") ){
					sel1.data({"pL":parseInt(sel1.css("left"))});
					sel1.data({"pR":parseInt(sel1.css("right"))});
				}
				
		};
		
		// Each slide start animate using the below function
		
		var displaySlide = function (idNo, sho){
			
			var sel1 = $(slideConArr[curNo][idNo]);
            var aniComeSpc = isNaN(sel1.data("inOutDistance")) ? 50 : Number(sel1.data("inOutDistance"));
			var aniDir = String(sel1.data("inOutDirection"));
            var temZ = 0;
			
			if(sho && sel1.text() != "" && !sel1.data("cufon") && typeof Cufon != 'undefined'){
					sel1.data("cufon",true);
					sel1.css({"visibility":"visible"});
					sel1.show();
					Cufon.replace(sel1.find(".cufon_fm"));
					sel1.hide();
			}
			
            setImagePos(curNo,idNo);


			if(sho){
				slideArr[curNo].css({"visibility":"visible" , "display":"show"});
				if(aniDir.substring(0,1)=="T" || aniDir.substring(0,1)=="B"){

					if(sel1.css("top") != "auto"){
						temZ = parseInt(sel1.css("top"));
						if(aniDir.substring(0,1)=="T"){
							sel1.css({"top" : temZ-Number(aniComeSpc)+"px"});
						}else{
							sel1.css({"top" : temZ+Number(aniComeSpc)+"px"});
						}
						sel1.animate({"top"     : temZ+"px"},{queue:false, duration:aniSpd, easing: easyType});
					}else{
						temZ = parseInt(sel1.css("bottom"));
						if(aniDir.substring(0,1)=="T"){
							sel1.css({"bottom" : temZ+Number(aniComeSpc)+"px"});
						}else{
							sel1.css({"bottom" : temZ-Number(aniComeSpc)+"px"});
						}
						sel1.animate({"bottom"     : temZ+"px"},{queue:false, duration:aniSpd, easing: easyType});
					}
				}

				temZ = 0;

				if(aniDir.substring(0,1)=="L" || aniDir.substring(0,1)=="R"){
					if(sel1.css("left") != "auto"){
						temZ = parseInt(sel1.css("left"));
						if(aniDir.substring(0,1)=="L"){
							sel1.css({"left" : temZ-Number(aniComeSpc)+"px"});
						}else{
							sel1.css({"left" : temZ+Number(aniComeSpc)+"px"});
						}
						sel1.animate({"left"     : temZ+"px"},{queue:false, duration:aniSpd, easing: easyType});

					}else{
						temZ = parseInt(sel1.css("right"));
						if(aniDir.substring(0,1)=="R"){
							sel1.css({"right" : temZ-Number(aniComeSpc)+"px"});
						}else{
							sel1.css({"right" : temZ+Number(aniComeSpc)+"px"});
						}
						sel1.animate({"right"     : temZ+"px"},{queue:false, duration:aniSpd, easing: easyType});
					}
				}

				if(!IE8 || sel1.text() == ""){
					sel1.css({"display":"none"});
					sel1.css({"visibility":"visible"});
					aniSpd_ = (IE7) ? 200 : fadeInTime;
					sel1.fadeIn(aniSpd_);
				}else{
					sel1.css({"display":"show"});
					sel1.css({"visibility":"hidden"});
					fadeInIe8(sel1.get(0));
				}
				
				if(curNo != cNo){
					if(preNoEle >= slideConArr[curNo].length){
						preNoEle = 0;
						curNo = cNo;
						
						startAni(curNo,false);
					}
				}else{
					preNoEle++;
				}
					
			}else{
					
				if(aniDir.substring(1,2)=="T" || aniDir.substring(1,2)=="B"){
					if(sel1.css("top") != "auto"){
						temZ = parseInt(sel1.css("top"));
						if(aniDir.substring(1,2)=="T"){							
							sel1.animate({"top"     : temZ-Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}else{
							sel1.animate({"top"     : temZ+Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}
								
					}else{
						temZ = parseInt(sel1.css("bottom"));
						if(aniDir.substring(1,2)=="T"){
							sel1.animate({"bottom"     : temZ+Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}else{
							sel1.animate({"bottom"     : temZ-Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}
					}
				}
		
				if(aniDir.substring(1,2)=="L" || aniDir.substring(1,2)=="R"){
					if(sel1.css("left") != "auto"){
						temZ = parseInt(sel1.css("left"));
						if(aniDir.substring(1,2)=="L"){	
							sel1.animate({"left"     : temZ-Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}else{
							sel1.animate({"left"     : temZ+Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}	
					}else{
						temZ = parseInt(sel1.css("right"));
						if(aniDir.substring(1,2)=="R"){
							sel1.animate({"right"     : temZ-Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}else{
							sel1.animate({"right"     : temZ+Number(aniComeSpc)+"px"},{queue:false, duration:aniSpd, easing: easyTypeOut});
						}
					}
				}

				var aniSpd_ = (!IE8 || sel1.text() == "") ? fadeOutTime : 300;
				sel1.fadeOut(aniSpd_,function(){
										sel1.css({"display":"show"});
										sel1.css({"visibility":"hidden"});
										curNoEle++;
								if(curNoEle >= slideConArr[curNo].length){
									curNoEle = 0;
									curNo = cNo;
									
									for(var jj=0; jj<slideArr.length; jj++){
										for (var ii=0; ii < slideConArr[jj].length; ii++){
											slideConArr[jj][ii].css({"visibility":"hidden","display":"none"});
										}
									}
									slideArr[curNo].css({"visibility" : "visible"});
									startAni(curNo,true);									
								}
					}
									
				);
				
					
			}
		};
		
		// Align the image and text using the below function
		
		var alignObject = function (sel,ali,spc,cWid,cHig){
			
			if(ali == "TL"){
				sel.css({"top" : spc[0]+"px"});
				sel.css({"left" : spc[1]+"px"});
			}
			
			if(ali == "TC"){
				sel.css({"top" : spc[0]+"px"});
				sel.css({"left" : Number(cWid/2)+Number(spc[1])+"px"});
			}
		
			if(ali == "TR"){
				sel.css({"top" : spc[0]+"px"});
				sel.css({"right" : spc[1]+"px"});
			}
			
			if(ali == "LC"){
				sel.css({"left" : spc[0]+"px"});
				sel.css({"top" : Number(cHig/2)+Number(spc[1])+"px"});
			}
			
			if(ali == "C"){
				sel.css({"top" : Number(cHig/2)+Number(spc[0])+"px"});
				sel.css({"left" : Number(cWid/2)+Number(spc[1])+"px"});
			}
			
			if(ali == "RC"){
				sel.css({"right" : spc[0]+"px"});
				sel.css({"top" : Number(cHig/2)+Number(spc[1])+"px"});
			}
			
			if(ali == "BL"){
				sel.css({"bottom" : spc[0]+"px"});
				sel.css({"left" : spc[1]+"px"});
			}
			
			if(ali == "BC"){
				sel.css({"bottom" : spc[0]+"px"});
				sel.css({"left" : Number(cWid/2)+Number(spc[1])+"px"});
			}
		
			if(ali == "BR"){
				sel.css({"bottom" : spc[0]+"px"});
				sel.css({"right" : spc[1]+"px"});
			}
			
		};
	
		
		
		// set timer to start/end each slide to animate 
		
		var sliderInTimer = [] ;
		var sliderOutTimer = [] ;
		var chkInt ;
		var selId=0;
		
		var inTimerStart = function (i){
			sliderInTimer[i] = setInterval(function(){inTimerFn(i)},(inTimer*i));	
		};
		
		var outTimerStart = function (j){
			sliderOutTimer[j] = setInterval(function(){outTimerFn(j)},(outTimer*j));
		};
		
		var inTimerFn = function (i){
			clearInterval(sliderInTimer[i]);
			displaySlide(i, true);
		};
		
		var outTimerFn = function (j){
			clearInterval(sliderOutTimer[j]);
			displaySlide(j, false);
			
		};
		
		// Timer to check the each slide whether it load it or not
		var chkSliFin = function (){
			clearInterval(ssInt);
            if(curNo!=selId && slideLoaded[selId]){
                preNoEle = 0;
                clearInterval(chkInt);
                startAni(selId,false);
                if(loadingHolder){ loadingHolder.fadeOut(300); }
				if(slideShowZ){ clearInterval(ssInt); ssInt = setInterval(function(){slideTimer()},delayTime); }
			}
			if(!slideLoaded[selId]){
				if(loadingHolder){ loadingHolder.fadeIn(300); }
			}
        };
		
		// Slideshow Timer
		
		var slideTimer = function(){
			if(Number(selId) < slideConArr.length-1){
				var ii = Number(selId)+1;
				nextPrevSlide(ii);	
			}else{
				if(autoplayLoop){
					nextPrevSlide(0);
				}
			}
		};
		
		// Function to call next and previous slide
		
		var nextPrevSlide = function(ii){
			
			navArr[selId].css({"background-position":0+"px "+ -btnYpos+"px"});
			selId = ii;
			navArr[selId].css({"background-position":-(btnWid*2)+"px "+ -btnYpos+"px"});
			
			rightBtn.data("hid",false);
			leftBtn.data("hid",false);
			rightBtn.css({"cursor":"pointer"});
			leftBtn.css({"cursor":"pointer"});
			
			if((!(Number(selId) > slideConArr.length-2 && Number(selId) < 1)) &&  !slideShowZ || !autoHideNP){
				rightBtn.fadeTo("fast", 1); 
				leftBtn.fadeTo("fast", 1); 
			}

			if(!autoplayLoop){
				if(Number(selId) > slideConArr.length-2){
					rightBtn.children(":first-child").css({"right":0+"px ","bottom":-npBtnYpos+"px"});
					rightBtn.data("hid",true);
					rightBtn.css({"cursor":""});
					if(!slideShowZ || !autoHideNP){ rightBtn.fadeTo("fast", 0.2); leftBtn.fadeTo("fast", 1);}
				}
				
				if(Number(selId) < 1){
					leftBtn.data("hid",true);
					leftBtn.children(":first-child").css({"left":0+"px ","bottom":-npBtnYpos+"px"});
					leftBtn.css({"cursor":""});
					if(!slideShowZ || !autoHideNP){ leftBtn.fadeTo("fast", 0.2); rightBtn.fadeTo("fast", 1); }
				}
			}
			
			clearInterval(ssInt);
			chkInt = setInterval(function(){chkSliFin()},27);
			
		};
		
		// Slideshow function
		var slideShowFn = function(){
			
				clearInterval(ssInt);
				if(slideShow){
					ssInt = setInterval(function(){slideTimer()},delayTime); 
				}
				if(!autoHideBtns){ 
					if ($.browser.msie){ 
						navHolder.show();
					}else{
						navHolder.fadeIn();
					} 
				}
				
				if(!autoHideNP){  
					if ($.browser.msie){ 
						rightBtn.show(); 
					}else{ 
						rightBtn.fadeIn();
					} 
				}
				
				if(slideShow ||autoHide ){
					curBanner.bind('mouseover mouseleave', function(ev) {
						slideAutoHide(String(ev.type));
					});
				}
				
		};
		
		var slideAutoHide = function(typ){

			if(typ == "mouseover"){
				if(slideShow){
					slideShowZ = false;
					clearInterval(ssInt);
				}
				if(autoHide){ 
					if ($.browser.msie){
						navHolder.fadeIn(100);
					}
					for(var na=0; na<autoHideNavs.length; na++){
						if (!autoHideNavs[na].data("hid")) {
							autoHideNavs[na].fadeTo("fast", 1); 
							autoHideNavs[na].show();
						}else{
							if(autoplayLoop){
								autoHideNavs[na].fadeTo("fast", 1); 
								autoHideNavs[na].show();
							}else{
								autoHideNavs[na].fadeTo("fast", .2);
							}
						}
					}
				}
				
			}else{
				
				if ($.browser.msie && autoHideBtns){
					navHolder.fadeOut(100);
				}
				if(slideShow){
					slideShowZ = true;
					clearInterval(ssInt);
					ssInt = setInterval(function(){slideTimer()},delayTime);
				}
				if(autoHide){ 
					for(na=0; na<autoHideNavs.length; na++){
						autoHideNavs[na].fadeTo("fast", 0);			
					}
				}
				
			}
	
		};
	
		// create the thumbnails, next and previous buttons

		var createButton = function (wid, hig, nos){
			
			// Create thumbnail buttons
			navBtns.css({"top":"0px","left":"0"});
			navBtns.prepend('<div />');
			navBtns.children(":first-child").css({"width":btnBgSpacing+"px","height":btnHig+1+"px", "background-image":"url("+spriteImg+")","position":"absolute","top":"0px","left":"0","background-repeat":"no-repeat"});
			
			if(iconsType == 1){
				navBtns.children(":first-child").css({"background-position" : (-65)+"px "+ -btnYpos+"px", "left":"0px"});
			}
			if(iconsType == 2){
				navBtns.children(":first-child").css({"background-position" : (-77)+"px "+ -btnYpos+"px", "left":"0px"});
			}
		
			for(var ii=0; ii<nos; ii++){
				navBtns.append('<div ></div>');
				navBtns.children(":last-child").css({
					"left" : ((wid-1)*ii)+btnBgSpacing+"px",
					"position": "absolute",
					"width":wid-1,
					"height":hig,"top":"0px",
					"cursor":"pointer",
                  	"background-image" : "url("+spriteImg+")",
					"background-position" : "0px "+ -btnYpos+"px"
				});
				
				navArr[ii] = navBtns.children(":last-child");
				navArr[ii].data("nam",ii);
				if(iconsType == 2){ 
				navArr[ii].append('<div />');
					navArr[ii].children(":last-child").text(ii+1);
					navArr[ii].css({"padding-top":(navArr[ii].height()/2 - 2 )  +"px"});
				}
				navArr[ii].addClass("buttonText");
				btn_Enable(navArr[ii]);
				navBtns.css({"height":hig+"px"});
	
			}
			
			navBtns.prepend('<div />');
			navBtns.children(":first-child").css({"width":btnBgSpacing+"px","height":btnHig+1+"px","left":((wid-1)*ii)+(btnBgSpacing)+"px",
							"background-image":"url("+spriteImg+")","position":"absolute","background-repeat":"no-repeat"});
			
			if(iconsType == 1){
				navBtns.children(":first-child").css({"background-position" : -87+"px "+ -btnYpos+"px"});
			}
			if(iconsType == 2){
				navBtns.children(":first-child").css({"background-position" : -103+"px "+ -btnYpos+"px"});
			}
	
			navBtns.css({"visibility":"visible"});
			navHolder.css({"width":parseInt((wid*ii))+(btnBgSpacing*2)+"px"});

			alignObject(navHolder,buttonsAlign,buttonsSpacing,
			(parseInt(banSliders.width())-parseInt(navHolder.width())),(parseInt(banSliders.height())-parseInt(navHolder.height())));

			navBtns.fadeTo("fast",1); 
			navArr[0].css({"background-position":-(btnWid*2)+"px "+ -btnYpos+"px" });
			
			// Create Right Button

			banSliders.prepend('<div  />');			
			rightBtn = banSliders.children(":first-child");
			rightBtn.css({"width":npBtnSiz+"px", "height":npBtnSiz+"px", "position":"absolute", "z-index":slideConArr.length+2,
						 "visibility":"visible","overflow":"hidden","cursor":"pointer"});
			
			rightBtn.prepend('<div />');
			rightBt = rightBtn.children(":first-child");
			rightBt.css({"position":"absolute","visibility":"visible","width":spriteImgWid+"px", "height":spriteImgHig+"px",
				"right":"0px","bottom":-npBtnYpos+"px"
			});
			if ($.browser.msie){
				rightBt.css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+spriteImg+", sizingMethod='noscale')"});
			}else{
				rightBt.css({"background-image" : "url("+spriteImg+")"});
			}
			
			rightBtn.data({"nam":"rBtn","hid":false});
			btn_Enable(rightBtn);
			rightBtn.show();
			
			alignObject(rightBtn,nBtnAlign,nBtnSpacing,
			(parseInt(banSliders.width())-parseInt(rightBtn.width())),(parseInt(banSliders.height())-parseInt(rightBtn.height())));

		
			// Create Left Button 
			
			banSliders.prepend('<div  />');			
			leftBtn = banSliders.children(":first-child");
			leftBtn.css({"position":"absolute", "width":npBtnSiz-1+"px", "height":npBtnSiz+"px", "z-index":slideConArr.length+3,
						"visibility":"visible","overflow":"hidden", "cursor":"pointer"});

			leftBtn.prepend('<div />');
			leftBt = leftBtn.children(":first-child");
			leftBt.css({"position":"absolute","width":spriteImgWid+"px", "height":spriteImgHig+"px", "visibility":"visible",
				"left":"0px","bottom":-npBtnYpos+"px"
			});
			if ($.browser.msie){
				leftBt.css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+spriteImg+", sizingMethod='noscale')"});
			}else{
				 leftBt.css({"background-image" : "url("+spriteImg+")"});
			}
			
			leftBtn.data({"nam":"lBtn","hid":false});
			btn_Enable(leftBtn);
			rightBtn.hide();
			leftBtn.hide();
			leftBt.fadeTo("fast",1); 
			rightBt.fadeTo("fast",1); 
			if(!autoplayLoop){
				leftBtn.css({"cursor":""});
				leftBtn.data("hid",true);
			}
			
			alignObject(leftBtn,pBtnAlign,pBtnSpacing,
			(parseInt(banSliders.width())-parseInt(leftBtn.width())),(parseInt(banSliders.height())-parseInt(leftBtn.height())));
			
			if(autoHideNP){ autoHideNavs = [leftBtn,rightBtn]; }
			if (!$.browser.msie){
				if(autoHideBtns){autoHideNavs.push(navHolder);}
			}

			
		};
		
		// IE 8 Fade in function
		var fadeInIe8 = function (oDiv) {
			oDiv.style.filter="blendTrans(duration=.2)";
			// Make sure the filter is not playing.
			if (oDiv.filters.blendTrans.status != 2) {
				oDiv.filters.blendTrans.apply();
				oDiv.style.visibility="visible";
				oDiv.filters.blendTrans.play();
			}
		};
	
		// Buttons events
		
		var btn_Enable = function (sel){
			
			// Bind the mouseover mouseup and  mouseleave for all navigation
			
			sel.bind('mouseover mouseup mouseleave', function() {
				
				if(slideShow){clearInterval(ssInt);}
				
				if(sel.data("nam") != "rBtn" && sel.data("nam") != "lBtn"){
					if(selId != sel.data("nam")){
						sel.css({"background-position":-(btnWid)+"px "+ -btnYpos+"px" });
					}
				}else{
					if(!sel.data("hid")){
						if(sel.data("nam") == "rBtn"){
							sel.children(":first-child").css({"right":(-npBtnSiz)+"px ","bottom":-npBtnYpos+"px"});
						}else{
							sel.children(":first-child").css({"left":(-npBtnSiz)+"px ","bottom":-npBtnYpos+"px"});
						}
					}
				}
			});
			
			// Bind the mouseout for all navigation
			
			sel.bind('mouseout', function() {
				if(sel.data("nam") != "rBtn" && sel.data("nam") != "lBtn"){
					if(selId != sel.data("nam")){
						sel.css({"background-position": "0px "+ -btnYpos+"px" });
					}
				}else{
					if(!sel.data("hid")){
						if(sel.data("nam") == "rBtn"){
							sel.children(":first-child").css({"right":0+"px ","bottom":-npBtnYpos+"px"});
						}else{
							sel.children(":first-child").css({"left":0+"px ","bottom":-npBtnYpos+"px"});
						}
					}
				}
			});
			
			// Bind the mousedown for all navigation
			
			sel.bind('mousedown', function() {
				
				if(slideShow){clearInterval(ssInt);}
				
				if(sel.data("nam") != "rBtn" && sel.data("nam") != "lBtn"){
					if(selId != sel.data("nam")){
						sel.css({"background-position":-(btnWid*2)+"px "+ -btnYpos+"px" });
					}
				}else{
					if(!sel.data("hid")){
						if(sel.data("nam") == "rBtn"){
							sel.children(":first-child").css({"right":(-npBtnSiz*2)+"px ","bottom":-npBtnYpos+"px"});
						}else{
							sel.children(":first-child").css({"left":(-npBtnSiz*2)+"px ","bottom":-npBtnYpos+"px"});
						}
					}
				}

			});
			
			// Bind the click for all navigation
			
			sel.bind('click', function() {

				if(slideShow){clearInterval(ssInt);}
				
				if(sel.data("nam") != "rBtn" && sel.data("nam") != "lBtn"){
					if(selId != sel.data("nam")){
						nextPrevSlide(sel.data("nam"));
					}
				}else{
						if(sel.data("nam") == "rBtn"){
							if(selId < slideConArr.length-1){
								sel.children(":first-child").css({"right":-(npBtnSiz)+"px ","bottom":-npBtnYpos+"px"});
								nextPrevSlide(Number(selId)+1);
							}else{
								if(autoplayLoop){
									nextPrevSlide(0);
								}
							}
							
						}else{
							if( selId > 0){
								sel.children(":first-child").css({"left":(-npBtnSiz)+"px ","bottom":-npBtnYpos+"px"});
								nextPrevSlide(Number(selId)-1);
							}else{
								if(autoplayLoop){
									nextPrevSlide(slideConArr.length-1);
								}
							}
						}
				}
			});
			
		};

		
		
		// Touch Enable
		
		var touEle = banSliders.children();
		var tch = 0;
		var tch_ = 0;
		
        try {
        	document.createEvent('TouchEvent');
		
			$(touEle).each(function() {
				this.ontouchstart = function(e) {
						touchStart(e);
						return true;
					};
				
				this.ontouchend = function(e) {
					e.preventDefault();
					e.stopPropagation();
					touchEnd();
				};
						
				this.ontouchmove = function(e) {
					touchMove(e);
					e.preventDefault();
					e.stopPropagation();
					return false;
				};	
			});
			
		} catch (e) {
			// Nothing to do
        };
				
					
		var touchStart = function(e) {
			if(slideShow){
				slideShowZ = false;
				clearInterval(ssInt);
			}
			tch = e.targetTouches[0].clientX;
		};
			 
		var touchEnd = function() {
			
			if(Number(tch) != Number(tch_)){
				
				if(Number(tch) > Number(tch_) ){	
								
					if((Number(tch) - Number(tch_)) > 100){
							if(selId < slideConArr.length-1){
								nextPrevSlide(Number(selId)+1);
							}else{
								if(autoplayLoop){
									nextPrevSlide(0);
								}else{
									allSli.css({"left":"0px"});
								}
							}
					}else{
						allSli.css({"left":"0px"});
					}
					
					
				}else{
					
					if((Number(tch_)-Number(tch)) > 100){
						if( selId > 0){
							nextPrevSlide(Number(selId)-1);
						}else{
							if(autoplayLoop){
								nextPrevSlide(slideConArr.length-1);
							}else{
								allSli.css({"left":"0px"});
							}
						}
					}else{
						allSli.css({"left":"0px"});
					}
				}
				
			}
			
			if(slideShow){
				slideShowZ = true;
				clearInterval(ssInt);
				ssInt = setInterval(function(){slideTimer()},delayTime);
			}

			tch = tch_ = 0;
		};

		var touchMove = function(e) {
			
			tch_ = e.targetTouches[0].clientX;
			
			var tm = Math.round(Math.abs(Number(tch_)-Number(tch))*.2 )< 21? Math.round(Math.abs(Number(tch_)-Number(tch))*.2 ) :20;
			
			if((Number(tch_) > Number(tch))){
				allSli.css({"left":Number(tm)+"px"});
			}else{
				allSli.css({"left":-Number(tm)+"px"})
			}
			
		};
					 
		
		// Start the require image to load - this function invoke the slideshow to start loading

			startReqImgLoad();
		

	}



	 $.fn.fmslideshow = function(params) {
	   return this.each(function () {    
	   var fmBanner = $(this);
	   var ins = fmBanner.data('GBInstance');
	   		// Initiate the slideshow
		   if (!ins){ 
				fmBanner.data('GBInstance', new fmslideshow(this, params));
		   } 
	  });
   }; 
 

	 
  
})( jQuery );




/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 *
 * Open source under the BSD License.
 *
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this list of
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list
 * of conditions and the following disclaimer in the documentation and/or other materials
 * provided with the distribution.
 *
 * Neither the name of the author nor the names of contributors may be used to endorse
 * or promote products derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration

jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});


