
/**
 * 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, "scripts/additional.swf", "stockimages/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, "scripts/menue.swf", "stockimages/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 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();
	
	textSrcPrep = textImage.src.replace(/(.*)(php\?text=)(.*)(&selector)(.*)/, "$3");
	textSrcPrep = textSrcPrep.replace(/\//, "__");
	textSrcPrep = "words/span_" + textSrcPrep.replace(/\%20/g, " ") + "-over.gif";
	
	textOverImage.src = textSrcPrep;
//	textOverImage.src = textImage.src.replace(/\.gif/, "-over.gif");
		// DIAGNOSTIC
		//alert("TextImg = " + textImage.src );
		//http://www.mbmcorp.com/test/words/image.php?text=MISCELLANEOUS&selector=%23productlist%20a%20span
		// grab php?text=(.*)&selector ---    (/(.*)(php\?text=)(.*)(&selector)(.*)/, "$3")
		// trim "php?text=" and "&selector"

	//var productImage = imgs[1];
	var productImage = new Image();
	productImage.src = imgs[1].src; // change to zero as first image now product image
	var productOverImage = new Image();
	productOverImage.src = productImage.src.replace(/\.jpg/, "-over.jpg");
 
	aObj.onmouseover = function() {
		//alert(textOverImage.src);
		//alert("Hi there");
/*
imgs[0].onload = function() { // Blitzer unterdrŸcken
			aObj.style.background = "#f00";
		};
*/
		//alert("TextOver = " + textOverImage.src + " \n ProductOver = " + productOverImage.src);
		imgs[0].src = textOverImage.src;

		imgs[1].src = productOverImage.src;   // change to zero as first image now product image
	};
	aObj.onmouseout = function() {
/*
		imgs[0].onload = function() { // Blitzer unterdrŸcken
			aObj.style.background = "#333";
		};
*/
		imgs[0].src = textImage.src;

		imgs[1].src = productImage.src;  // change to zero as first image now product image
	};
}
 
/**
 * /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", true );
	textImageReplacement.replaceText("#content h2", true );
	textImageReplacement.replaceText("#content h2 a", true);
	//textImageReplacement.replaceText("#contact-form li.submit label", false );
	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);
	//////textImageReplacement.replaceText("#search label", false);
 
	replaceSpecialNav();
	initMiniSearch();
});
 
PageEvent.addEventListener(PageEvent.DOM_LOADED, function() {
	textImageReplacement.replaceText("#sideteaser h2", true);
 
	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})?/
    }
};
