/*
	MoreCSS 1.0 Beta 2
	Developed by yellowgreen designbüro published under MIT License.
	
	http://morecss.yellowgreen.de/
	http://morecss.yellowgreen.de/documentation/information/legal/
*/



if(!MoreCSS) var MoreCSS = {};

MoreCSS = (function() {

// REGISTER PROPERTIES
			
			// Universal object
			var MoreCSSObject = MoreCSS;
			
			// MoreCSS properties
	    	MoreCSS.functionNames = {
	    	    "add-class" : "addClass",
			    "auto-select" : "autoSelect",
	    	    "command" : "browserCommand",
	    	    "content" : "appendReplaceContent",
	    	    "counter" : "counter",
	    	    "default-value" : "defaultValue",
	    	    "execute" : "execute",
	    	    "include-content" : "includeContent",
	    	    "input-type" : "inputType",
	    	    "list-type-char" : "listTypeChar",
	    	    "list-type-color" : "listTypeColor",
	    	    "opacity" : "opacity",
	    	    "preload-image" : "preloadImage",
	    	    "remove-class" : "removeClass",
	    	    "style" : "style",
	    	    "target" : "target",
	    	    "text-slice" : "textSlice",
	    		"title" : "title",
	    	    "toggle" : "toggle",
	    	    "tooltip" : "tooltip"
	    	};
	    	
	    	// Register plugin properties automatically
			if(!MoreCSS.plugins) MoreCSS.plugins = {};
	    	for(name in MoreCSS.plugins) MoreCSS.functionNames[name] = MoreCSS.plugins[name];
	    	
	    	// MoreCSS preparing properties (runs before events)
			MoreCSS.prepareFunctions = {
				"autoSelect" : "autoSelect",
				"defaultValue" : "defaultValue",
				"preloadImage" : "preloadImage",
				"toggle" : "toggle",
				"tooltip" : "tooltip"
			};
			
	    	// Register plugin preparing properties automatically
			if(!MoreCSS.pluginsPrepare) MoreCSS.pluginsPrepare = {};
			for(name in MoreCSS.pluginsPrepare) MoreCSS.prepareFunctions[name] = MoreCSS.pluginsPrepare[name];
			
// MORECSS FUNCTIONS
			
			// add-class
			MoreCSS.addClass = function(element, styles) {
				var className = MoreCSSObject.getStyleAttribute(styles, "add-class", "");
				element.className = element.className + " " + className;
			};

			// auto-select
			MoreCSS.autoSelect = function(element, styles, style, pseudoClass, mode) {
				var autoSelect = MoreCSSObject.getStyleAttribute(styles, "auto-select", "");
				var autoSelectRefer = MoreCSSObject.getStyleAttribute(styles, "auto-select-refer", "%value");
				var autoSelectExecute = MoreCSSObject.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 + "'") + ";");
						}
					}
				}
			};
			
			// command
			MoreCSS.browserCommand = function(element, styles, style, pseudoClass) {
				var browserCommand = MoreCSSObject.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;
						case "blur" : element.blur(); break;
					}
				}
			};
			
			// content
			MoreCSS.appendReplaceContent = function(element, styles) {
				var contentMode = MoreCSSObject.getStyleAttribute(styles, "content", "");
				var contentBefore = MoreCSSObject.getStyleAttribute(styles, "content-before", "");
				var contentAfter = MoreCSSObject.getStyleAttribute(styles, "content-after", "");
				
				if(contentMode == "append") {
					contentBefore = contentBefore.replace(/\%counter/g, MoreCSSObject.getElementNumber(element));
					contentAfter = contentAfter.replace(/\%counter/g, MoreCSSObject.getElementNumber(element));
					element.innerHTML = contentBefore + MoreCSSObject.trim(element.innerHTML) + contentAfter;
				}
				
				if(contentMode == "delete") {
					var newContent = MoreCSSObject.trim(element.innerHTML);
					if(newContent.slice(0, contentBefore.length) == contentBefore) newContent = newContent.slice(contentBefore.length);
					if(newContent.slice(newContent.length - contentAfter.length) == contentAfter) newContent = newContent.slice(0, newContent.length - contentAfter.length);
					element.innerHTML = newContent;
				}
			};
			
			// counter
			MoreCSS.counter = function(element, styles) {
				var type = MoreCSSObject.getStyleAttribute(styles, "counter", "");
				
				switch(type) {
					case "class" : element.className = element.className + " n" + MoreCSSObject.getElementNumber(element); break;
					case "id" : element.id = element.id + " n" + MoreCSSObject.getElementNumber(element); break;
				}
			};

			// default-value
			MoreCSS.defaultValue = function(element, styles, style, pseudoClass, mode) {
				var defaultValue = MoreCSSObject.getStyleAttribute(styles, "default-value", "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; };
				}
			};

			// execute
			MoreCSS.execute = function(element, styles) {
				eval(MoreCSSObject.getStyleAttribute(styles, "execute", "return true") + ";");
			};

			// include-content
			MoreCSS.includeContent = function(element, styles) {
				var file = MoreCSSObject.getStyleAttribute(styles, "include-content", "");
				var position = MoreCSSObject.getStyleAttribute(styles, "include-position", "overwrite");
				var status = MoreCSSObject.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 = MoreCSSObject.createXMLHttpRequest();
					fileContent.open("get", file);
					fileContent.onreadystatechange = function() {
						if(fileContent.readyState == 4) if(fileContent.status == 200) element.innerHTML = before + fileContent.responseText + after;
					};
					fileContent.send(null);
				}
			};
			
			// input-type
			MoreCSS.inputType = function(element, styles) {
				if(MoreCSSObject.browser() == "Safari" && MoreCSSObject.getStyleAttribute(styles, "input-type", "") == "search") {
					var host = MoreCSSObject.getStyleAttribute(styles, "host", "");
					var results = MoreCSSObject.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);
				}
			};

			// list-type-char
			MoreCSS.listTypeChar = function(element, styles) {
				var listTypeChar = MoreCSSObject.getStyleAttribute(styles, "list-type-char", "-");
				var padding = MoreCSSObject.getStyleAttribute(styles, "list-style-padding", "1.25em");
				var listTypeColor = MoreCSSObject.getStyleAttribute(styles, "list-type-color", "");
				if(listTypeColor != "") listTypeColor = "; color:" + listTypeColor;
				
				if(element.tagName == ("UL" || "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;
				}
			};
			
			// list-type-color
			MoreCSS.listTypeColor = function(element, styles) {
				var listTypeColor = MoreCSSObject.getStyleAttribute(styles, "list-type-color", "");
				var color = MoreCSSObject.getStyleAttribute(styles, "color", "black");

				if(element.tagName == ("UL" || "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;
				}
			};

			// opacity
			MoreCSS.opacity = function(element, styles) {
				var opacity = MoreCSSObject.getStyleAttribute(styles, "opacity", "1");
				
				element.style.opacity = opacity;
				
				if(element.filters) {
					element.style.zoom = "100%";
					element.style.filter = "progid:DXImageTransform.Microsoft.alpha(opacity=" + opacity * 100 + ");";
					if(element.filters[0] && 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;
			};

			// preload-image
			MoreCSS.preloadImage = function(element, styles, style, pseudoClass, mode) {
				if(mode == "prepare") {
					var preloadImage = new Image();
					preloadImage.src = style;
				}
			};

			// remove-class
			MoreCSS.removeClass = function(element, styles) {
				var className = MoreCSSObject.getStyleAttribute(styles, "remove-class", "");
				element.className = MoreCSSObject.removeClassName(element.className, className);
			};
			
			// style
			MoreCSS.style = function(element, styles) {
				var properties = MoreCSSObject.getStyleAttribute(styles, "style", "").split(",");
				
				for(var i = 0; i < properties.length; i++)
					element.style[MoreCSSObject.trim(properties[i].substr(0, properties[i].indexOf(":")))] = MoreCSSObject.trim(properties[i].substr(properties[i].indexOf(":") + 1));
			};

			// target
			MoreCSS.target = function(element, styles, style, pseudoClass) {
				var targetMode = MoreCSSObject.getStyleAttribute(styles, "target", "");
				var position = MoreCSSObject.getShorthand(MoreCSSObject.getStyleAttribute(styles, "target-position", "center middle"));
				if(!position[1]) position[1] = position[0];
				var width = MoreCSSObject.getStyleAttribute(styles, "target-width", "640px");
				var height = MoreCSSObject.getStyleAttribute(styles, "target-height", "480px");
				var className = MoreCSSObject.getStyleAttribute(styles, "target-class", "moreCSSlayer");
				var properties = MoreCSSObject.getStyleAttribute(styles, "target-properties", "menubar=no, locationbar=yes, status=no, scrollbars=yes");
				var targetClose = MoreCSSObject.getStyleAttribute(styles, "target-close", "");
				var template = MoreCSSObject.getStyleAttribute(styles, "target-template", "%close%iframe");
				
				switch(targetMode) {
					case "window" : targetMode = "targetWindow"; break;
					case "popup" : targetMode = "targetPopup"; break;
					case "layer" : targetMode = "targetLayer"; break;
					default : targetMode = false;
				}

				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=" + MoreCSSObject.parsePosition(position[0], width, "screen") + ", top=" + MoreCSSObject.parsePosition(position[1], height, "screen") + ", width=" + MoreCSSObject.parseCSSsizes("width", width, "screen") + ", height=" + MoreCSSObject.parseCSSsizes("height", height, "screen") + ", " + properties);
					popup.focus();
				}
				
				function targetLayer() {
					var layerDIV = document.createElement("div");
					layerDIV.id = className; layerDIV.className = className;
					layerDIV.style.position = "absolute"; layerDIV.style.top = MoreCSSObject.parsePosition(position[1], height, "window") + "px"; layerDIV.style.left = MoreCSSObject.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:' + MoreCSSObject.parseCSSsizes("width", width, "window") + '; height:' + MoreCSSObject.parseCSSsizes("height", height, "window") + '" frameborder="0" marginwidth="0" marginheight="0"></iframe>';
					layerDIV.innerHTML = template.replace(/(\%close)/, targetClose).replace(/(\%iframe)/, layerIFRAME);
					document.getElementsByTagName("body")[0].appendChild(layerDIV);
				}
			};
			
			// text-slice
			MoreCSS.textSlice = function(element, styles) {
				var startAndEnd = MoreCSSObject.getShorthand(MoreCSSObject.getStyleAttribute(styles, "text-slice", "250"));
				
				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]));
			};
			
			// title
			MoreCSS.title = function(element, styles) {
				var titleValue = MoreCSSObject.getStyleAttribute(styles, "title", "");
				element.title = titleValue;
			};
			
			// toggle
			MoreCSS.toggle = function(element, styles, style, pseudoClass, mode) {
				var toggleClass = MoreCSSObject.getStyleAttribute(styles, "toggle", "");
				var type = MoreCSSObject.getStyleAttribute(styles, "toggle-type", "display");
				var behaviour = MoreCSSObject.getStyleAttribute(styles, "toggle-behaviour", "normal");
				var active = MoreCSSObject.getStyleAttribute(styles, "toggle-active", "");
				var start = parseFloat(MoreCSSObject.getStyleAttribute(styles, "toggle-start", 0));
				
				var status = {
					"visibility" : ["visible", "hidden"],
					"display" : ["block", "none"]
				};
				
				if(mode == "prepare") {
					if(MoreCSSObject.getElementNumber(element) == 1) {
						// Define some variables
						toggleAnchor = "none";
						eval('if(typeof ' + toggleClass + '_toggleLastElement == "undefined") ' + toggleClass + '_toggleLastElement = "none";');
						var toggleElementNumber = 1;
						
						// Close all contet elements
						for(var i = 0; i < document.body.getElementsByTagName("*").length; i++) {
							var thisElement = document.body.getElementsByTagName("*")[i];
							if(MoreCSSObject.classOrIDexists(thisElement.className, toggleClass)) {
								thisElement.style[type] = status[type][1];
								thisElement.id = toggleClass + toggleElementNumber;
								toggleElementNumber++;
							}
						}
					}
					
					// Get anchor value
					if(element.href && (element.href.substr(element.href.lastIndexOf("#"))) == window.location.hash) toggleAnchor = MoreCSSObject.getElementNumber(element);
					
					// Check if anchor or start is true and toggle element if so
					if(MoreCSSObject.getElementNumber(element) == start) if(start <= toggleAnchor || toggleAnchor == "none" || behaviour != "switch") var activate = true;
					if(MoreCSSObject.getElementNumber(element) == toggleAnchor) var activate = true;
					
					if(activate) MoreCSSObject.toggle(element, styles, style, pseudoClass);
					
					// Prevent page jump by anchor
					if(mode == "prepare" && MoreCSSObject.getElementNumber(element) == toggleAnchor) scroll(0, 0);

				} else {
					var elementNumber = MoreCSSObject.getElementNumber(element);
					var lastElementNumber = (eval(toggleClass + '_toggleLastElement') != "none") ? MoreCSSObject.getElementNumber(eval(toggleClass + '_toggleLastElement')) : "none";
					var toggleElement = document.getElementById(toggleClass + elementNumber);

					if(elementNumber != lastElementNumber || behaviour != "switch") {
						if(toggleElement.style[type] == status[type][0]) {
							element.className = MoreCSSObject.removeClassName(element.className, active);
							toggleElement.style[type] = status[type][1];
							eval(toggleClass + '_toggleLastElement = element;');
						} else {
							element.className = element.className + " " + active;
							toggleElement.style[type] = status[type][0];
							
							if(behaviour == "switch" && eval(toggleClass + '_toggleLastElement') != "none") {
								eval(toggleClass + '_toggleLastElement').className = MoreCSSObject.removeClassName(eval(toggleClass + '_toggleLastElement').className, active);
								document.getElementById(toggleClass + lastElementNumber).style[type] = status[type][1];
							}
							
							eval(toggleClass + '_toggleLastElement = element;');
						}
					}
				}
			};
			
			// tooltip
			MoreCSS.tooltip = function(element, styles, style, pseudoClass, mode) {
				var tooltip = MoreCSSObject.getStyleAttribute(styles, "tooltip", "");
				var className = MoreCSSObject.getStyleAttribute(styles, "tooltip-class", "");
				var opacity = MoreCSSObject.getStyleAttribute(styles, "tooltip-opacity", false);
				
				tooltip = tooltip.replace(/(\%title)/, element.title);
				
				if(mode == "prepare" && tooltip != "") {
					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);
					if(opacity != false) MoreCSSObject.opacity(tooltipElement, new Array("opacity:" + opacity));
					
					function executeTooltip() {
						if(tooltipElement.style.visibility == "hidden") {
							document.onmousemove = showTooltip;
							tooltipElement.style.visibility = "visible";
						} else {
							tooltipElement.style.visibility = "hidden";
							document.onmousemove = function() { return 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(MoreCSSObject.innerSize("width") - tooltipElement.offsetWidth < pos[0] + pos[2] + 25) pos[0] += -tooltipElement.offsetWidth - pos[2];
						if(25 + pos[1] + pos[3] + tooltipElement.offsetHeight > MoreCSSObject.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;				
				}
			};

// LIBRARY FUNCTIONS
			
			// Create XML request
			MoreCSS.createXMLHttpRequest = function() {
				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;
			};

			// Get element number from string
			MoreCSS.getElementNumber = function(element) {
				return element.style.counterIncrement.slice(element.style.counterIncrement.indexOf(" ") + 1);
			};
			
			// Trim at start and end
			MoreCSS.trim = function(string, mode) {
				string = string.replace(/^\s+|\s+$/g, "");
				if(mode == "quotes") string = string.replace(/^"|^'|"$|'$|\\/g, "");
				if(mode == "commas") string = string.replace(/^,+|,+$/g, "");
				return string;
			};

			// Check if class or ID exists
			MoreCSS.classOrIDexists = function(classOrIDstring, classOrID) {
				var classOrIDs = classOrIDstring.split(" ");
				for(var i = 0; i < classOrIDs.length; i++) if(classOrIDs[i] == classOrID) return true;
				return false;
			};

			// Get property value
			MoreCSS.getStyleAttribute = function(styles, style, defaultValue) {
				for(var i = 0; i < styles.length; i++)
					if(MoreCSSObject.trim(styles[i].slice(0, styles[i].indexOf(":")), "quotes") == style) return MoreCSSObject.trim(styles[i].slice(styles[i].indexOf(":") + 1), "quotes");
				return defaultValue;
			};
			
			// Get shorthand property value
			MoreCSS.getShorthand = function(shorthandString) {
				shorthandString = shorthandString.split(" ");
				for(var i = 0; i < shorthandString.length; i++) if(shorthandString[i] == " ") shorthandString.splice(i, 1);
				return shorthandString;
			};

			// Get browser name
			MoreCSS.browser = function() {
				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
			MoreCSS.removeClassName = function(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(" ");
			};
			
			// Clear string from numbers
			MoreCSS.cleanInt = function(string) {
				return parseInt(string.replace(/px|em|in|cm|mm|pt|pc|\%/g, ""));
			};
			
			// Get innerWidth and innerHeight (cross-browser)
			MoreCSS.innerSize = function(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 position name
			MoreCSS.parsePosition = function(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 - MoreCSSObject.cleanInt(size); break;
					case "center" :	position = (mode == "screen") ? (screen.availWidth - MoreCSSObject.cleanInt(size)) / 2 : (MoreCSSObject.innerSize("width") - MoreCSSObject.cleanInt(size)) / 2; break;
					case "middle" :	position = (mode == "screen") ? (screen.availHeight - MoreCSSObject.cleanInt(size)) / 2 : scrollPosition + (MoreCSSObject.innerSize("height") - MoreCSSObject.cleanInt(size)) / 2; break;
					case "bottom" : position = (mode == "screen") ? screen.availHeight - MoreCSSObject.cleanInt(size) : MoreCSSObject.innerSize("height") - MoreCSSObject.cleanInt(size); break;
					default : position = MoreCSSObject.cleanInt(position);
				}
				return position;
			};
			
			// Parse CSS sizes format
			MoreCSS.parseCSSsizes = function(type, size, mode, element) {
				if(size == "auto") size = "100%";

				if(size.indexOf("%") > -1) {				
					if(type == "width") {
						if(mode == "screen") size = (screen.availWidth * MoreCSSObject.cleanInt(size) / 100) + "px";
						if(mode == "window") size = (MoreCSSObject.innerSize("width") * MoreCSSObject.cleanInt(size) / 100) + "px";
						if(mode == "element") {
							var display = "";
							if(MoreCSSObject.getStyle(element, "display") == "none") { display = "none"; element.style.display = "block"; }
							var originalWidth = element.offsetWidth;
							element.style.width = size;
							var newWidth = element.offsetWidth;
							element.style.width = originalWidth + "px";
							if(display != "") element.style.display = display;
							size = newWidth + "px";
						}
					}
					if(type == "height") {
						if(mode == "screen") size = (screen.availHeight * MoreCSSObject.cleanInt(size) / 100) + "px";
						if(mode == "window") size = (MoreCSSObject.innerSize("height") * MoreCSSObject.cleanInt(size) / 100) + "px";
						if(mode == "element") {
							var display = "";
							if(MoreCSSObject.getStyle(element, "display") == "none") { display = "none"; element.style.display = "block"; }
							var originalHeight = element.offsetHeight;
							element.style.height = size;
							var newHeight = element.offsetHeight;
							element.style.height = originalHeight + "px";
							if(display != "") element.style.display = display;
							size = newHeight + "px";
						}
					}
				}
				return size;
			};

			// Get parent node by tag name
			MoreCSS.getParentNodeByTagName = function(element, tagName) {
				if(element.parentNode) {
					if(element.parentNode.nodeName.toLowerCase() == tagName.toLowerCase()) return element.parentNode; else return MoreCSSObject.getParentNodeByTagName(element.parentNode, tagName);
				} else return element;
			};
			
			// Get cross browser computed style
			MoreCSS.getStyle = function(element, property) {
				var value = "";
				if(document.defaultView && document.defaultView.getComputedStyle) {
					value = document.defaultView.getComputedStyle(element, "").getPropertyValue(property);
				} else if(element.currentStyle) {
					property = property.replace(/\-(\w)/g, function(strMatch, p1) { return p1.toUpperCase(); });
					value = element.currentStyle[property];
				}
				return value;
			};
			
			// Fire on DOM ready
			MoreCSS.DomLoaded = {
				onload: [],
				
				loaded: function() {
					if(arguments.callee.done) return;
					arguments.callee.done = true;
					for(i = 0; i < MoreCSSObject.DomLoaded.onload.length; i++) MoreCSSObject.DomLoaded.onload[i]();
				},
				
				load: function(fireThis) {
					this.onload.push(fireThis);
					if(document.addEventListener) document.addEventListener("DOMContentLoaded", MoreCSSObject.DomLoaded.loaded, null);
					
					if(/KHTML|WebKit/i.test(navigator.userAgent)) {
						var _timer = setInterval(function() {
							if(/loaded|complete/.test(document.readyState)) {
								clearInterval(_timer);
								delete _timer;
								MoreCSSObject.DomLoaded.loaded();
							}
						}, 10);
					}
					
					/*@cc_on @*/
					/*@if (@_win32)
					var proto = "src='javascript:void(0)'";
					if(location.protocol == "https:") proto = "src=//0";
					document.write("<scr" + "ipt id=__ie_onload defer " + proto + "><\/scr" + "ipt>");
					var script = document.getElementById("__ie_onload");
					script.onreadystatechange = function() {
					    if(this.readyState == "complete") MoreCSSObject.DomLoaded.loaded();
					};
					/*@end @*/
					
					window.onload = MoreCSSObject.DomLoaded.loaded;
				}
			};
	
// START MORECSS
			
			// Start when DOM loaded
			MoreCSS.DomLoaded.load(getCSSpath);
			
			// Get CSS path
			function getCSSpath() {
				for(var i = 0; i < document.getElementsByTagName("link").length; i++) {
					with(document.getElementsByTagName("link")[i]) if(rel.toLowerCase() == "morecss") {
						getCSSsource(href);
					}
				}
			}
			
			// Get CSS source
			function getCSSsource(pathToCSS) {
				var req = MoreCSSObject.createXMLHttpRequest();
				req.open("get", pathToCSS);
				req.onreadystatechange = function() { if(req.readyState == 4) if(req.status == 200) {
					
					// Clean source
					var CSSsource = req.responseText;
					CSSsource = CSSsource.replace(/\r|\n|\t|\f/g, " ");
					CSSsource = CSSsource.replace(/\/\*.*?\*\//g,"");
					CSSsource = CSSsource.split("}");
					
					parseCSSsource(CSSsource);
				}};
				req.send(null);
			}
			
			// Parse CSS source
			function parseCSSsource(definitions) {
				for(var i = 0; i < definitions.length && MoreCSSObject.trim(definitions[i]) != ""; i++) {
					// Get selectors and pseudo-class
					var selectors = MoreCSSObject.trim(definitions[i].slice(0, definitions[i].indexOf("{")));
					var pseudoClass = "none";
					var targetElement = "none";
					
					if(selectors.lastIndexOf(":") > -1) {
						pseudoClass = selectors.slice(selectors.lastIndexOf(":") + 1);
						selectors = selectors.slice(0, selectors.lastIndexOf(":"));
					}

					if(selectors.lastIndexOf("=>") > -1) selectors = MoreCSSObject.trim(selectors.slice(selectors.lastIndexOf("=>") + 2));
					
					if(pseudoClass.lastIndexOf("=>") > -1) {
						targetElement = MoreCSSObject.trim(pseudoClass.slice(pseudoClass.lastIndexOf("=>") + 2));
						pseudoClass = MoreCSSObject.trim(pseudoClass.slice(0, pseudoClass.lastIndexOf("=>")));
					}
					
					selectors = selectors.split(" ");
					for(var j = 0; j < selectors.length; j++) selectors[j] = MoreCSSObject.trim(selectors[j]);
					
					// Get styles
					var styles = MoreCSSObject.trim(definitions[i].slice(definitions[i].indexOf("{") + 1));
					styles = styles.split(";");
					for(var j = 0; j < styles.length; j++) styles[j] = MoreCSSObject.trim(styles[j]);

					// Start DOM search
					MoreCSSObject.searchInDOM(selectors, styles, document.getElementsByTagName("body")[0], 0, pseudoClass, targetElement);
					
					// Prepare global vars
					lastSelector = "";
					elementNumber = 0;
				}
			}

			// Search in DOM
			MoreCSS.searchInDOM = function(selectors, styles, element, selector, pseudoClass, targetElement) {
				if(typeof selectors != "object") selectors = new Array(selectors);
				if(selectors[selector] == "body") execCSSstyles(selectors, styles, document.getElementsByTagName("body")[0], selector, pseudoClass, targetElement);
				
				switch(selectors[selector].slice(0, 1)) {
					case "." : // If selector is class-name
						for(var i = 0; i < element.getElementsByTagName("*").length; i++) {
							if(MoreCSSObject.classOrIDexists(element.getElementsByTagName("*")[i].className, selectors[selector].slice(1)))
								execCSSstyles(selectors, styles, element.getElementsByTagName("*")[i], selector, pseudoClass, targetElement);
							if(selector == selectors.length - 1 && pseudoClass == "every-second-child") i++;
						}
						break;
					case "#" : // If selector is ID
						execCSSstyles(selectors, styles, document.getElementById(selectors[selector].slice(1)), selector, pseudoClass, targetElement);
						break;
					default : // If selector is tag-name
						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(MoreCSSObject.classOrIDexists(element.getElementsByTagName(tagName)[i].className, selectors[selector].slice(selectors[selector].indexOf(".") + 1)))
									execCSSstyles(selectors, styles, element.getElementsByTagName(tagName)[i], selector, pseudoClass, targetElement);
								if(selector == selectors.length - 1 && pseudoClass == "every-second-child") i++;
							}
						}
						
						if(selectors[selector].indexOf("#") > -1)
							execCSSstyles(selectors, styles, document.getElementById(selectors[selector].slice(selectors[selector].indexOf("#") + 1)), selector, pseudoClass, targetElement);
						
						for(var i = 0; i < element.getElementsByTagName(selectors[selector]).length; i++) {
							if(selector == selectors.length - 1 && pseudoClass == "every-second-child") i++;
							if(pseudoClass == "last-child" && i + 1 < element.getElementsByTagName(selectors[selector]).length) continue; else
								execCSSstyles(selectors, styles, element.getElementsByTagName(selectors[selector])[i], selector, pseudoClass, targetElement);
							if(pseudoClass == "first-child") break;
						}
				}
			};

			// Apply styles
			var lastSelector; var elementNumber = 0;
			function execCSSstyles(selectors, styles, element, selector, pseudoClass, targetElement) {
				if(!element) return;
				if(selector + 1 < selectors.length)	MoreCSSObject.searchInDOM(selectors, styles, element, selector + 1, pseudoClass, targetElement);
					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 "select" : 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] = MoreCSSObject.functionNames[styles[i].slice(0, styles[i].indexOf(":"))];
								functionParameter[i] = MoreCSSObject.trim(styles[i].slice(styles[i].indexOf(":") + 1), "quotes");
							}
						}
						
						// Apply all style definitions to the element
						function applyStyles() {
							if(targetElement != "none") {
								MoreCSSObject.searchInDOM(targetElement.split(" "), styles, document.getElementsByTagName("body")[0], 0, "none", "none");
							} else {
								for(var i = 0; i < functionName.length; i++) {
									if(functionName[i]) MoreCSSObject[functionName[i]] (element, styles, functionParameter[i], pseudoClass);
								}
							}
						}
						
						// Prepare special styles
						for(var i = 0; i < functionName.length; i++) {
							if(MoreCSSObject.prepareFunctions[functionName[i]]) MoreCSSObject[MoreCSSObject.prepareFunctions[functionName[i]]] (element, styles, functionParameter[i], pseudoClass, "prepare");
						}
						
						if(pseudoClass == false) {
							(time == 0) ? applyStyles() : window.setTimeout(applyStyles, time);
						} else {
							element.addEventListener ? element.addEventListener(pseudoClass, applyStyles, false) : element.attachEvent("on" + pseudoClass, applyStyles);
						}
					}
			}
}) ();