
function TextImageReplacement() {
	
	// baseURL aus dem HTML-Dokument auslesen
/*	var baseURL      = document.getElementsByTagName("base")[0].href || "/";
	var imageURL     = baseURL+"images/text-replacement/image.php";
	var hideFlicker  = false;//baseURL+"images/text-replacement/replacement-screen.css";
	var testImageURL = baseURL+"images/text-replacement/test.png"; */
	var imageURL     = "words/image.php";
	var hideFlicker  = false;//"images/text-replacement/replacement-screen.css";
	var testImageURL = "words/test.gif";
	
	//alert ("hi there");
	// 
	var imagesActive = false;
	var replacements = new Array();
	
	// flicker verstecken
	if(hideFlicker) {
		// dieses Stylesheet hat die gleichen Selektoren, wie die zu ersetzenden Elemente
		document.write('<link id="hide-flicker" rel="stylesheet" media="screen" href="' + hideFlicker + '" />');		
	}
	
	var testImage = new Image();
	//alert ( ' testimage ' );
	testImage.onload = function() {
		imagesActive = true;
		//alert ("imagesActive: " + imagesActive);
		// ersetze ggf. angefallene Replacements
		replacement();
	};
	testImage.src = testImageURL + "?date=" + (new Date()).getTime();
	
	
	
	
	
	
	this.replaceText = function (selector, wordwrap, imgAttributes) {
		replacements[replacements.length] = {selector: selector, wordwrap: wordwrap, imgAttributes: imgAttributes};
		//alert (imagesActive);
		if (imagesActive) {
			//alert ("HEEELLP!");
			replacement();
		}
	};
	
	// ersetzt alle derzeit offenen Replacement-Regeln
	function replacement() {
		// Kopie der replacements und dann die Replacements leeren...
		var items = replacements.slice(0);
		replacements = new Array();
		//alert("noch "+items.length+" Regeln ausfŸrhen");
		
		
		for(var i=0; i<items.length; i++) {
			//alert("Regel "+i+": "+items[i].selector);
			var elements = getElementsBySelector(items[i].selector);
			//alert(items[i].selector +" -> "+elements.length);
			if (elements.length == 0) continue;
			
			for(var j=0; j < elements.length; j++) {
				if(!elements[j]) {
					//alert("elements["+j+"] gibt es nicht!?");
					continue;
				}
				
				var kids = elements[j].childNodes;
				
				
				for (var k=0; k < kids.length; k++) {
					if(kids[k].nodeType == 3) {
						
						//alert(kids[k].nodeValue);
						var text = kids[k].nodeValue.replace(/^\s*/g,"");
						if (!text) continue; // leeren Text nicht ersetzen!
						
						var words = items[i].wordwrap ? text.split(" ") : [text];
						
						//alert(words[0]);
						
						var image = document.createElement("img");
						image.className = "replacement";
						image.alt = words[0];
						image.src = imageURL + "?text="+escape(words[0].replace(/\+/, "%2B")+(words.length != 1 ? " " : ""))+"&selector="+escape(items[i].selector);
						
						
						for (var key in items[i].imgAttributes) {
							image[key] = items[i].imgAttributes[key];
						}
						
						//elements[j].appendChild(image);
						kids[k].parentNode.replaceChild(image, kids[k]);
						//kids[k].innerHTML = "<img src=\""+url+"\" />";
						for (var l = words.length - 1; l > 0; l--) {
							var word = words[l].replace(/^\s*/g,"")
							var nextImage = document.createElement("img");
							nextImage.className = "replacement";
							nextImage.alt = word;
							for (var key in items[i].imgAttributes) {
								nextImage[key] = items[i].imgAttributes[key];
							}
							
							if (word.length == 0) word = " ";
							nextImage.src = imageURL + "?text="+escape(word.replace(/\+/, "%2B")+(l != words.length - 1 ? " " : ""))+"&selector="+escape(items[i].selector);
							
							//diagnostic
							//alert (nextImage.src);
							
							image.parentNode.insertBefore(nextImage, image.nextSibling);
						}
					}
				}
				
				//time to dump the testdumpvar
				
				// flicker entfernen
				elements[j].style.visibility = "visible"; 
			}
		}
	}
}

