/*
	Source: allianz.js
*/

	if(typeof(simplify) == 'undefined'){

		/* functions */
		simplify = {
			cache : [],
			events : {
				add : function(node, eventName, eventHandler){
					if('addEventListener' in node){
						node.addEventListener(eventName, eventHandler, false);
					}
					else if('attachEvent' in node){
						node.attachEvent('on'+eventName, function(event){eventHandler(event)});
					}
					else{
						node['on'+eventName] = eventHandler;
					}
					return true;
				},
				trigger : function(node, eventName){
					if('fireEvent' in node){
						node.fireEvent('on' + eventName);
					}
					else if('dispatchEvent' in node){
						var evt = document.createEvent('HTMLEvents');
						evt.initEvent(eventName, false, true);
						node.dispatchEvent(evt);
					}
					else{
						eval('node.on' + eventName + '()');
					}
					return true;
				}
			},
			forms : {
				find : function(node){
					var form = node;
					while(form.nodeName != 'FORM' && form.nodeName != 'BODY'){
						form = form.parentNode;
					}
					if(form.nodeName == 'BODY'){
						var form = node;
						while(form.getAttribute('id') == null && form.nodeName != 'BODY'){
							form = form.parentNode;
						}
					}
					return form;
				},
				validate : function(node, event, options){
				},
				update : function(node, event, options){
					var form = simplify.forms.find(node);
					var cfg = simplify.storage.settings(node.name);
					clearTimeout(cfg.timeout);
					cfg.timeout = setTimeout(function(){
						simplify.forms.submit(form, options);
					}, 500);
					if(event != null){
						event.preventDefault ? event.preventDefault() : event.returnValue = false;
					}
				},
				submit : function(form, options){
					var submitUrl = simplify.forms.query(form, options);
					var submitMethod = form.method;
					if(options.url != null){
						submitUrl = options.url + ((options.url.indexOf('?') < 0) ? '?' : '&') + submitUrl.split('?')[1];
					}
					if(options.method != null){
						submitMethod = options.method;
					}
					simplify.updates.add({
						url : (submitMethod == 'post') ? submitUrl.split('?')[0] : submitUrl,
						post : (submitMethod == 'post') ? submitUrl.split('?')[1] : null,
						onload : function(reply){
							simplify.updates.rewrite(reply.text);
							form.className = form.className.split(' update_')[0];
						},
						onprogress : function(reply){
							form.className = form.className.split(' update_')[0] + ' update_busy' + ' status_' + reply.status + ' progress_' + reply.progress;
						},
						referer : form
					});
				},
				query : function(form, options){
					var su = simplify.updates;
					var url = (options != null && options.url != null) ? options.url : form.getAttribute('action') ;
					if(url.indexOf('?') < 0){
						url += '?foo=bar';
					}
					var inputs = form.getElementsByTagName('*');
					for(var a=0; a<inputs.length; a++){
						if(inputs[a].nodeName == 'INPUT' || inputs[a].nodeName == 'SELECT' || inputs[a].nodeName == 'TEXTAREA'){
							var queryValue = '';
							switch(inputs[a].type){
								case 'radio' :
									if(inputs[a].checked){
										url += '&' + inputs[a].name + '=' + inputs[a].value;
									}
									break;
								case 'checkbox' :
									if(inputs[a].checked){
										url += '&' + inputs[a].name + '=' + inputs[a].value;
									}
									break;
								case 'button' : break;
								case 'submit' : break;
								case 'reset' : break;
								default :
									url += '&' + inputs[a].name + '=' + inputs[a].value;
							}
						}
					}
					return url;
				}
			},
			reports : {
				send : function(message){
					var reportPanel = document.getElementById('reportPanel');
					if(reportPanel == null){
						var reportPanel = document.createElement('DIV');
						reportPanel.id = 'reportPanel';
						reportPanel.style.background = '#fff none';
						reportPanel.style.border = 'solid 1px #000';
						reportPanel.style.padding = '10px';
						reportPanel.style.position = (navigator.userAgent.indexOf('MSIE 6')>-1) ? 'absolute' : 'fixed' ;
						reportPanel.style.right = '10px';
						reportPanel.style.bottom = '10px';
						reportPanel.style.width = '180px';
						reportPanel.style.height = '320px';
						reportPanel.style.overflow = 'auto';
						reportPanel.style.zIndex = '100000';
						reportPanel.innerHTML = '&nbsp;';
						document.body.appendChild(reportPanel);
					}
					var reportString = (reportPanel.innerHTML.length < 1000) ? reportPanel.innerHTML : reportPanel.innerHTML.substring(0, 800);
					reportPanel.innerHTML = message + '<br/>' + reportString;
				},
				test : function(node, event){
					var reportString = 'Node properties: ';
					reportString += node.nodeName;
					if(node.id) reportString += '#' + node.id;
					if(node.className) reportString += '.' + node.className.split(' ').join('.');
					simplify.reports.send(reportString);
					if(event != null){
						event.preventDefault ? event.preventDefault() : event.returnValue = false;
					}
				}
			},
			selectors : {
				stylesheet : null,
				related : function(node, parent){
					if(parent == null){
						return true;
					}else{
						var allChildNodes = parent.getElementsByTagName('*');
						for(var a=0; a<allChildNodes.length; a++){
							if(node == allChildNodes[a]){
								return true;
							}
						}
					}
					return false;
				},
				query : function(selector){
					if(document.querySelectorAll){
						return document.querySelectorAll(selector);
					}else if(typeof(jQuery) != 'undefined'){
						return $(selector).get();
					}else{
						if(simplify.selectors.styleSheet == null){
							simplify.selectors.styleSheet = document.createStyleSheet();
						}
						simplify.selectors.styleSheet.addRule(selector, "foo:bar");
						var allNodes = document.all;
						var affectedNodes = [];
						for (var a=0, b=allNodes.length; a<b; a++){
							if(allNodes[a].currentStyle.foo === "bar"){
								affectedNodes.push(allNodes[a]);
							}
						}
						simplify.selectors.styleSheet.removeRule(0);
						return affectedNodes;
					}
				},
				process : function(queue, parent){
					for(var selector in queue){
						var nodes = simplify.selectors.query(selector);
						for(var a=0; a<nodes.length; a++){
							if(simplify.selectors.related(nodes[a], parent)){
								simplify.selectors.handle(nodes[a], queue[selector]);
							}
						}
					}
				},
				handle : function(node, rules){
					for(var rule in rules){
						switch(rule){
							case 'start' :
								simplify.selectors.execute(node, null, rules[rule], rules);
								break;
							case 'msie' :
								if(navigator.userAgent.indexOf('MSIE')>-1){
									simplify.selectors.execute(node, null, rules[rule], rules);
								}
								break;
							default :
								simplify.events.add(node, rule, (
									function(node, functions, settings){
										return function(event){
											simplify.selectors.execute(node, event, functions, settings);
										}
									}(node, rules[rule], rules)
								));
						}
					}
				},
				execute : function(node, event, functions, settings){
					if(Object.prototype.toString.call(functions) == "[object Array]"){
						for(var a=0; a<functions.length; a++){
							functions[a](node, event, settings);
						}
					}else{
						functions(node, event, settings);
					}
				},
				wait : function(queue, parent){
					if(/interactive|loaded|complete/i.test(document.readyState)){
						setTimeout(function(){
							simplify.selectors.process(queue, parent);
						}, 200);
					}else{
						setTimeout(function(){
							simplify.selectors.wait(queue, parent);
						}, 200);
					}
				}
			},
			storage : {
				settings : function(id){
					if(simplify.cache[id] == null){
						simplify.cache[id] = {};
					}
					return simplify.cache[id];
				},
				set : function(node, name, value){
					if(node!=null){
						if(node.className==null){
							node.className = '';
						}
						if(node.className.indexOf(' ' + name + '_')<0){
							node.className += ' ' + name + '_0';
						}
						var current = simplify.storage.get(node, name, null);
						if(current != null){
							node.className = node.className.replace(name + '_' + current, name + '_' + value);
						}
					}
				},
				get : function(node, name, backup){
					if(node != null){
						var value = (node.className.indexOf(' ' + name + '_')>-1) ?
							node.className.split(' ' + name + '_')[1].split(' ')[0] :
							backup ;
						return (isNaN(parseInt(value))) ?
							value :
							parseFloat(value.toString().replace('D','.')) ;
					}else{
						return backup;
					}
				},
				expiration : function(days){
					return new Date(
						new Date().getTime() + days * 24 * 60 * 60 * 1000
					);
				},
				save : function(name, value, expires, path, domain, secure) {
					document.cookie = name + "=" + escape(value) +
						((expires) ? "; expires=" + expires.toGMTString() : "") +
						((path) ? "; path=" + path : "") +
						((domain) ? "; domain=" + domain : "") +
						((secure) ? "; secure" : "");
				},
				load : function(name) {
					return (
						(document.cookie.indexOf(name + '=') > -1) ?
							unescape(document.cookie.split(name + '=')[1].split(';')[0]) :
							null
					);
				},
				clear : function(name, path, domain) {
					if(simplify.storage.load(name)){
						document.cookie = name + "=" +
						((path) ? "; path=" + path : "") +
						((domain) ? "; domain=" + domain : "") +
						"; expires=Thu, 01-Jan-70 00:00:01 GMT";
					}
				}
			},
			toggles : {
				group : null,
				init : function(node, event, options){
					var targetRule = (options.target.rule != null) ?
						options.target.rule :
						'#' + node.href.split('#')[1] ;
					var targetNode = (node.href != null) ?
						document.getElementById(node.href.split('#')[1]) :
						simplify.toggles.sibling(node);
					var siblingTargets = simplify.selectors.query(targetRule);
					if(options.parent != null){
						for(var a=0; a<options.parent; a++){
							node = node.parentNode;
						}
					}
					var isFirstInGroup = ((simplify.toggles.group != options.source.rule) && options.grouped);
					simplify.toggles.group = options.source.rule;
					if(
						node.className.indexOf(options.source.classes[0]) < 0 &&
						node.className.indexOf(options.source.classes[1]) < 0
					){
						node.className += (isFirstInGroup) ?
							' ' + options.source.classes[1] :
							' ' + options.source.classes[0] ;
					}
					for(var a=0; a<siblingTargets.length; a++){
						if(
							siblingTargets[a].className.indexOf(options.target.classes[0]) < 0 &&
							siblingTargets[a].className.indexOf(options.target.classes[1]) < 0
						){
							siblingTargets[a].className += (isFirstInGroup && siblingTargets[a] == targetNode) ?
								' ' + options.target.classes[1] :
								' ' + options.target.classes[0] ;
						}
					}
				},
				execute : function(node, event, options){
					var sourceNode = node;
					for(var a=0; a<options.parent; a++){
						sourceNode = sourceNode.parentNode;
					}
					var targetNode = (node.href != null) ?
						document.getElementById(node.href.split('#')[1]) :
						simplify.toggles.sibling(sourceNode);
					var siblingSources = simplify.selectors.query(options.source.rule);
					var siblingTargets = simplify.selectors.query(options.target.rule);
					for(var a=0, b=siblingTargets.length; a<siblingTargets.length; a++){
						if(targetNode == siblingTargets[a]){
							if(sourceNode.className.indexOf(options.source.classes[0]) < 0 && !options.grouped){
								simplify.transitions.tween(sourceNode, options.source.classes[1], options.source.classes[0]);
							}else{
								simplify.transitions.tween(sourceNode, options.source.classes[0], options.source.classes[1]);
							}
							if(targetNode.className.indexOf(options.target.classes[0]) < 0 && !options.grouped){
								simplify.transitions.tween(targetNode, options.target.classes[1], options.target.classes[0]);
							}else{
								simplify.transitions.tween(targetNode, options.target.classes[0], options.target.classes[1]);
							}
						}else if(options.grouped){
							simplify.transitions.tween(siblingSources[a], options.source.classes[1], options.source.classes[0]);
							simplify.transitions.tween(siblingTargets[a], options.target.classes[1], options.target.classes[0]);
						}
					}
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				},
				sibling : function(node){
					var nextNode = node.nextSibling;
					while(nextNode.nodeName.indexOf('#') > -1){
						nextNode = nextNode.nextSibling;
					}
					return nextNode;
				}
			},
			transitions : {
				css3 : false,
				style : function(node, attribute){
					var property = null;
					if(node.currentStyle){
						var property = node.currentStyle[attribute];
					}else if(window.getComputedStyle){
						var property = document.defaultView.getComputedStyle(node, null).getPropertyValue(attribute);
					}
					return property;
				},
				tween : function(node, oldClassName, newClassName, onComplete){
					if(oldClassName != newClassName){
						var st = simplify.transitions;
						var ss = simplify.storage;
						st.css3 = st.compatibility(node);
						switch(st.css3){
							case true :
								if(onComplete != null){
									var whenComplete = function(){
										onComplete();
										node.removeEventListener('transitionend', whenComplete, true);
									}
									node.addEventListener('transitionend', whenComplete, true);
								}
								node.className = node.className.replace(oldClassName, newClassName);
								break;
							case 'mozilla' :
								if(onComplete != null){
									var whenComplete = function(){
										onComplete();
										node.removeEventListener('transitionend', whenComplete, true);
									}
									node.addEventListener('transitionend', whenComplete, true);
								}
								node.className = node.className.replace(oldClassName, newClassName);
								break;
							case 'opera' :
								if(onComplete != null){
									var whenComplete = function(){
										onComplete();
										node.removeEventListener('oTransitionEnd', whenComplete, true);
									}
									node.addEventListener('oTransitionEnd', whenComplete, true);
								}
								node.className = node.className.replace(oldClassName, newClassName);
								break;
							case 'webkit' :
								if(onComplete != null){
									var whenComplete = function(){
										onComplete();
										node.removeEventListener('webkitTransitionEnd', whenComplete, true);
									}
									node.addEventListener('webkitTransitionEnd', whenComplete, true);
								}
								node.className = node.className.replace(oldClassName, newClassName);
								break;
							default :
								if(st.loop != null){
									var oldStyles = st.get(node, st.rules(oldClassName));
									var newStyles = st.rules(newClassName);
									node.id = (node.id) ? node.id : 'transition_' + st.instance++ ;
									clearTimeout(ss.settings(node.id).timeout);
									st.loop(
										node,
										oldClassName,
										newClassName,
										onComplete,
										oldStyles,
										newStyles,
										new Date().getTime(),
										new Date().getTime() + 300
									);
								}else{
									node.className = node.className.replace(oldClassName, newClassName);
									if(onComplete != null){
										onComplete(node);
									}
								}
						}
					}
				},
				compatibility : function(node){
					var hasCSS3 = false;
					try{
						document.createEvent('transitionEvent');
						hasCSS3 = true;
					}catch(e){}
					try{
						document.createEvent('OTransitionEvent');
						hasCSS3 = 'opera';
					}catch(e){}
					try{
						document.createEvent('WebKitTransitionEvent');
						hasCSS3 = 'webkit';
						if(navigator.userAgent.indexOf('Safari')>-1 && navigator.userAgent.indexOf('Macintosh')>-1 && navigator.userAgent.indexOf('Chrome')<0){
							hasCSS3 = false;
						}
					}catch(e){}
					var newDiv = document.createElement('div');
					if(typeof(newDiv.style.MozTransition) != 'undefined'){
						hasCSS3 = 'mozilla';
					}
					newDiv = null;
					return hasCSS3;
				}
			},
			updates : {
				queue : new Array(),
				deserialize : function(text){
					if(window.DOMParser){
						parser = new DOMParser();
						xmlDoc = parser.parseFromString(text,"text/xml");
					}else{
						xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
						xmlDoc.async = "false";
						xmlDoc.loadXML(text);
					}
					return xmlDoc;
				},
				rewrite : function(json){
					if(typeof(jsonParse)!='undefined'){
						var valueChanges = jsonParse(json);
					}else{
						eval('var valueChanges =' + json);
					}
					for(var a=0; a<valueChanges.length; a++){
						if(valueChanges[a].name.indexOf('parent.')>-1){
							var rootFrame = parent;
							valueChanges[a].name = valueChanges[a].name.replace('parent.','');
						}else if(valueChanges[a].name.indexOf('top.')>-1){
							var rootFrame = top;
							valueChanges[a].name = valueChanges[a].name.replace('top.','');
						}else{
							var rootFrame = self;
						}
						var targetNode = rootFrame.document.getElementById(valueChanges[a].name);
						if(targetNode==null) targetNode = rootFrame.document.getElementsByName(valueChanges[a].name)[0];
						if(targetNode!=null){
							if(targetNode.nodeName=='TABLE' && valueChanges[a].value.constructor.toString().indexOf("Array")>-1){
								var allRows = targetNode.getElementsByTagName('TR');
								for(var b=0; b<valueChanges[a].value.length; b++){
									if(valueChanges[a].value[b]!=null){
										if(b>=allRows.length){
											var newRow = allRows[allRows.length-1].cloneNode(true);
											allRows[allRows.length-1].parentNode.appendChild(newRow);
											allRows[allRows.length] = newRow;
										}
										var allCols = [];
										for(var c=0; c<allRows[b].childNodes.length; c++){
											if(allRows[b].childNodes[c].nodeName=='TH' || allRows[b].childNodes[c].nodeName=='TD'){
												allCols[allCols.length] = allRows[b].childNodes[c];
											}
										}
										for(var c=0; c<valueChanges[a].value[b].length; c++){
											if(c>=allCols.length){
												var newCol = allCols[allCols.length-1].cloneNode(true);
												allCols[allCols.length-1].parentNode.appendChild(newCol);
												allCols[allCols.length] = newCol;
											}
											if(valueChanges[a].value[b][c]!=null){
												simplify.updates.value(allCols[c], valueChanges[a].attr, valueChanges[a].value[b][c], rootFrame);
											}
										}
										if(allCols.length > valueChanges[a].value[b].length){
											for(var c=allCols.length-1; c>valueChanges[a].value[b].length-1; c--){
												allCols[c].parentNode.removeChild(allCols[c]);
											}
										}
									}
								}
								if(allRows.length > valueChanges[a].value.length){
									for(var b=allRows.length-1; b>valueChanges[a].value.length-1; b--){
										var removedChild = allRows[b].parentNode.removeChild(allRows[b]);
									}
								}
							}else if(
								(targetNode.nodeName=='UL' || targetNode.nodeName=='OL' || targetNode.nodeName=='DL') &&
								valueChanges[a].value.constructor.toString().indexOf("Array")>-1
							){
								var allNodes = targetNode.childNodes;
								var allRows = new Array();
								for(var b=0; b<allNodes.length; b++){
									if(allNodes[b].nodeName=='LI' || allNodes[b].nodeName=='DT' || allNodes[b].nodeName=='DD'){
										allRows[allRows.length] = allNodes[b];
									}
								}
								for(var b=0; b<valueChanges[a].value.length; b++){
									if(b>=allRows.length){
										var newRow = allRows[allRows.length-1].cloneNode(true);
										allRows[allRows.length-1].parentNode.appendChild(newRow);
										allRows[allRows.length] = newRow;
									}
									if(valueChanges[a].value[b]!=null){
										simplify.updates.value(allRows[b], valueChanges[a].attr, valueChanges[a].value[b], rootFrame);
									}
								}
								if(allRows.length > valueChanges[a].value.length){
									for(var b=allRows.length-1; b>valueChanges[a].value.length-1; b--){
										var removedChild = allRows[b].parentNode.removeChild(allRows[b]);
									}
								}
							}else{
								simplify.updates.value(targetNode, valueChanges[a].attr, valueChanges[a].value, rootFrame);
							}
						}
					}
				},
				value : function(object, attribute, value, frame){
					switch(attribute.toLowerCase()){
						case 'html' :
							object.innerHTML = value;
							break;
						case 'class' :
							if(value.indexOf('+')>-1){
								value = value.replace('+', ' ');
								if(object.className.indexOf(' ' + value)<0) object.className += value;
							}else if(value.indexOf('-')>-1){
								value = value.replace('-', ' ');
								object.className += object.className.replace(value, ' ');
							}else{
								object.className = value;
							}
							break;
						case 'style' :
							object.style = value;
							break;
						case 'src' :
							object.src = value;
							break;
						case 'checked' :
							object.checked = (value=='checked');
							break;
						case 'selectedindex' :
							object.selectedIndex = value;
							break;
						case 'value' :
							object.value = value;
							break;
						default :
							object.setAttribute(attribute, value);
					}
				},
				onprogress : function(reply){
					reply.referer.innerHTML = (reply.progress>-1) ? 'Loading: ' + Math.round(reply.progress * 100) + '%' : 'Error: ' + reply.status ;
				},
				onload : function(reply){
					reply.referer.innerHTML = reply.text.split('<body>')[1].split('</body>')[0];
				},
				request : function(options){
					this.queue.push({
						'url' : options.url,
						'post' : options.post,
						'method' : (options.post != null) ? 'POST' : 'GET' ,
						'doOnLoad' : ((options.onload == 'default') ? simplify.updates.onload : options.onload),
						'doOnProgress' : ((options.onprogress == 'default') ? simplify.updates.onprogress : options.onprogress),
						'referObject' : options.referer,
						'time' : new Date()
					});
					this.cycle();
					return false;
				},
				cycle : function(){
					queue = simplify.updates.queue;
					if(queue.length > 0){
						if(queue[0].ready == 4){
							queue.reverse();
							queue.length = queue.length - 1;
							queue.reverse();
						}
					}
					if(queue.length > 0){
						if(!(queue[0].ready < 4 && queue[0].ready != null)){
							this.perform(queue[0]);
						}
					}
				},
				perform : function(queued){
					queued.request = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") ;
					queued.request.onreadystatechange = this.handle;
					queued.request.open(queued.method, queued.url, true);
					if(queued.method == 'POST'){
						queued.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
						queued.request.setRequestHeader("Content-length", queued.post.length);
						queued.request.setRequestHeader("Connection", "close");
					}
					queued.request.send(queued.post);
				},
				handle : function(){
					queued = simplify.updates.queue[0];
					queued.ready = queued.request.readyState;
					if(queued.request.readyState == 4){
						queued.status = queued.request.status;
						if(queued.request.status == 200 || queued.request.status == 304){
							if(queued.doOnProgress){
								queued.doOnProgress({
									'progress' : 4,
									'document' : null,
									'referer' : queued.referObject,
									'status' : queued.request.status,
									'text' : '',
									'time' : queued.time
								});
							}
							queued.text = queued.request.responseText;
							queued.document = queued.request.responseXML;
							if(queued.text.indexOf('<') == 0){
								if(queued.document == null){
									queued.document = simplify.updates.deserialize(queued.text);
								}else if(queued.document.childNodes.length == 0){
									queued.document = simplify.updates.deserialize(queued.text);
								}
							}
							if(queued.doOnLoad){
								queued.doOnLoad({
									'progress' : 4,
									'document' : queued.document,
									'referer' : queued.referObject,
									'status' : queued.request.status,
									'text' : queued.text,
									'time' : queued.time
								});
							}
							simplify.updates.cycle();
						}else{
							if(queued.doOnProgress){
								queued.doOnProgress({
									'progress' : -1,
									'document' : null,
									'referer' : queued.referObject,
									'status' : queued.request.status,
									'text' : '',
									'time' : queued.time
								});
							}
						}
					}else{
						if(queued.doOnProgress){
							queued.doOnProgress({
								'progress' : queued.request.readyState,
								'document' : null,
								'referer' : queued.referObject,
								'status' : 200,
								'text' : '',
								'time' : queued.time
							});
						}
					}
					return queued.request.readyState;
				}
			}
		}

		/* jQuery integration */
		if(typeof(jQuery)!='undefined'){
			(function($){
				var methods = {
					init : function(options){
						return this.each(function(){
							simplify.selectors.handle($(this).context, options);
						});
					},
					test : function(){
						return this.each(function(){
							simplify.reports.test($(this).context);
						});
					}
				};
				$.fn.simplify = function(method){
					if(methods[method]){
						return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
					}else if(typeof method === 'object' || !method){
						return methods.init.apply(this, arguments);
					}else{
						$.error('Method ' +  method + ' does not exist on simplify.js');
					}
				};
			})(jQuery);
		}

		/* shortcuts */
		var debug = simplify.reports.send;

	}

	if(simplify.transitions != null){

		simplify.transitions.instance = 0;

		simplify.transitions.rate = (navigator.userAgent.indexOf('MSIE 6')>-1 || navigator.userAgent.indexOf('MSIE 7')>-1 || navigator.userAgent.indexOf('MSIE 8')>-1) ? 50 : 25;

		simplify.transitions.msie = (navigator.userAgent.indexOf('MSIE')>-1);

		simplify.transitions.cache = [];

		simplify.transitions.settings = [];

		simplify.transitions.supported = [
			{name : 'top', alias : ['top']},
			{name : 'right', alias : ['right']},
			{name : 'bottom', alias : ['bottom']},
			{name : 'left', alias : ['left']},
			{name : 'color', alias : ['color']},
			{name : 'backgroundColor', alias : ['backgroundColor']},
			{name : 'width', alias : ['width']},
			{name : 'minWidth', alias : ['minWidth']},
			{name : 'maxWidth', alias : ['maxWidth']},
			{name : 'height', alias : ['height']},
			{name : 'minHeight', alias : ['minHeight']},
			{name : 'maxHeight', alias : ['maxHeight']},
			{name : 'opacity', alias : ['opacity', 'mozOpacity', 'webkitOpacity', 'oOpacity', 'msOpacity']},
			{name : 'transform', alias : ['transform', 'mozTransform', 'webkitTransform', 'oTransform', 'msTransform']}
		];

		simplify.transitions.exists = function(property){
			return (
				typeof(property)!='undefined' &&
				property!=''
			);
		}

		simplify.transitions.rules = function(styleName, transitionStyles){
			var st = simplify.transitions;
			var stylesheetRules;
			var stylesheetSelector;
			var wantedName = styleName.toLowerCase();
			if(transitionStyles == null){
				var transitionStyles = new st.styles;
			}
			if(st.cache[styleName] != null){
				for(var a=0; a<st.supported.length; a++){
					transitionStyles[st.supported[a].name] = st.cache[styleName][st.supported[a].name];
				}
			}else{
				st.cache[styleName] = new st.styles;
				for(var a=0; a<document.styleSheets.length; a++){
					var localStylesheet = true;
					if(document.styleSheets[a].href!=null){
						if(document.styleSheets[a].href.indexOf(document.domain)<0 && document.styleSheets[a].href.indexOf('http')>-1){
							localStylesheet = false;
						}
					}
					if(localStylesheet){
						atMediaRules = (document.styleSheets[a].cssRules != null) ? document.styleSheets[a].cssRules : document.styleSheets[a].rules ;
						for(var b=0; b<atMediaRules.length; b++){
							stylesheetRules = (atMediaRules[b].cssRules != null) ? atMediaRules[b].cssRules : atMediaRules[b].rules ;
							if(stylesheetRules == null){
								stylesheetRules = [atMediaRules[b]];
							}
							for(var c=0; c<stylesheetRules.length; c++){
								if(typeof(stylesheetRules[c].selectorText)!='undefined'){
									stylesheetSelector = stylesheetRules[c].selectorText.toLowerCase();
									if(stylesheetSelector.indexOf('.' + wantedName)>-1 && stylesheetSelector.indexOf('.' + wantedName) == stylesheetSelector.length - wantedName.length - 1){
										for(var d=0; d<st.supported.length; d++){
											for(var e=0; e<st.supported[d].alias.length; e++){
												var propertyName = st.supported[d].name;
												var aliasName = st.supported[d].alias[e];
												if(st.exists(stylesheetRules[c].style[aliasName])){
													transitionStyles[propertyName] = stylesheetRules[c].style[aliasName];
													st.cache[styleName][propertyName] = stylesheetRules[c].style[aliasName];
												}
											}
										}
										if(st.msie){
											if(typeof(stylesheetRules[c].style.filter) != 'undefined'){
												if(stylesheetRules[c].style.filter.indexOf('opacity=') > -1){
													transitionStyles.opacity = parseInt(stylesheetRules[c].style.filter.split('opacity=')[1])/100;
													st.cache[styleName].opacity = stylesheetRules[c].style.opacity;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			return transitionStyles;
		}

		simplify.transitions.merge = function(transitionStyles, overrideStyles){
			var st = simplify.transitions;
			for(var a=0; a<st.supported.length; a++){
				var propertyName = st.supported[a].name;
				if(st.exists(overrideStyles[propertyName])){
					transitionStyles[propertyName] =  overrideStyles[propertyName];
				}
			}
			return transitionStyles;
		}

		simplify.transitions.get = function(node, transitionStyles){
			var st = simplify.transitions;
			if(transitionStyles==null){
				var transitionStyles = new st.styles;
			}
			var currentStyle = {}
			for(var a=0; a<st.supported.length; a++){
				for(var b=0; b<st.supported[a].alias.length; b++){
					var propertyName = st.supported[a].name;
					var aliasName = st.supported[a].alias[b];
					currentStyle[propertyName] = (st.exists(node.style[propertyName])) ? node.style[aliasName] : transitionStyles[propertyName];
				}
			}
			if(st.msie){
				if(typeof(node.style.filter)!='undefined' && node.style.filter!=''){
					if(node.style.filter.indexOf('opacity=')>-1){
						currentStyle.opacity = parseInt(node.style.filter.split('opacity=')[1])/100;
					}
				}
			}
			return currentStyle;
		}

		simplify.transitions.set = function(node, transitionStyles, compareStyles){
			var st = simplify.transitions;
			for(var a=0; a<st.supported.length; a++){
				for(var b=0; b<st.supported[a].alias.length; b++){
					var propertyName = st.supported[a].name;
					var aliasName = st.supported[a].alias[b];
					if(st.exists(transitionStyles[propertyName])){
						node.style[aliasName] = transitionStyles[propertyName];
					}
				}
			}
			if(st.msie && transitionStyles.opacity != compareStyles.opacity && transitionStyles.opacity != ''){
				node.style.filter = 'alpha(opacity=' + Math.round(transitionStyles.opacity*100) + ')';
			}
		}

		simplify.transitions.parse = {
			colour : function(colour){
				if(colour.indexOf('#')>-1){
					if(colour.length==7){
						var colours =  new Array(colour.substr(1,2), colour.substr(3,2), colour.substr(5,2));
					}else{
						var colours =  new Array(colour.substr(1,1), colour.substr(2,1), colour.substr(3,1));
						colours[0] += colours[0];
						colours[1] += colours[1];
						colours[2] += colours[2];
					}
					for(var a=0; a<colours.length; a++){
						colours[a] = parseInt(colours[a], 16);
					}
				}else if(colour.indexOf('rgb(')>-1){
					var colours = colour.replace('rgb(', '').replace(')', '').split(',');
					for(var a=0; a<colours.length; a++){
						colours[a] = parseInt(colours[a]);
					}
				}else if(colour.indexOf('rgba(')>-1){
				}else{
				}
				return colours;
			},
			transform : function(transform){
				var transformation = {
					rotate : [],
					scale : [],
					skew : [],
					translate : [],
					units : []
				}
				transform = transform.replace(/, /gi, ',');
				transform = transform.replace(/\( /gi, '(');
				transform = transform.split(' ');
				for(var a=0; a<transform.length; a++){
					if(transform[a].indexOf('rotate')>-1){
						transform[a] = transform[a].replace('rotate(', '').replace(')', '');
						transformation.rotate[0] = parseFloat(transform[a]);
					}else if(transform[a].indexOf('scale')>-1){
						transform[a] = transform[a].replace('scale(', '').replace(')', '');
						transformation.scale[0] = parseFloat(transform[a]);
					}else if(transform[a].indexOf('skew')>-1){
						transform[a] = transform[a].replace('skew(', '').replace(')', '');
						transform[a] = transform[a].split(',');
						transformation.skew[0] = parseFloat(transform[a][0]);
						if(transform[a].length>1){
							transformation.skew[1] = parseFloat(transform[a][1]);
						}
					}else if(transform[a].indexOf('translate')>-1){
						transform[a] = transform[a].replace('translate(', '').replace(')', '');
						transform[a] = transform[a].split(',');
						transformation.translate[0] = parseFloat(transform[a][0]);
						transformation.units[0] = (transform[a][0].indexOf('%')>-1) ? '%' : 'px' ;
						if(transform[a].length>1){
							transformation.translate[1] = parseFloat(transform[a][1]);
							transformation.units[1] = (transform[a][1].indexOf('%')>-1) ? '%' : 'px' ;
						}
					}
				}
				return transformation;
			}
		}

		simplify.transitions.compile = {
			colour : function(colours){
				var colour = '#';
				colour += (colours[0].toString(16).length==1) ? '0' + colours[0].toString(16) : colours[0].toString(16) ;
				colour += (colours[1].toString(16).length==1) ? '0' + colours[1].toString(16) : colours[1].toString(16) ;
				colour += (colours[2].toString(16).length==1) ? '0' + colours[2].toString(16) : colours[2].toString(16) ;
				return colour;
			}
		}

		simplify.transitions.interpolate = {
			colour : function(startStyle, endStyle, progressFraction){
				var currentStyle;
				var st = simplify.transitions;
				if(startStyle!='' && startStyle.toLowerCase()!='transparent' && endStyle!='' && endStyle.toLowerCase()!='transparent'){
					var startColours = st.parse.colour(startStyle);
					var endColours = st.parse.colour(endStyle);
					var currentColours = new Array(
						parseInt((endColours[0] - startColours[0]) * progressFraction + startColours[0]),
						parseInt((endColours[1] - startColours[1]) * progressFraction + startColours[1]),
						parseInt((endColours[2] - startColours[2]) * progressFraction + startColours[2])
					);
					currentStyle = st.compile.colour(currentColours);
				}
				return currentStyle;
			},
			size : function(startStyle, endStyle, progressFraction){
				var currentStyle;
				if(startStyle!='' && endStyle!=''){
					var startSize = (startStyle.indexOf('%')>-1) ? parseFloat(startStyle)/100 : parseFloat(startStyle) ;
					var endSize = (endStyle.indexOf('%')>-1) ? parseFloat(endStyle)/100 : parseFloat(endStyle) ;
					var currentSize = (endSize - startSize) * progressFraction + startSize;
					if(!isNaN(currentSize)){
						if(startStyle.indexOf('%')>-1) currentStyle = (currentSize * 100) + '%'
						else if(startStyle.indexOf('em')>-1) currentStyle = currentSize + 'em'
						else currentStyle = parseInt(currentSize) + 'px';
					}
				}
				return currentStyle;
			},
			opacity : function(startStyle, endStyle, progressFraction){
				var currentStyle;
				if(!isNaN(parseFloat(startStyle)) && !isNaN(parseFloat(endStyle))){
					var startOpacity = parseFloat(startStyle);
					var endOpacity = parseFloat(endStyle);
					var currentOpacity = (endOpacity - startOpacity) * progressFraction + startOpacity;
					if(!isNaN(currentOpacity)){
						currentStyle = currentOpacity;
					}
				}
				return currentStyle;
			},
			transform : function(startStyle, endStyle, progressFraction){
				var currentStyle;
				var st = simplify.transitions;
				if(startStyle!='' && endStyle!=''){
					var startTransform = st.parse.transform(startStyle);
					var endTransform = st.parse.transform(endStyle);
					currentStyle = '';
					if(startTransform.rotate.length>0 && endTransform.rotate.length>0){
						var currentRotation = (endTransform.rotate[0] - startTransform.rotate[0]) * progressFraction + startTransform.rotate[0];
						currentStyle += 'rotate(' + currentRotation + 'deg) ';
					}
					if(startTransform.scale.length>0 && endTransform.scale.length>0){
						var currentScale = (endTransform.scale[0] - startTransform.scale[0]) * progressFraction + startTransform.scale[0];
						currentStyle += 'scale(' + currentScale + ') ';
					}
					if(startTransform.skew.length>0 && endTransform.skew.length>0){
						var currentSkew = (endTransform.skew[0] - startTransform.skew[0]) * progressFraction + startTransform.skew[0];
						currentStyle += 'skew(' + currentSkew + 'deg';
						if(startTransform.skew.length>1 && endTransform.skew.length>1){
							currentSkew = (endTransform.skew[1] - startTransform.skew[1]) * progressFraction + startTransform.skew[1];
							currentStyle += ', ' + currentSkew + 'deg';
						}
						currentStyle += ') ';
					}
					if(startTransform.translate.length>0 && endTransform.translate.length>0){
						var currentTranslate = (endTransform.translate[0] - startTransform.translate[0]) * progressFraction + startTransform.translate[0];
						currentStyle += 'translate(' + currentTranslate + endTransform.units[0];
						if(startTransform.translate.length>1 && endTransform.translate.length>1){
							currentTranslate = (endTransform.translate[1] - startTransform.translate[1]) * progressFraction + startTransform.translate[1];
							currentStyle += ', ' + currentTranslate + endTransform.units[1];
						}
						currentStyle += ') ';
					}
				}
				return currentStyle;
			}
		}

		simplify.transitions.loop = function(node, startClassName, endClassName, onComplete, startStyles, endStyles, startTime, endTime){
			var st = simplify.transitions;
			var ss = simplify.storage;
			var currentTime = new Date().getTime();
			var progressFraction = (currentTime - startTime) / (endTime - startTime);
			if(progressFraction>1) progressFraction = 1;
			var interPolatedStyle = st.interpolate.size(startStyles.top, endStyles.top, progressFraction);
			if(interPolatedStyle != null) node.style.top = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.right, endStyles.right, progressFraction);
			if(interPolatedStyle != null) node.style.right = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.bottom, endStyles.bottom, progressFraction);
			if(interPolatedStyle != null) node.style.bottom = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.left, endStyles.left, progressFraction);
			if(interPolatedStyle != null) node.style.left = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.width, endStyles.width, progressFraction);
			if(interPolatedStyle != null) node.style.width = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.minWidth, endStyles.minWidth, progressFraction);
			if(interPolatedStyle != null) node.style.minWidth = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.maxWidth, endStyles.maxWidth, progressFraction);
			if(interPolatedStyle != null) node.style.maxWidth = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.height, endStyles.height, progressFraction);
			if(interPolatedStyle != null) node.style.height = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.maxHeight, endStyles.maxHeight, progressFraction);
			if(interPolatedStyle != null) node.style.maxHeight = interPolatedStyle;
			interPolatedStyle = st.interpolate.size(startStyles.minHeight, endStyles.minHeight, progressFraction);
			if(interPolatedStyle != null) node.style.minHeight = interPolatedStyle;
			interPolatedStyle = st.interpolate.colour(startStyles.color, endStyles.color, progressFraction);
			if(interPolatedStyle != null) node.style.color = interPolatedStyle;
			interPolatedStyle = st.interpolate.colour(startStyles.backgroundColor, endStyles.backgroundColor, progressFraction);
			if(interPolatedStyle != null) node.style.backgroundColor = interPolatedStyle;
			interPolatedStyle = st.interpolate.opacity(startStyles.opacity, endStyles.opacity, progressFraction);
			if(interPolatedStyle != null){
				node.style.visibility = (interPolatedStyle>0) ? 'visible' : 'hidden';
				node.style.display = (interPolatedStyle>0) ? 'block' : 'none';
				node.style.opacity = interPolatedStyle;
				node.style.MozOpacity = interPolatedStyle;
				node.style.WebkitOpacity = interPolatedStyle;
				node.style.OOpacity = interPolatedStyle;
				node.style.msOpacity = interPolatedStyle;
				if(st.msie && startStyles.opacity != endStyles.opacity){
					node.style.filter = 'alpha(opacity=' + Math.round(interPolatedStyle*100) + ')';
				}
			}
			interPolatedStyle = st.interpolate.transform(startStyles.backgroundColor, endStyles.backgroundColor, progressFraction);
			if(interPolatedStyle != null && interPolatedStyle!=''){
				node.style.transform = interPolatedStyle;
				node.style.MozTransform = interPolatedStyle;
				node.style.WebkitTransform = interPolatedStyle;
				node.style.OTransform = interPolatedStyle;
				node.style.msTransform = interPolatedStyle;
			}
			if(currentTime < endTime){
				ss.settings(node.id).timeout = setTimeout(
					function(){
						st.loop(node, startClassName, endClassName, onComplete, startStyles, endStyles, startTime, endTime);
					},
					st.rate + currentTime - new Date().getTime()
				);
			}else{
				simplify.storage.settings(node.id).timeout = null;
				node.className = node.className.replace(startClassName, endClassName);
				st.set(node, endStyles, startStyles);
				if(onComplete != null){
					onComplete(node);
				}
			}
		}

		simplify.transitions.styles = function(){
			var st = simplify.transitions;
			for(var a=0; a<st.supported.length; a++){
				this[st.supported[a].name] = '';
			}
		}

	}

	/* functions */
	simplify.slideshow = {
		name : 'pinboardCarousel',
		start : function(node, event, settings){
			if(node.id == null) 'slideshow_' + (new Date()).getTime();
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(node.id);
			if(!cfg.isActive){
				cfg.isActive = true;
				node.className += ' mode_carousel';
				pbc.storeSettings(node, cfg, settings);
				pbc.buildSlideContainer(node, cfg);
				pbc.buildProgressIndicator(node, cfg);
				pbc.buildToolbar(node, cfg);
				pbc.buildPager(node, cfg);
				if(cfg.onMobile){
					pbc.handleClicks_iOS(node, cfg, pbc);
					pbc.handleGestures_iOS(node, cfg, pbc);
				}else{
					pbc.handleClicks(node, cfg, pbc);
					pbc.handleGestures(node, cfg, pbc);
				}
				pbc.handleMousewheel(node, cfg, pbc);
				pbc.handleIdle(node, cfg, pbc);
				pbc.handleFilters(node, cfg, pbc);
				setTimeout(function(){
					if(cfg.allowAjax){
						pbc.loadSlides(node, cfg.activeSlide, cfg.fetchAmount);
						pbc.loadPager(node);
					}else{
						pbc.updateSlides(node);
						pbc.fillPager({
							'progress' : null,
							'document' : null,
							'referer' : node,
							'status' : null,
							'text' : '['+cfg.slideNodes.length+']',
							'time' : null
						});
					}
				}, 200);
			}
		},
		storeSettings : function(node, cfg, settings){
			cfg.carouselNames = settings.carouselNames;
			cfg.pinboardNames = settings.pinboardNames;
			cfg.rowOffset = settings.rowOffset;
			cfg.pinboardOffset = settings.pinboardOffset;
			cfg.fetchScrollBottom = settings.fetchScrollBottom;
			cfg.fetchScrollDelay = settings.fetchScrollDelay;
			cfg.fetchTreshold = settings.fetchTreshold;
			cfg.fetchAmount = settings.fetchAmount;
			cfg.idleDelay = settings.idleDelay;
			cfg.backgroundAnimation = settings.backgroundAnimation;
			cfg.onMobile = settings.onMobile;
			cfg.toggleFilter = settings.toggleFilter;
			cfg.togglePinboard = settings.togglePinboard;
			cfg.toggleCarousel = settings.toggleCarousel;
			cfg.toggleNext = settings.toggleNext;
			cfg.togglePrev = settings.togglePrev;
			cfg.activeSlide = 0;
			cfg.idleDelay = settings.idleDelay;
			cfg.idleLoop = settings.idleLoop;
			cfg.idleDirection = settings.idleDirection;
			cfg.activeFilterGroup = [];
			cfg.carouselMode = (node.className.indexOf('mode_carousel')>-1);
			cfg.allowAjax = (node.getElementsByTagName('form').length>0);
			cfg.fetchInProgress = false;
			cfg.noSlidesLeft = false;
			cfg.recentGesture = false;
		},
		buildSlideContainer : function(node, cfg){
			var allChildDivs = node.getElementsByTagName('div');
			cfg.slideContainer = allChildDivs[0];
			cfg.slideNodes = [];
			cfg.slideContainer = document.createElement('div');
			cfg.slideContainer.className = 'pbcSlides';
			for(var a=0, b=node.childNodes.length; a<b; b--){
				var slideNode = node.childNodes[b-1];
				if(slideNode.nodeName == 'DIV' && slideNode.className.indexOf('pbcSlide') > -1){
					var movedSlide = slideNode.parentNode.removeChild(slideNode);
					movedSlide.className += ' pbcRightStandBy';
					if(cfg.slideContainer.childNodes.length > 0){
						cfg.slideContainer.insertBefore(movedSlide, cfg.slideContainer.firstChild);
					}else{
						cfg.slideContainer.appendChild(movedSlide);
					}
				}
			}
			node.appendChild(cfg.slideContainer);
		},
		buildProgressIndicator : function(node, cfg){
			cfg.progressIndicator = document.createElement('div');
			cfg.progressIndicator.className = 'pbcBusy';
			node.appendChild(cfg.progressIndicator);
		},
		buildToolbar : function(node, cfg){
			var allChildUls = node.getElementsByTagName('ul');
			cfg.toolbarContainer = allChildUls[0];
			cfg.toolbarContainer = document.createElement('ul');
			cfg.toolbarContainer.className = 'pbcToolBar';
			var toolbarElements = [
				[cfg.togglePrev, 'pbcToPrevious'],
				[cfg.toggleNext, 'pbcToNext'],
				[cfg.toggleCarousel, 'pbcToCarousel'],
				[cfg.togglePinboard, 'pbcToPinboard'],
				[cfg.toggleFilter, 'pbcToFilter']
			];
			for(var a=0; a<toolbarElements.length; a++){
				if(toolbarElements[a][0] != null){
					var newOption = document.createElement('li');
					newOption.className = toolbarElements[a][1];
					var newButton = document.createElement('button');
					newButton.innerHTML = toolbarElements[a][0];
					newOption.appendChild(newButton);
					cfg.toolbarContainer.appendChild(newOption);
				}
			}
			node.appendChild(cfg.toolbarContainer);
		},
		buildPager : function(node, cfg){
			cfg.pagerContainer = document.createElement('ul');
			cfg.pagerContainer.className = 'pbcPager';
			node.appendChild(cfg.pagerContainer);
		},
		updateAll : function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			cfg.activeSlide = 0;
			cfg.slideNodes = [];
			cfg.fetchInProgress = false;
			cfg.noSlidesLeft = false;
			cfg.slideContainer.innerHTML = '';
			pbc.loadSlides(parent, 0, 3);
		},
		loadPager : function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			var fetchURL = parent.getElementsByTagName('form')[0].getAttribute('action');
			fetchURL += '&inf=1&grp=' + cfg.activeFilterGroup.join(',');
			simplify.updates.request({
				url : fetchURL,
				post : null,
				onload : pbc.fillPager,
				onprogress : null,
				referer : parent
			});
		},
		fillPager : function(reply){
			var parent = reply.referer;
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			eval('var fetchedPager=' + reply.text);
			cfg.pagerContainer.innerHTML = '';
			var existingPager = cfg.pagerContainer.getElementsByTagName('li');
			for(var a=0; a<fetchedPager[fetchedPager.length-1]; a++){
				if(a<existingPager.length){
					var newPagerElement = existingPager[a];
					var newPagerLink = existingPager[a].getElementsByTagName('a')[0];
				}else{
					var newPagerElement = document.createElement('li');
					var newPagerLink = document.createElement('a');
					newPagerLink.innerHTML = a + 1;
					newPagerElement.appendChild(newPagerLink);
					cfg.pagerContainer.appendChild(newPagerElement);
				}
				newPagerLink.setAttribute('href', '#pbcSlide_' + a);
				newPagerLink.setAttribute('id', 'pbcPage_' + a);
				if(newPagerElement.className.indexOf('status_active')<0){
					if(cfg.onMobile){
						pbc.handlePager_iOS(parent, a, newPagerLink, cfg, pbc);
					}else{
						pbc.handlePager(parent, a, newPagerLink, cfg, pbc);
					}
					newPagerElement.className += ' status_active';
				}
			}
			pbc.updatePager(parent);
		},
		updatePager : function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			var childNodes = cfg.pagerContainer.getElementsByTagName('a');
			for(var a=0; a<childNodes.length; a++){
				if(a<cfg.slideNodes.length){
					childNodes[a].className = (a == cfg.activeSlide) ? 'pbcActive' : 'pbcLink' ;
				}else{
					childNodes[a].className = 'pbcPassive';
				}
			}
		},
		loadSlides: function(parent, overrideIndex, overrideAmount){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			if(cfg.allowAjax){
				var cfg = simplify.storage.settings(parent.id);
				if(!cfg.fetchInProgress && !cfg.noSlidesLeft){
					var slideIndex = (overrideIndex!=null) ? overrideIndex : cfg.activeSlide + cfg.fetchTreshold - 1 ;
					var slideAmount = (overrideAmount!=null) ? overrideAmount : cfg.fetchAmount ;
					var filterForm = parent.getElementsByTagName('form')[0];
					var filterGroups = filterForm.getElementsByTagName('fieldset')[0].getElementsByTagName('input');
					cfg.activeFilterGroup = [];
					for(var a=0; a<filterGroups.length; a++){
						if(filterGroups[a].checked){
							cfg.activeFilterGroup[cfg.activeFilterGroup.length] = filterGroups[a].value;
						}
					}
					var fetchURL = filterForm.getAttribute('action');
					fetchURL += '&idx=' + slideIndex + '&amt=' + slideAmount + '&grp=' + cfg.activeFilterGroup.join(',');
					simplify.updates.request({
						url : fetchURL,
						post : null,
						onload : pbc.insertSlides,
						onprogress : pbc.progressSlides,
						referer : parent
					});
					cfg.progressTimeout = setTimeout(function(){cfg.progressIndicator.style.display = 'block';}, 500);
					cfg.fetchInProgress = true;
					setTimeout(function(){cfg.fetchInProgress = false; cfg.progressIndicator.style.display = 'none';}, 1000);
				}
			}
		},
		progressSlides: function(reply){
			var parent = reply.referer;
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
		},
		insertSlides: function(reply){
			var parent = reply.referer;
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			if(cfg.allowAjax){
				eval('var fetchedSlides = ' + reply.text);
				for(var a=0; a<fetchedSlides.length - 1; a++){
					var tempDiv = document.createElement('div');
					if(!cfg.carouselMode){
						fetchedSlides[a] = fetchedSlides[a].replace(
							new RegExp(cfg.carouselNames[cfg.carouselNames.length - 1], 'gi'),
							cfg.pinboardNames[cfg.pinboardNames.length - 1]
						);
					}
					tempDiv.innerHTML = fetchedSlides[a];
					var newSlide = tempDiv.removeChild(tempDiv.getElementsByTagName('div')[0], true);
					if(document.getElementById(newSlide.id)==null){
						newSlide.style.visibility = 'hidden';
						cfg.slideContainer.appendChild(newSlide);
//						newSlide.style.marginLeft = '-' + Math.round(newSlide.offsetWidth/2) + 'px';
//						newSlide.style.marginTop = '-' + Math.round(newSlide.offsetHeight/2) + 'px';
						setTimeout((
							function(hiddenSlide){
								return function(event){
									hiddenSlide.style.visibility = 'visible';
								}
							}(newSlide)
						), 100);
					}
				}
				if(fetchedSlides.length<=1){
					cfg.noSlidesLeft = true;
				}
				cfg.fetchInProgress = false;
				clearTimeout(cfg.progressTimeout);
				cfg.progressIndicator.style.display = 'none';
				pbc.updateSlides(parent);
				if(!cfg.carouselMode) pbc.transformToPinboard(parent);
				pbc.fillPager({
					'progress' : null,
					'document' : reply.document,
					'referer' : parent,
					'status' : null,
					'text' : reply.text,
					'time' : null
				});
			}
		},
		updateSlides : function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			var childNodes = cfg.slideContainer.childNodes;
			cfg.slideNodes = [];
			for(var a=0; a<childNodes.length; a++){
				if(childNodes[a].nodeName == 'DIV' && childNodes[a].className.indexOf('pbcSlide ') > -1){
					cfg.slideNodes[cfg.slideNodes.length] = childNodes[a];
				}
			}
			for(var b=0; b<cfg.slideNodes.length; b++){
				if(cfg.slideNodes[b].className.indexOf('slide_active') < 0){
					if(cfg.onMobile){
						pbc.handleSlide_iOS(parent, b, cfg, pbc);
					}else{
						pbc.handleSlide(parent, b, cfg, pbc);
					}
					cfg.slideNodes[b].className = 'slide_active ' + cfg.slideNodes[b].className;
				}
				var slideClass = b - cfg.activeSlide + Math.floor(cfg.carouselNames.length / 2);
				if(slideClass < 0) slideClass = 0;
				if(slideClass >= cfg.carouselNames.length) slideClass = cfg.carouselNames.length - 1;
				if(cfg.slideNodes[b].className.indexOf(cfg.carouselNames[slideClass]) < 0){
					var currentClasses = cfg.slideNodes[b].className.split(' ');
					simplify.transitions.tween(
						cfg.slideNodes[b],
						currentClasses[currentClasses.length - 1],
						cfg.carouselNames[slideClass]
					);
				}
			}
		},
		slideBy: function(parent, increment){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			cfg.activeSlide = cfg.activeSlide + increment;
			var slideDirection = cfg.activeSlide + increment;
			if(cfg.activeSlide > cfg.slideNodes.length - 1){
				cfg.activeSlide = cfg.slideNodes.length - 1;
				if(cfg.idleLoop){
					cfg.idleDirection = -1;
					cfg.activeSlide = cfg.slideNodes.length - 2;
				}
			}
			if(cfg.activeSlide < 0){
				cfg.activeSlide = 0;
				if(cfg.idleLoop){
					cfg.idleDirection = 1;
					cfg.activeSlide = 1;
				}
			}
			if(cfg.slideNodes.length - cfg.activeSlide < cfg.fetchTreshold){
				pbc.loadSlides(parent);
			}
			pbc.updatePager(parent);
			pbc.updateSlides(parent);
			if(cfg.backgroundAnimation!=null){
				clearInterval(cfg.ropeInterval);
				parent.getElementsByTagName('DIV')[1].style.backgroundPosition = cfg.backgroundAnimation[0] + 'px ' + cfg.backgroundAnimation[1] + 'px';
				if(increment > 0){
					if(slideDirection <= cfg.slideNodes.length){
						cfg.ropeInterval = setInterval(function(){
							var oldRopePos = parseInt(parent.getElementsByTagName('DIV')[1].style.backgroundPosition);
							var newRopePos = oldRopePos - cfg.backgroundAnimation[2];
							parent.getElementsByTagName('DIV')[1].style.backgroundPosition = newRopePos + 'px ' + cfg.backgroundAnimation[1] + 'px';
							if(newRopePos<-cfg.backgroundAnimation[3]){
								clearInterval(cfg.ropeInterval);
							}
						}, cfg.backgroundAnimation[4]);
					}
				}else{
					if(slideDirection > -2){
						cfg.ropeInterval = setInterval(function(){
							var oldRopePos = parseInt(parent.getElementsByTagName('DIV')[1].style.backgroundPosition);
							var newRopePos = oldRopePos + cfg.backgroundAnimation[2];
							parent.getElementsByTagName('DIV')[1].style.backgroundPosition = newRopePos + 'px ' + cfg.backgroundAnimation[1] + 'px';
							if(newRopePos>cfg.backgroundAnimation[3]){
								clearInterval(cfg.ropeInterval);
							}
						}, cfg.backgroundAnimation[4]);
					}
				}
			}
		},
		slideTo: function(parent, index){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			cfg.activeSlide = index;
			if(cfg.slideNodes.length - cfg.activeSlide < cfg.fetchTreshold){
				pbc.loadSlides(parent);
			}
			pbc.updatePager(parent);
			pbc.updateSlides(parent);
		},
		toggleFilter: function(button, parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			var filterForms = parent.getElementsByTagName('form');
			if(filterForms.length>0){
				var filterNode = parent.getElementsByTagName('form')[0];
				if(filterNode.className.indexOf('hidePbcToFilter')>-1){
					button.parentNode.className = button.parentNode.className.replace('Passive', 'Active');
					simplify.transitions.tween(filterNode, 'hidePbcToFilter', 'showPbcToFilter', null, null, null, null);
				}else{
					button.parentNode.className = button.parentNode.className.replace('Active', 'Passive');
					simplify.transitions.tween(filterNode, 'showPbcToFilter', 'hidePbcToFilter', null, null, null, null);
				}
			}
		},
		handlePager: function(parent, a, newPagerLink, cfg, pbc){
			simplify.events.add(newPagerLink, 'click', (
				function(a, newPagerLink){
					return function(event){
						if(newPagerLink.className.indexOf('pbcPassive')<0) pbc.slideTo(parent, a);
						event.preventDefault ? event.preventDefault() : event.returnValue = false;
					}
				}(a, newPagerLink)
			));
		},
		handlePager_iOS: function(parent, a, newPagerLink, cfg, pbc){
			newPagerLink.addEventListener('touchend', (
				function(a, newPagerLink){
					return function(event){
						if(newPagerLink.className.indexOf('pbcPassive')<0) pbc.slideTo(parent, a);
						event.preventDefault ? event.preventDefault() : event.returnValue = false;
					}
				}(a, newPagerLink)
			));
		},
		handleSlide: function(parent, b, cfg, pbc){
			simplify.events.add(cfg.slideNodes[b], 'click', (
				function(index){
					return function(event){
						if(cfg.carouselMode){
							if(!cfg.recentGesture){
								if(index == cfg.activeSlide){
									var slideLinks = cfg.slideNodes[cfg.activeSlide].getElementsByTagName('a');
									if(slideLinks.length==1){
										document.location.href = slideLinks[0].href;
									}
								}else{
									pbc.slideTo(parent, index);
								}
							}else{
								event.preventDefault ? event.preventDefault() : event.returnValue = false;
							}
						}
					}
				}(b)
			));
		},
		handleSlide_iOS: function(parent, b, cfg, pbc){
			cfg.slideNodes[b].addEventListener('touchend', (
				function(index){
					return function(event){
						if(cfg.carouselMode){
							if(!cfg.recentGesture){
								if(index == cfg.activeSlide){
									var slideLinks = cfg.slideNodes[cfg.activeSlide].getElementsByTagName('a');
									if(slideLinks.length==1){
										document.location.href = slideLinks[0].href;
									}
								}else{
									pbc.slideTo(parent, index);
								}
							}else{
								event.preventDefault();
							}
						}
					}
				}(b)
			), false);
		},
		handleClicks: function(parent, cfg, pbc){
			var allButtons = parent.getElementsByTagName('button');
			for(var a=0; a<allButtons.length; a++){
				switch(allButtons[a].parentNode.className.split(' ')[0]){
					case 'pbcToPrevious' :
						cfg.previousButton = allButtons[a];
						simplify.events.add(allButtons[a], 'click', function(event){
							pbc.slideBy(parent, -1);
							event.preventDefault ? event.preventDefault() : event.returnValue = false;
						});
						break;
					case 'pbcToNext' :
						cfg.nextButton = allButtons[a];
						simplify.events.add(allButtons[a], 'click', function(event){
							pbc.slideBy(parent, 1);
							event.preventDefault ? event.preventDefault() : event.returnValue = false;
						});
						break;
					case 'pbcToPinboard' :
						cfg.pinboardButton = allButtons[a];
						simplify.events.add(allButtons[a], 'click', function(event){
							pbc.transformToPinboard(parent);
							event.preventDefault ? event.preventDefault() : event.returnValue = false;
						});
						break;
					case 'pbcToCarousel' :
						cfg.carouselButton = allButtons[a];
						simplify.events.add(allButtons[a], 'click', function(event){
							pbc.transformToCarousel(parent);
							event.preventDefault ? event.preventDefault() : event.returnValue = false;
						});
						break;
					case 'pbcToFilter' :
						cfg.filterButton = allButtons[a];
						simplify.events.add(allButtons[a], 'click', (
							function(button){
								return function(event){
									pbc.toggleFilter(button, parent);
									event.preventDefault ? event.preventDefault() : event.returnValue = false;
								}
							}(allButtons[a])
						));
						break;
				}
			}
		},
		handleClicks_iOS: function(node, cfg, pbc){
			var allButtons = node.getElementsByTagName('button');
			for(var a=0; a<allButtons.length; a++){
				switch(allButtons[a].parentNode.className){
					case 'pbcToPrevious' :
						cfg.previousButton = allButtons[a];
						allButtons[a].addEventListener('touchend', function(event){
							pbc.slideBy(node, -1);
							event.preventDefault();
						}, false);
						break;
					case 'pbcToNext' :
						cfg.nextButton = allButtons[a];
						allButtons[a].addEventListener('touchend', function(event){
							pbc.slideBy(node, 1);
							event.preventDefault();
						}, false);
						break;
					case 'pbcToPinboard' :
						cfg.pinboardButton = allButtons[a];
					case 'pbcToCarousel' :
						cfg.carouselButton = allButtons[a];
						break;
					case 'pbcToFilter' :
						cfg.filterButton = allButtons[a];
						simplify.events.add(allButtons[a], 'touchend', (
							function(button){
								return function(event){
									pbc.toggleFilter(button, parent);
									event.preventDefault;
								}
							}(allButtons[a])
						));
						break;
				}
			}
		},
		handleGestures: function(node, cfg, pbc){
			simplify.events.add(node, 'mousedown', function(event){
				if(cfg.carouselMode){
					cfg.startX = (navigator.userAgent.indexOf('MSIE ')>-1) ? event.x : event.screenX ;
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
			simplify.events.add(node, 'mousemove', function(event){
				if(cfg.carouselMode){
					if(cfg.startX!=null){
						cfg.recentGesture = true;
						//pbc.gestureStart(node);
						cfg.endX = (navigator.userAgent.indexOf('MSIE ')>-1) ? event.x : event.screenX ;
						if(Math.abs(cfg.endX - cfg.startX) > node.offsetWidth / 4){
							var increment = (cfg.endX - cfg.startX < 0) ? 1 : -1 ;
							pbc.slideBy(node, increment);
							cfg.startX = cfg.endX;
						}
						event.preventDefault ? event.preventDefault() : event.returnValue = false;
					}
				}
			});
			simplify.events.add(node, 'mouseup', function(event){
				if(cfg.carouselMode){
					cfg.endX = null;
					cfg.startX = null;
					setTimeout(function(){cfg.recentGesture = false;}, 100);
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
			simplify.events.add(node, 'mouseout', function(event){
				if(cfg.carouselMode){
					cfg.timeOut = setTimeout(function(){
						cfg.endX = null;
						cfg.startX = null;
					}, 100);
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
			simplify.events.add(node, 'mouseover', function(event){
				if(cfg.carouselMode){
					clearTimeout(cfg.timeOut);
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
		},
		handleGestures_iOS: function(node, cfg, pbc){
			node.addEventListener('touchstart', function(event){
				if(cfg.carouselMode){
					cfg.touchStartX = event.touches[0].pageX;
					event.preventDefault();
				}
			}, false);
			node.addEventListener('touchmove', function(event){
				if(cfg.carouselMode){
					if(cfg.touchStartX!=null){
						cfg.recentGesture = true;
						//pbc.gestureStart(node);
						cfg.touchEndX = event.touches[0].pageX;
						if(Math.abs(cfg.touchEndX - cfg.touchStartX) > node.offsetWidth / 4){
							var increment = (cfg.touchEndX - cfg.touchStartX < 0) ? 1 : -1 ;
							pbc.slideBy(node, increment);
							cfg.touchStartX = cfg.touchEndX;
						}
						event.preventDefault();
					}
				}
			}, false);
			node.addEventListener('touchend', function(event){
				if(cfg.carouselMode){
					cfg.touchEndX = null;
					cfg.touchStartX = null;
					setTimeout(function(){cfg.recentGesture = false;}, 100);
					event.preventDefault();
				}
			}, false);
			node.addEventListener('touchcancel', function(event){
				if(cfg.carouselMode){
					cfg.touchEndX = null;
					cfg.touchStartX = null;
					setTimeout(function(){cfg.recentGesture = false;}, 100);
					event.preventDefault();
				}
			}, false);
		},
		handleMousewheel: function(node, cfg, pbc){
			simplify.events.add(node, 'DOMMouseScroll', function(event){
				var distance = (window.event) ? window.event.wheelDelta/120 : -event.detail/3 ;
				var increment = (distance < 0) ? 1 : -1 ;
				if(cfg.carouselMode){
					pbc.slideBy(node, increment);
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
			simplify.events.add(node, 'mousewheel', function(event){
				var distance = (window.event) ? window.event.wheelDelta/120 : -event.detail/3 ;
				var increment = (distance < 0) ? 1 : -1 ;
				if(cfg.carouselMode){
					pbc.slideBy(node, increment);
					event.preventDefault ? event.preventDefault() : event.returnValue = false;
				}
			});
			simplify.events.add(cfg.slideContainer, 'scroll', function(event){
				if(cfg.slideContainer.scrollHeight - cfg.slideContainer.offsetHeight - cfg.slideContainer.scrollTop < cfg.fetchScrollBottom){
					pbc.loadSlides(node, cfg.slideNodes.length, cfg.fetchAmount);
				}
			});
		},
		handleIdle: function(node, cfg, pbc){
			cfg.idleTimer = null;
			simplify.events.add(node, 'mouseout', function(event){
				if(cfg.idleDelay>-1){
					clearInterval(cfg.idleTimer);
					cfg.idleTimer = setInterval(function(){
						cfg.idleLoop = true;
						if(cfg.carouselMode) pbc.slideBy(node, cfg.idleDirection);
					}, cfg.idleDelay);
				}
			});
			simplify.events.add(node, 'mouseover', function(event){
				clearInterval(cfg.idleTimer);
				cfg.idleLoop = false;
			});
			if(cfg.idleDelay>-1){
				clearInterval(cfg.idleTimer);
				cfg.idleTimer = setInterval(function(){
					cfg.idleLoop = true;
					if(cfg.carouselMode){
						pbc.slideBy(node, cfg.idleDirection);
					}
				}, cfg.idleDelay);
			}
		},
		handleFilters: function(parent, cfg, pbc){
			var filterForms = parent.getElementsByTagName('form');
			if(filterForms.length>0){
				var filterGroups = filterForms[0].getElementsByTagName('input');
				var changeEvent = (navigator.userAgent.indexOf('MSIE')) ? 'click' : 'change' ;
				for(var a=0; a<filterGroups.length; a++){
					simplify.events.add(filterGroups[a].parentNode, changeEvent, (
						function(node){
							return function(event){
								pbc.updateAll(parent, node, event);
							}
						}(filterGroups[a])
					));
				}
			}
		},
		transformToPinboard: function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			var resetScroll = (cfg.carouselMode) ? true : false ;
			if(cfg.slideNodes.length>0){
				clearTimeout(cfg.transformTimeout);
				cfg.slideNodes[0].parentNode.style.visibility = 'hidden';
				cfg.transformTimeout = setTimeout(function(){
					cfg.slideNodes[0].parentNode.style.visibility = 'visible';
				}, 1000);
			}
			simplify.transitions.tween(parent, 'mode_carousel', 'mode_pinboard');
			cfg.carouselMode = false;
			var cols = cfg.pinboardNames.length - 1;
			for(var a=0; a<cfg.slideNodes.length; a++){
				var currentClasses = cfg.slideNodes[a].className.split(' ');
				simplify.transitions.tween(
					cfg.slideNodes[a],
					currentClasses[currentClasses.length - 1],
					cfg.pinboardNames[a % cols]
				);
			}
			setTimeout(function(){
				var rows = [];
				for(var a=0; a<cfg.slideNodes.length; a++){
					if(a < cols) rows[a] = cfg.rowOffset + cfg.pinboardOffset;
					var rowHeight = cfg.slideNodes[a].offsetHeight + cfg.rowOffset;
					cfg.slideNodes[a].style.top = rows[a % cols] + 'px';
					rows[a % cols] += rowHeight;
				}
				setTimeout(function(){
					if(resetScroll){
						cfg.slideContainer.scrollTop = 0;
					}
					setTimeout(function(){
						if(cfg.slideContainer.scrollHeight<=cfg.slideContainer.offsetHeight){
							pbc.loadSlides(parent, cfg.slideNodes.length, cfg.fetchAmount);
						}
					}, cfg.fetchScrollDelay);
				}, cfg.fetchScrollDelay);
			}, cfg.fetchScrollDelay);
		},
		transformToCarousel: function(parent){
			var pbc = simplify.slideshow;
			var cfg = simplify.storage.settings(parent.id);
			cfg.slideContainer.scrollTop = 0;
			if(cfg.slideNodes.length>0){
				clearTimeout(cfg.transformTimeout);
				cfg.slideNodes[0].parentNode.style.visibility = 'hidden';
				cfg.transformTimeout = setTimeout(function(){
					cfg.slideNodes[0].parentNode.style.visibility = 'visible';
				}, 1000);
			}
			simplify.transitions.tween(
				parent,
				'mode_pinboard',
				'mode_carousel'
			);
			cfg.carouselMode = true;
			var cols = cfg.pinboardNames.length - 1;
			var rows = [];
			for(var a=0; a<cfg.slideNodes.length; a++){
				var slideClassName = (a+2<cfg.carouselNames.length) ? cfg.carouselNames[a+2] : cfg.carouselNames[cfg.carouselNames.length-1] ;
				cfg.slideNodes[a].style.top = '50%';
				var currentClasses = cfg.slideNodes[a].className.split(' ');
				simplify.transitions.tween(
					cfg.slideNodes[a],
					currentClasses[currentClasses.length - 1],
					slideClassName
				);
			}
			cfg.activeSlide = 0;
			pbc.updateSlides(parent);
			pbc.updatePager(parent);
		}
	}

	/* rules */
	simplify.selectors.wait({
		'div#slideshow' : {
			'start' : simplify.slideshow.start,
			'carouselNames' : ['pbcLeftStandBy', 'pbcCenterPosition', 'pbcRightStandBy'],
			'idleDelay' : 8000,
			'idleLoop' : false,
			'idleDirection' : 1,
			'onMobile' : (navigator.userAgent.indexOf('Mobile')>-1)
		}
	}, document.body);


