/*

 * 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)
//                var num = 0;
//                $('#contentFlow img').load(function () {
//                    num++;
//                    if (num==$('#contentFlow .flow .item').length) {
//                        E.onloadInit();
//                    }
//                });
	},

	onloadInit : function() {

		if (arguments.callee.done) {

			return

		}
                $('#loader').hide();
		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 : 205,

		scaleFactor : 1,

		scaleFactorLandscape : 1,

		scaleFactorPortrait : 1.7,

		fixItemSize : false,

		relativeItemPosition : "top center",

		circularFlow : true,

		verticalFlow : false,

		visibleItems : -1,

		endOpacity : 1,

		startItem : "center",

		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.36,

		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(C) {

			var B = C.relativePosition;

			var E = this.conf.visibleItems;

			var D = 1 - 1 / Math.exp(Math.abs(B) * 0.5);

			var A = C.side * E / (E + 1) * D;

			var F = 1;

			return {

				x : A,

				y : F

			}

		},

		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 = 3

					* 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 / 3 * 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();


