/* ContentFlow, version 1.0.2  | (c) 2007 - 2010 Sebastian Kutsch | <http://www.jacksasylum.eu/ContentFlow/> | ContentFlow is distributed under the terms of the MIT license. | (see http://www.jacksasylum.eu/ContentFlow/LICENSE) */
var ContentFlowGlobal = {
	Flows : new Array,
	AddOns : {},
	scriptName : "contentflow.js",
	scriptElement : null,
	Browser : new (function() {
		this.Opera = window.opera ? true : false;
		this.IE = document.all && !this.Opera ? true : false;
		this.IE6 = this.IE && typeof (window.XMLHttpRequest) == "undefined" ? true
				: false;
		this.IE8 = this.IE && typeof (document.querySelectorAll) != "undefined" ? true
				: false;
		this.IE7 = this.IE && !this.IE6 && !this.IE8 ? true : false;
		this.WebKit = /WebKit/i.test(navigator.userAgent) ? true : false,
				this.iPhone = /iPhone|iPod/i.test(navigator.userAgent) ? true
						: false;
		this.Chrome = /Chrome/i.test(navigator.userAgent) ? true : false;
		this.Safari = /Safari/i.test(navigator.userAgent) && !this.Chrome ? true
				: false;
		this.Konqueror = navigator.vendor == "KDE" ? true : false;
		this.Konqueror4 = this.Konqueror
				&& /native code/.test(document.getElementsByClassName) ? true
				: false;
		this.Gecko = !this.WebKit && navigator.product == "Gecko" ? true
				: false;
		this.Gecko19 = this.Gecko && Array.reduce ? true : false
	})(),
	getAddOnConf : function(A) {
		if (this.AddOns[A]) {
			return this.AddOns[A].conf
		} else {
			return {}
		}
	},
	setAddOnConf : function(B, A) {
		this.AddOns[B].setConfig(A)
	},
	getScriptElement : function(D) {
		var C = new RegExp(D);
		var A = document.getElementsByTagName("script");
		for ( var B = 0; B < A.length; B++) {
			if (A[B].src && C.test(A[B].src)) {
				return A[B]
			}
		}
		return ""
	},
	getScriptPath : function(C, B) {
		var A = new RegExp(B + ".*");
		return C.src.replace(A, "")
	},
	addScript : function(B) {
		if (this.Browser.IE || this.Browser.WebKit || this.Browser.Konqueror) {
			document.write('<script type="text/javascript" src="' + B
					+ '"><\/script>')
		} else {
			var A = document.createElement("script");
			A.src = B;
			A.setAttribute("type", "text/javascript");
			document.getElementsByTagName("head")[0].appendChild(A)
		}
	},
	addScripts : function(C, B) {
		for ( var A = 0; A < filename.length; A++) {
			this.addScript(basepath + B[A])
		}
	},
	addStylesheet : function(B) {
		if (this.Browser.Gecko19) {
			var A = document.createElement("link");
			A.setAttribute("rel", "stylesheet");
			A.setAttribute("href", B);
			A.setAttribute("type", "text/css");
			A.setAttribute("media", "screen");
			document.getElementsByTagName("head")[0].appendChild(A)
		} else {
			document.write('<link rel="stylesheet" href="' + B
					+ '" type="text/css" media="screen" />')
		}
	},
	addStylesheets : function(C, B) {
		for ( var A = 0; A < filename.length; A++) {
			this.addStylesheet(basepath + B[A])
		}
	},
	initPath : function() {
		this.scriptElement = this.getScriptElement(this.scriptName);
		if (!this.scriptElement) {
			this.scriptName = "contentflow_src.js";
			this.scriptElement = this.getScriptElement(this.scriptName)
		}
		this.BaseDir = this.getScriptPath(this.scriptElement, this.scriptName);
		if (!this.AddOnBaseDir) {
			this.AddOnBaseDir = this.BaseDir
		}
		if (!this.CSSBaseDir) {
			this.CSSBaseDir = this.BaseDir
		}
	},
	init : function() {
		this.addStylesheet(this.CSSBaseDir + "contentflow.css");
		this.addStylesheet(this.CSSBaseDir + "mycontentflow.css");
		this.loadAddOns = new Array();
		if (this.scriptElement.getAttribute("load")) {
			var A = this.loadAddOns = this.scriptElement.getAttribute("load")
					.replace(/\ +/g, " ").split(" ");
			for ( var C = 0; C < A.length; C++) {
				if (A[C] == "") {
					continue
				}
				this.addScript(this.AddOnBaseDir + "ContentFlowAddOn_" + A[C]
						+ ".js")
			}
		}
		var E = this;
		if (document.addEventListener) {
			if (this.Browser.WebKit) {
				var D = setInterval(function() {
					if (/loaded|complete/.test(document.readyState)) {
						clearInterval(D);
						E.onloadInit()
					}
				}, 10)
			} else {
				document.addEventListener("DOMContentLoaded", E.onloadInit,
						false)
			}
		} else {
			if (this.Browser.IE) {
				document
						.write("<script id=__ie_cf_onload defer src=javascript:void(0)><\/script>");
				var B = document.getElementById("__ie_cf_onload");
				B.onreadystatechange = function() {
					if (this.readyState == "complete") {
						E.onloadInit()
					}
				}
			}
		}
		window.addEvent("load", E.onloadInit, false)
	},
	onloadInit : function() {
		if (arguments.callee.done) {
			return

		}
		for ( var C = 0; C < ContentFlowGlobal.loadAddOns.length; C++) {
			var A = ContentFlowGlobal.loadAddOns[C];
			if (!ContentFlowGlobal.AddOns[A]) {
				var G = ContentFlowGlobal;
				window.setTimeout(G.onloadInit, 10);
				return

			}
		}
		arguments.callee.done = true;
		if (window.Element && Element.implement && document.all
				&& !window.opera) {
			for ( var H in window.CFElement.prototype) {
				if (!window.Element.prototype[H]) {
					var F = {};
					F[H] = window.CFElement.prototype[H];
					Element.implement(F)
				}
			}
		}
		for ( var C = 0; C < ContentFlowGlobal.Flows.length; C++) {
			ContentFlowGlobal.Flows[C].init()
		}
		var D = document.getElementsByTagName("div");
		DIVS: for ( var C = 0; C < D.length; C++) {
			if (D[C].className.match(/\bContentFlow\b/)) {
				for ( var B = 0; B < ContentFlowGlobal.Flows.length; B++) {
					if (D[C] == ContentFlowGlobal.Flows[B].Container) {
						continue DIVS
					}
				}
				var E = new ContentFlow(D[C], {}, false);
				E.init()
			}
		}
	}
};
ContentFlowGlobal.initPath();
var ContentFlowAddOn = function(B, A, C) {
	if (typeof C == "undefined" || C != false) {
		ContentFlowGlobal.AddOns[B] = this
	}
	this.name = B;
	if (!A) {
		A = {}
	}
	this.methods = A;
	this.conf = {};
	if (this.methods.conf) {
		this.setConfig(this.methods.conf);
		delete this.methods.conf
	}
	this.scriptpath = ContentFlowGlobal.AddOnBaseDir;
	if (A.init) {
		var D = A.init.bind(this);
		D(this)
	}
};
ContentFlowAddOn.prototype = {
	Browser : ContentFlowGlobal.Browser,
	addScript : ContentFlowGlobal.addScript,
	addScripts : ContentFlowGlobal.addScripts,
	addStylesheet : function(A) {
		if (!A) {
			A = this.scriptpath + "ContentFlowAddOn_" + this.name + ".css"
		}
		ContentFlowGlobal.addStylesheet(A)
	},
	addStylesheets : ContentFlowGlobal.addStylesheets,
	setConfig : function(A) {
		for ( var B in A) {
			this.conf[B] = A[B]
		}
	},
	_init : function(A) {
		if (this.methods.ContentFlowConf) {
			A.setConfig(this.methods.ContentFlowConf)
		}
	}
};
var ContentFlowGUIElement = function(A, B) {
	B.setDimensions = function() {
		this.dimensions = this.getDimensions();
		this.center = {
			x : this.dimensions.width / 2,
			y : this.dimensions.height / 2
		};
		this.position = this.findPos()
	};
	B.addObserver = function(D, E) {
		var C = this.eventMethod = E.bind(A);
		this.observedEvent = D;
		this.addEvent(D, C, false)
	};
	B.makeDraggable = function(E, D, F) {
		this.stopDrag = function(H) {
			if (!H) {
				var H = window.event
			}
			if (this.Browser.iPhone) {
				window.removeEvent("touchemove", E, false);
				if (!this.ontochmove) {
					var G = H.target;
					if (G.firstChild) {
						G = G.firstChild
					}
					var I = document.createEvent("MouseEvents");
					I.initEvent("click", true, true);
					G.dispatchEvent(I)
				}
			} else {
				window.removeEvent("mousemove", E, false)
			}
			F(H)
		}.bind(this);
		this.initDrag = function(G) {
			if (!G) {
				var G = window.event
			}
			var H = G;
			if (G.touches) {
				H = G.touches[0]
			}
			this.mouseX = H.clientX;
			this.mouseY = H.clientY;
			D(G)
		}.bind(this);
		this.startDrag = function(I) {
			if (!I) {
				var I = window.event
			}
			var G = this.stopDrag;
			if (this.Browser.iPhone) {
				var H = this;
				H.ontouchmove = false;
				window.addEvent("touchmove", function(J) {
					H.ontouchmove = true;
					E(J)
				}, false);
				I.preventDefault();
				window.addEvent("touchend", G, false)
			} else {
				window.addEvent("mousemove", E, false);
				window.addEvent("mouseup", G, false)
			}
			if (I.preventDefault) {
				I.preventDefault()
			}
		}.bind(this);
		var C = this.startDrag;
		if (this.Browser.iPhone) {
			this.addEventListener("touchstart", C, false)
		} else {
			this.addEvent("mousedown", C, false)
		}
	};
	B.Browser = ContentFlowGlobal.Browser;
	$CF(B).setDimensions();
	return B
};
var ContentFlowItem = function(C, D, E) {
	this.CFobj = C;
	this._activeElement = C.conf.activeElement;
	this.pre = null;
	this.next = null;
	this.clickItem = function(M) {
		if (!M) {
			var M = window.event
		}
		var K = M.target ? M.target : M.srcElement;
		var J = K.itemIndex ? K.itemIndex : K.parentNode.itemIndex;
		var L = this.items[J];
		if (this._activeItem == L) {
			this.conf.onclickActiveItem(L)
		} else {
			if (this.conf.onclickInactiveItem(L) != false) {
				this.moveToIndex(J)
			}
		}
	}.bind(C), this.setIndex = function(J) {
		this.index = J;
		this.element.itemIndex = J
	};
	this.getIndex = function() {
		return this.index
	};
	if ($CF(D).nodeName == "IMG") {
		var A = document.createElement("div");
		A.className = "item";
		var I = D.parentNode.replaceChild(A, D);
		I.className = "content";
		A.appendChild(I);
		if (D.title) {
			var F = document.createElement("div");
			F.className = "caption";
			F.innerHTML = D.title;
			A.appendChild(F)
		}
		D = A
	}
	this.element = $CF(D);
	this.item = D;
	if (typeof E != "undefined") {
		this.setIndex(E)
	}
	this.content = this.element.getChildrenByClassName("content")[0];
	this.caption = this.element.getChildrenByClassName("caption")[0];
	this.label = this.element.getChildrenByClassName("label")[0];
	if (this.content.nodeName == "IMG") {
		C._imagesToLoad++;
		var B = function() {
			C._imagesToLoad--;
			this.image = this.content;
			this.setImageFormat(this.image);
			if (C.conf.reflectionHeight > 0) {
				this.addReflection()
			}
			this.initClick();
			C._addItemCueProcess(true)
		}.bind(this);
		if (this.content.complete && this.content.width > 0) {
			window.setTimeout(B, 100)
		} else {
			if (this.Browser.IE && !this.content.onload) {
				var H = this;
				var G = window.setInterval(function() {
					if (H.content.complete && H.content.width > 0) {
						window.clearInterval(G);
						B()
					}
				}, 10)
			} else {
				this.content.onload = window.setTimeout(B, 100)
			}
		}
	} else {
		this.initClick();
		C._addItemCueProcess(true)
	}
};
ContentFlowItem.prototype = {
	Browser : ContentFlowGlobal.Browser,
	makeActive : function() {
		this.element.addClassName("active");
		this.CFobj.conf.onMakeActive(this)
	},
	makeInactive : function() {
		this.element.removeClassName("active");
		this.CFobj.conf.onMakeInactive(this)
	},
	initClick : function() {
		var A = this.clickItem;
		this[this._activeElement].addEvent("click", A, false)
	},
	setImageFormat : function(A) {
		if (this.Browser.IE6 || this.Browser.IE7) {
			A.style.width = "auto"
		}
		A.origProportion = A.width / A.height;
		A.setAttribute("origProportion", A.width / A.height);
		if (this.Browser.IE6 || this.Browser.IE7) {
			A.style.width = ""
		}
		if (A.origProportion <= 1) {
			A.addClassName("portray")
		} else {
			A.addClassName("landscape")
		}
	},
	addReflection : function() {
		var F = this.CFobj;
		var S;
		var K = this.content;
		if (this.Browser.IE) {
			var Q = "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
			if (F._reflectionColorRGB) {
				if (F.conf.reflectionColor == "transparent") {
					var N = S = this.reflection = document.createElement("img");
					S.src = K.src
				} else {
					S = this.reflection = document.createElement("div");
					var N = document.createElement("img");
					N.src = K.src;
					S.width = N.width;
					S.height = N.height;
					N.style.width = "100%";
					N.style.height = "100%";
					var M = F._reflectionColorRGB;
					S.style.backgroundColor = "#" + M.hR + M.hG + M.hB;
					S.appendChild(N)
				}
				Q += " progid:DXImageTransform.Microsoft.Alpha(opacity=0, finishOpacity=50, style=1, finishX=0, startY="
						+ F.conf.reflectionHeight * 100 + " finishY=0)"
			} else {
				var N = S = this.reflection = document.createElement("img");
				S.src = K.src
			}
			Q += " progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22="
					+ 1 / F.conf.reflectionHeight + ")";
			if (ContentFlowGlobal.Browser.IE6) {
				if (K.src.match(/\.png$/)) {
					K.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
							+ K.src + "', sizingMethod=scale )";
					K.filterString = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
							+ K.src + "', sizingMethod=scale )";
					Q += " progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
							+ K.src + "', sizingMethod=scale )";
					K.origSrc = K.src;
					K.src = "img/blank.gif";
					N.src = "img/blank.gif"
				}
			}
			S.filterString = Q;
			N.style.filter = Q
		} else {
			if (F._reflectionWithinImage) {
				var D = this.canvas = $CF(document.createElement("canvas"))
			} else {
				var D = S = this.reflection = document.createElement("canvas")
			}
			if (D.getContext) {
				if (F._reflectionWithinImage) {
					for ( var R = 0; R < K.attributes.length; R++) {
						D.setAttributeNode(K.attributes[R].cloneNode(true))
					}
				}
				var C = D.getContext("2d");
				var P = F.maxHeight;
				var I = F._scaleImageSize(this, {
					width : P,
					height : P
				}, P);
				var L = I.width;
				var J = I.height;
				if (F._reflectionWithinImage) {
					D.width = L;
					D.height = J;
					this.setImageFormat(D);
					D.height = J
							* (1 + F.conf.reflectionHeight + F.conf.reflectionGap)
				} else {
					D.width = L;
					D.height = J * F.conf.reflectionHeight
				}
				C.save();
				if (F._reflectionWithinImage) {
					C.drawImage(K, 0, 0, L, J)
				}
				if (F._reflectionWithinImage) {
					var O = J * (1 + F.conf.reflectionGap / 2) * 2
				} else {
					var O = K.height
				}
				O -= 1;
				C.translate(0, O);
				C.scale(1, -1);
				C.drawImage(K, 0, 0, L, J);
				C.restore();
				if (F._reflectionColorRGB) {
					var B = C.createLinearGradient(0, 0, 0, D.height);
					var E = [ 0, 0.5, 1 ];
					if (F._reflectionColor == "transparent") {
						C.globalCompositeOperation = "destination-in";
						E = [ 1, 0.5, 0 ]
					}
					var G = F._reflectionColorRGB.iR;
					var H = F._reflectionColorRGB.iG;
					var A = F._reflectionColorRGB.iB;
					if (F._reflectionWithinImage) {
						B.addColorStop(0, "rgba(" + G + "," + H + "," + A + ","
								+ E[0] + ")");
						B.addColorStop(J / D.height, "rgba(" + G + "," + H
								+ "," + A + "," + E[0] + ")");
						B.addColorStop(J / D.height, "rgba(" + G + "," + H
								+ "," + A + "," + E[1] + ")")
					} else {
						B.addColorStop(0, "rgba(" + G + "," + H + "," + A + ","
								+ E[1] + ")")
					}
					B.addColorStop(1, "rgba(" + G + "," + H + "," + A + ","
							+ E[2] + ")");
					C.fillStyle = B;
					C.fillRect(0, 0, D.width, D.height)
				}
				if (F._reflectionWithinImage) {
					K.parentNode.replaceChild(D, K);
					this.content = D;
					this.origContent = D;
					delete this.image
				}
			} else {
				F._reflectionWithinImage = false;
				delete this.reflection
			}
		}
		if (S) {
			S.className = "reflection";
			this.element.appendChild(S);
			if (this.caption) {
				this.element.appendChild(this.caption)
			}
		}
	}
};
var ContentFlow = function(A, B) {
	if (A) {
		ContentFlowGlobal.Flows.push(this);
		this.Container = A;
		this._userConf = B ? B : {};
		this.conf = {};
		this._loadedAddOns = new Array()
	} else {
		throw ("ContentFlow ERROR: No flow container node or id given")
	}
};
ContentFlow.prototype = {
	_imagesToLoad : 0,
	_activeItem : 0,
	_currentPosition : 0,
	_targetPosition : 0,
	_stepLock : false,
	_millisecondsPerStep : 40,
	_reflectionWithinImage : true,
	Browser : ContentFlowGlobal.Browser,
	_defaultConf : {
		useAddOns : "all",
		biggestItemPos : 0,
		loadingTimeout : 30000,
		activeElement : "content",
		maxItemHeight : 0,
		scaleFactor : 1,
		scaleFactorLandscape : 1.33,
		scaleFactorPortrait : 1,
		fixItemSize : false,
		relativeItemPosition : "top center",
		circularFlow : true,
		verticalFlow : false,
		visibleItems : -1,
		endOpacity : 1,
		startItem : 0,
		scrollInFrom : "pre",
		flowSpeedFactor : 1,
		flowDragFriction : 1,
		scrollWheelSpeed : 1,
		keys : {
			13 : function() {
				this.conf.onclickActiveItem(this._activeItem)
			},
			37 : function() {
				this.moveTo("pre")
			},
			38 : function() {
				this.moveTo("visibleNext")
			},
			39 : function() {
				this.moveTo("next")
			},
			40 : function() {
				this.moveTo("visiblePre")
			}
		},
		reflectionColor : "transparent",
		reflectionHeight : 0.5,
		reflectionGap : 0,
		onInit : function() {
		},
		onclickInactiveItem : function(A) {
		},
		onclickActiveItem : function(B) {
			var A, C;
			if (A = B.content.getAttribute("href")) {
				C = B.content.getAttribute("target")
			} else {
				if (A = B.element.getAttribute("href")) {
					C = B.element.getAttribute("target")
				} else {
					if (A = B.content.getAttribute("src")) {
						C = B.content.getAttribute("target")
					}
				}
			}
			if (A) {
				if (C) {
					window.open(A, C).focus()
				} else {
					window.location.href = A
				}
			}
		},
		onMakeInactive : function(A) {
		},
		onMakeActive : function(A) {
		},
		onReachTarget : function(A) {
		},
		onMoveTo : function(A) {
		},
		onDrawItem : function(A) {
		},
		onclickPreButton : function(A) {
			this.moveToIndex("pre");
			return Event.stop(A)
		},
		onclickNextButton : function(A) {
			this.moveToIndex("next");
			return Event.stop(A)
		},
		calcStepWidth : function(D) {
			var C = this.conf.visibleItems;
			var A = this.items.length;
			A = A == 0 ? 1 : A;
			if (Math.abs(D) > C) {
				if (D > 0) {
					var B = D - C
				} else {
					var B = D + C
				}
			} else {
				if (C >= this.items.length) {
					var B = D / A
				} else {
					var B = D * (C / A)
				}
			}
			return B
		},
		calcSize : function(D) {
			var B = D.relativePosition;
			var C = 1 / (Math.abs(B) + 1);
			var A = C;
			return {
				width : A,
				height : C
			}
		},
		calcCoordinates : function(item) {
			var rP = item.relativePosition;
			var rPN = item.relativePositionNormed;
			var vI = rPN != 0 ? rP / rPN : 0;
			var f = 1 - 1 / Math.exp(Math.abs(rP));
			var x = item.side * vI / (vI + (-0.7)) * f;
			var y = 0;
			return {
				x : x,
				y : y
			};
		},
		calcZIndex : function(A) {
			return -Math.abs(A.relativePositionNormed)
		},
		calcFontSize : function(A) {
			return A.size.height
		},
		calcOpacity : function(A) {
			return Math.max(1 - ((1 - this.conf.endOpacity) * Math.sqrt(Math
					.abs(A.relativePositionNormed))), this.conf.endOpacity)
		}
	},
	_checkIndex : function(A) {
		A = Math.max(A, 0);
		A = Math.min(A, this.itemsLastIndex);
		return A
	},
	_setLastIndex : function() {
		this.itemsLastIndex = this.items.length - 1
	},
	_getItemByIndex : function(A) {
		return this.items[this._checkIndex(A)]
	},
	_getItemByPosition : function(A) {
		return this._getItemByIndex(this._getIndexByPosition(A))
	},
	_getPositionByIndex : function(B) {
		if (!this.conf.circularFlow) {
			return this._checkIndex(B)
		}
		var A = this._getIndexByPosition(this._currentPosition);
		var C = B - A;
		if (Math.abs(C) > C + this.items.length) {
			C += this.items.length
		} else {
			if (Math.abs(C) > (Math.abs(C - this.items.length))) {
				C -= this.items.length
			}
		}
		return this._currentPosition + C
	},
	_getIndexByPosition : function(A) {
		if (A < 0) {
			var C = 0
		} else {
			var C = 1
		}
		var B = (Math.round(A) + C) % this.items.length;
		if (B > 0) {
			B -= C
		} else {
			if (B < 0) {
				B += this.items.length - C
			} else {
				if (A < 0) {
					B = 0
				} else {
					B = this.items.length - 1
				}
			}
		}
		return B
	},
	_getIndexByKeyWord : function(B, D, A) {
		if (D) {
			var C = D
		} else {
			if (this._activeItem) {
				var C = this._activeItem.index
			} else {
				var C = 0
			}
		}
		if (isNaN(B)) {
			switch (B) {
			case "first":
			case "start":
				C = 0;
				break;
			case "last":
			case "end":
				C = this.itemsLastIndex;
				break;
			case "middle":
			case "center":
				C = Math.round(this.itemsLastIndex / 2);
				break;
			case "right":
			case "next":
				C += 1;
				break;
			case "left":
			case "pre":
			case "previous":
				C -= 1;
				break;
			case "visible":
			case "visiblePre":
			case "visibleLeft":
				C -= this.conf.visibleItems;
				break;
			case "visibleNext":
			case "visibleRight":
				C += this.conf.visibleItems;
				break;
			default:
				C = C
			}
		} else {
			C = B
		}
		if (A != false) {
			C = this._checkIndex(C)
		}
		return C
	},
	_setCaptionLabel : function(A) {
		if (this.Position && !this.Slider.locked) {
			this.Position.setLabel(A)
		}
		this._setGlobalCaption()
	},
	getAddOnConf : function(A) {
		return ContentFlowGlobal.getAddOnConf(A)
	},
	setAddOnConf : function(B, A) {
		ContentFlowGlobal.setAddOnConf(B, A)
	},
	init : function() {
		if (this.isInit) {
			return
		}
		this._init()
	},
	setConfig : function(A) {
		if (!A) {
			return
		}
		var E = this._defaultConf;
		for ( var F in A) {
			if (E[F] == "undefined") {
				continue
			}
			switch (F) {
			case "scrollInFrom":
			case "startItem":
				if (typeof (A[F]) == "number" || typeof (A[F]) == "string") {
					this.conf[F] = A[F]
				}
				break;
			default:
				if (typeof (E[F] == A[F])) {
					if (typeof A[F] == "function") {
						this.conf[F] = A[F].bind(this)
					} else {
						this.conf[F] = A[F]
					}
				}
			}
		}
		switch (this.conf.reflectionColor) {
		case this.conf.reflectionColor.search(/#[0-9a-fA-F]{6}/) >= 0 ? this.conf.reflectionColor
				: this.conf.reflectionColor + "x":
			this._reflectionColorRGB = {
				hR : this.conf.reflectionColor.slice(1, 3),
				hG : this.conf.reflectionColor.slice(3, 5),
				hB : this.conf.reflectionColor.slice(5, 7),
				iR : parseInt(this.conf.reflectionColor.slice(1, 3), 16),
				iG : parseInt(this.conf.reflectionColor.slice(3, 5), 16),
				iB : parseInt(this.conf.reflectionColor.slice(5, 7), 16)
			};
			break;
		case "none":
		case "transparent":
		default:
			this._reflectionColor = "transparent";
			this._reflectionColorRGB = {
				hR : 0,
				hG : 0,
				hB : 0,
				iR : 0,
				iG : 0,
				iB : 0
			};
			break
		}
		if (this.items) {
			if (this.conf.visibleItems < 0) {
				this.conf.visibleItems = Math.round(Math
						.sqrt(this.items.length))
			}
			this.conf.visibleItems = Math.min(this.conf.visibleItems,
					this.items.length - 1)
		}
		if (this.conf.relativeItemPosition) {
			var C = {
				x : {
					left : function(J) {
						return -1
					},
					center : function(J) {
						return 0
					},
					right : function(J) {
						return 1
					}
				},
				y : {
					top : function(J) {
						return -1
					},
					center : function(J) {
						return 0
					},
					bottom : function(J) {
						return 1
					}
				}
			};
			var I = this.conf.relativeItemPosition;
			I = I.replace(/above/, "top").replace(/below/, "bottom");
			var H, G = null;
			H = I.match(/left|right/);
			G = I.match(/top|bottom/);
			c = I.match(/center/);
			if (!H) {
				if (c) {
					H = "center"
				} else {
					H = "center"
				}
			}
			if (!G) {
				if (c) {
					G = "center"
				} else {
					G = "top"
				}
			}
			var D = C.x[H];
			var B = C.y[G];
			this.conf.calcRelativeItemPosition = function(K) {
				var J = D(K.size);
				var L = B(K.size);
				return {
					x : J,
					y : L
				}
			};
			this.conf.relativeItemPosition = null
		}
		if (this._reflectionType && this._reflectionType != "clientside") {
			this.conf.reflectionHeight = 0
		}
	},
	getItem : function(A) {
		return this.items[this._checkIndex(Math.round(A))]
	},
	getActiveItem : function() {
		return this._activeItem
	},
	getNumberOfItems : function() {
		return this.items.length
	},
	resize : function() {
		this._initSizes();
		this._initStep()
	},
	moveToPosition : function(B, A) {
		if (!this.conf.circularFlow) {
			B = this._checkIndex(B)
		}
		this._targetPosition = B;
		this.conf.onMoveTo(this._getItemByPosition(B));
		this._initStep(false, A)
	},
	moveToIndex : function(A) {
		this._targetPosition = Math.round(this._getPositionByIndex(this
				._getIndexByKeyWord(A, this._activeItem.index,
						!this.conf.circularFlow)));
		this.conf.onMoveTo(this._getItemByPosition(this._targetPosition));
		this._initStep()
	},
	moveToItem : function(B) {
		var A;
		if (B.itemIndex) {
			A = B.itemIndex
		} else {
			A = B.index
		}
		this.moveToIndex(A)
	},
	moveTo : function(A) {
		if (typeof A == "object") {
			this.moveToItem(A)
		} else {
			if (isNaN(A) || (A == Math.floor(A) && A < this.items.length)) {
				this.moveToIndex(A)
			} else {
				this.moveToPosition(A)
			}
		}
	},
	_addItemCue : [],
	_addItemCueProcess : function(C) {
		var D = this._addItemCue;
		if (C == true) {
			D.shift()
		}
		if (D.length > 0 && !D[0].p) {
			D[0].p = true;
			var A = this;
			var B = D.length > 5 ? 1 : 40;
			window.setTimeout(function() {
				A._addItem(D[0].el, D[0].i)
			}, B)
		}
	},
	addItem : function(B, A) {
		this._addItemCue.push( {
			el : B,
			i : A,
			p : false
		});
		if (this._addItemCue.length == 1) {
			this._addItemCueProcess()
		}
	},
	_addItem : function(C, A) {
		if (typeof A == "string") {
			switch (A) {
			case "first":
			case "start":
				A = 0;
				break;
			case "last":
			case "end":
				A = isNaN(this.itemsLastIndex) ? 0 : this.itemsLastIndex;
				A += 1;
				break;
			default:
				A = this._getIndexByKeyWord(A)
			}
		}
		A = Math.max(A, 0);
		A = Math.min(A, this.itemsLastIndex + 1);
		A = isNaN(A) ? 0 : A;
		this.Flow.appendChild(C);
		var D = new ContentFlowItem(this, C, A);
		if (this.items.length == 0) {
			this.resize();
			if (this.conf.circularFlow) {
				D.pre = D;
				D.next = D
			}
		} else {
			if (A == this.itemsLastIndex + 1) {
				D.pre = this.items[this.itemsLastIndex];
				D.next = D.pre.next
			} else {
				D.next = this.items[A];
				D.pre = D.next.pre
			}
			if (D.pre) {
				D.pre.next = D
			}
			if (D.next) {
				D.next.pre = D
			}
		}
		this.items.splice(A, 0, D);
		for ( var B = A; B < this.items.length; B++) {
			this.items[B].setIndex(B)
		}
		this._setLastIndex();
		if (this.conf.origVisibleItems < 0) {
			this.conf.visibleItems = Math.round(Math.sqrt(this.items.length))
		}
		this.conf.visibleItems = Math.min(this.conf.visibleItems,
				this.items.length - 1);
		if (Math.round(this._getPositionByIndex(A)) <= Math
				.round(this._targetPosition)) {
			this._targetPosition++;
			if (!this.conf.circularFlow) {
				this._targetPosition = Math.min(this._targetPosition,
						this.itemsLastIndex)
			}
		}
		if (this._getPositionByIndex(A) <= this._currentPosition) {
			this._currentPosition++;
			if (!this.conf.circularFlow) {
				this._currentPosition = Math.min(this._currentPosition,
						this.itemsLastIndex)
			}
		}
		var E = this;
		window.setTimeout(function() {
			if (E.items.length == 1) {
				E._currentPosition = -0.01;
				E._targetPosition = 0;
				E.resize()
			} else {
				E._initStep()
			}
		}, 100);
		return A
	},
	rmItem : function(A) {
		if (A == "undefined") {
			A = this._activeItem.index
		}
		A = this._getIndexByKeyWord(A);
		if (!this.items[A]) {
			return null
		}
		var D = this.items[A];
		if (D.pre) {
			D.pre.next = D.next
		}
		if (D.next) {
			D.next.pre = D.pre
		}
		this.items.splice(A, 1);
		for ( var B = A; B < this.items.length; B++) {
			this.items[B].setIndex(B)
		}
		this._setLastIndex();
		if (Math.round(this._getPositionByIndex(A)) < Math
				.round(this._targetPosition)) {
			this._targetPosition--;
			if (!this.conf.circularFlow) {
				this._targetPosition = this._checkIndex(this._targetPosition)
			}
		}
		if (this._getPositionByIndex(A) < this._currentPosition) {
			this._currentPosition--;
			if (!this.conf.circularFlow) {
				this._currentPosition = this._checkIndex(this._currentPosition)
			}
		}
		this._activeItem = this._getItemByPosition(this._currentPosition);
		var C = D.element.parentNode.removeChild(D.element);
		var E = this;
		window.setTimeout(function() {
			E._initStep()
		}, 10);
		return C
	},
	_init : function() {
		if (typeof (this.Container) == "string") {
			var B = document.getElementById(this.Container);
			if (B) {
				this.Container = B
			} else {
				throw ("ContentFlow ERROR: No element with id '"
						+ this.Container + "' found!");
				return
			}
		}
		$CF(this.Container).addClassName("ContentFlow");
		var A = $CF(this.Container).getChildrenByClassName("flow")[0];
		if (!A) {
			throw ("ContentFlow ERROR: No element with class'flow' found!");
			return
		}
		this.Flow = new ContentFlowGUIElement(this, A);
		var M = this.Container.getChildrenByClassName("scrollbar")[0];
		if (M) {
			this.Scrollbar = new ContentFlowGUIElement(this, M);
			var F = this.Scrollbar.getChildrenByClassName("slider")[0];
			if (F) {
				this.Slider = new ContentFlowGUIElement(this, F);
				var H = this.Slider.getChildrenByClassName("position")[0];
				if (H) {
					this.Position = new ContentFlowGUIElement(this, H)
				}
			}
		}
		this.setConfig(this._defaultConf);
		this._initAddOns();
		this.setConfig(this._userConf);
		this._initSizes();
		var J = this.Flow.getChildrenByClassName("item");
		this.items = new Array();
		for ( var G = 0; G < J.length; G++) {
			var K = this.items[G] = new ContentFlowItem(this, J[G], G);
			if (G > 0) {
				K.pre = this.items[G - 1];
				K.pre.next = K
			}
		}
		this._setLastIndex();
		if (this.conf.circularFlow && this.items.length > 0) {
			var L = this.items[0];
			L.pre = this.items[this.items.length - 1];
			L.pre.next = L
		}
		this._initGUI();
		if (this._activeElement != "content") {
			this._activeElement = "element"
		}
		this.conf.origVisibleItems = this.conf.visibleItems;
		if (this.conf.visibleItems < 0) {
			this.conf.visibleItems = Math.round(Math.sqrt(this.items.length))
		}
		this.conf.visibleItems = Math.min(this.conf.visibleItems,
				this.items.length - 1);
		this._targetPosition = this._getIndexByKeyWord(this.conf.startItem, 0);
		var I = this._getIndexByKeyWord(this.conf.scrollInFrom,
				this._targetPosition);
		switch (this.conf.scrollInFrom) {
		case "next":
		case "right":
			I -= 0.5;
			break;
		case "pre":
		case "previous":
		case "left":
			I += 0.5;
			break
		}
		this._currentPosition = I;
		var E = new Date();
		var D = this;
		var C = window.setInterval(function() {
			if (D._imagesToLoad == 0 || new Date() - E > D._loadingTimeout) {
				clearInterval(C);
				D._activeItem = D.getItem(D._currentPosition);
				if (D._activeItem) {
					D._activeItem.makeActive();
					D._setCaptionLabel(D._activeItem.index)
				}
				D.Flow.style.visibility = "visible";
				if (D.loadIndicator) {
					D.loadIndicator.style.display = "none"
				}
				if (D.Scrollbar) {
					D.Scrollbar.style.visibility = "visible"
				}
				D.resize();
				for ( var O = 0; O < D._loadedAddOns.length; O++) {
					var N = ContentFlowGlobal.AddOns[D._loadedAddOns[O]];
					if (N.methods.afterContentFlowInit) {
						N.methods.afterContentFlowInit(D)
					}
				}
				D.conf.onInit()
			}
		}, 10);
		this.isInit = true
	},
	_initAddOns : function() {
		var C = [];
		if (this._userConf.useAddOns) {
			if (typeof this._userConf.useAddOns == "string") {
				C = this._userConf.useAddOns.split(" ")
			} else {
				if (typeof this._userConf.useAddOns == "array") {
					C = this._userConf.useAddOns
				}
			}
		} else {
			if (this.Container.getAttribute("useAddOns")) {
				C = this.Container.getAttribute("useAddOns").split(" ")
			} else {
				C = this.conf.useAddOns.split(" ")
			}
		}
		for ( var B = 0; B < C.length; B++) {
			if (C[B] == "none") {
				C = new Array();
				break
			} else {
				if (C[B] == "all") {
					C = new Array();
					for ( var A in ContentFlowGlobal.AddOns) {
						C.push(A)
					}
					break
				}
			}
		}
		for ( var B = 0; B < C.length; B++) {
			var A = ContentFlowGlobal.AddOns[C[B]];
			if (A) {
				this._loadedAddOns.push(C[B]);
				A._init(this);
				this.Container.addClassName("ContentFlowAddOn_" + A.name);
				if (A.methods.onloadInit) {
					A.methods.onloadInit(this)
				}
			}
		}
	},
	_initGUI : function() {
		var C = this.resize.bind(this);
		window.addEvent("resize", C, false);
		var K = this.Container.getElementsByTagName("div");
		for ( var G = 0; G < K.length; G++) {
			if ($CF(K[G]).hasClassName("preButton")) {
				var F = K[G];
				var A = this.conf.onclickPreButton;
				F.addEvent("click", A, false)
			} else {
				if (K[G].hasClassName("nextButton")) {
					var I = K[G];
					var A = this.conf.onclickNextButton;
					I.addEvent("click", A, false)
				}
			}
		}
		if (this.conf.scrollWheelSpeed != 0) {
			var J = this._wheel.bind(this);
			if (window.addEventListener) {
				this.Container.addEventListener("DOMMouseScroll", J, false)
			}
			this.Container.onmousewheel = J
		}
		var L = this._keyStroke.bind(this);
		if (this.conf.keys && !this.Browser.iPhone) {
			if (document.addEventListener) {
				if (!this.Browser.Opera) {
					var D = document.createElement("div");
					D.addClassName("mouseoverCheckElement");
					this.Container.appendChild(D);
					if (this.Browser.WebKit) {
						document.body.addEvent("keydown", function(O) {
							if (D.offsetLeft > 0) {
								L(O)
							}
						})
					} else {
						window.addEvent("keydown", function(O) {
							if (D.offsetLeft > 0) {
								L(O)
							}
						})
					}
				} else {
					this.Container.addEvent("keydown", L)
				}
			} else {
				this.Container.onkeydown = L
			}
		}
		if (this.conf.flowDragFriction > 0) {
			var E = function(R) {
				var U = R;
				if (R.touches) {
					U = R.touches[0]
				}
				var Q = U.clientX;
				var P = U.clientY;
				if (this.conf.verticalFlow) {
					var V = P - this.Flow.mouseY;
					var T = this.Flow.dimensions.height
				} else {
					var V = Q - this.Flow.mouseX;
					var T = this.Flow.dimensions.width
				}
				var O = (V / T) * (2 * this.conf.visibleItems + 1);
				var S = this._currentPosition - O * 2 * this.conf.visibleItems
						/ this.conf.flowDragFriction;
				this.Flow.mouseX = Q;
				this.Flow.mouseY = P;
				this.moveToPosition(S, true)
			}.bind(this);
			var N = function() {
			};
			var H = function(P) {
				var O = Math.round(this._targetPosition);
				if (Math.abs(O - this._currentPosition) > 0.001) {
					this.moveToPosition(O)
				}
			}.bind(this);
			this.Flow.makeDraggable(E, N, H)
		}
		if (this.Scrollbar) {
			var M = function(R) {
				if (!R) {
					var R = window.event
				}
				if (!this.Scrollbar.clickLocked) {
					var Q = R.clientX;
					var P = Q - this.Scrollbar.position.left;
					var O = Math.round(P / this.Scrollbar.dimensions.width
							* this.itemsLastIndex);
					this.moveToIndex(O)
				} else {
					this.Scrollbar.clickLocked = false
				}
			}.bind(this);
			this.Scrollbar.addObserver("click", M)
		}
		if (this.Slider) {
			if (this.Browser.IE6) {
				var B = document.createElement("div");
				B.className = "virtualSlider";
				this.Slider.appendChild(B)
			}
			this.Slider.setPosition = function(O) {
				O = O - Math.floor(O) + this._getIndexByPosition(Math.floor(O));
				if (Math.round(O) < 0) {
					O = this.itemsLastIndex
				} else {
					if (O <= 0) {
						O = 0
					} else {
						if (Math.round(O) > this.itemsLastIndex) {
							O = 0
						} else {
							if (O >= this.itemsLastIndex) {
								O = this.itemsLastIndex
							}
						}
					}
				}
				if (this.items.length > 1) {
					var P = (O / this.itemsLastIndex)
							* this.Scrollbar.dimensions.width
				} else {
					var P = 0.5 * this.Scrollbar.dimensions.width
				}
				this.Slider.style.left = P - this.Slider.center.x + "px";
				this.Slider.style.top = this.Scrollbar.center.y
						- this.Slider.center.y + "px"
			}.bind(this);
			var N = function(O) {
				this.Scrollbar.clickLocked = true
			}.bind(this);
			var E = function(P) {
				var Q = P;
				if (P.touches) {
					Q = P.touches[0]
				}
				var O = this
						._checkIndex((Q.clientX - this.Scrollbar.position.left)
								/ this.Scrollbar.dimensions.width
								* this.itemsLastIndex);
				this._targetPosition = this._getPositionByIndex(O);
				this.Slider.setPosition(O);
				if (this.Position) {
					this.Position.setLabel(O)
				}
				this._initStep(true, true)
			}.bind(this);
			var H = function(O) {
				this._targetPosition = Math.round(this._targetPosition);
				this.conf.onMoveTo(this
						._getItemByPosition(this._targetPosition));
				this._initStep(true)
			}.bind(this);
			this.Slider.makeDraggable(E, N, H)
		}
		if (this.Position) {
			this.Position.setLabel = function(O) {
				O = this._checkIndex(Math.round(O));
				if (this.items && this.items[O].label) {
					this.Position.innerHTML = this.items[O].label.innerHTML
				} else {
					this.Position.innerHTML = O + 1
				}
			}.bind(this)
		}
		this.globalCaption = this.Container
				.getChildrenByClassName("globalCaption")[0];
		this.loadIndicator = this.Container
				.getChildrenByClassName("loadIndicator")[0]
	},
	_initSizes : function(A) {
		this._initMaxHeight();
		var E = this._initScrollbarSize();
		if (!this.conf.verticalFlow && this.Container.style.height
				&& this.Container.style.height != "auto") {
			this.maxHeight -= E
		}
		if (!this._activeItem) {
			return
		}
		var D = this._findBiggestItem();
		var F = this.Flow.findPos();
		if (this.conf.verticalFlow) {
			this.Flow.style.width = D.width.width + "px";
			this.Flow.style.height = 1
					* D.width.width
					* (1 + this.conf.reflectionHeight + this.conf.reflectionGap)
					+ "px"
		} else {
			this.Flow.style.height = D.height.height + (D.height.top - F.top)
					+ "px"
		}
		var C = this.conf.verticalFlow ? D.width.width : D.height.height;
		var B = C / (1 + this.conf.reflectionHeight + this.conf.reflectionGap);
		this.Flow.style.marginBottom = -(C - B) + "px";
		this.Flow.dimensions = this.Flow.getDimensions();
		if (!this.Browser.IE6) {
			if (this.conf.verticalFlow
					&& this.Container.clientWidth < this.Flow.dimensions.width) {
			} else {
				if (this.Container.clientHeight < this.Flow.dimensions.height) {
					this.Container.style.height = this.Flow.dimensions.height
							+ "px"
				}
			}
		}
		if (this.conf.verticalFlow) {
			this.Flow.center = {
				x : this.Flow.dimensions.height / 2,
				y : D.width.width / 2
			}
		} else {
			this.Flow.center = {
				x : this.Flow.dimensions.width / 2,
				y : D.height.height / 2
			}
		}
	},
	_initScrollbarSize : function() {
		var C;
		var I;
		var F;
		if (C = this.Scrollbar) {
			C.setDimensions();
			var B = C.dimensions.height;
			if (I = this.Slider) {
				I.setDimensions();
				B += I.dimensions.height;
				if (F = this.Position) {
					var K = F.innerHTML;
					var G = maxW = 0;
					F.style.width = "auto";
					if (this.items) {
						for ( var D = 0; D < this.items.length; D++) {
							var J = this.items[D];
							if (J.label) {
								F.innerHTML = J.label.innerHTML
							} else {
								F.innerHTML = J.index
							}
							var E = F.clientHeight;
							var H = F.clientWidth;
							if (E > G) {
								G = E
							}
							if (H > maxW) {
								maxW = H
							}
						}
					} else {
						F.innerHTML = "&nbsp;";
						G = F.clientHeight;
						maxW = F.clientWidth
					}
					F.innerHTML = K;
					F.setDimensions();
					F.style.width = maxW + "px";
					F.style.left = (I.dimensions.width - maxW) / 2 + "px";
					var A = F.position.top - I.position.top;
					if (A > 0) {
						A += -C.dimensions.height + G;
						C.style.marginBottom = A + "px"
					} else {
						A *= -1;
						C.style.marginTop = A + "px"
					}
					B += A
				}
			}
		} else {
			B = 0
		}
		return B
	},
	_initMaxHeight : function() {
		if (this.conf.verticalFlow) {
			var G = screen.width / screen.height;
			var D = this.Container.style.width;
			var E = this.Container.clientWidth;
			var C = this.Flow.style.width;
			var F = this.Flow.clientWidth;
			var A = this.Flow.clientHeight
		} else {
			var G = screen.height / screen.width;
			var D = this.Container.style.height;
			var E = this.Container.clientHeight;
			var C = this.Flow.style.height;
			var F = this.Flow.clientHeight;
			var A = this.Flow.clientWidth
		}
		if (this.ContainerOldDim) {
			D = this.ContainerOldDim
		}
		if (this.FlowOldDim) {
			C = this.FlowOldDim
		}
		this.ContainerOldDim = "auto";
		this.FlowOldDim = "auto";
		if (this.conf.maxItemHeight <= 0) {
			this.maxHeight = A / 1 * G / 1 * this.conf.scaleFactor;
			if (this.conf.verticalFlow
					&& (this.maxHeight == 0 || this.maxHeight > F)) {
				this.maxHeight = F
			}
			if (D && D != "auto") {
				var H = this.conf.verticalFlow ? 0 : this.conf.reflectionGap;
				var B = this.conf.verticalFlow ? 0 : this.conf.reflectionHeight;
				this.maxHeight = E / (this.conf.scaleFactor * (1 + B + H));
				this.ContainerOldDim = D
			} else {
				if (C && C != "auto") {
					var H = this.conf.verticalFlow ? 0
							: this.conf.reflectionGap;
					this.maxHeight = F
							/ (this.conf.scaleFactor * (1 + this.conf.reflectionHeight + H));
					this.FlowOldDim = C
				}
			}
		} else {
			this.maxHeight = this.conf.maxItemHeight
		}
	},
	_findBiggestItem : function() {
		var G = this._activeItem;
		var A = G.pre;
		var B = G.next;
		var E = maxFlowSize = {
			width : {
				width : 0,
				left : 0,
				height : 0,
				top : 0,
				item : null,
				rI : 0
			},
			height : {
				width : 0,
				left : 0,
				height : 0,
				top : 0,
				item : null,
				rI : 0
			}
		};
		var F = function(N, J) {
			var M = N.element;
			M.style.display = "block";
			var O = M.findPos();
			var L = M.clientHeight;
			var K = M.clientWidth;
			if (L + O.top >= E.height.height + E.height.top) {
				E.height.height = L;
				E.height.top = O.top;
				E.height.item = N;
				E.height.rI = J
			}
			if (K + O.left >= E.width.width + E.width.left) {
				E.width.width = K;
				E.width.left = O.left;
				E.width.item = N;
				E.width.rI = J
			}
			M.style.display = "none"
		};
		var H = this._currentPosition;
		this._currentPosition = this.conf.visibleItems + 1;
		for ( var C = -this.conf.visibleItems; C <= this.conf.visibleItems; C++) {
			G.element.style.display = "none";
			this._positionItem(G, C);
			F(G, C)
		}
		var D = E.height.rI;
		for ( var C = 0; C < this.items.length; C++) {
			var I = this.items[C];
			I.element.style.display = "none";
			this._positionItem(I, D);
			F(I, D)
		}
		this._currentPosition = H;
		return E
	},
	_keyStroke : function(A) {
		if (!A) {
			var A = window.event
		}
		if (A.which) {
			var B = A.which
		} else {
			if (A.keyCode) {
				var B = A.keyCode
			}
		}
		if (this.conf.keys[B]) {
			this.conf.keys[B].bind(this)();
			return Event.stop(A)
		} else {
			return true
		}
	},
	_wheel : function(A) {
		if (!A) {
			var A = window.event
		}
		var C = 0;
		if (A.wheelDelta) {
			C = A.wheelDelta / 120
		} else {
			if (A.detail) {
				C = -A.detail / 3
			}
		}
		if (C) {
			var B = this._targetPosition;
			if (C < 0) {
				B += (1 * this.conf.scrollWheelSpeed)
			} else {
				B -= (1 * this.conf.scrollWheelSpeed)
			}
			this.moveToPosition(Math.round(B))
		}
		return Event.stop(A)
	},
	_setGlobalCaption : function() {
		if (this.globalCaption) {
			this.globalCaption.innerHTML = "";
			if (this._activeItem && this._activeItem.caption) {
				this.globalCaption.appendChild(this._activeItem.caption
						.cloneNode(true))
			}
		}
	},
	_initStep : function(B, A) {
		if (this.Slider) {
			if (B) {
				this.Slider.locked = true
			} else {
				this.Slider.locked = false
			}
		}
		this._holdPos = A == true ? true : false;
		if (!this._stepLock) {
			this._stepLock = true;
			this._step()
		}
	},
	_step : function() {
		var D = this._targetPosition - this._currentPosition;
		var C = Math.abs(D);
		if (C > 0.001) {
			this._currentPosition += this.conf.flowSpeedFactor
					* this.conf.calcStepWidth(D, C, this.items.length,
							this.conf.visibleItems);
			var A = this.items[(this._getIndexByPosition(this._currentPosition))];
			if (A && A != this._activeItem) {
				if (this._activeItem) {
					this._activeItem.makeInactive()
				}
				this._activeItem = A;
				this._activeItem.makeActive();
				this._setCaptionLabel(this._activeItem.index);
				if (Math.abs(this._targetPosition - this._currentPosition) <= 0.5) {
					this.conf.onReachTarget(this._activeItem)
				}
			}
			this._positionItems();
			var B = this._step.bind(this);
			window.setTimeout(B, this._millisecondsPerStep)
		} else {
			if (!this._holdPos) {
				if (this.Slider) {
					this.Slider.locked = false
				}
				this._currentPosition = Math.round(this._currentPosition);
				if (this.Position && !this.Slider.locked && this._activeItem) {
					this._setCaptionLabel(this._activeItem.index)
				}
				this._positionItems();
				this._stepLock = false
			} else {
				this._stepLock = false
			}
		}
		if (this.Slider && !this.Slider.locked) {
			this.Slider.setPosition(this._currentPosition)
		}
	},
	_positionItems : function() {
		if (this._lastStart) {
			var E = this._lastStart;
			while (E) {
				E.element.style.display = "none";
				E = E.next;
				if (E == this._lastStart) {
					break
				}
				if (E && E.pre == this._lastEnd) {
					break
				}
			}
		} else {
			this._lastStart = this._activeItem
		}
		if (!this._activeItem) {
			return
		}
		var C = this._activeItem;
		var B = C.pre;
		var D = C.next;
		this._positionItem(C, 0);
		for ( var A = 1; A <= this.conf.visibleItems
				&& 2 * A < this.items.length; A++) {
			if (B) {
				this._positionItem(B, -A);
				this._lastStart = B;
				B = B.pre
			}
			if (D) {
				this._positionItem(D, A);
				this._lastEnd = D;
				D = D.next
			}
		}
	},
	_positionItem : function(S, A) {
		var I = this.conf;
		var N = I.verticalFlow;
		var E = S.element.style;
		var L = S.position = this._currentPosition + A;
		var M = S.relativePosition = Math.round(L) - this._currentPosition;
		var Q = S.relativePositionNormed = I.visibleItems > 0 ? M
				/ I.visibleItems : 0;
		var B = M < 0 ? -1 : 1;
		B *= M == 0 ? 0 : 1;
		S.side = B;
		var J = I.calcSize(S);
		J.height = Math.max(J.height, 0);
		J.width = Math.max(J.width, 0);
		if (S.content.origProportion) {
			J = this._scaleImageSize(S, J)
		}
		S.size = J;
		var P = S.coordinates = I.calcCoordinates(S);
		var H = S.relativeItemPosition = I.calcRelativeItemPosition(S);
		var K = S.zIndex = I.calcZIndex(S);
		var C = S.fontSize = I.calcFontSize(S);
		var D = S.opacity = I.calcOpacity(S);
		J.height *= this.maxHeight;
		J.width *= this.maxHeight;
		var R = N ? J.height : J.width;
		var O = N ? J.width : J.height;
		var G = this.Flow.center.x * (1 + P.x) + (H.x - 1) * R / 2;
		var F = this.maxHeight / 2 * (1 + P.y) + (H.y - 1) * O / 2;
		E.left = (N ? F : G) + "px";
		E.top = (N ? G : F) + "px";
		this._setItemSize(S, J);
		if (I.endOpacity != 1) {
			this._setItemOpacity(S)
		}
		if (!this.Browser.IE) {
			E.fontSize = (C * 100) + "%"
		}
		E.zIndex = 32768 + Math.round(K * this.items.length);
		I.onDrawItem(S);
		E.visibility = "visible";
		E.display = "block"
	},
	_scaleImageSize : function(N, P, I) {
		var E = this.conf.scaleFactorLandscape;
		var D = this.conf.scaleFactorPortrait;
		var M = this.conf.verticalFlow;
		var B = N.content.origProportion;
		var C = P.width;
		var L = P.height;
		var H = N.content;
		if (M) {
			if (B <= 1) {
				if (E != "max" && E != 1) {
					L *= E;
					C = Math.min(L * B, I ? I : 1)
				}
				L = C / B
			} else {
				if (B > 1) {
					if (D == "max") {
						L = I ? I : 1
					} else {
						if (D != 1) {
							C *= D;
							L = Math.min(C / B, I ? I : 1)
						} else {
							L = C / B
						}
					}
					C = L * B
				}
			}
		} else {
			if (B > 1) {
				if (E != "max" && E != 1) {
					C *= E;
					L = Math.min(C / B, I ? I : 1)
				}
				C = L * B
			} else {
				if (B <= 1) {
					if (D == "max") {
						C = I ? I : 1
					} else {
						if (D != 1) {
							L *= D;
							C = Math.min(L * B, I ? I : 1)
						} else {
							C = L * B
						}
					}
					L = C / B
				}
			}
		}
		L = isNaN(L) ? 0 : L;
		C = isNaN(C) ? 0 : C;
		if (!I && this.conf.fixItemSize) {
			var A = P.width / P.height;
			var I = Math.max(P.width, P.height);
			var O = this._scaleImageSize(N, {
				width : I,
				height : I
			}, I);
			if (A < 1) {
				L = O.height / P.height;
				C = L * B / A
			} else {
				C = O.width / P.width;
				L = C / B * A
			}
			var G = L * 100;
			var K = C * 100;
			var J = (1 - C) / 2 * 100;
			var F = (1 - L) / A * 100 * (M ? 0.5 : 1);
			H.style.height = G + "%";
			if (N.reflection) {
				N.reflection.style.height = G * this.conf.reflectionHeight
						+ "%"
			}
			H.style.width = K + "%";
			if (N.reflection) {
				N.reflection.style.width = K + "%"
			}
			H.style.marginLeft = J + "%";
			if (N.reflection) {
				N.reflection.style.marginLeft = J + "%"
			}
			H.style.marginTop = F + "%";
			N.element.style.overflow = "hidden";
			return P
		} else {
			return {
				width : C,
				height : L
			}
		}
	},
	_setItemSize : (function() {
		if (ContentFlowGlobal.Browser.IE) {
			var A = function(E, C) {
				if (!this.conf.fixItemSize) {
					E.content.style.height = C.height + "px"
				} else {
					if (ContentFlowGlobal.Browser.IE6) {
						var D = parseInt(E.content.style.height) / 100;
						E.content.style.height = C.height * D + "px";
						var B = parseInt(E.content.style.marginTop) / 100;
						E.content.style.marginTop = C.height * B + "px"
					}
				}
				if (E.reflection) {
					var D = parseInt(E.content.style.height);
					E.reflection.style.height = D * this.conf.reflectionHeight
							+ "px";
					E.reflection.style.marginTop = D * this.conf.reflectionGap
							+ "px"
				}
				E.element.style.width = C.width + "px";
				E.element.style.height = C.height
						* (1 + this.conf.reflectionHeight + this.conf.reflectionGap)
						+ "px"
			}
		} else {
			var A = function(C, B) {
				if (C.reflection) {
					C.element.style.height = B.height
							* (1 + this.conf.reflectionHeight + this.conf.reflectionGap)
							+ "px";
					C.reflection.style.marginTop = B.height
							* this.conf.reflectionGap + "px"
				} else {
					if (this._reflectionWithinImage) {
						C.element.style.height = B.height
								* (1 + this.conf.reflectionHeight + this.conf.reflectionGap)
								+ "px"
					} else {
						C.element.style.height = B.height + "px"
					}
				}
				C.element.style.width = B.width + "px"
			}
		}
		return A
	})(),
	_setItemOpacity : (function() {
		if (ContentFlowGlobal.Browser.IE6) {
			var A = function(C) {
				if (C.content.origSrc && C.content.origSrc.match(/\.png$/)) {
					var B = C.content.src;
					C.content.src = C.content.origSrc;
					C.content.style.filter = C.content.filterString
							+ " progid:DXImageTransform.Microsoft.BasicImage(opacity="
							+ C.opacity + ")";
					C.content.src = B
				} else {
					C.content.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(opacity="
							+ C.opacity + ")"
				}
				if (C.reflection) {
					C.reflection.style.filter = C.reflection.filterString
							+ "progid:DXImageTransform.Microsoft.BasicImage(opacity="
							+ C.opacity + ")"
				}
			}
		} else {
			if (ContentFlowGlobal.Browser.IE) {
				var A = function(B) {
					B.element.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(opacity="
							+ B.opacity + ")"
				}
			} else {
				var A = function(B) {
					B.element.style.opacity = B.opacity
				}
			}
		}
		return A
	})()
};
if (!Function.bind) {
	Function.prototype.bind = function(A) {
		var B = this;
		return function() {
			return B.apply(A, arguments)
		}
	}
}
if (!Math.erf2) {
	Math.erf2 = function(A) {
		var B = -(8 * (Math.PI - 3) / (3 * Math.PI * (Math.PI - 4)));
		var C = A * A;
		var D = 1 - Math.pow(Math.E, -C * (4 / Math.PI + B * C) / (1 + B * C));
		return D
	}
}
if (!Math._2PI05) {
	Math._2PI05 = Math.sqrt(2 * Math.PI)
}
if (!Math.normDist) {
	Math.normDist = function(A, C, B) {
		if (!C) {
			var C = 1
		}
		if (!B) {
			var B = 0
		}
		if (!A) {
			var A = -B
		}
		return 1 / (C * Math._2PI05)
				* Math.pow(Math.E, -(A - B) * (A - B) / (2 * C * C))
	}
}
if (!Math.normedNormDist) {
	Math.normedNormDist = function(A, C, B) {
		return this.normDist(A, C, B) / this.normDist(B, C, B)
	}
}
if (!Math.exp) {
	Math.exp = function(A) {
		return Math.pow(Math.E, A)
	}
}
if (!Math.ln) {
	Math.ln = Math.log
}
if (!Math.log2) {
	Math.log2 = function(A) {
		return Math.log(A) / Math.LN2
	}
}
if (!Math.log10) {
	Math.log10 = function(A) {
		return Math.log(A) / Math.LN10
	}
}
if (!Math.logerithm) {
	Math.logerithm = function(B, A) {
		if (!A || A == Math.E) {
			return Math.log(B)
		} else {
			if (A == 2) {
				return Math.log2(B)
			} else {
				if (A == 10) {
					return Math.log10(B)
				} else {
					return Math.log(B) / Math.log(A)
				}
			}
		}
	}
}
if (!Event) {
	var Event = {}
}
if (!Event.stop) {
	Event.stop = function(A) {
		A.cancelBubble = true;
		if (A.preventDefault) {
			A.preventDefault()
		}
		if (A.stopPropagation) {
			A.stopPropagation()
		}
		return false
	}
}
if (document.all && !window.opera) {
	window.$CF = function(A) {
		if (typeof A == "string") {
			return window.$CF(document.getElementById(A))
		} else {
			if (CFElement.prototype.extend && A && !A.extend) {
				CFElement.prototype.extend(A)
			}
		}
		return A
	}
} else {
	window.$CF = function(A) {
		return A
	}
}
if (!window.HTMLElement) {
	CFElement = {};
	CFElement.prototype = {};
	CFElement.prototype.extend = function(A) {
		for ( var B in this) {
			if (!A[B]) {
				A[B] = this[B]
			}
		}
	}
} else {
	CFElement = window.HTMLElement
}
if (!CFElement.findPos) {
	CFElement.prototype.findPos = function() {
		var B = this;
		var C = curtop = 0;
		try {
			if (B.offsetParent) {
				C = B.offsetLeft;
				curtop = B.offsetTop;
				while (B = B.offsetParent) {
					C += B.offsetLeft;
					curtop += B.offsetTop
				}
			}
		} catch (A) {
		}
		return {
			left : C,
			top : curtop
		}
	}
}
if (!CFElement.getDimensions) {
	CFElement.prototype.getDimensions = function() {
		return {
			width : this.clientWidth,
			height : this.clientHeight
		}
	}
}
if (!CFElement.hasClassName) {
	CFElement.prototype.hasClassName = function(A) {
		return (new RegExp("\\b" + A + "\\b").test(this.className))
	}
}
if (!CFElement.addClassName) {
	CFElement.prototype.addClassName = function(A) {
		if (!this.hasClassName(A)) {
			this.className += (this.className ? " " : "") + A
		}
	}
}
if (!CFElement.removeClassName) {
	CFElement.prototype.removeClassName = function(A) {
		this.className = this.className.replace(new RegExp("\\b" + A + "\\b"),
				"").replace(/\s\s/g, " ")
	}
}
if (!CFElement.toggleClassName) {
	CFElement.prototype.toggleClassName = function(A) {
		if (this.hasClassName(A)) {
			this.removeClassName(A)
		} else {
			this.addClassName(A)
		}
	}
}
if (!CFElement.getChildrenByClassName) {
	CFElement.prototype.getChildrenByClassName = function(C) {
		var B = new Array();
		for ( var A = 0; A < this.childNodes.length; A++) {
			var D = this.childNodes[A];
			if (D.nodeType == 1 && $CF(D).hasClassName(C)) {
				B.push(D)
			}
		}
		return B
	}
}
if (!CFElement.addEvent) {
	CFElement.prototype.addEvent = function(B, C, A) {
		if (this.addEventListener) {
			this.addEventListener(B, C, A)
		} else {
			this.attachEvent("on" + B, C)
		}
	}
}
if (!CFElement.removeEvent) {
	CFElement.prototype.removeEvent = function(B, C, A) {
		if (this.removeEventListener) {
			this.removeEventListener(B, C, A)
		} else {
			this.detachEvent("on" + B, C)
		}
	}
}
if (!window.addEvent) {
	window.addEvent = function(B, C, A) {
		if (this.addEventListener) {
			this.addEventListener(B, C, A)
		} else {
			if (B != "load" && B != "resize") {
				document.attachEvent("on" + B, C)
			} else {
				this.attachEvent("on" + B, C)
			}
		}
	}
}
if (!window.removeEvent) {
	window.removeEvent = function(B, C, A) {
		if (this.removeEventListener) {
			this.removeEventListener(B, C, A)
		} else {
			if (B != "load" && B != "resize") {
				document.detachEvent("on" + B, C)
			} else {
				this.detachEvent("on" + B, C)
			}
		}
	}
}
ContentFlowGlobal.init();

