function com_stewartspeak_replacement() {


/*


	Dynamic Heading Generator


    By Stewart Rosenberger


    http://www.stewartspeak.com/headings/





	This script searches through a web page for specific or general elements


	and replaces them with dynamically generated images, in conjunction with


	a server-side script.


*/








replaceSelector("h5","heading.php",true);


replaceSelector("h4","heading2.php",true);


var testURL = "pixel_trans.gif" ;





var doNotPrintImages = false;


var printerCSS = "replacement-print.css";





var hideFlicker = false;


var hideFlickerCSS = "replacement-screen.css";


var hideFlickerTimeout = 1000;














/* ---------------------------------------------------------------------------


    For basic usage, you should not need to edit anything below this comment.


    If you need to further customize this script's abilities, make sure


	you're familiar with Javascript. And grab a soda or something.


*/





var items;


var imageLoaded = false;


var documentLoaded = false;





function replaceSelector(selector,url,wordwrap)


{


	if(typeof items == "undefined")


		items = new Array();





	items[items.length] = {selector: selector, url: url, wordwrap: wordwrap};


}





if(hideFlicker)


{		


	document.write('<link id="hide-flicker" rel="stylesheet" media="screen" href="' + hideFlickerCSS + '" />');		


	window.flickerCheck = function()


	{


		if(!imageLoaded)


			setStyleSheetState('hide-flicker',false);


	};


	setTimeout('window.flickerCheck();',hideFlickerTimeout)


}





if(doNotPrintImages)


	document.write('<link id="print-text" rel="stylesheet" media="print" href="' + printerCSS + '" />');





var test = new Image();


test.onload = function() { imageLoaded = true; if(documentLoaded) replacement(); };


test.src = testURL + "?date=" + (new Date()).getTime();





addLoadHandler(function(){ documentLoaded = true; if(imageLoaded) replacement(); });








function documentLoad()


{


	documentLoaded = true;


	if(imageLoaded)


		replacement();


}





function replacement()


{


	for(var i=0;i<items.length;i++)


	{


		var elements = getElementsBySelector(items[i].selector);


		if(elements.length > 0) for(var j=0;j<elements.length;j++)


		{


			if(!elements[j])


				continue ;


		


			var text = extractText(elements[j]);


    		while(elements[j].hasChildNodes())


				elements[j].removeChild(elements[j].firstChild);





			var tokens = items[i].wordwrap ? text.split(' ') : [text] ;


			for(var k=0;k<tokens.length;k++)


			{


				var url = items[i].url + "?text="+escape(tokens[k]+' ')+"&selector="+escape(items[i].selector);


				var image = document.createElement("img");


				image.className = "replacement";


				image.alt = tokens[k] ;


				image.src = url;


				elements[j].appendChild(image);


			}





			if(doNotPrintImages)


			{


				var span = document.createElement("span");


				span.style.display = 'none';


				span.className = "print-text";


				span.appendChild(document.createTextNode(text));


				elements[j].appendChild(span);


			}


		}


	}





	if(hideFlicker)


		setStyleSheetState('hide-flicker',false);


}





function addLoadHandler(handler)


{


	if(window.addEventListener)


	{


		window.addEventListener("load",handler,false);


	}


	else if(window.attachEvent)


	{


		window.attachEvent("onload",handler);


	}


	else if(window.onload)


	{


		var oldHandler = window.onload;


		window.onload = function piggyback()


		{


			oldHandler();


			handler();


		};


	}


	else


	{


		window.onload = handler;


	}


}





function setStyleSheetState(id,enabled) 


{


	var sheet = document.getElementById(id);


	if(sheet)


		sheet.disabled = (!enabled);


}





function extractText(element)


{


	if(typeof element == "string")


		return element;


	else if(typeof element == "undefined")


		return element;


	else if(element.innerText)


		return element.innerText;





	var text = "";


	var kids = element.childNodes;


	for(var i=0;i<kids.length;i++)


	{


		if(kids[i].nodeType == 1)


		text += extractText(kids[i]);


		else if(kids[i].nodeType == 3)


		text += kids[i].nodeValue;


	}





	return text;


}





/*


	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);


			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++)


			{


				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++)


		{


			var elements = currentContext[h].getElementsByTagName(tagName);


			for(var j=0;j<elements.length; j++)


				found[foundCount++] = elements[j];


		}





		currentContext = found;


	}





	return currentContext;


}








}// end of scope, execute code


if(document.createElement && document.getElementsByTagName && !navigator.userAgent.match(/opera\/?6/i))


	com_stewartspeak_replacement(); 



