var t5sitetemplatemup = function() {
	var isTouchOnlyDevice;
	var objLargeImageList;
	var objLargeImageListOrder;
	var objLargeImages;
	var objImageBoxes;
	var objImageDelays;
	var currentLargeImageIx;
	var lastLargeImageIx;
	var animBackgroundChange;
	var animBackground;
	var animBackgroundStartTime;
	var animBackgroundEndTime;
	var isTouching = false;
	var touchStartX;
	var touchEndX;
	var touchStartY;
	var touchEndY;
	var imageBoxList;
	var objTab;
	var objTabImg;
	var animTab;
	var animTabStartTime;
	var animTabEndTime;
	var animTabStartPercent;
	var animTabEndPercent;
	var animTabCurrentPercent;
	var shiftValues;
	var objTabHover;
	var objTabOpen;
	var objTabClose;
	var isMenuHidden;
	var pagerUrl;
	var pagerCurrent;
	var pagerTotal;
	var objPagerLeftArrow;
	var objPagerRightArrow;
	var objTabStrip;
	var objTabStripUpDownBtn;
	var objTabStripRightBtn;
	var animTabStrip;
	var animTabStripStartTime;
	var animTabStripEndTime;
	var animTabStripStartPercent;
	var animTabStripEndPercent;
	var animTabStripCurrentPercent;
	var thumbnailObjs;
	var thumbnailObjsActiveIx;
	var panelDefaultClosed;
	
	function setTabPercent(pos) {
		if (animTab) {
			clearInterval(animTab);
			animTab = undefined;
		}
		if (pos != animTabCurrentPercent) {
			animTabStartPercent = animTabCurrentPercent;
			animTabEndPercent = pos;
			animTabStartTime = new Date();
			animTabEndTime = new Date(animTabStartTime.getTime() + 500); // Animate over 0.5 second.
			animTab = setInterval(animateTab, 10); // animate every 10 ms
		}
	}

	function setTabStripPercent(pos) {
		if (animTabStrip) {
			clearInterval(animTabStrip);
			animTabStrip = undefined;
		}
		if (pos != animTabStripCurrentPercent) {
			animTabStripStartPercent = animTabStripCurrentPercent;
			animTabStripEndPercent = pos;
			animTabStripStartTime = new Date();
			animTabStripEndTime = new Date(animTabStripStartTime.getTime() + 500); // Animate over 0.5 second.
			animTabStrip = setInterval(animateTabStrip, 10); // animate every 10 ms
		}
	}
	
	function animateTab() {
		var d = new Date();
		var pos;
		if (d >= animTabEndTime) {
			if (animTab) {
				clearInterval(animTab);
				animTab = undefined;
			}
			pos = 1;
		} else {
			pos=((d - animTabStartTime) / (animTabEndTime - animTabStartTime));
		}
		var c = Math.round((((animTabEndPercent - animTabStartPercent) * pos) + animTabStartPercent) * 100) / 100;
		animTabCurrentPercent = c;
		
		var quadEase = (c<0.5 ? 2*c*c : 4*c-(2*c*c)-1);
		if (objTab) {
			var extendAmount = (264 * quadEase);
			objTab.style.left = (682 - extendAmount) + 'px';
			objTab.style.width = (extendAmount) + 'px';
			objTabImg.style.left = (660 - extendAmount) + 'px';
			if (c == 0) {
				objTabClose.style.display = 'none';
				objTabOpen.style.display = 'inline-block';
			} else if (c == 1) {
				objTabOpen.style.display = 'none';
				objTabClose.style.display = 'inline-block';
			}
		}
		if (objImageBoxes) {
			objImageBoxes.style.width = ((isMenuHidden ? 970 : 682) - (263 * quadEase)) + 'px';
		}
		for (var i = 0; i < shiftValues.length; i++) {
			var sv = shiftValues[i];
			sv.image.style.left = (-263 * quadEase * sv.shiftValue / 100) + 'px';
			/*
			if (sv.overlay) {
				sv.overlay.style.opacity = 1 - c;
				sv.overlay.style.MozOpacity = 1 - c;
				sv.overlay.style.filter = 'alpha(opacity=' + ((1 - c) * 100) + ')';
			}
			*/
		}
		
		if (objTabStrip) {
			objTabStripUpDownBtn.style.left = (943 - (264 * quadEase)) + 'px';
			if (objTabStripRightBtn) {
				objTabStripRightBtn.style.left = (935 - (264 * quadEase)) + 'px';
			}
			if (thumbnailObjs) {
				var shiftOffset = (23 + (thumbnailObjsActiveIx < 3 ? 0 : (thumbnailObjsActiveIx - 2) * -200)) * c;
				for (var i=0; i < thumbnailObjs.length; i++) {
					var st = thumbnailObjs[i].style;
					st.position = "absolute";
					st.left = ((i * ((23 * c) + 177)) + shiftOffset) + "px";
					var shouldFade = ((thumbnailObjsActiveIx < 3 && i >= 3) || (thumbnailObjsActiveIx == 3 && (i == 0 || i == 4)) || (thumbnailObjsActiveIx == 4 && (i==0 || i == 1)));
					var stalpha = (shouldFade ? 1 - c : 1);
					st.opacity = stalpha;
					st.MozOpacity = stalpha;
					st.filter = 'alpha(opacity=' + (stalpha * 100) + ')';
				}
			}
		}
	}

	function animateTabStrip() {
		var d = new Date();
		var pos;
		if (d >= animTabStripEndTime) {
			if (animTabStrip) {
				clearInterval(animTabStrip);
				animTabStrip = undefined;
			}
			pos = 1;
		} else {
			pos=((d - animTabStripStartTime) / (animTabStripEndTime - animTabStripStartTime));
		}
		var c = Math.round((((animTabStripEndPercent - animTabStripStartPercent) * pos) + animTabStripStartPercent) * 100) / 100;
		animTabStripCurrentPercent = c;
		
		var quadEase = (c<0.5 ? 2*c*c : 4*c-(2*c*c)-1);
		if (objTabStrip) {
			var extendAmount = (123 * quadEase);
			objTabStrip.style.top = (540 - extendAmount) + 'px';
			objTabStrip.style.height = (39 + extendAmount) + 'px';
			if (objImageBoxes) {
				objImageBoxes.style.top = (558 - extendAmount -  35) + 'px';
			}
			if (c == 0) {
				objTabStripUpDownBtn.style.backgroundPositionY = '0px';
			} else if (c == 1) {
				objTabStripUpDownBtn.style.backgroundPositionY = '210px';
			}
		}
	}
	
	function animateBackgroundImage() {
		var d = new Date();
		if (d >= animBackgroundEndTime) {
			setAnimateBackground(1);
		} else {
			var pos=((d - animBackgroundStartTime) / (animBackgroundEndTime - animBackgroundStartTime));
			setAnimateBackground(pos);
		}
	}
	
	function setAnimateBackground(pos) {
		if (pos==1&&animBackground) {
			clearInterval(animBackground);
			animBackground = undefined;
		}
		var image=objLargeImageListOrder[currentLargeImageIx];
		if (pos!=1) {
			image.style.opacity = pos;
			image.style.MozOpacity = pos;
			image.style.filter = 'alpha(opacity=' + Math.round(pos * 100) + ')';
		} else {
			image.style.opacity = null;
			image.style.MozOpacity = null;
			image.style.filter = null;
		}
	}
	
	function onLargeImageClick() {
		if (!(currentLargeImageIx && shiftValues.length > currentLargeImageIx && shiftValues[currentLargeImageIx].clickurl) && objTab) {
			t5sitebase.setT5CookieValue('TextPanelState', (animTabEndPercent == 1 ? "closed" : "open"));
			setTabPercent(1 - animTabEndPercent);
		}
	}
	
	function onTabClick() {
		t5sitebase.setT5CookieValue('TextPanelState', (animTabEndPercent == 1 ? "closed" : "open"));
		setTabPercent(1 - animTabEndPercent);
	}

	function onTabStripUpDownClick() {
		t5sitebase.setT5CookieValue('TabPanelState', (animTabStripEndPercent == 1 ? "closed" : "open"));
		setTabStripPercent(1 - animTabStripEndPercent);
		return false;
	}

	function onImageBoxClick() {
		if (animBackgroundChange) {
			clearInterval(animBackgroundChange);
			animBackgroundChange = undefined;
		}
		for (var i=0;i<imageBoxList.length;i++) {
			if (imageBoxList[i]==this) {
				moveToImageBox(i);
				break;
			}
		}
	}
	
	function onImageBoxMouseOver() {
		if (animBackgroundChange) {
			clearTimeout(animBackgroundChange);
			animBackgroundChange = undefined;
		}
		for (var i=0;i<imageBoxList.length;i++) {
			if (imageBoxList[i]==this) {
				moveToImageBox(i);
				break;
			}
		}
	}
	
	function moveToImageBox(i) {
		var oldIx=currentLargeImageIx;
		if (oldIx!=i) {
			var cand1=i-oldIx;
			var cand2=cand1+((cand1<0?1:-1)*imageBoxList.length);
			changeBackgroundImage((Math.abs(cand1)<=Math.abs(cand2)?cand1:cand2));
		}
	}
	
	function onImageBoxMouseOut() {
		if (!animBackgroundChange) {
			animBackgroundChange = setTimeout(animateBackgroundImageChange, objImageDelays[currentLargeImageIx] * 1000);
		}
 	}
	
	function animateBackgroundImageChange() {
		changeBackgroundImage(1);
		animBackgroundChange = setTimeout(animateBackgroundImageChange, objImageDelays[currentLargeImageIx] * 1000);
	}
	
	function changeBackgroundImage(delta, noDelay) {
		if (delta==0) { return; }
		lastLargeImageIx = currentLargeImageIx;
		currentLargeImageIx = fixMod(lastLargeImageIx+delta,imageBoxList.length);
		imageBoxList[lastLargeImageIx].className = 'mupimgbox';
		imageBoxList[currentLargeImageIx].className = 'mupimgboxselected';
		var zzOld = objLargeImageListOrder[lastLargeImageIx];
		var zz = objLargeImageListOrder[currentLargeImageIx];
		objLargeImageList.appendChild(zz);  // Bring to front
		if (isTouchOnlyDevice) {
			if (noDelay) {
				zzOld.style.webkitTransition = '';
				zzOld.style.webkitTransform = 'translate3d(0,0,0)';
				zz.style.webkitTransition = '';
				zz.style.webkitTransform = 'translate3d(0,0,0)';
			} else {
				zzOld.style.webkitTransition = '';
				zzOld.style.webkitTransform = 'translate3d(0,0,0)';
				zz.style.webkitTransition = '';
				zz.style.webkitTransform = 'translate3d('+(delta<0?'-':'')+'972px,0,0)';
				setTimeout(function() { 
					zzOld.style.webkitTransition='-webkit-transform 500ms linear';zzOld.style.webkitTransform='translate3d('+(delta<0?'':'-')+'972px,0,0)';
					zz.style.webkitTransition='-webkit-transform 500ms linear';zz.style.webkitTransform='translate3d(0,0,0)';
				},1);
			}
		} else {
			var image=objLargeImageListOrder[lastLargeImageIx];
			image.style.opacity = null;
			image.style.MozOpacity = null;
			image.style.filter = null;
			if (animBackground) {
				clearInterval(animBackground);
				animBackground = undefined;
			}
			if (noDelay) {
				setAnimateBackground(1);
			} else {
				setAnimateBackground(0);
				animBackgroundStartTime = new Date();
				animBackgroundEndTime = new Date(animBackgroundStartTime.getTime() + 500); // Animate over 1/2 second.
				animBackground = setInterval(animateBackgroundImage, 10); // animate every 10 ms
			}
		}
	}

	function onContentTouchStart(e) {
		if (e.touches.length == 1) {
			isTouching = true;
			touchStartX = e.touches[0].pageX;
			touchStartY = e.touches[0].pageY;
			touchEndX = touchStartX;
			touchEndY = touchStartY;
		}
	}
	
	function onContentTouchMove(e) {
		if (isTouching) {
			if (e.touches.length == 1) {
				touchEndX = e.touches[0].pageX;
				touchEndY = e.touches[0].pageY;
			} else {
				isTouching = false;
			}
		}
	}
	
	function onContentTouchEnd(e) {
		if (isTouching) {
			isTouching = false;
			var deltaX = touchEndX - touchStartX;
			var moveDelta;
			if (deltaX < -50) {
				moveDelta = 1;
			} else if (deltaX > 50) {
				moveDelta = -1;
			}
			if (moveDelta) {
				if (animBackgroundChange) {
					clearInterval(animBackgroundChange);
					animBackgroundChange = undefined;
				}
				changeBackgroundImage(moveDelta);
			}
		}
	}
	
	function fixMod(n1,n2) {
		return (((n1%n2)+n2)%n2);
	}
	
	function setLargeImageCycleAnimation() {
		animBackgroundChange = setTimeout(animateBackgroundImageChange, objImageDelays[0] * 1000);
	}
	
	function setTabExtend(extendPercent) {
	}
	
	function doSetPaging(baseUrl, current, total) {
		var objPager = document.getElementById('muppageid');
		if (objPager) {
			var elem = document.createElement('a');
			objPagerLeftArrow = document.createElement('img');
			objPagerLeftArrow.src = '/images/leftarrow.png';
			if (!isTouchOnlyDevice) {
				objPagerLeftArrow.onmouseover = onPagerArrowMouseOver;
				objPagerLeftArrow.onmouseout = onPagerArrowMouseOut;
			}
			objPagerLeftArrow.style.visibility = (current == 1 ? 'hidden' : 'visible');
			if (current != 1) {
				elem.href=baseUrl+(current==2?'':'-'+(current-1));
			}
			elem.appendChild(objPagerLeftArrow);
			objPager.appendChild(elem);
			
			for (var i = 1; i <= total; i++) {
				elem = document.createElement((i == current ? 'span' : 'a'));
				elem.className = (i == current ? 'muppageitemselected' : 'muppageitem');
				if (i != current) {
					elem.href=baseUrl+(i==1?'':'-'+i);
					if (!isTouchOnlyDevice) {
						elem.onmouseover = onPagerItemMouseOver;
						elem.onmouseout = onPagerItemMouseOut;
					}
				}
				elem.appendChild(document.createTextNode(i.toString()));
				objPager.appendChild(elem);
			}
			
			elem = document.createElement('a');
			objPagerRightArrow = document.createElement('img');
			objPagerRightArrow.src = '/images/rightarrow.png';
			if (!isTouchOnlyDevice) {
				objPagerRightArrow.onmouseover = onPagerArrowMouseOver;
				objPagerRightArrow.onmouseout = onPagerArrowMouseOut;
			}
			objPagerRightArrow.style.visibility = (current == total ? 'hidden' : 'visible');
			if (current != total) {
				elem.href=baseUrl+'-'+(current+1);
			}
			elem.appendChild(objPagerRightArrow);
			objPager.appendChild(elem);
		}
	}
	
	function onPagerItemMouseOver() {
		if (this.className != 'muppageitemselected') {
			this.className = 'muppageitemhover';
		}
	}
	
	function onPagerItemMouseOut() {
		if (this.className == 'muppageitemhover') {
			this.className = 'muppageitem';
		}
	}
	
	function onPagerArrowMouseOver() {
		if (this == objPagerLeftArrow) {
			objPagerLeftArrow.src = '/images/leftarrow-hover.png';
		} else if (this == objPagerRightArrow) {
			objPagerRightArrow.src = '/images/rightarrow-hover.png';
		}
	}
	
	function onPagerArrowMouseOut() {
		if (this == objPagerLeftArrow) {
			objPagerLeftArrow.src = '/images/leftarrow.png';
		} else if (this == objPagerRightArrow) {
			objPagerRightArrow.src = '/images/rightarrow.png';
		}
	}
	
	function onPageLoad() {
		isTouchOnlyDevice = (t5sitebase.getIsTouchOnlyDevice());
		isMenuHidden = (t5sitebase.getIsMenuHidden());
		
		var mupTab = document.getElementById('muptabid');
		objTabImg = mupTab;
		if (mupTab) {
			var tabElem = document.createElement('div');
			tabElem.className = 'muptabback';
			mupTab.appendChild(tabElem);
			objTabHover = document.createElement('div');
			objTabHover.className = 'muptabhover';
			mupTab.appendChild(objTabHover);
			objTabOpen = document.createElement('div');
			objTabOpen.className = 'muptabopen';
			mupTab.appendChild(objTabOpen);
			objTabClose = document.createElement('div');
			objTabClose.className = 'muptabclose';
			mupTab.appendChild(objTabClose);
			mupTab.onclick = onTabClick;
		}
		objLargeImageList = document.getElementById('muplargeimagesid');
		if (objLargeImageList) {
			var shouldHideImageBoxes=(objLargeImageList.getAttribute('data-imageboxes-hide')==='true');
			objLargeImages = objLargeImageList.getElementsByTagName('li');
			if (shiftValues) {
				for (var i=0; i < objLargeImages.length && i < shiftValues.length; i++) {
					var imageList = objLargeImages[i].getElementsByTagName('img');
					if (imageList.length > 0) {
						shiftValues[i].image = imageList[0];
					}
					if (imageList.length > 1) {
						shiftValues[i].overlay = imageList[1];
						if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
							var iever = new Number(RegExp.$1);
							if (iever < 9) {
								// Due to several bugs in the PNG implementation of IE versions under 9, we must do some hocus pocus here
								var img = imageList[1];
								if (img.width && img.height && img.src) {
									var newDiv = document.createElement('div');
									newDiv.style.position = 'absolute';
									var newSpan = document.createElement('span');
									newSpan.style.display = 'inline-block';
									newSpan.style.backgroundImage = 'url('+img.src+')';
									newSpan.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"', sizingMethod='scale')";
									newSpan.style.width = img.width + 'px';
									newSpan.style.height = img.height + 'px';
									newSpan.innerHTML = '&nbsp;';
									newDiv.appendChild(newSpan);
									imageList[1].parentNode.replaceChild(newDiv,img);
									shiftValues[i].overlay = newDiv;
								}
							}
						}
					}
				}
			}
			if (objLargeImages.length > 1) {
				objLargeImageList.onclick = onLargeImageClick;
				currentLargeImageIx = 0;
				objLargeImageListOrder = new Array();
				for (var i=0; i < objLargeImages.length; i++) {
					objLargeImageListOrder.push(objLargeImages[i]);
					objLargeImages[i].style.visibility = 'visible';
				}
				objLargeImageList.appendChild(objLargeImages[0]);
				if (isTouchOnlyDevice) {
					objLargeImageList.addEventListener('touchstart', onContentTouchStart, false);
					objLargeImageList.addEventListener('touchend', onContentTouchEnd, false);
					objLargeImageList.addEventListener('touchmove', onContentTouchMove, false);
					for (var i=0; i < objLargeImageListOrder.length; i++) {
						objLargeImageListOrder[i].style.webkitTransform = 'translate3d(0,0,0)';
					}
				} else {
					setAnimateBackground(1);
				}
				var imageContainer = document.getElementById('muplargeimagescontainerid');
				objImageBoxes = document.createElement('div');
				objImageBoxes.className = 'mupimgboxes';
				objImageBoxes.style.left = (isMenuHidden ? 0 : 288) + 'px';
				objImageDelays=[];
				for (var i=0;i<objLargeImageListOrder.length;i++) {
					var imageBox = document.createElement('a');
					imageBox.className = (i==0 ? 'mupimgboxselected' : 'mupimgbox');
					objImageDelays.push(objLargeImageListOrder[i].getAttribute('data-image-delay'));
					objImageBoxes.appendChild(imageBox);
					imageBox.onclick = onImageBoxClick;
					if (!isTouchOnlyDevice) {
						imageBox.onmouseover = onImageBoxMouseOver;
						imageBox.onmouseout = onImageBoxMouseOut;
					}
				}
				if (!shouldHideImageBoxes) {
					imageContainer.appendChild(objImageBoxes);
				}
				imageBoxList=objImageBoxes.getElementsByTagName('a');
				setLargeImageCycleAnimation();
			} else if (objLargeImages.length == 1) {
				objLargeImageList.style.cursor = 'pointer';
				objLargeImageList.onclick = onLargeImageClick;
			}
		}
		objTab = document.getElementById('muptextboxcontainerid');
		
		objTabStrip = document.getElementById('muptabstripareaid');
		if (objTabStrip) {
			objTabStrip.style.top = '540px';
			objTabStrip.style.height = '39px';
			if (objImageBoxes) {
				objImageBoxes.style.top = (558 - 35) + 'px';
			}
			objTabStripUpDownBtn = document.getElementById('muptabstripboxupdownid');
			if (objTabStripUpDownBtn) {
				objTabStripUpDownBtn.onclick = onTabStripUpDownClick;
			}
			objTabStripRightBtn = document.getElementById('muptabstripboxrightid');
			
			var thumbnailContainer = document.getElementById('muptabstripthumbnailsid');
			if (thumbnailContainer) {
				thumbnailObjs = thumbnailContainer.getElementsByTagName('li');
				if (thumbnailObjs) {
					for (var i=0; i < thumbnailObjs.length; i++) {
						if (thumbnailObjs[i].className == "muptabstripthumbnailsselected") {
							thumbnailObjsActiveIx = i;
							break;
						}
					}
				}
			}
			var tabPanelState = t5sitebase.getT5CookieValue('TabPanelState');
			if (tabPanelState == "") {
				t5sitebase.setT5CookieValue('TabPanelState', "open");
				animTabStripCurrentPercent = 0;
				setTabStripPercent(1);
			} else {
				animTabStripEndTime = new Date();
				animTabStripStartPercent = (tabPanelState == "open" ? 1 : 0);
				animTabStripEndPercent = animTabStripStartPercent;
				animateTabStrip();
			}
		} else {
			animTabStripEndTime = new Date();
			animTabStripStartPercent = 0;
			animTabStripEndPercent = 0;
			animateTabStrip();
		}
		
		if (objTab) {
			var textPanelState = t5sitebase.getT5CookieValue('TextPanelState');
			if (textPanelState == "") {
				if (panelDefaultClosed) {
					animTabEndTime = new Date();
					animTabStartPercent = 0;
					animTabEndPercent = 0;
					animateTab();
				} else {
					animTabCurrentPercent = 0;
					setTabPercent(1);
				}
			} else {
				animTabEndTime = new Date();
				animTabStartPercent = (textPanelState == "open" ? 1 : 0);
				animTabEndPercent = animTabStartPercent;
				animateTab();
			}
		} else {
			animTabEndTime = new Date();
			animTabStartPercent = 0;
			animTabEndPercent = 0;
			animateTab();
		}
		doSetPaging(pagerUrl, pagerCurrent, pagerTotal);
	}
	
	return {
		automaticOnLoad : function() {
			var origOnLoad = window.onload;
			if (typeof origOnLoad != 'function') {
				window.onload = function() { onPageLoad(); };
			} else {
				window.onload = function() { origOnLoad(); onPageLoad(); };
			}
		},
		addShiftValue : function(shiftValue, clickurl) {
			var obj = new Object();
			obj.shiftValue = shiftValue;
			obj.clickurl = clickurl;
			if (!shiftValues) {
				shiftValues = new Array();
			}
			shiftValues.push(obj);
		},
		setPaging : function(url, current, total) {
			pagerUrl = (current == 1 ? url : url.substr(0,url.lastIndexOf('-')));
			pagerCurrent = current;
			pagerTotal = total;
		},
		setPanelDefaultClosed : function() {
			panelDefaultClosed = true;
		}
	}
}();
t5sitetemplatemup.automaticOnLoad();

