// Script: DOMContentLoaded// Copyright: Dean Edwards// Home: http://dean.edwards.name/weblog/2005/10/add-event/// Release: 2007-07-10			function addEvent(element, type, handler) {				if(type == "DOMContentLoaded" || type == "domload") {					addDOMLoadEvent(handler);					return;				}								if(element.addEventListener) element.addEventListener(type, handler, false); else {					if(!handler.$$guid) handler.$$guid = addEvent.guid++;					if(!element.events) element.events = {};					var handlers = element.events[type];					if(!handlers) {						handlers = element.events[type] = {};						if (element["on" + type]) handlers[0] = element["on" + type];					}					handlers[handler.$$guid] = handler;					element["on" + type] = handleEvent;				}			};						addEvent.guid = 1;						function removeEvent(element, type, handler) {				if(element.removeEventListener) element.removeEventListener(type, handler, false);					else if(element.events && element.events[type]) delete element.events[type][handler.$$guid];			};						function handleEvent(event) {				var returnValue = true;				event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);				var handlers = this.events[event.type];				for(var i in handlers) {					this.$$handleEvent = handlers[i];					if(this.$$handleEvent(event) === false) returnValue = false;				}				return returnValue;			};						function fixEvent(event) {				event.preventDefault = fixEvent.preventDefault;				event.stopPropagation = fixEvent.stopPropagation;				return event;			};						fixEvent.preventDefault = function() { this.returnValue = false; };			fixEvent.stopPropagation = function() { this.cancelBubble = true; };						if(!window.addEventListener) {				document.onreadystatechange = function() {					if(window.onload && window.onload != handleEvent) {						addEvent(window, "load", window.onload);						window.onload = handleEvent;					}				}			}						window.onDOMLoadEvents = new Array();			window.DOMContentLoadedInitDone = false;						function addDOMLoadEvent(listener) {				if(window.DOMContentLoadedInitDone) {					listener(); return;				}				window.onDOMLoadEvents[window.onDOMLoadEvents.length]=listener;			}						function DOMContentLoadedInit() {				if(window.DOMContentLoadedInitDone) return;				window.DOMContentLoadedInitDone = true;				for(var i=0; i<window.onDOMLoadEvents.length; i++) {					var func = window.onDOMLoadEvents[i];					func();				}			}						function DOMContentLoadedScheduler() {				if (window.DOMContentLoadedInitDone) return true;				if(/KHTML|WebKit/i.test(navigator.userAgent)) {					if(/loaded|complete/.test(document.readyState)) DOMContentLoadedInit(); else setTimeout("DOMContentLoadedScheduler()", 250);				} else if(document.getElementById("__ie_onload")) return true;							if(typeof DOMContentLoadedCustom == "function") {					if(typeof document.getElementsByTagName != "undefined" && (document.getElementsByTagName("body")[0] != null || document.body != null)) {						if(DOMContentLoadedCustom()) DOMContentLoadedInit(); else setTimeout("DOMContentLoadedScheduler()", 250);					}				}				return true;			}						setTimeout("DOMContentLoadedScheduler()", 250);			addEvent(window, "load", DOMContentLoadedInit);			if(document.addEventListener) document.addEventListener("DOMContentLoaded", DOMContentLoadedInit, false);						if(browser() == "MSIE") {				document.write("<script id=__ie_onload defer src=\"//:\"><\/script>");				var script = document.getElementById("__ie_onload");				script.onreadystatechange = function() { if(this.readyState == "complete") DOMContentLoadedInit(); };			}// Script: MoreCSS 0.9.8/3// Copyright: yellowgreen designbüro// Home: http://yellowgreen.de/morecss// License: http://creativecommons.org/licenses/by-sa/3.0// REGISTER PROPERTIES			var functionNames = new Array();			functionNames["auto-select"] = "autoSelect";			functionNames["command"] = "browserCommand";			functionNames["content"] = "appendContent";			functionNames["counter"] = "counter";			functionNames["default-value"] = "defaultValue";			functionNames["execute"] = "execute";			functionNames["include-content"] = "includeContent";			functionNames["input-type"] = "inputType";			functionNames["list-type-char"] = "listTypeChar";			functionNames["list-type-color"] = "listTypeColor";			functionNames["opacity"] = "opacity";			functionNames["preload-image"] = "preloadImage";			functionNames["second-elements-class"] = "secondElementsClass";			functionNames["style"] = "style";			functionNames["target"] = "target";			functionNames["text-slice"] = "textSlice";			functionNames["title"] = "title";			functionNames["toggle"] = "toggle";			functionNames["tooltip"] = "tooltip";			functionNames["validate"] = "validate";			var prepareFunctions = new Array();			prepareFunctions["autoSelect"] = "autoSelect";			prepareFunctions["defaultValue"] = "defaultValue";			prepareFunctions["toggle"] = "toggle";			prepareFunctions["tooltip"] = "tooltip";			prepareFunctions["validate"] = "validate";		// PREPARING			// Get path to CSS file			for(var i = 0; i < document.getElementsByTagName("link").length; i++) {				with(document.getElementsByTagName("link")[i]) if(rel.toLowerCase() == "morecss") {					var pathToCSS = href; getCSSsource(pathToCSS); break;				}			}						// Read CSS file			function createXMLHttpRequest() { var ua; if(window.XMLHttpRequest) { try { ua = new XMLHttpRequest(); } catch(e) { ua = false; } } else if(window.ActiveXObject) { try { ua = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { ua = false; } } return ua; } 			function getCSSsource(pathToCSS) {				var req = createXMLHttpRequest();				req.open("get", pathToCSS);				req.onreadystatechange = function() { if(req.readyState == 4) if(req.status == 200) {					var CSSsource = req.responseText;					CSSsource = CSSsource.replace(/[\r|\n|\t|\f]/g, " ");					CSSsource = CSSsource.replace(/\/\*.*?\*\//g,"");					hideElements(CSSsource);				} };				req.send(null);			}						// Prepare CSS code, hide special elements and start MoreCSS			function hideElements(CSSsource) {				var elementsTohide = new RegExp(/content|input|list-type|opacity|text-slice/);				function splitMultiSelectors(CSScontent) {					var value = new RegExp(/([a-zA-Z0-9_\-#. ]+)\s*,\s*([a-zA-Z0-9_\-#. ]+)\s*\{(.*?)\}/g);					CSScontent = CSScontent.replace(value, "$1 {$3} $2 {$3}");					if(CSScontent.search(value) != -1) return splitMultiSelectors(CSScontent); else return CSScontent;				}								CSSsource = splitMultiSelectors(CSSsource, 0);				var definitions = CSSsource.split("}");								var style = document.createElement("style");				style.type = "text/css"; style.media = "screen"; style.nodeValue = true;				var stylesheet = document.getElementsByTagName("head")[0].appendChild(style);								if(stylesheet.insertRule || stylesheet.addRule) {					for(var i = 0; i < definitions.length; i++) {						if(definitions[i].search(elementsTohide) > 0 && definitions[i].indexOf("auto-hide:") == -1) {							var definition = definitions[i].replace(/^(.*?)[:|\{|,].*/, "$1");							if(stylesheet.insertRule) stylesheet.insertRule(definition + "{ visibility:hidden; }", 0);							if(stylesheet.addRule) stylesheet.addRule(definition, "{ visibility:hidden; }");						}					}				}				addEvent(window, "DOMContentLoaded", function() { parseCSSsource(definitions); });			}// GLOBAL FUNCTIONS						// Get element number from string			function getElementNumber(element) {				return element.style.counterIncrement.slice(element.style.counterIncrement.indexOf(" ") + 1);			}						// Trim			function trim(string, mode) {				string = string.replace(/^\s+|\s+$/g, "");				if(mode == "quotes") string = string.replace(/^"|^'|"$|'$|\\/g, "");				if(mode == "commas") string = string.replace(/^,+|,+$/g, "");				return string;			}			// Class or ID exists?			function classOrIDexists(classOrIDstring, classOrID) {				var classOrIDs = classOrIDstring.split(" ");				for(var i = 0; i < classOrIDs.length; i++) if(classOrIDs[i] == classOrID) return true;				return false;			}			// Get style definition attribute			function getStyleAttribute(styles, style, defaultValue) {				for(var i = 0; i < styles.length; i++)					if(trim(styles[i].slice(0, styles[i].indexOf(":")), "quotes") == style) return trim(styles[i].slice(styles[i].indexOf(":") + 1), "quotes");				return defaultValue;			}						// Get shorthand style attribute			function getShorthand(shorthandString) {				shorthandString = shorthandString.split(" ");				for(var i = 0; i < shorthandString.length; i++) if(shorthandString[i] == " ") shorthandString.splice(i, 1);				return shorthandString;			}			// Get browser			function browser() {				var browsers = new Array("Safari", "WebKit", "KHTML", "Opera", "MSIE", "Mozilla");				var browser = navigator.userAgent;				for(var i = 0; i < browsers.length; i++) if(browser.indexOf(browsers[i]) != -1) browser = browsers[i];				return browser;			}						// Remove class name from class string			function removeClassName(classString, className) {				var splittedClassString = classString.split(" ");				for(var i = 0; i < splittedClassString.length; i++) if(splittedClassString[i] == className) splittedClassString.splice(i, 1);				return splittedClassString.join(" ");			}						// Clean number from char			function cleanInt(string) {				return parseInt(string.replace(/px|em|in|cm|mm|pt|pc|\%/g, ""));			}						// Get innerWidth and innerHeight			function innerSize(mode) {				var value;				if(self.innerWidth) {					value = (mode == "width") ? self.innerWidth : self.innerHeight;				} else if(document.documentElement && document.documentElement.clientWidth) {					value = (mode == "width") ? document.documentElement.clientWidth : document.documentElement.clientHeight;				} else if(document.body) {					value = (mode == "width") ? document.body.clientWidth : document.body.clientHeight;				}				return (value < 0) ? 0 : value;			}			// Parse CSS left, right, center, top, bottom			function parsePosition(position, size, mode) {				var scrollPosition = (window.pageYOffset) ? window.pageYOffset : document.body.scrollTop;				switch(position) {					case "left" : case "top" : position = 0; break;					case "right" : position = screen.availWidth - cleanInt(size); break;					case "center" :	position = (mode == "screen") ? (screen.availWidth - cleanInt(size)) / 2 : (innerSize("width") - cleanInt(size)) / 2; break;					case "middle" :	position = (mode == "screen") ? (screen.availHeight - cleanInt(size)) / 2 : scrollPosition + (innerSize("height") - cleanInt(size)) / 2; break;					case "bottom" : position = (mode == "screen") ? screen.availHeight - cleanInt(size) : innerSize("height") - cleanInt(size); break;					default : position = cleanInt(position);				}				return position;			}			// Get parent node of by tag name			function getParentNodeByTagName(element, tagName) {				if(element.parentNode) {					if(element.parentNode.nodeName.toLowerCase() == tagName.toLowerCase()) return element.parentNode; else return getParentNodeByTagName(element.parentNode, tagName);				} else return element;			}			// PROCESSES			// Parse CSS source			function parseCSSsource(definitions) {				for(var i = 0; i < definitions.length && trim(definitions[i]) != ""; i++) {					var selectors = trim(definitions[i].slice(0, definitions[i].indexOf("{")));					selectors = selectors.split(" ");					for(var j = 0; j < selectors.length; j++) selectors[j] = trim(selectors[j]);					var styles = trim(definitions[i].slice(definitions[i].indexOf("{") + 1));					styles = styles.split(";");					for(var j = 0; j < styles.length; j++) styles[j] = trim(styles[j]);					searchInDOM(selectors, styles, document.getElementsByTagName("body")[0], 0, "none");					lastSelector = "";					elementNumber = 0;				}			}			// Search in DOM and walk through selector string			function searchInDOM(selectors, styles, element, selector, pseudoClass) {				if(typeof selectors != "object") selectors = new Array(selectors);								if(selectors[selector] == "body")					execCSSstyles(selectors, styles, document.getElementsByTagName("body")[0], selector, pseudoClass);								// Get pseudo class				if(selectors[selector].indexOf(":") > -1) {					pseudoClass = selectors[selector].split(":");					selectors[selector] = pseudoClass[0];					pseudoClass = pseudoClass[1];				}								switch(selectors[selector].slice(0, 1)) {					case "." : // If selector is class						for(var i = 0; i < element.getElementsByTagName("*").length; i++)							if(classOrIDexists(element.getElementsByTagName("*")[i].className, selectors[selector].slice(1)))								execCSSstyles(selectors, styles, element.getElementsByTagName("*")[i], selector, pseudoClass);						break;					case "#" : // If selector is ID						execCSSstyles(selectors, styles, document.getElementById(selectors[selector].slice(1)), selector, pseudoClass);						break;					default : // If selector is tag						if(selectors[selector].indexOf(".") > -1) {							var tagName = selectors[selector].slice(0, selectors[selector].indexOf("."));							for(var i = 0; i < element.getElementsByTagName(tagName).length; i++)								if(classOrIDexists(element.getElementsByTagName(tagName)[i].className, selectors[selector].slice(selectors[selector].indexOf(".") + 1)))									execCSSstyles(selectors, styles, element.getElementsByTagName(tagName)[i], selector, pseudoClass);						}												if(selectors[selector].indexOf("#") > -1)							execCSSstyles(selectors, styles, document.getElementById(selectors[selector].slice(selectors[selector].indexOf("#") + 1)), selector, pseudoClass);												for(var i = 0; i < element.getElementsByTagName(selectors[selector]).length; i++) {							if(pseudoClass == "last-child" && i + 1 < element.getElementsByTagName(selectors[selector]).length) continue; else								execCSSstyles(selectors, styles, element.getElementsByTagName(selectors[selector])[i], selector, pseudoClass);							if(pseudoClass == "first-child") break;						}				}			}			// Run style function			var lastSelector; var elementNumber = 0;			function execCSSstyles(selectors, styles, element, selector, pseudoClass) {				if(!element) return;				if(selector + 1 < selectors.length)	searchInDOM(selectors, styles, element, selector + 1, pseudoClass);					else {						// Get element number						(selectors[selector] == lastSelector) ? elementNumber++ : elementNumber = 0;						element.style.counterIncrement = "Number " + (elementNumber + 1);						lastSelector = selectors[selector];												// Prepare pseudo class						var time = (pseudoClass.indexOf("timer") != -1) ? pseudoClass.substr(pseudoClass.indexOf("=") + 1) : 0;						switch(pseudoClass) {							case "hover" : case "mouseover" : pseudoClass = "mouseover"; break;							case "leave" : case "mouseout" : pseudoClass = "mouseout"; break;							case "active" : case "click" : pseudoClass = "click"; element.onclick = function() { return false; }; break;							case "focus" : case "blur" : case "change" : case "load" : case "submit" : break;							default : pseudoClass = false;						}												// Get function names and parameters						var functionName = new Array();						var functionParameter = new Array();												for(var i = 0; i < styles.length; i++) {							if(styles[i]) {								functionName[i] = functionNames[styles[i].slice(0, styles[i].indexOf(":"))];								functionParameter[i] = trim(styles[i].slice(styles[i].indexOf(":") + 1), "quotes");							}						}												// Apply all style definitions to the element						function applyStyles() {							for(var i = 0; i < functionName.length; i++) {								if(functionName[i]) window[functionName[i]] (element, styles, functionParameter[i], pseudoClass);							}						}												// Prepare special styles						for(var i = 0; i < functionName.length; i++) {							if(prepareFunctions[functionName[i]]) window[prepareFunctions[functionName[i]]] (element, styles, false, false, "prepare");						}												if(pseudoClass == false) (time == 0) ? applyStyles() : window.setTimeout(applyStyles, time);							else element.addEventListener ? element.addEventListener(pseudoClass, applyStyles, false) : element.attachEvent("on" + pseudoClass, applyStyles);					}			}						// If element is ready			function elementReady(element) {				if(element.style.visibility != "visible") element.style.visibility = "visible";			}			// MORECSS FUNCTIONS						// auto-select			function autoSelect(element, styles, style, pseudoClass, mode) {				var autoSelect = getStyleAttribute(styles, "auto-select", "");				var autoSelectRefer = getStyleAttribute(styles, "auto-select-refer", "%value");				var autoSelectExecute = getStyleAttribute(styles, "auto-select-execute", "alert(%value)");				if(mode == "prepare") {					element.onchange = function() {						if(element.options[element.selectedIndex].value != "") {							if(autoSelect == "refer") top.location.href = autoSelectRefer.replace(/(\%value)/, element.options[element.selectedIndex].value);							if(autoSelect == "execute") eval(autoSelectExecute.replace(/(\%value)/, "'" + element.options[element.selectedIndex].value + "'") + ";");						}					}				}								elementReady(element);			}						// command			function browserCommand(element, styles, style, pseudoClass) {				var browserCommand = getStyleAttribute(styles, "command", "");								if(pseudoClass) {					switch(browserCommand) {						case "back" : history.back(); break;						case "forward" : history.forward(); break;						case "reload" : location.reload(); break;						case "close" : window.close(); break;						case "print" : window.print(); break;						case "select" : element.select(); break;					}				}								elementReady(element);			}						// content			function appendContent(element, styles) {				var contentBefore = getStyleAttribute(styles, "content-before", "");				var contentAfter = getStyleAttribute(styles, "content-after", "");													contentBefore = contentBefore.replace(/\%counter/g, getElementNumber(element));				contentAfter = contentAfter.replace(/\%counter/g, getElementNumber(element));				element.innerHTML = contentBefore + trim(element.innerHTML) + contentAfter;								elementReady(element);			}						// counter			function counter(element, styles) {				var type = getStyleAttribute(styles, "counter", "");								switch(type) {					case "class" : element.className = element.className + " n" + getElementNumber(element); break;					case "id" : element.id = element.id + " n" + getElementNumber(element); break;				}								elementReady(element);			}			// default-value			function defaultValue(element, styles, style, pseudoClass, mode) {				var defaultValue = getStyleAttribute(styles, "default-value", "");				if(defaultValue == "value") defaultValue = element.value;								if(mode == "prepare") {					element.value = defaultValue;					element.onfocus = function() { if(element.value == defaultValue) element.value = ""; };					element.onblur = function() { if(element.value == "") element.value = defaultValue; };				}								elementReady(element);			}			// execute			function execute(element, styles) {				eval(getStyleAttribute(styles, "execute", "return true") + ";");								elementReady(element);			}			// include-content			function includeContent(element, styles) {				var file = getStyleAttribute(styles, "include-content", "");				var position = getStyleAttribute(styles, "include-position", "overwrite");				var status = getStyleAttribute(styles, "include-status", "");								if(position == "before") var after = element.innerHTML; else var after = "";				if(position == "after") var before = element.innerHTML; else var before = "";								if(file != "") {					element.innerHTML = before + status + after;;					var fileContent = createXMLHttpRequest();					fileContent.open("get", file);					fileContent.onreadystatechange = function() {						if(fileContent.readyState == 4) if(fileContent.status == 200) {							element.innerHTML = before + fileContent.responseText + after;							elementReady(element);						}					};					fileContent.send(null);				}			}						// input-type			function inputType(element, styles) {				if(browser() == "Safari" && getStyleAttribute(styles, "input-type", "") == "search") {					var host = getStyleAttribute(styles, "host", "");					var results = getStyleAttribute(styles, "results", "10");										element.type = "search";					element.setAttribute("autosave", host.substr(host.lastIndexOf(".") + 1) + "." + host.substring(0, host.lastIndexOf(".")) + ".search_history");					element.setAttribute("results", results);				}								elementReady(element);			}			// list-type-char			function listTypeChar(element, styles) {				var listTypeChar = getStyleAttribute(styles, "list-type-char", "-");				var padding = getStyleAttribute(styles, "list-style-padding", "1.25em");				var listTypeColor = getStyleAttribute(styles, "list-type-color", "");				if(listTypeColor != "") listTypeColor = "; color:" + listTypeColor;								if(element.tagName == "UL" || element.tagName == "OL")					for(var i = 0; i < element.getElementsByTagName("li").length; i++) applyListTypeChar(element.getElementsByTagName("li")[i]);						else applyListTypeChar(element);								function applyListTypeChar(element) {					element.style.listStyleType = "none";					element.innerHTML = '<span style="position:absolute; margin-left:-' + padding + listTypeColor + '">' + listTypeChar + '</span> ' + element.innerHTML;				}								elementReady(element);			}						// list-type-color			function listTypeColor(element, styles) {				var listTypeColor = getStyleAttribute(styles, "list-type-color", "");				var color = getStyleAttribute(styles, "color", "black");				if(element.tagName == "UL" || element.tagName == "OL") for(var i = 0; i < element.getElementsByTagName("li").length; i++) applyListTypeColor(element.getElementsByTagName("li")[i]);					else applyListTypeColor(element);								function applyListTypeColor(element) {					element.innerHTML = '<span style="color:' + color + '">' + element.innerHTML + '</span>';					element.style.color = listTypeColor;				}								elementReady(element);			}			// opacity			function opacity(element, styles) {				var opacity = getStyleAttribute(styles, "opacity", "0");								if(element.filters) {					element.style.zoom = "100%";					element.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=" + opacity * 100 + ");";					if(typeof element.filters[0].opacity == "number") element.filters[0].opacity = opacity * 100;						else element.style.filter = "alpha(opacity=" + opacity * 100 + ")";				} else if(typeof element.style.MozOpacity != "undefined") element.style.MozOpacity = opacity;							else if(typeof element.style.KHTMLOpacity != "undefined") element.style.KHTMLOpacity= opacity;									else if(typeof element.style.opacity != "undefined") element.style.opacity = opacity;								elementReady(element);			}			// preload-image			function preloadImage(element, styles, style) {				var preloadImage = new Image();				preloadImage.src = style;			}						// second-elements-class			function secondElementsClass(element, styles, style, pseudoClass) {				var className = getStyleAttribute(styles, "second-elements-class", "");								if(!pseudoClass) {					if(getElementNumber(element) == 1) secondElementsClassCounter = 1;					secondElementsClassCounter == 1 ? secondElementsClassCounter = 2 : secondElementsClassCounter = 1;					if(secondElementsClassCounter == 1) element.className = element.className + " " + className;				}								elementReady(element);			}						// style			function style(element, styles) {				var properties = getStyleAttribute(styles, "style", "").split(",");								for(var i = 0; i < properties.length; i++)					element.style[trim(properties[i].substr(0, properties[i].indexOf(":")))] = trim(properties[i].substr(properties[i].indexOf(":") + 1));								elementReady(element);			}			// target			function target(element, styles, style, pseudoClass) {				var targetMode = getStyleAttribute(styles, "target", "");				var position = getShorthand(getStyleAttribute(styles, "target-position", "center middle"));				if(!position[1]) position[1] = position[0];				var width = getStyleAttribute(styles, "target-width", "640px");				var height = getStyleAttribute(styles, "target-height", "480px");				var className = getStyleAttribute(styles, "target-class", "moreCSSlayer");				var properties = getStyleAttribute(styles, "target-properties", "menubar=no, locationbar=no, status=no");				var targetClose = getStyleAttribute(styles, "target-close", "");				var template = getStyleAttribute(styles, "target-template", "%close%iframe");				var id = getStyleAttribute(styles, "target-id", "moreCSStarget");				var includePos = getStyleAttribute(styles, "include-position", "overwrite");								switch(targetMode) {					case "window" : targetMode = "targetWindow"; break;					case "popup" : targetMode = "targetPopup"; break;					case "layer" : targetMode = "targetLayer"; break;					case "element" : targetMode = "targetElement"; break;					default : targetMode = false; break;				}				if(element.tagName == "A" && targetMode && pseudoClass) eval(targetMode + "();");								function targetWindow() {					window.open(element.href);				}								function targetPopup() {					var name = (element.rel) ? element.rel : "popup";					var popup = window.open(element.href, name, "left=" + parsePosition(position[0], width, "screen") + ", top="+ parsePosition(position[1], height, "screen") + ", width=" + cleanInt(width) + ", height=" + cleanInt(height) + ", " + properties);					popup.focus();				}								function targetLayer() {					var layerDIV = document.createElement("div");					layerDIV.id = className; layerDIV.className = className;					layerDIV.style.position = "absolute"; layerDIV.style.top = parsePosition(position[1], height, "window") + "px"; layerDIV.style.left = parsePosition(position[0], width, "window") + "px";					if(targetClose) targetClose = '<a href="#" onclick="document.getElementsByTagName(\'body\')[0].removeChild(document.getElementById(\'' + className + '\')); return false;">' + targetClose + '</a>';					var layerIFRAME = '<iframe src="' + element.href + '" style="width:' + width + '; height:' + height + '" frameborder="0" marginwidth="0" marginheight="0"></iframe>';					layerDIV.innerHTML = template.replace(/(\%close)/, targetClose).replace(/(\%iframe)/, layerIFRAME);					document.getElementsByTagName("body")[0].appendChild(layerDIV);				}				function targetElement() {					var includeContentStyles = new Array("include-content:" + element.href, "include-position:" + includePos);					if(document.getElementById(id)) includeContent(document.getElementById(id), includeContentStyles);				}								elementReady(element);			}						// text-slice			function textSlice(element, styles) {				var startAndEnd = getShorthand(getStyleAttribute(styles, "text-slice", "150"));								if(startAndEnd.length == 1) {					var slicedContent = element.innerHTML.slice(0, startAndEnd);					element.innerHTML = slicedContent.slice(0, slicedContent.slice(0, startAndEnd).lastIndexOf(" "));				} else element.innerHTML = element.innerHTML.slice(startAndEnd[0], parseFloat(startAndEnd[0]) + parseFloat(startAndEnd[1]));								elementReady(element);			}						// title			function title(element, styles) {				var titleValue = getStyleAttribute(styles, "title", element.title);								element.title = titleValue;								elementReady(element);			}						// toggle			var lastElement;					function toggle(element, styles, style, pseudoClass, mode) {				var toggleClass = getStyleAttribute(styles, "toggle", "");				var type = getStyleAttribute(styles, "toggle-type", "display");				var behaviour = getStyleAttribute(styles, "toggle-behaviour", "normal");				var active = getStyleAttribute(styles, "toggle-active", "");				var start = parseFloat(getStyleAttribute(styles, "toggle-start", 0));								var status = {					"visibility" : ["visible", "hidden"],					"display" : ["block", "none"]				};								if(mode == "prepare") {					if(getElementNumber(element) == start) {						element.className = element.className + " " + active;						lastElement = element;					}						if(getElementNumber(element) == 1) {						var toggleElementNumber = 1;						for(var i = 0; i < document.body.getElementsByTagName("*").length; i++) {							var thisElement = document.body.getElementsByTagName("*")[i];							if(classOrIDexists(thisElement.className, toggleClass)) {								thisElement.style[type] = status[type][(toggleElementNumber != start) ? 1 : 0];								thisElement.id = toggleClass + toggleElementNumber;								toggleElementNumber++;							}						}					}				} else {					var elementNumber = getElementNumber(element);					var lastElementNumber = (lastElement) ? getElementNumber(lastElement) : elementNumber;										if(behaviour == "switch" && elementNumber != lastElementNumber) {						document.getElementById(toggleClass + lastElementNumber).style[type] = status[type][1];						lastElement.className = removeClassName(lastElement.className, active);					}										if(elementNumber != lastElementNumber || behaviour != "switch") {						var toggleElement = document.getElementById(toggleClass + elementNumber);												if(toggleElement.style[type] == status[type][0]) {							element.className = removeClassName(element.className, active);							toggleElement.style[type] = status[type][1];						} else {							element.className = element.className + " " + active;							toggleElement.style[type] = status[type][0];							lastElement = element;						}					}				}				elementReady(element);			}						// tooltip			function tooltip(element, styles, style, pseudoClass, mode) {				var tooltip = getStyleAttribute(styles, "tooltip", "");				var className = getStyleAttribute(styles, "tooltip-class", "");								if(mode == "prepare") {					var tooltipElement = document.createElement("div");					tooltipElement.className = className;					tooltipElement.style.position = "absolute"; tooltipElement.style.top = "-999px";					tooltipElement.style.visibility = "hidden";					tooltipElement.innerHTML = (tooltip == "title") ? element.title : tooltip;					element.title = "";										document.getElementsByTagName("body")[0].appendChild(tooltipElement);										function executeTooltip() {						if(tooltipElement.style.visibility == "hidden") {							document.onmousemove = showTooltip;							tooltipElement.style.visibility = "visible";						} else {							tooltipElement.style.visibility = "hidden";							document.onmousemove = false;						}					}										function showTooltip(e) {						var pos = new Array(0, 0, 10, 20);						if(!e) e = window.event;						if(e.pageX || e.pageY) { pos[0] = e.pageX; pos[1] = e.pageY; }							else if(e.clientX || e.clientY) {								pos[0] = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;								pos[1] = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;							}						if(innerSize("width") - tooltipElement.offsetWidth < pos[0] + pos[2]) pos[0] += -tooltipElement.offsetWidth - pos[2];						if(pos[1] + pos[3] + tooltipElement.offsetHeight > innerSize("height")) pos[1] += -tooltipElement.offsetHeight - pos[3];						tooltipElement.style.top = pos[1] + pos[3] + "px";						tooltipElement.style.left = pos[0] + pos[2] + "px";					}										element.onmouseover = executeTooltip;					element.onmouseout = executeTooltip;								}							elementReady(element);			}						// validate			function validate(element, styles, style, pseudoClass, mode) {				var pattern = getStyleAttribute(styles, "validate", "");				var noticeText = getStyleAttribute(styles, "validate-notice-text", "");				var noticeClass = getStyleAttribute(styles, "validate-notice-class", "");				var noticeExecute = getStyleAttribute(styles, "validate-notice-execute", "");								if(mode == "prepare" && element.tagName == "INPUT" && element.type == "text") {					var submitForm = true;					var formElement = getParentNodeByTagName(element, "form");					formElement.onsubmit = function() { executeValidation(); return false; };										function executeValidation() {						switch(pattern) {							case "not-empty" : pattern = new RegExp(/.+/); break;							case "alphabetic" : pattern = new RegExp(/^[a-z]+$/i); break;							case "numeric" : pattern = new RegExp(/^[0-9]+$/); break;							case "alphabetic-numeric" : pattern = new RegExp(/^[0-9a-z]+$/i); break;							case "filename" : pattern = new RegExp(/^[0-9a-züäö_\.\-]+$/i); break;							case "email" : pattern = new RegExp(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i); break;							case "url" : pattern = new RegExp(/^http:[a-z._%-%/]+$/i); break;						}												if(trim(element.value).match(pattern)) formElement.submit(); else {							if(noticeText != "") alert(noticeText);							if(noticeClass != "") element.className = element.className + " " + noticeClass;							if(noticeExecute != "") eval(noticeExecute);						}					}				}								elementReady(element);			}
