/**
 * Flash Replacement
 */

function htmlFlashReplace(htmlNode, nodeXML, swfUrl, bgUrl, width, height) {
	nodeXML = encodeURI(nodeXML).replace(/&/g, "%26");

	var replaceDivId = "flash-"+htmlNode.id;
	var replaceDiv = document.createElement("div");
	replaceDiv.setAttribute("id", replaceDivId);
	replaceDiv.style.height = height + "px";
	replaceDiv.className = "flashreplace";
	htmlNode.parentNode.replaceChild(replaceDiv, htmlNode);

	var so = new SWFObject(swfUrl, replaceDivId+"flash", width, height, "7", "#FFFFFF");
	so.addVariable("menu", nodeXML);
	so.addVariable("bg", bgUrl);
	if(!so.write(replaceDivId)) {
		//alert("Hm, das konnte ich nicht ersetzen...");
		replaceDiv.parentNode.replaceChild(htmlNode, replaceDiv);
	}

};


function replaceSpecialNav() {
	if (!document.getElementById || !document.getElementsByTagName) return;

	var additional = document.getElementById("additionalnav");
	var ps = additional.childNodes;

	for (var i = 0; i < ps.length; i++) {
		if (!ps[i].tagName || ps[i].tagName.toUpperCase() != "P") continue;

		var actNode = ps[i];

		var hint = "";
		if (actNode.firstChild.childNodes.length > 1) {
			var hintNode = actNode.firstChild.childNodes[1].firstChild;

			hint = actNode.firstChild.childNodes.length > 1 ? " hint=\""+hintNode.nodeValue+
					/* €-Preis beim Warenkorb gesondert fett übergeben */
					(hintNode.nextSibling ? " &lt;b&gt;"+hintNode.nextSibling.firstChild.nodeValue+"&lt;b&gt;" : "")
					+"\"" : "";
		}

		var label = actNode.firstChild.firstChild.nodeValue.replace(/"/g, "&quot;");
		var nodeXML = "<menu-structure><menu url=\""+actNode.firstChild.href+"\" label=\""+label+"\""+hint+
						(actNode.className.match(/\bactive\b/i) ? " active=\"true\"" : "")+"/></menu-structure>";



		if (!actNode.id) actNode.id = "additional-nav-"+i;

		var swfHeight = (actNode.id == "clients") ? "25" : "50";
		htmlFlashReplace(actNode, nodeXML, "swf/additional.swf", "images/layout/additional-bg.jpg", "199", swfHeight);
	}

};

function MenuReplacement() {
	this.replace = function() {
		if (!document.getElementById || !document.getElementsByTagName) return;

		// Elternelement und Menüliste selbst finden
		var menu = document.getElementById("navigation");
		var menuList = menu.getElementsByTagName("ul")[0];
		menuList.id = "navigation-ul";

		var menuXML = "<menu-structure>"+formatMenuRecursive(menuList)+"</menu-structure>";

		htmlFlashReplace(menuList, menuXML, "swf/menue.swf", "images/layout/nav-bg.jpg", "170", "980");
	};


	function formatMenuRecursive(ul) {
		if (!ul) return;
		var lis = ul.childNodes;
		if (lis.length == 0) return;

		var xmlStr = "";
		for (var i = 0; i < lis.length; i++) {
			if (lis[i].tagName && lis[i].tagName.toUpperCase() == "LI") {
				if (!lis[i].firstChild || !lis[i].firstChild.href || !lis[i].firstChild.firstChild || !lis[i].firstChild.firstChild.nodeValue) continue;

				var label = lis[i].firstChild.firstChild.nodeValue.replace(/"/g, "&quot;");
				xmlStr+= "<menu url=\""+lis[i].firstChild.href+"\" label=\""+label+"\""+
						(lis[i].className.match(/\bactive\b/i) ? " active=\"true\"" : "")+">";


				subMenu = formatMenuRecursive(lis[i].getElementsByTagName("ul")[0]);
				if (subMenu) xmlStr+= subMenu;
				xmlStr+= "</menu>";
			}
		}

		return xmlStr;
	};


}


/**
 * /Flash Replacement
 */










/**
 * Image Hover-Effect
 */
function HoverImages() {
	function initHoverEffect (img) {
		var hoverImage = new Image();
		hoverImage.src = img.src.substring(0, img.src.length-4)+"-over"+img.src.substring(img.src.length-4);
		var outImageSrc = img.src;
		img.onmouseover = function() {
			//alert("gehovert: "+this.src);
			if (hoverImage.complete) {
				this.src = hoverImage.src;
			}
		};
		img.onmouseout = function() {
			this.src = outImageSrc;//img.src.substring(0, img.src.length-9)+img.src.substring(img.src.length-4);
		};
	};

	this.hover = function (img) {
		if (img && img.src) {
			initHoverEffect(img);
		} else if(img.length > 0) {
			for (var i = 0; i < img.length; i++) {
				initHoverEffect(img[i]);
			}
		}

	};
}





function initImageInputs() {
	if (!document.getElementsByTagName) return;

	// prepare hover images for input-type images
	var inputs = document.getElementsByTagName("input");
	var hoverImages = new HoverImages();

	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].type == "image") {
			hoverImages.hover(inputs[i]);
		}
	}
}




function initProductList() {
	if (!document.getElementById || !document.getElementsByTagName) return;

	var productList = document.getElementById("productlist");
	if (!productList) return;
	var productLinks = productList.getElementsByTagName("a");
	if (!productLinks) return;

	for (var i = productLinks.length - 1; i >= 0; i--) {
		//alert(productLinks[i].href);

		initProductLink(productLinks[i]);

	}
}

function initSearchResultList()
{
	if (!document.getElementById || !document.getElementsByTagName) return;

	var productList = document.getElementById("productlistsearch");
	if (!productList) return;
	var productLinks = productList.getElementsByTagName("a");
	if (!productLinks) return;

	for (var i = productLinks.length - 1; i >= 0; i--) {

		initProductLink(productLinks[i]);

	}
}


function initProductLink(aObj) {
	var imgs = aObj.getElementsByTagName("img"); // das ist das Produktbild und die Textersetzung!
	if (!imgs || imgs.length < 2) return;

	//var textImage = imgs[0];
	var textImage = new Image();
	textImage.src = imgs[0].src;
	var textOverImage = new Image();
	textOverImage.src = textImage.src.replace(/%20a%20/, "%20a%3Ahover%20");

	//var productImage = imgs[1];
	var productImage = new Image();
	productImage.src = imgs[1].src;
	var productOverImage = new Image();
	productOverImage.src = productImage.src.replace(/\.png/, "-over.png");

	aObj.onmouseover = function() {
		imgs[0].onload = function() { // Blitzer unterdrücken
			aObj.style.background = "#f00";
		};
		imgs[0].src = textOverImage.src;
		imgs[1].src = productOverImage.src;
	};
	aObj.onmouseout = function() {
		imgs[0].onload = function() { // Blitzer unterdrücken
			aObj.style.background = "#333";
		};
		imgs[0].src = textImage.src;
		imgs[1].src = productImage.src;
	};
}

/**
 * /Image Hover-Effect
 */





function initMiniSearch() {
	if(!document.getElementById) return;
	var queryInput = document.getElementById("query");
	if (!queryInput) return;

	var initValue = queryInput.value;

	queryInput.onfocus = function () {
		if (this.value == initValue) this.value = "";
	};
	queryInput.onblur = function () {
		if (this.value == "") this.value = initValue;
	};

}
















var textImageReplacement = new TextImageReplacement();

PageEvent.addEventListener(PageEvent.MENU_LOADED, function() {
	var menuReplacement = new MenuReplacement();
	menuReplacement.replace();
});

PageEvent.addEventListener(PageEvent.CONTENT_LOADED, function() {
	var slideshow = new Slideshow();
	slideshow.init();

	textImageReplacement.replaceText("th.searchtecdata", false);
	textImageReplacement.replaceText("a span.searchimage", false);
	textImageReplacement.replaceText("h1", false/*, {height: 18}*/);
	textImageReplacement.replaceText("#content h2", true/*, {height: 33}*/);
	textImageReplacement.replaceText("#content h2 a", true);
	textImageReplacement.replaceText("#contact-form li.submit label", false/*, {height: 18}*/);
	textImageReplacement.replaceText("#productlist a span", false);
	textImageReplacement.replaceText("#productlist thead th", false);
	textImageReplacement.replaceText("thead th", false);
	textImageReplacement.replaceText("tfoot label", false);
	textImageReplacement.replaceText("#productlistsearch a span", false);
	textImageReplacement.replaceText("label#searchsubmit", false);
});

PageEvent.addEventListener(PageEvent.ADDITIONALNAV_LOADED, function() {
	textImageReplacement.replaceText("#mini-search label", false);

	replaceSpecialNav();
	initMiniSearch();
});

PageEvent.addEventListener(PageEvent.DOM_LOADED, function() {
	textImageReplacement.replaceText("#sideteaser h2", false);

	initImageInputs();
});

PageEvent.addEventListener(PageEvent.WINDOW_LOADED, function() {
	initProductList();
	initSearchResultList();
});


















/*
	Finds elements on page that match a given CSS selector rule. Some
	complicated rules are not compatible.
	Based on Simon Willison's excellent "getElementsBySelector" function.
	Original code (with comments and description):
		http://simon.incutio.com/archive/2003/03/25/getElementsBySelector
*/
function getElementsBySelector(selector)
{
	var tokens = selector.split(' ');
	var currentContext = new Array(document);
	for(var i=0;i<tokens.length;i++)
	{
		token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');
		if(token.indexOf('#') > -1)
		{
			var bits = token.split('#');
			var tagName = bits[0];
			var id = bits[1];
			var element = document.getElementById(id);
			/**
			 * The following four lines are inserted by Johannes Agricola <deaggi@deaggi.net>
			 * to prevent a javscript console to report an error
			 */
			if (element == null)
				return new Array();
				
			if(tagName && element.nodeName.toLowerCase() != tagName)
				return new Array();
			currentContext = new Array(element);
			continue;
		}

		if(token.indexOf('.') > -1)
		{
			var bits = token.split('.');
			var tagName = bits[0];
			var className = bits[1];
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				if (!currentContext[h]) continue;
				var elements;
				if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b')))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
	    }

		if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/))
		{
			var tagName = RegExp.$1;
			var attrName = RegExp.$2;
			var attrOperator = RegExp.$3;
			var attrValue = RegExp.$4;
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
	        	if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			var checkFunction;
			switch(attrOperator)
			{
				case '=':
					checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
					break;
				case '~':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
					break;
				case '|':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
					break;
				case '^':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
					break;
				case '$':
					checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
					break;
				case '*':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
					break;
				default :
					checkFunction = function(e) { return e.getAttribute(attrName); };
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(checkFunction(found[k]))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
		}

		tagName = token;
		var found = new Array;
		var foundCount = 0;
		for(var h=0;h<currentContext.length;h++)
		{
			if (!currentContext[h]) continue;
			var elements = currentContext[h].getElementsByTagName(tagName);
			for(var j=0;j<elements.length; j++)
				found[foundCount++] = elements[j];
		}

		currentContext = found;
	}

	return currentContext;
}

















var Validate = {
    form: function(element, msg) {
        form_break = true;
        var inputs = new Array;
        input = element.getElementsByTagName('input');

        texta = element.getElementsByTagName('TEXTAREA');

        for (var i=0; i<input.length; i++) inputs.push(input[i]);
        for (i=0; i<texta.length; i++) inputs.push(texta[i]);

        for (var i=inputs.length - 1; i >= 0; i--) {
            if (inputs[i].className.match(/required/)) {
                if (inputs[i].value.length == 0) {
                    form_break = false;
                    inputs[i].style.border = "1px solid red";
                    inputs[i].focus();
                    // here, you probably want
                    // to have some clever way
                    // of notifying that the field
                    // is invalid.
                    }
                else { inputs[i].style.border = ''; }
            }
            if (this.valid[inputs[i].className]) {
                if (!this.valid[inputs[i].className].exec(inputs[i].value)) {
                  inputs[i].style.backgroundColor = '#f00';
                  form_break = false;
                } else inputs[i].style.backgroundColor = '';
            }
        }
		if (!form_break && msg) alert(msg);
        return form_break;
    },
    katalogform: function (element, msg, kmsg)
    {
	if (!this.form(element, msg))
		return false;
    	var inputs = new Array;
        input = element.getElementsByTagName('input');
        for (var i=0; i<input.length; i++) inputs.push(input[i]);

	var foundone = false;

        for (var i=inputs.length - 1; i >= 0; i--) {
            if (inputs[i].className.match(/atleastone/)) {
                if (inputs[i].checked) {
			foundone = true;
                }
            }
        }
	if (!foundone)
	{
		alert(kmsg);
		return false;
	}
	return true;
    },
    valid: {
        phone: /^\D*\d{3}\D*\d{3}\D*\d{4}$/,
        date: /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/,
        phoneNumberInternational: /^\d(\d|-){7,20}/,
        email: /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/,
        time: /^([1-9]|1[0-2]):[0-5]\d$/,
        zipCode: /\d{5}(-\d{4})?/
    }
};

