

var FontReplacer = {

	_url:  'http://research.rencap.com/ImageCreator/ImageGenerate.ashx?font=[font]&textRenderingHint=[textRenderingHint]&text=[text]&height=[height]&color=[color]&bcolor=[bcolor]&size=[size]',
	_enableTransparency: true,
	_forceHeight: true,
	_forceWidth: false,

	replace: function(tag, className, font, textRenderingHint) {
		this.replaceIn(document, tag, className, font, textRenderingHint);
	},

	replaceIn: function(root, tag, className, font, textRenderingHint) {
		var elements = this.getElementsByClassName(root, tag, className);
		this.replaceElements(elements, font, textRenderingHint);
	},

	replaceElements: function(elements, font, textRenderingHint) {
		//return;

		for (var i=0; i<elements.length; i++) {
			var el = elements[i];

			// only handle text nodes
			if (el.firstChild.nodeType != 3) 
			    continue;			 

			// get attributes of elements                    
			var color = this.getStyle(el, 'color');
			var bcolor = this.getStyle(el, 'backgroundColor');
			var height = this.getStyle(el, 'height');
			var width = this.getStyle(el, 'width');
			var size = this.getStyle(el, 'fontSize');
			
			var text1 = el.getAttribute("p1");
			var text2 = el.getAttribute("p2");
			var text3 = el.getAttribute("p3");
			var text4 = el.getAttribute("p4");
			
			var text = text1 + text3 + "@" + text4 + text2;

			if (color.indexOf('rgb') != -1) 
				color = this.cssRgb2Hex(color);

			if (bcolor == 'transparent' && !this._enableTransparency)
				bcolor = '';

			if (bcolor.indexOf('rgb') != -1) 
				bcolor = this.cssRgb2Hex(bcolor);  
			
			color = color.replace('#','');
			bcolor = bcolor.replace('#','');
			

			// create image for replacement
			var url = this._url.replace('[text]',text).replace('[textRenderingHint]',textRenderingHint).replace('[font]',font).replace('[bcolor]',bcolor).replace('[color]',color).replace('[size]',size);
			if (this._forceWidth)
			    url = url.replace('[width]',width);
			if (this._forceHeight)
			    url = url.replace('[height]',height);
			   
			var img = new Image();           
			img.border = 0;
			img.src = url;
			img.alt = text;
			
			var lnk = document.createElement("A");
			lnk.href = "mailto:"+text;
			
			el.parentNode.replaceChild(lnk, el);  
			lnk.appendChild(img);
		}
	},

	// this doesn't always work for font sizes, so we're using it for colors mostly
	getStyle: function(el, prop) {
		if (document.defaultView && document.defaultView.getComputedStyle) {
			return document.defaultView.getComputedStyle(el, null)[prop];
		} else if (el.currentStyle) {
			return el.currentStyle[prop];
		} else {
			return el.style[prop];
		}
	},

	cssRgb2Hex: function(color)
	{
		var c = color.replace('rgb(','').replace(')','').split(',');
		return this.rbg2hex(parseInt(c[0]), parseInt(c[1]), parseInt(c[2]));
	},

	rbg2hex: function(red, green, blue)
	{
		var r = red.toString(16);
		var g = green.toString(16);
		var b = blue.toString(16);
						  
		var c =             
		( (r.toString().length == 1) ? '0' : '') + r +
		( (g.toString().length == 1) ? '0' : '') + g + 
		( (b.toString().length == 1) ? '0' : '') + b;
			   
		return c;
	},   

	// credit: http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
	getElementsByClassName: function(oElm, strTagName, strClassName){
		var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		strClassName = strClassName.replace(/\-/g, "\\-");
		var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
		var oElement;
		for(var i=0; i<arrElements.length; i++){
			oElement = arrElements[i];
			if(oRegExp.test(oElement.className)){
				arrReturnElements.push(oElement);
			}
		}
		return (arrReturnElements)
	}
};

