var AnimateBannerButtonWidth = 16;
var AnimateBannerButtonHeight = 10;
var AnimateBannerPrevImage = "images/btn_slide_prev.gif";
var AnimateBannerNextImage = "images/btn_slide_next.gif";
var AnimateBannerLinkWidth = 24;

Event.addEvent(window, "load", AnimateBanner);

function AnimateBanner(){
	var banners = Document.getElementsByClassMatch("JS:AnimateBanner");
	banners.each(function(element){ AnimateBanner.setSlides(element); });
}
AnimateBanner.setSlides = function(element){
	element.currentSlide = 0;
	var slides = Document.getChildNodes(element);
	if(slides.length <= 1){
		return;
	}
	var zCount = 1;
	for(var i = slides.length - 1; i >= 0; i--){
		slides[i].style.zIndex = zCount;
		zCount ++;
	}
	var parameters = Document.getArguments(element, "JS:AnimateBanner");
	var animation = parameters[0];
	var seconds = parameters[1];
	element.animation = animation;
	element.seconds = seconds;
	if(parameters[2]){
		AnimateBanner.setButtons(element);
		AnimateBanner.setNavigation(element);
	}
	AnimateBanner.animate(element, animation, seconds);
	
}
AnimateBanner.setButtons = function(element){
	var children = Document.getChildNodes(element);
	var totalSlides = children.length;
	var holder = document.createElement("div");
	holder.style.position = "absolute";
	holder.style.zIndex = 1;
	holder.style.width = (AnimateBannerButtonWidth * totalSlides) + "px";
	holder.style.height = AnimateBannerButtonHeight + "px";
	document.getElementsByTagName("body")[0].appendChild(holder);
	holder.style.top = (Document.getY(element) + element.offsetHeight) + "px";
	holder.style.left = (Document.getX(element) + (element.offsetWidth / 2) - (holder.offsetWidth / 2)) + "px";
	element.buttons = holder;
	for(var i = 0; i < totalSlides; i ++){
		var a = document.createElement("a");
		a.innerHTML = "&nbsp;";
		a.href = "#";
		a.style.display = "block";
		a.style.width = AnimateBannerButtonWidth + "px";
		a.style.height = AnimateBannerButtonHeight + "px";
		a.style.cssFloat = "left";
		a.style.styleFloat = "left";
		a.className = "btn_slide";
		holder.appendChild(a);
		a.slideNum = i;
		if(a.slideNum == element.currentSlide){
			a.className = "btn_slide_active";
		}
		a.slider = element;
		Event.addEvent(a, "click", AnimateBanner.moveToSlide);
	}
}
AnimateBanner.setNavigation = function(element){
	var bodyElement = document.getElementsByTagName("body")[0];
	var prevLink = document.createElement("a");
	var leftPadding = Number(Document.getStyle(element, "margin-left").replace("px",""));
	var rightPadding = Number(Document.getStyle(element, "margin-right").replace("px",""));
	prevLink.style.position = "absolute";
	prevLink.style.zIndex = 2;
	prevLink.style.display = "block";
	prevLink.style.textIndent = "-9999px";
	prevLink.style.width = AnimateBannerLinkWidth +"px";
	prevLink.style.height = (element.offsetHeight) +"px";
	prevLink.style.left = (Document.getX(element) - leftPadding - AnimateBannerLinkWidth) +"px";
	prevLink.style.top = Document.getY(element) +"px";
	prevLink.style.background = "url("+AnimateBannerPrevImage+") no-repeat center center";
	bodyElement.appendChild(prevLink);
	prevLink.innerHTML = "previous";
	prevLink.setAttribute("href", "#");
	prevLink.setAttribute("title", "previous");
	prevLink.setAttribute("id", "AnimateBannerPrev");
	prevLink.slider = element;
	Event.addEvent(prevLink, "click", AnimateBanner.prevSlide);
	var nextLink = document.createElement("a");
	nextLink.style.position = "absolute";
	nextLink.style.zIndex = 2;
	nextLink.style.display = "block";
	nextLink.style.textIndent = "-9999px";
	nextLink.style.width = AnimateBannerLinkWidth +"px";
	nextLink.style.height = (element.offsetHeight) +"px";
	nextLink.style.left = (Document.getX(element) + element.offsetWidth + rightPadding) +"px";
	nextLink.style.top = (Document.getY(element) ) +"px";
	nextLink.style.background = "url("+AnimateBannerNextImage+") no-repeat center center";
	bodyElement.appendChild(nextLink);
	nextLink.innerHTML = "next";
	nextLink.setAttribute("href", "#");
	nextLink.setAttribute("title", "next");
	nextLink.setAttribute("id", "AnimateBannerNext");
	nextLink.slider = element;
	Event.addEvent(nextLink, "click", AnimateBanner.nextSlide);
}
AnimateBanner.prevSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt);
	var banner = element.slider;
	element.slideNum = banner.currentSlide - 1;
	AnimateBanner.moveToSlide(evt);
}
AnimateBanner.nextSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt);
	var banner = element.slider;
	element.slideNum = banner.currentSlide + 1;
	AnimateBanner.moveToSlide(evt);
}
AnimateBanner.moveToSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt) || evt;
	var banner = element.slider;
	if(banner.animating){
		return;
	}
	banner.exit = true;
	var slides = Document.getChildNodes(banner);
	var gotoSlide = element.slideNum;
	if(gotoSlide >= slides.length){
		gotoSlide = 0;
	}
	if(gotoSlide < 0){
		gotoSlide = slides.length - 1;
	}
	var currentSlide = banner.currentSlide;
	if(gotoSlide == currentSlide){
		return;
	}
	var clone = slides[currentSlide].cloneNode(true);
	banner.appendChild(clone);
	clone.style.zIndex = 9998;
	var clone2 = slides[gotoSlide].cloneNode(true);
	banner.appendChild(clone2);
	clone2.style.zIndex = 9999;
	clone2.style.visibility = "hidden";
	var zInd = slides.length;
	var count = gotoSlide;
	while(zInd >= 1){
		slides[count].style.zIndex = zInd;
		zInd --;
		count ++;
		if(count > slides.length - 1){
			count = 0;
		}
	}
	AnimateBanner.play(banner, clone, clone2);
	banner.currentSlide = gotoSlide;
}
AnimateBanner.play = function(banner, clone, clone2, ani){
	var play = (ani) ? ani : banner.animation;
	switch(play){
		case "fade" :
			AnimateBanner.fade(banner, clone, clone2);
			break;
		case "blinds" :
			AnimateBanner.blinds(banner, clone, clone2);
			break;
		case "bars" :
			AnimateBanner.bars(banner, clone, clone2);
			break;
		case "boxes" :
			AnimateBanner.boxes(banner, clone, clone2);
			break;
		case "trailing_boxes" :
			AnimateBanner.trailing_boxes(banner, clone, clone2);
			break;
		case "pixel" :
			AnimateBanner.pixel(banner, clone, clone2);
			break;
		case "grow_pixel" :
			AnimateBanner.grow_pixel(banner, clone, clone2);
			break;
		case "pour_tiles" :
			AnimateBanner.pour_tiles(banner, clone, clone2);
			break;
		case "reverse_pour_tiles" :
			AnimateBanner.reverse_pour_tiles(banner, clone, clone2);
			break;
		case "erode_tiles" :
			AnimateBanner.erode_tiles(banner, clone, clone2);
			break;
		case "random" :
			//var anis = new Array("fade", "blinds", "bars", "boxes", "trailing_boxes", "pixel", "grow_pixel", "pour_tiles", "reverse_pour_tiles", "erode_tiles", "reverse_trailing_boxes");
			var anis = new Array("fade", "blinds", "bars", "boxes", "trailing_boxes", "grow_pixel");
			var numAnimations = anis.length;
			var goto = anis[Math.floor(Math.random()*numAnimations)];
			AnimateBanner.play(banner, clone, clone2, goto);
			break;
		default :
			AnimateBanner.fade(banner, clone, clone2);
			break;
	}
}
AnimateBanner.updateButtons = function(banner){
	var holder = banner.buttons;
	var links = holder.getElementsByTagName("a");
	for(var i = 0; i < links.length; i ++){
		links[i].className = "btn_slide";
	}
	links[banner.currentSlide].className = "btn_slide_active";
}
AnimateBanner.animate = function(banner, animation, seconds){
	clearTimeout(banner.timer);
	if(banner.exit){
		return;
	}
	animating = setTimeout( function(){
		if(banner.exit){
			clearTimeout(animating);
			return;
		}
		var slides = Document.getChildNodes(banner);
		var clone = slides[banner.currentSlide].cloneNode(true);
		banner.appendChild(clone);
		clone.style.zIndex = 9998;
		var gotoSlide = (banner.currentSlide < (slides.length -1)) ? banner.currentSlide + 1 : 0;
		var clone2 = slides[gotoSlide].cloneNode(true);
		banner.appendChild(clone2);
		clone2.style.zIndex = 9999;
		clone2.style.visibility = "hidden";
		var zInd = slides.length;
		var count = gotoSlide;
		while(zInd >= 1){
			slides[count].style.zIndex = zInd;
			zInd --;
			count ++;
			if(count > slides.length - 1){
				count = 0;
			}
		}
		AnimateBanner.play(banner, clone, clone2);
		banner.currentSlide ++;
		if(banner.currentSlide >= slides.length){
			banner.currentSlide = 0;
		}
		clearTimeout(animating);
		banner.timer = null;
	 }, seconds * 1000);
	banner.timer = animating;
}
AnimateBanner.sortSlides = function(currentSlide, nextSlide){
	var banner = currentSlide.parentNode;
	banner.removeChild(currentSlide);
	var tween = new Tween(nextSlide, "alpha", None.easeNone, 100, 0, 0.4);
	tween.onMotionFinished = function(){
		banner.removeChild(nextSlide);
		banner.animating = false;
		banner.exit = false;
		AnimateBanner.animate(banner, banner.animation, banner.seconds);
	}
	AnimateBanner.updateButtons(banner);
}

AnimateBanner.fade = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	nextSlide.style.filter = "alpha(opacity=0)";
	nextSlide.style.opacity = 0;
	nextSlide.style.visibility = "visible";
	var tween = new Tween(nextSlide, "alpha", None.easeNone, 0, 100, 0.8);
	tween.onMotionFinished = function(){
		AnimateBanner.sortSlides(currentSlide, nextSlide);
	}
}
AnimateBanner.blinds = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var totalPartitions = 10;
	var width = nextSlide.offsetWidth / totalPartitions;
	var remainders = Math.ceil((width - Math.floor(width)) * totalPartitions);
	var xpos = 0;
	for(var i = 0 ; i < totalPartitions; i ++){
		var partition = nextSlide.cloneNode(false);
		partition.style.visibility = "visible";
		partition.style.width = "0px";
		partition.style.top = "0px";
		partition.style.left = xpos+"px";
		partition.style.backgroundPosition = "-"+xpos+"px";
		nextSlide.appendChild(partition);
		var fWide = (i == totalPartitions - 1) ? width+remainders : width + 1;
		var tween = new Tween(partition, "width", Regular.easeOut, 0, fWide, 0.8);
		if(i == totalPartitions - 1){
			tween.onMotionFinished = function(){
				AnimateBanner.sortSlides(currentSlide, nextSlide);
			}
		}
		xpos += width;
	}
}
AnimateBanner.bars = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var totalPartitions = 14;
	var origWidth = (nextSlide.offsetWidth / totalPartitions);
	var width = Math.floor(origWidth);
	var height = nextSlide.offsetHeight;
	var remainders = Math.floor((origWidth - width) * totalPartitions);
	var xpos = 0;
	var clones = new Array();
	for(var i = 0 ; i < totalPartitions; i ++){
		var partition = nextSlide.cloneNode(false);
		partition.style.visibility = "visible";
		var fWide = (i == totalPartitions - 1) ? width+remainders : width;
		partition.style.width = fWide+"px";
		partition.style.height = "0px";
		partition.style.top = "0px";
		partition.style.left = Math.floor(xpos)+"px";
		partition.style.backgroundPosition = "-"+xpos+"px";
		nextSlide.appendChild(partition);
		clones.push(partition);
		xpos += width;
	}
	var partCount = 0;
	var interval = setInterval(
		function(){
			var tween = new Tween(clones[partCount], "height", Regular.easeOut, 0, height, 0.4);
			var fade = new Tween(clones[partCount], "alpha", None.easeOut, 0, 100, 0.4);
			partCount ++;
			if(partCount == clones.length){
				tween.onMotionFinished = function(){
					AnimateBanner.sortSlides(currentSlide, nextSlide);
				}
				clearInterval(interval);
			}
		}
	,50);
}
AnimateBanner.boxes = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var widthPartitions = 14;
	var totalWidth = nextSlide.offsetWidth;
	var totalHeight = nextSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var clones = new Array();
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = nextSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.width = fWide+"px";
			partition.style.height = fHeight+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			partition.style.filter = "alpha(opacity=0)";
			partition.style.opacity = 0;
			nextSlide.appendChild(partition);
			clones.push(partition);
			xpos += fWide;
		}
		xpos = 0;
		ypos += width;
	}
	var partCount = 0;
	var interval = setInterval(
		function(){
			var tween = new Tween(clones[partCount], "alpha", None.easeOut, 0, 100, 0.4);
			partCount ++;
			if(partCount == clones.length){
				tween.onMotionFinished = function(){
					AnimateBanner.sortSlides(currentSlide, nextSlide);
				}
				clearInterval(interval);
			}
		}
	,20);
}
AnimateBanner.pixel = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var widthPartitions = 20;
	var totalWidth = nextSlide.offsetWidth;
	var totalHeight = nextSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var clones = new Array();
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = nextSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.width = fWide+"px";
			partition.style.height = fHeight+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			partition.style.filter = "alpha(opacity=0)";
			partition.style.opacity = 0;
			nextSlide.appendChild(partition);
			clones.push(partition);
			xpos += fWide;
		}
		xpos = 0;
		ypos += width;
	}
	clones.randomise();
	var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 7 : 20;
	var partCount = 0;
	var interval = setInterval(
		function(){
			var tween = new Tween(clones[partCount], "alpha", None.easeOut, 0, 100, 0.1);
			partCount ++;
			if(partCount == clones.length){
				tween.onMotionFinished = function(){
					AnimateBanner.sortSlides(currentSlide, nextSlide);
				}
				clearInterval(interval);
			}
		}
	,intervalTimer);
}
AnimateBanner.grow_pixel = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var widthPartitions = (Browser.getBrowser() == "internet explorer") ? 16 : 20;
	var totalWidth = nextSlide.offsetWidth;
	var totalHeight = nextSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var clones = new Array();
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = nextSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.width = "0px";
			partition.style.height = "0px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			partition.style.filter = "alpha(opacity=0)";
			partition.style.opacity = 0;
			nextSlide.appendChild(partition);
			partition.fWide = fWide;
			var temp = new Array(partition, fWide, fHeight, xpos, ypos);
			clones.push(temp);
			xpos += fWide;
		}
		xpos = 0;
		ypos += width;
	}
	clones.randomise();
	var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 5 : 10;
	var aniTimer = (Browser.getBrowser() == "internet explorer") ? 0.2 : 0.4;
	var partCount = 0;
	var interval = setInterval(
		function(){
			var element = clones[partCount][0];
			var startX = (clones[partCount][3] + (clones[partCount][1] / 2));
			var startY = (clones[partCount][4] + (clones[partCount][2] / 2));
			var start = new Array(0, 0, startX, startY); // width, height, x, y
			var end = new Array(clones[partCount][1], clones[partCount][2], clones[partCount][3], clones[partCount][4]); // width, height, x, y
			var tween = new Tween(element, "advancedScale", Regular.easeOut, start, end, aniTimer);
			element.style.filter = "alpha(opacity=100)";
			element.style.opacity = 1;
			partCount ++;
			if(partCount == clones.length){
				tween.onMotionFinished = function(){
					AnimateBanner.sortSlides(currentSlide, nextSlide);
				}
				clearInterval(interval);
			}
		}
	,intervalTimer);
}
AnimateBanner.pour_tiles = function(banner, currentSlide, nextSlide){
	currentSlide.style.visibility = "hidden";
	banner.animating = true;
	var widthPartitions = 20;
	var totalWidth = currentSlide.offsetWidth;
	var totalHeight = currentSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var partZ = totalPartitions + 10000;
	var clones = new Array();
	var fadeElement = currentSlide.cloneNode(true);
	fadeElement.style.zIndex = partZ + 1;
	fadeElement.style.visibility = "visible";
	banner.appendChild(fadeElement);
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = currentSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.zIndex = partZ;
			partition.style.width = fWide+"px";
			partition.style.height = fHeight+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			currentSlide.appendChild(partition);
			partition.fWide = fWide;
			var temp = new Array(partition, xpos, ypos, 100, (ypos+totalHeight));
			clones.push(temp);
			xpos += fWide;
			partZ --;
		}
		xpos = 0;
		ypos += width;
	}
	var fadeIn = new Tween(fadeElement, "alpha", None.easeNone, 100, 0, 0.2);
	fadeIn.onMotionFinished = function(){
		banner.removeChild(fadeElement);
		var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 20 : 30;
		var aniTimer = (Browser.getBrowser() == "internet explorer" || Browser.getBrowser() == "firefox") ? 0.3 : 0.5;
		var rowTimer = (intervalTimer * widthPartitions) / 1.5;
		var rowNum = 1;
		var totalCount = 0;
		var rowInterval = setInterval(
			function(){
				var end = (rowNum * widthPartitions) - 1;
				var start = end - widthPartitions + 1;
				var partCount = start;
				var interval = setInterval(
					function(){
						totalCount ++;
						var element = clones[partCount][0];
						var startValues = new Array(clones[partCount][1], clones[partCount][2]);
						var endValues = new Array(clones[partCount][3], clones[partCount][4]);
						var tween = new Tween(element, "jump", Back.easeOut, startValues, endValues, aniTimer);
						element.style.filter = "alpha(opacity=100)";
						element.style.opacity = 1;
						if(totalCount == clones.length){
							tween.onMotionFinished = function(){
								AnimateBanner.sortSlides(currentSlide, nextSlide);
							}
						}
						if(partCount == end){
							clearInterval(interval);
						}
						partCount ++;
						var timer = setTimeout(
							function(){
								var fade = new Tween(element, "alpha", Strong.easeIn, 100, 0, (aniTimer / 2));
							}
						, (aniTimer * 1000) / 2);
					}
				,intervalTimer);
				if(rowNum == rows){
					clearInterval(rowInterval);
				}
				rowNum ++;
			}
		, rowTimer);
	}
}
AnimateBanner.reverse_pour_tiles = function(banner, currentSlide, nextSlide){
	currentSlide.style.visibility = "hidden";
	banner.animating = true;
	var widthPartitions = 20;
	var totalWidth = currentSlide.offsetWidth;
	var totalHeight = currentSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var partZ = 9999;
	var clones = new Array();
	var fadeElement = currentSlide.cloneNode(true);
	fadeElement.style.zIndex = partZ + totalPartitions;
	fadeElement.style.visibility = "visible";
	banner.appendChild(fadeElement);
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = currentSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.zIndex = partZ;
			partition.style.width = fWide+"px";
			partition.style.height = fHeight+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			currentSlide.appendChild(partition);
			partition.fWide = fWide;
			var temp = new Array(partition, xpos, ypos, 100, (ypos+totalHeight));
			clones.push(temp);
			xpos += fWide;
			partZ ++;
		}
		xpos = 0;
		ypos += width;
	}
	var fadeIn = new Tween(fadeElement, "alpha", None.easeNone, 100, 0, 0.2);
	fadeIn.onMotionFinished = function(){
		banner.removeChild(fadeElement);
		var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 20 : 30;
		var aniTimer = (Browser.getBrowser() == "internet explorer" || Browser.getBrowser() == "firefox") ? 0.3 : 0.5;
		var rowTimer = (intervalTimer * widthPartitions) / 1.5;
		var rowNum = rows;
		var totalCount = 0;
		var rowInterval = setInterval(
			function(){
				var start = (rowNum * widthPartitions) - 1;
				var end = start - widthPartitions + 1;
				var partCount = start;
				var interval = setInterval(
					function(){
						totalCount ++;
						var element = clones[partCount][0];
						var startValues = new Array(clones[partCount][1], clones[partCount][2]);
						var endValues = new Array(clones[partCount][3], clones[partCount][4]);
						var tween = new Tween(element, "jump", Back.easeOut, startValues, endValues, aniTimer);
						element.style.filter = "alpha(opacity=100)";
						element.style.opacity = 1;
						if(totalCount == clones.length){
							tween.onMotionFinished = function(){
								AnimateBanner.sortSlides(currentSlide, nextSlide);
							}
						}
						if(partCount == end){
							clearInterval(interval);
						}
						partCount --;
						var timer = setTimeout(
							function(){
								var fade = new Tween(element, "alpha", Strong.easeIn, 100, 0, (aniTimer / 2));
							}
						, (aniTimer * 1000) / 2);
					}
				,intervalTimer);
				if(rowNum == 1){
					clearInterval(rowInterval);
				}
				rowNum --;
			}
		, rowTimer);
	}
}
AnimateBanner.erode_tiles = function(banner, currentSlide, nextSlide){
	currentSlide.style.visibility = "hidden";
	banner.animating = true;
	var widthPartitions = 20;
	var totalWidth = currentSlide.offsetWidth;
	var totalHeight = currentSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var partZ = totalPartitions + 10000;
	var clones = new Array();
	var fadeElement = currentSlide.cloneNode(true);
	fadeElement.style.zIndex = partZ + 1;
	fadeElement.style.visibility = "visible";
	banner.appendChild(fadeElement);
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = currentSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.zIndex = partZ;
			partition.style.width = fWide+"px";
			partition.style.height = fHeight+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			currentSlide.appendChild(partition);
			partition.fWide = fWide;
			var temp = new Array(partition, xpos, ypos, 100, (ypos+totalHeight));
			clones.push(temp);
			xpos += fWide;
			partZ --;
		}
		xpos = 0;
		ypos += width;
	}
	var fadeIn = new Tween(fadeElement, "alpha", None.easeNone, 100, 0, 0.2);
	fadeIn.onMotionFinished = function(){
		banner.removeChild(fadeElement);
		clones.randomise();
		var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 10 : 20;
		var aniTimer = (Browser.getBrowser() == "internet explorer" || Browser.getBrowser() == "firefox") ? 0.3 : 0.5;
		var rowTimer = (intervalTimer * widthPartitions) / 1.5;
		var rowNum = 1;
		var totalCount = 0;
		var rowInterval = setInterval(
			function(){
				var end = (rowNum * widthPartitions) - 1;
				var start = end - widthPartitions + 1;
				var partCount = start;
				var interval = setInterval(
					function(){
						totalCount ++;
						var element = clones[partCount][0];
						var startValues = new Array(clones[partCount][1], clones[partCount][2]);
						var endValues = new Array(clones[partCount][3], clones[partCount][4]);
						var tween = new Tween(element, "jump", Back.easeOut, startValues, endValues, aniTimer);
						element.style.filter = "alpha(opacity=100)";
						element.style.opacity = 1;
						if(totalCount == clones.length){
							tween.onMotionFinished = function(){
								AnimateBanner.sortSlides(currentSlide, nextSlide);
							}
						}
						if(partCount == end){
							clearInterval(interval);
						}
						partCount ++;
						var timer = setTimeout(
							function(){
								var fade = new Tween(element, "alpha", Strong.easeIn, 100, 0, (aniTimer / 2));
							}
						, (aniTimer * 1000) / 2);
					}
				,intervalTimer);
				if(rowNum == rows){
					clearInterval(rowInterval);
				}
				rowNum ++;
			}
		, rowTimer);
	}
}

AnimateBanner.trailing_boxes = function(banner, currentSlide, nextSlide){
	banner.animating = true;
	var widthPartitions = (Browser.getBrowser() == "internet explorer") ? 16 : 20;
	var totalWidth = nextSlide.offsetWidth;
	var totalHeight = nextSlide.offsetHeight;
	var width = Math.ceil(totalWidth / widthPartitions);
	var lastColumn = (width * widthPartitions) - totalWidth;
	var rows = Math.ceil(totalHeight / width);
	var lastRow = (rows * width) - totalHeight;
	var xpos = 0;
	var ypos = 0;
	var subtract = false;
	var totalPartitions = widthPartitions * rows;
	var clones = new Array();
	for(var i = 0; i < rows; i ++){
		for(var j = 0; j < widthPartitions; j ++){
			var partition = nextSlide.cloneNode(false);
			partition.style.visibility = "visible";
			var fWide = (j == (widthPartitions - 1)) ? Math.ceil(width - lastColumn) : Math.ceil(width);
			var fHeight = (i == (rows - 1)) ? Math.ceil(width - lastRow) : Math.ceil(width);
			partition.style.width = 0+"px";
			partition.style.height = 0+"px";
			partition.style.left = Math.floor(xpos)+"px";
			partition.style.top = Math.floor(ypos)+"px";
			partition.style.backgroundPosition = "-"+xpos+"px -"+ypos+"px";
			partition.style.filter = "alpha(opacity=0)";
			partition.style.opacity = 0;
			nextSlide.appendChild(partition);
			var temp = new Array(partition, fWide, fHeight, xpos, ypos);
			clones.push(temp);
			xpos += fWide;
		}
		xpos = 0;
		ypos += width;
	}
	var partCount = 0;
	var intervalTimer = (Browser.getBrowser() == "internet explorer") ? 5 : 15;
	var aniTimer = (Browser.getBrowser() == "internet explorer") ? 0.3 : 0.5;
	var interval = setInterval(
		function(){
			var element = clones[partCount][0];
			var startX = (clones[partCount][3] + (clones[partCount][1] / 2));
			var startY = (clones[partCount][4] + (clones[partCount][2] / 2));
			var start = new Array(0, 0, startX, startY); // width, height, x, y
			var end = new Array(clones[partCount][1], clones[partCount][2], clones[partCount][3], clones[partCount][4]); // width, height, x, y
			var tween = new Tween(element, "advancedScale", Regular.easeOut, start, end, aniTimer);
			element.style.filter = "alpha(opacity=100)";
			element.style.opacity = 1;
			partCount ++;
			if(partCount == clones.length){
				tween.onMotionFinished = function(){
					AnimateBanner.sortSlides(currentSlide, nextSlide);
				}
				clearInterval(interval);
			}
		}
	,intervalTimer);
}
