var SiteLib = {};
SiteLib.Util = {};

var spektrixMinHeight = 570;

$(function() {
	$("body").addClass("jsEn");
	
	Cufon.replace(".lyric-script", {
	  hover: true
	});
  
  $("div#header p.text-size-controls a").click(function() {
		$.getJSON(MIYOLib._conf.siteBaseURL+'/accessibility/textsize/' + $(this).attr("class") + '/?mode=ajax', function(data) {
			$("body")
				.removeClass("small")
				.removeClass("medium")
				.removeClass("large")
				.addClass(data.text_size);
		});
			
		return false;
	});
	
  $("a[href^='http://']")
  	.not("[href^='http://"+MIYOLib._conf.siteBaseURLNoProt+"']")
  	.each(function() {
  			this.target = "_blank";
  	});
  
  $("a[href^='https://']")
  	.not("[href^='https://"+MIYOLib._conf.siteBaseURLNoProt+"']")
  	.each(function() {
  			this.target = "_blank";
  	});
  
  $("a.external").each(function() {
    this.target = "_blank";
  });
	
	initExpandableSections();
	initMediaPlayer();
	initShortSlider();
});

function initExpandableSections() {
  $(".expandable-content").each(function() {
    var parentHold = this;
    parentHold.collapseOthers = false;
    
    if($(parentHold).hasClass("collapse-others")) {
      parentHold.collapseOthers = true;
      parentHold.$otherExpandables = $(parentHold).parent().find(".expandable-content");
    }
    
    parentHold.$blockHead = $(parentHold).find(".expand-header:first").not(".sub-expandable .expand-header")
      .css("cursor", "pointer")
      .click(function() {
        var headerRef = this;
        headerRef.originallyHadClass = true;
        
        if(!$(parentHold).hasClass("open")) {
          $(parentHold).find(".initial-content").css("display", "none");
          headerRef.originallyHadClass = false;
          
          if(parentHold.collapseOthers) {
            if(parentHold.$otherExpandables.length > 0) {
              parentHold.$otherExpandables.each(function() {
                var expandElement = this;
                
                if($(expandElement).hasClass("open")) {
                  $(expandElement).find(".expanded-content:first").slideToggle(600, function() {
                    $(expandElement).removeClass("open");
                    $(expandElement).find(".initial-content").css("display", "block");
                  });
                }
              });
            }
          }
        }
        
        $(parentHold).find(".expanded-content:first").slideToggle(600, function() {
          if(headerRef.originallyHadClass && $(parentHold).hasClass("open")) {
            $(parentHold).removeClass("open");
            $(parentHold).find(".initial-content").css("display", "block");
          } else if(!headerRef.originallyHadClass && !$(parentHold).hasClass("open")) {
            $(parentHold).addClass("open");
          }
        });
        
        return false;
      });
  });
  
  $(".sub-expandable").each(function() {
    var subExpandHold = this;
    subExpandHold.collapseOthers = false;

    if($(subExpandHold).hasClass("collapse-others")) {
      subExpandHold.collapseOthers = true;
      subExpandHold.$otherExpandables = $(subExpandHold).parent().find(".sub-expandable");
    }

    subExpandHold.$blockHead = $(subExpandHold).find(".expand-header:first")
      .css("cursor", "pointer")
      .click(function() {
        var subHeaderRef = this;
        subHeaderRef.originallyHadClass = true;

        if(!$(subExpandHold).hasClass("open")) {
          $(subExpandHold).find(".initial-content").css("display", "none");
          subHeaderRef.originallyHadClass = false;
          
          if(subExpandHold.collapseOthers) {
            if(subExpandHold.$otherExpandables.length > 0) {
              subExpandHold.$otherExpandables.each(function() {
                var expandElement = this;

                if($(expandElement).hasClass("open")) {
                  $(expandElement).find(".sub-expand-content:first").slideToggle(600, function() {
                    $(expandElement).removeClass("open");
                    $(expandElement).find(".initial-content").css("display", "block");
                  });
                }
              });
            }
          }
        }

        $(subExpandHold).find(".sub-expand-content:first").slideToggle(600, function() {
          if(subHeaderRef.originallyHadClass && $(subExpandHold).hasClass("open")) {
            $(subExpandHold).removeClass("open");
            $(subExpandHold).find(".initial-content").css("display", "block");
          } else if(!subHeaderRef.originallyHadClass && !$(subExpandHold).hasClass("open")) {
            $(subExpandHold).addClass("open");
          }
        });

        return false;
      });
  });
}

function initMediaPlayer() {
  var animRefs = {};
  
  $("div#media-player-content-hold").each(function() {
    var mediaBlockRef = this;
		
		/*** The actual block set carosel ***/
		mediaBlockRef.$blockSetCarosel = $(mediaBlockRef).find("ul#media-player-content-blocks");
		
		/*** The ID for the block set carosel ***/
  	mediaBlockRef.blockSetID = mediaBlockRef.$blockSetCarosel.attr("id");
		
		/*** The entries within the block set ***/
		mediaBlockRef.$blockSetEntries = mediaBlockRef.$blockSetCarosel.find("li.media-entry-set");
		
		/*** Get an entry to calculate dimensions ***/
		mediaBlockRef.$singleEntry = mediaBlockRef.$blockSetEntries.filter(':first');
	
		/*** How wide each media entry is (with the border) ***/
		mediaBlockRef.blockSetEntryWidth = mediaBlockRef.$singleEntry.outerWidth();
	
		/*** How many are visible at any given time ***/
		mediaBlockRef.numberVisible = Math.ceil(($(mediaBlockRef).innerWidth() / mediaBlockRef.blockSetEntryWidth));
	
		/*** How many slides do we have to transition? ***/
		mediaBlockRef.slideCount = Math.ceil(mediaBlockRef.$blockSetEntries.length / mediaBlockRef.numberVisible);
	
		/*** Start by showing the first slide ***/
		mediaBlockRef.currentSlide = 1;
	
		/*** Variable to hold slideAnimation call ***/
		mediaBlockRef.slideAnimation;
	
		/*** Variable to hold gotoSlide call ***/
		mediaBlockRef.gotoSlide;
		
		/*** The timeout holder ***/
  	mediaBlockRef.animationDelay;
  	
  	/*** This will hold the references to teh subcontainers ***/
  	mediaBlockRef.subSets = {};
		
		mediaBlockRef.checkRealPos = function(isStart) {
			isStart = (typeof(isStart) == 'undefined')?false:true;
			 
			var caroStartPos = mediaBlockRef.$blockSetCarosel.position();
			var realPos = caroStartPos.left;
			var expectedPos = Math.abs((-1 * mediaBlockRef.currentSlide * mediaBlockRef.blockSetEntryWidth));

			if(realPos != (-1 * expectedPos)) {
				if(realPos != 0) {
					if(isStart) {
						realPos = realPos - mediaBlockRef.blockSetEntryWidth;
					}
					mediaBlockRef.currentSlide = Math.round((Math.abs(realPos) / mediaBlockRef.blockSetEntryWidth));
				} else {
					if(isStart) {
						mediaBlockRef.currentSlide = 1;
					} else {
						mediaBlockRef.currentSlide = 0;
					}
				}
			}
		}
		
		if(mediaBlockRef.slideCount > 1) {
			/*** We need to duplicate the content of the first and last slide content to make it seamless ***/
  		mediaBlockRef.$blockSetEntries.filter(':first').before(mediaBlockRef.$blockSetEntries.slice(-mediaBlockRef.numberVisible).clone().each(function() {
  		  var firstMediaBlock = this;
  		  
  			firstMediaBlock.origID = $(firstMediaBlock).attr("id");
  			firstMediaBlock.numericID = firstMediaBlock.origID.substring((firstMediaBlock.origID.lastIndexOf("-") + 1), firstMediaBlock.origID.length);
  			firstMediaBlock.newID = 'cloned-mp-set-'+firstMediaBlock.numericID;
				
				$(firstMediaBlock).find('ul.media-entry-items li').each(function() {
					var mediaEntryRef = this;
					
					mediaEntryRef.origID = $(mediaEntryRef).attr("id");
  				mediaEntryRef.numericID = mediaEntryRef.origID.substring((mediaEntryRef.origID.lastIndexOf("-") + 1), mediaEntryRef.origID.length);
  				mediaEntryRef.newID = 'cloned-mp-set-'+firstMediaBlock.numericID+'-entry-'+mediaEntryRef.numericID;
					mediaEntryRef.newLinkID = 'cloned-mp-set-'+firstMediaBlock.numericID+'-entry-link-'+mediaEntryRef.numericID;
					
					$(mediaEntryRef).find('a.linkover')
  					.attr('id', mediaEntryRef.newLinkID);
					
					$(mediaEntryRef)
						.attr('id', mediaEntryRef.newID)
						.addClass('cloned');
				});
				
  			$(firstMediaBlock)
  				.attr('id', firstMediaBlock.newID)
  				.addClass('cloned');
  		}));
  		mediaBlockRef.$blockSetEntries.filter(':last').after(mediaBlockRef.$blockSetEntries.slice(0, mediaBlockRef.numberVisible).clone().each(function() {
  		  var lastMediaBlock = this;
  		  
  			lastMediaBlock.origID = $(lastMediaBlock).attr("id");
  			lastMediaBlock.numericID = lastMediaBlock.origID.substring((lastMediaBlock.origID.lastIndexOf("-") + 1), lastMediaBlock.origID.length);
  			lastMediaBlock.newID = 'cloned-mp-set-'+lastMediaBlock.numericID;
  			
				$(lastMediaBlock).find('ul.media-entry-items li').each(function() {
					var mediaEntryRef = this;
					
					mediaEntryRef.origID = $(mediaEntryRef).attr("id");
  				mediaEntryRef.numericID = mediaEntryRef.origID.substring((mediaEntryRef.origID.lastIndexOf("-") + 1), mediaEntryRef.origID.length);
  				mediaEntryRef.newID = 'cloned-mp-set-'+lastMediaBlock.numericID+'-entry-'+mediaEntryRef.numericID;
					mediaEntryRef.newLinkID = 'cloned-mp-set-'+lastMediaBlock.numericID+'-entry-link-'+mediaEntryRef.numericID;
					
					$(mediaEntryRef).find('a.linkover')
  					.attr('id', mediaEntryRef.newLinkID);
					
					$(mediaEntryRef)
						.attr('id', mediaEntryRef.newID)
						.addClass('cloned');
				});
				
  			$(lastMediaBlock)
  				.attr('id', lastMediaBlock.newID)
  				.addClass('cloned');
  		}));
			
			/*** Refresh the $mediaItems list ***/
			mediaBlockRef.$blockSetEntries = mediaBlockRef.$blockSetCarosel.find("li.media-entry-set");
		}
	
		/*** Calculate the new width of the carosel content holder ***/
		mediaBlockRef.newWidth = mediaBlockRef.$blockSetEntries.length * mediaBlockRef.blockSetEntryWidth;
	
		mediaBlockRef.checkRealPos(true);
	
		/*** Set new properties for the carosel content holder ***/
		mediaBlockRef.$blockSetCarosel.css('width', mediaBlockRef.newWidth);
		
		if(mediaBlockRef.slideCount > 1) {
			mediaBlockRef.$blockSetCarosel.css('left', (-1 * mediaBlockRef.currentSlide * mediaBlockRef.blockSetEntryWidth));
		}
		
		mediaBlockRef.$blockSetEntries.find("#mp-set-"+mediaBlockRef.currentSlide).addClass("selected");
		
		mediaBlockRef.gotoSlide = function(slideNo,navClick) {
			navClick = (typeof(navClick) == 'undefined')?false:true;
			
			var mainCarselIDString = mediaBlockRef.blockSetID;
			clearTimeout(mediaBlockRef.animationDelay);
			//delete animRefs[mainCarselIDString];
		
			/*** Get where we currently think we are ***/
			var originalPos = mediaBlockRef.currentSlide;
		
			/*** Check where we REALLY are ***/
			mediaBlockRef.checkRealPos();
		
			/*** If they are not equivalent correct values ***/
			if(originalPos != mediaBlockRef.currentSlide) {
				mediaBlockRef.$blockSetCarosel.css('left', (-1 * mediaBlockRef.currentSlide * mediaBlockRef.blockSetEntryWidth));
			
				if(!navClick) {
					if(mediaBlockRef.currentSlide >= mediaBlockRef.slideCount) {
						slideNo = 2;
					} else {
						slideNo = mediaBlockRef.currentSlide + 1;
					}
				}
			}
		
			/*** Used for setting "selected" class ***/
			var actualSlide;
		
			if(slideNo > mediaBlockRef.slideCount) {
				actualSlide = 1;
			} else if(slideNo < 1) {
				actualSlide = mediaBlockRef.slideCount;
			} else {
				actualSlide = slideNo;
			}
		
			/*** Determine the direction of the transition ***/
			var direction = slideNo < mediaBlockRef.currentSlide ? -1 : 1;
		
			/*** Get the required slide shift ***/
			var slideShift = Math.abs(mediaBlockRef.currentSlide - slideNo);
		
			/*** How much in pixels we are shifting ***/
			var leftShift = direction * mediaBlockRef.blockSetEntryWidth * mediaBlockRef.numberVisible * slideShift;
		
			mediaBlockRef.$blockSetCarosel.find('li.selected').removeClass("selected");
			
			mediaBlockRef.$blockSetCarosel.filter(':not(:animated)').animate({
				left: '-='+leftShift
			}, 500, function () {
				if (slideNo == 0) {
					mediaBlockRef.$blockSetCarosel.css('left', -(mediaBlockRef.blockSetEntryWidth * mediaBlockRef.numberVisible * mediaBlockRef.slideCount));
					slideNo = mediaBlockRef.slideCount;
				} else if (slideNo > mediaBlockRef.slideCount) {
					mediaBlockRef.$blockSetCarosel.css('left', -(mediaBlockRef.blockSetEntryWidth * mediaBlockRef.numberVisible));
					slideNo = 1;
				}
			
				mediaBlockRef.$blockSetCarosel.find('li#cloned-mp-set-'+slideNo).addClass("selected");
				mediaBlockRef.$blockSetCarosel.find('li#mp-set-'+slideNo).addClass("selected");
				
				/**
				 * We need to slide content back to it's intended initial position after out of view
				 */
				if((slideNo - 1) < 1) {
				  var fix_slide_target = 'mp-set-'+mediaBlockRef.slideCount;
				  var fix_slide_target_clone = 'cloned-mp-set-'+mediaBlockRef.slideCount;
				  
				  if(mediaBlockRef.subSets[fix_slide_target].slideCount > 1) {
  					mediaBlockRef.subSets[fix_slide_target].$carosel.css('left', -(mediaBlockRef.subSets[fix_slide_target].mediaEntryWidth * mediaBlockRef.subSets[fix_slide_target].numberVisible));
  		      mediaBlockRef.subSets[fix_slide_target].currentSlide = 1;
  		      mediaBlockRef.subSets[fix_slide_target_clone].$carosel.css('left', -(mediaBlockRef.subSets[fix_slide_target_clone].mediaEntryWidth * mediaBlockRef.subSets[fix_slide_target_clone].numberVisible));
  		      mediaBlockRef.subSets[fix_slide_target_clone].currentSlide = 1;
  				}
				} else {
				  var fix_slide_target = 'mp-set-1';
				  var fix_slide_target_clone = 'cloned-mp-set-1';
				  
				  if(mediaBlockRef.subSets[fix_slide_target].slideCount > 1) {
  					mediaBlockRef.subSets[fix_slide_target].$carosel.css('left', -(mediaBlockRef.subSets[fix_slide_target].mediaEntryWidth * mediaBlockRef.subSets[fix_slide_target].numberVisible));
  		      mediaBlockRef.subSets[fix_slide_target].currentSlide = 1;
  		      mediaBlockRef.subSets[fix_slide_target_clone].$carosel.css('left', -(mediaBlockRef.subSets[fix_slide_target_clone].mediaEntryWidth * mediaBlockRef.subSets[fix_slide_target_clone].numberVisible));
  		      mediaBlockRef.subSets[fix_slide_target_clone].currentSlide = 1;
  				}
				}
	
				mediaBlockRef.currentSlide = slideNo;
				
				var target_sub_id = 'mp-set-'+slideNo;

  			if(mediaBlockRef.subSets[target_sub_id].slideCount > 1) {
          mediaBlockRef.subSets[target_sub_id].animationDelay = setTimeout(mediaBlockRef.subSets[target_sub_id].slideAnimation, 3000);

      	  animRefs[target_sub_id] = mediaBlockRef.subSets[target_sub_id];
      	} else if(mediaBlockRef.slideCount > 1) {
      	  mediaBlockRef.animationDelay = setTimeout(mediaBlockRef.slideAnimation, 3000);

      	  var mainCarselIDString = mediaBlockRef.blockSetID;
      	  animRefs[mainCarselIDString] = mediaBlockRef;
      	}
			});
		
			return false;
		}
	
		mediaBlockRef.slideAnimation = function() {
			var jumpTo = mediaBlockRef.currentSlide + 1;
		 
			mediaBlockRef.gotoSlide(jumpTo);
		}
		
		$(mediaBlockRef).find("li.media-entry-set").each(function() {
  		/*** Parent container with overflow hidden ***/
    	var container = this;
		
  		/*** The ID for the carosel ***/
  		container.caroselID = $(container).attr("id");
		
  		/*** The actual carosel content holder ***/
  		container.$carosel = $(container).find('ul.media-entry-items');
		
  		/*** The items in the carosel to transition between ***/
  		container.$mediaItems = container.$carosel.find('li');
		
  		/*** Get an entry to calculate dimensions ***/
  		container.$singleEntry = container.$mediaItems.filter(':first');
		
  		/*** How wide each media entry is (with the border) ***/
  		container.mediaEntryWidth = container.$singleEntry.outerWidth();
		
  		/*** How many are visible at any given time ***/
  		container.numberVisible = Math.ceil(($(container).innerWidth() / container.mediaEntryWidth));
		
  		/*** How many slides do we have to transition? ***/
  		container.slideCount = Math.ceil(container.$mediaItems.length / container.numberVisible);
		
  		/*** Start by showing the first slide ***/
  		container.currentSlide = 1;
		
  		/*** Variable to hold slideAnimation call ***/
  		container.slideAnimation;
		
  		/*** Variable to hold gotoSlide call ***/
  		container.gotoSlide;
		
  		/*** The timeout holder ***/
  		container.animationDelay;
		
  		container.checkRealPos = function(isStart) {
  			isStart = (typeof(isStart) == 'undefined')?false:true;
				 
  			var caroStartPos = container.$carosel.position();
  			var realPos = caroStartPos.left;
  			var expectedPos = Math.abs((-1 * container.currentSlide * container.mediaEntryWidth));

  			if(realPos != (-1 * expectedPos)) {
  				if(realPos != 0) {
  					if(isStart) {
  						realPos = realPos - container.mediaEntryWidth;
  					}
  					container.currentSlide = Math.round((Math.abs(realPos) / container.mediaEntryWidth));
  				} else {
  					if(isStart) {
  						container.currentSlide = 1;
  					} else {
  						container.currentSlide = 0;
  					}
  				}
  			}
  		}
  		
  		if(container.slideCount > 1) {
  		  /*** We need to duplicate the content of the first and last slide content to make it seamless ***/
    		container.$mediaItems.filter(':first').before(container.$mediaItems.slice(-container.numberVisible).clone().each(function() {
    		  var firstMediaItem = this;
		  
    			firstMediaItem.origID = $(firstMediaItem).attr("id");
    			firstMediaItem.numericID = firstMediaItem.origID.substring((firstMediaItem.origID.lastIndexOf("-") + 1), firstMediaItem.origID.length);
    			firstMediaItem.newID = 'cloned-'+container.caroselID+'-entry-'+firstMediaItem.numericID;
    			firstMediaItem.newLinkID = 'cloned-'+container.caroselID+'-entry-link-'+firstMediaItem.numericID;
		
    			$(firstMediaItem).find('a.linkover')
    				.attr('id', firstMediaItem.newLinkID);
		
    			$(firstMediaItem)
    				.attr('id', firstMediaItem.newID)
    				.addClass('cloned');
    		}));
    		container.$mediaItems.filter(':last').after(container.$mediaItems.slice(0, container.numberVisible).clone().each(function() {
    		  var lastMediaItem = this;
		  
    			lastMediaItem.origID = $(lastMediaItem).attr("id");
    			lastMediaItem.numericID = lastMediaItem.origID.substring((lastMediaItem.origID.lastIndexOf("-") + 1), lastMediaItem.origID.length);
    			lastMediaItem.newID = 'cloned-'+container.caroselID+'-entry-'+lastMediaItem.numericID;
    			lastMediaItem.newLinkID = 'cloned-'+container.caroselID+'-entry-link-'+lastMediaItem.numericID;
		
    			$(lastMediaItem).find('a.linkover')
    				.attr('id', lastMediaItem.newLinkID);
			
    			$(lastMediaItem)
    				.attr('id', lastMediaItem.newID)
    				.addClass('cloned');
    		}));
  		}
		
  		/*** Deal with video links ***/
  		container.$mediaItems.each(function() {
  		  var mediaItem = this;
  		  
  			if($(mediaItem).hasClass("video")) {
  				mediaItem.liID = $(mediaItem).attr("id");
				
  				mediaItem.$videoPlay;
				
  				$(mediaItem).find('a.linkover').each(function() {
  				  var thisLinkOver = this;
  				  
  					thisLinkOver.contId = $(thisLinkOver).attr("id");
  					thisLinkOver.video = $(thisLinkOver).attr("href");
					
  					thisLinkOver.$videoPlayerControls = $("<div class=\"video-player-controls-hold clearfix\" id=\""+mediaItem.liID+"-pc\"></div>");
					
  					$(thisLinkOver).parent().append(thisLinkOver.$videoPlayerControls);
					
  					mediaItem.$videoPlay = $f(thisLinkOver.contId, {
  							src: "flash/flowplayer/flowplayer.commercial-3.2.2.swf",
  							wmode: "transparent"
  						},
  						{
  							clip: {
  								baseUrl: MIYOLib._conf.siteBaseURL,
									width: 640,
									height: 360
  							},
  							playlist: [
  								{
  									url: thisLinkOver.video,
  									autoPlay: true,
  									autoBuffering: true
  								}
  							],
  							key: '#$923bc42c9a13ba56ed5',
  							contextMenu: [ 
			
  									// 1. "About Flowplayer...";  selecting this item goes to our homepage 
  									{'About Wonder Associates ...' : function() { 
  											location.href = "http://www.wonderassociates.com"; 
  									}}, 
			
  									// 2. menu separator. 
  									'-', 
			
  									// 3. version information. 
  									'Wonder Media Player v3.2.1' 
  							],
  							plugins: {
  								controls: null
  							}
  						}
  					).controls(mediaItem.liID+"-pc");
  				});
				
  				$(mediaItem).find('a.linkover').click(function() {
  				  var thisLinkOver = this;
  				  
  				  thisLinkOver.origWidth = $(thisLinkOver).css('width');
  				  thisLinkOver.origHeight = $(thisLinkOver).css('height');
						
						for(var entry in animRefs) {
							if(animRefs.hasOwnProperty(entry)) {
							  if(typeof animRefs[entry] != undefined) {
									clearTimeout(animRefs[entry].animationDelay);
								}
							}
						}
						
						$(thisLinkOver).css('width', '640px');
						$(thisLinkOver).css('height', '360px');
						
  					$(thisLinkOver).closest("li.media-entry-set").addClass("playing");
			
  					thisLinkOver.$closeButton = $("<a href=\"#\" class=\"close-button\"><span class=\"accessibility\">Close</span></a>");
  					thisLinkOver.$closeButton.click(function() {
  					  var thisCloseButton = this;
  					  
							$(thisLinkOver).css('height', '100%');
							
  						$(thisCloseButton).closest("li.media-entry-set").removeClass("playing");
  						mediaItem.$videoPlay.unload();
  						$(thisLinkOver).css('width', thisLinkOver.origWidth);
  						$(thisLinkOver).css('height', thisLinkOver.origHeight);
  						$(thisCloseButton).remove();
							for(var entry in animRefs) {
								if(animRefs.hasOwnProperty(entry)) {
									if(entry == container.caroselID && container.slideCount > 1) {
										animRefs[entry].animationDelay = setTimeout(animRefs[entry].slideAnimation, 3000);
									}
								}
							}
  						return false;
  					});
			
  					$(thisLinkOver).parent().append(thisLinkOver.$closeButton);
						
						return false;
  				});
  			}
  		});
  		
  		/*** Refresh the $mediaItems list ***/
  		container.$mediaItems = container.$carosel.find('li');
		
  		/*** Calculate the new width of the carosel content holder ***/
  		container.newWidth = container.$mediaItems.length * container.mediaEntryWidth;
		
  		container.checkRealPos(true);
		
  		/*** Set new properties for the carosel content holder ***/
  		container.$carosel.css('width', container.newWidth);
  		
  		if(container.slideCount > 1) {
  		  container.$carosel.css('left', (-1 * container.currentSlide * container.mediaEntryWidth));
		  }
		  
  		container.$mediaItems.find("#"+container.caroselID+"-entry-"+container.currentSlide).addClass("selected");
		
  		container.gotoSlide = function(slideNo,navClick) {
  			navClick = (typeof(navClick) == 'undefined')?false:true;
  			
  			var caroselIDString = container.caroselID;
  			clearTimeout(container.animationDelay);
  			//delete animRefs[caroselIDString];
			
  			/*** Get where we currently think we are ***/
  			var originalPos = container.currentSlide;
			
  			/*** Check where we REALLY are ***/
  			container.checkRealPos();
			
  			/*** If they are not equivalent correct values ***/
  			if(originalPos != container.currentSlide) {
  				container.$carosel.css('left', (-1 * container.currentSlide * container.mediaEntryWidth));
				
  				if(!navClick) {
  					if(container.currentSlide >= container.slideCount) {
  						slideNo = 2;
  					} else {
  						slideNo = container.currentSlide + 1;
  					}
  				}
  			}
			
  			/*** Used for setting "selected" class ***/
  			var actualSlide;
			
  			if(slideNo > container.slideCount) {
  				actualSlide = 1;
  			} else if(slideNo < 1) {
  				actualSlide = container.slideCount;
  			} else {
  				actualSlide = slideNo;
  			}
			
  			/*** Determine the direction of the transition ***/
  			var direction = slideNo < container.currentSlide ? -1 : 1;
			
  			/*** Get the required slide shift ***/
  			var slideShift = Math.abs(container.currentSlide - slideNo);
			
  			/*** How much in pixels we are shifting ***/
  			var leftShift = direction * container.mediaEntryWidth * container.numberVisible * slideShift;
  			
  			if(slideNo > container.slideCount && mediaBlockRef.slideCount > 1) {
		      container.$carosel.stop();
					mediaBlockRef.slideAnimation();
					return false;
				}
			
  			container.$carosel.find('li.selected').removeClass("selected");
			
  			container.$carosel.filter(':not(:animated)').animate({
  				left: '-='+leftShift
  			}, 500, function () {					
  				if (slideNo == 0) {
  					container.$carosel.css('left', -(container.mediaEntryWidth * container.numberVisible * container.slideCount));
  					slideNo = container.slideCount;
  				} else if (slideNo > container.slideCount) {
  					container.$carosel.css('left', -(container.mediaEntryWidth * container.numberVisible));
  					slideNo = 1;
  				}
				
  				container.$carosel.find('li#cloned-'+container.caroselID+'-entry-'+slideNo).addClass("selected");
  				container.$carosel.find('li#'+container.caroselID+'-entry-'+slideNo).addClass("selected");
  				container.currentSlide = slideNo;
  			});
		    
  		  container.animationDelay = setTimeout(container.slideAnimation, 3000);
			
  			return false;
  		}
		
  		container.slideAnimation = function() {
  			var jumpTo = container.currentSlide + 1;
			 
  			container.gotoSlide(jumpTo);
  		}
  		
  		var caroselIDString = container.caroselID;
  		
  		mediaBlockRef.subSets[caroselIDString] = container;
  	});
  	
  	$target_sub = $(mediaBlockRef).find("li.media-entry-set").filter(".selected:first");
  	target_sub_id = $target_sub.attr('id');
  	
  	if(mediaBlockRef.subSets[target_sub_id].slideCount > 1) {  	  
  	  mediaBlockRef.subSets[target_sub_id].animationDelay = setTimeout(mediaBlockRef.subSets[target_sub_id].slideAnimation, 3000);
  	  
  	  animRefs[target_sub_id] = mediaBlockRef.subSets[target_sub_id];
  	} else if(mediaBlockRef.slideCount > 1) {
  	  mediaBlockRef.animationDelay = setTimeout(mediaBlockRef.slideAnimation, 3000);
  	  
  	  var mainCarselIDString = mediaBlockRef.blockSetID;
  	  animRefs[mainCarselIDString] = mediaBlockRef;
  	}
	});
}

function initShortSlider() {
	$("#short-slider-bar").each(function() {
		var shortSlider = this;
		
		// Scroll content parts
		shortSlider.$scrollArea = $('div.slider-content-set', shortSlider);
		shortSlider.$scrollContent = $('ul.slider-list', shortSlider);
		
		shortSlider.entryCount =  shortSlider.$scrollContent.find("li").length;
		shortSlider.contentEntryWidth = shortSlider.$scrollContent.find("li:first").outerWidth();
		
		shortSlider.$previousTrigger = $("a.previous-entries-trigger", shortSlider);
		shortSlider.prevTrigWidth = shortSlider.$previousTrigger.width();
		shortSlider.$nextTrigger = $("a.earlier-entries-trigger", shortSlider);
		shortSlider.nextTrigWidth = shortSlider.$nextTrigger.width();
		
		shortSlider.triggerLeftAnimation;
		shortSlider.triggerRightAnimation;
		
		shortSlider.moveImagesLeft = function() {
		  var currLeftShift = shortSlider.$scrollContent.position().left;
			var leftArrowWidth = shortSlider.prevTrigWidth - 25;
			var contentWidthDisplay = currLeftShift;
			if(contentWidthDisplay < 0) {
				contentWidthDisplay = -1 * contentWidthDisplay;
				contentWidthDisplay = contentWidthDisplay + leftArrowWidth;
			} else {
				contentWidthDisplay = contentWidthDisplay - leftArrowWidth;
				if(contentWidthDisplay < 0) {
					contentWidthDisplay = -1 * contentWidthDisplay;
				}
			}
			contentWidthDisplay = contentWidthDisplay + shortSlider.$scrollArea.width();
			
			if(shortSlider.$scrollContent.width() > contentWidthDisplay) {
				var actualLeftShift = currLeftShift - leftArrowWidth;
				if(actualLeftShift < 0) {
					actualLeftShift = -1 * actualLeftShift;
				}
				var currVisSlide = Math.floor((actualLeftShift / shortSlider.contentEntryWidth));
				var nextSlideShift = currVisSlide + 1;
				
				shortSlider.$scrollContent.animate({
  				left: ((-1 * (nextSlideShift * shortSlider.contentEntryWidth))) + 'px'
  			}, 500, function () {
  			});
				
				//shortSlider.$scrollContent.css('left', ((-1 * (nextSlideShift * shortSlider.contentEntryWidth))) + 'px');
			}
		}
		
		shortSlider.moveImagesRight = function() {
		  var currLeftShift = shortSlider.$scrollContent.position().left;
			var leftArrowWidth = shortSlider.prevTrigWidth - 25;
			var contentWidthDisplay = currLeftShift;
			if(contentWidthDisplay < 0) {
				contentWidthDisplay = -1 * contentWidthDisplay;
				contentWidthDisplay = contentWidthDisplay + leftArrowWidth;
			} else {
				contentWidthDisplay = contentWidthDisplay - leftArrowWidth;
				if(contentWidthDisplay < 0) {
					contentWidthDisplay = -1 * contentWidthDisplay;
				}
			}
			contentWidthDisplay = contentWidthDisplay + shortSlider.$scrollArea.width();
			
			if(currLeftShift < (leftArrowWidth - 25)) {
				var actualLeftShift = currLeftShift - leftArrowWidth;
				if(actualLeftShift < 0) {
					actualLeftShift = -1 * actualLeftShift;
				}
				var currVisSlide = Math.floor((actualLeftShift / shortSlider.contentEntryWidth));
				var nextSlideShift = currVisSlide - 1;
				
				shortSlider.$scrollContent.animate({
  				left: ((-1 * (nextSlideShift * shortSlider.contentEntryWidth))) + 'px'
  			}, 500, function () {
  			  
  			});
				
				//shortSlider.$scrollContent.css('left', ((-1 * (nextSlideShift * shortSlider.contentEntryWidth))) + 'px');
			}
		}
		
		shortSlider.$nextTrigger.click(function() {
			return false;
		});
		
		shortSlider.$nextTrigger.mousedown(function() {
		  shortSlider.moveImagesLeft();
		  
			shortSlider.triggerLeftAnimation = setInterval(shortSlider.moveImagesLeft, 550);
		});
		
		shortSlider.$nextTrigger.mouseup(function() {
		  clearInterval(shortSlider.triggerLeftAnimation);
		});
		
		shortSlider.$previousTrigger.click(function() {
			return false;
		});
		
		shortSlider.$previousTrigger.mousedown(function() {
		  shortSlider.moveImagesRight();
		  
			shortSlider.triggerRightAnimation = setInterval(shortSlider.moveImagesRight, 550);
		});
		
		shortSlider.$previousTrigger.mouseup(function() {
		  clearInterval(shortSlider.triggerRightAnimation);
		});
	});
}
