
// Reducing duplication of information and chances of typos for complicated
// links, particularly those used in more than one place.
// That's the logical reason - it's also me having fun with JavaScript :)
var spanProcessor = function() {
	function createTrackingImg(src) {
		var img = createElement("img");
		img.setAttribute("src", src);
		img.setAttribute("width", "1");
		img.setAttribute("height", "1");
		img.setAttribute("alt", "");
		img.setAttribute("style", "border-style: none; margin: 0px; padding: 0px;");
		return img;
	};
	function processMap(map) {
		var spans, span, spanClass, replacement, images, imgSrc, img;
		spans = document.getElementsByTagName("span"); // a NodeList
		images = {};
		for (var i = 0, n = spans.length; i < n; i++) {
			span = spans.item(i); // a Node
			// getAttribute("class") doesn't work in IE so we use .className
			spanClass = span.className;
			if (spanClass) {
				if (map[spanClass]) {
					replacement = map[spanClass](span);
					if (replacement) {
						span.parentNode.replaceChild(replacement, span);
						if (replacement.trackingImgSrc && 
								!images[replacement.trackingImgSrc]) {
							images[replacement.trackingImgSrc] = true;
						}
					}
				}
			}
		}
		for (imgSrc in images) {
			if (typeof(imgSrc) === 'string' && images[imgSrc] === true) {
				img = new Image();
				img.src = imgSrc;
			}
		}
	};
	// public functions below
	return {
		createLink: function(span, href, tracking, title, inNewWindow, trackingImgSrc) {
			var link = createElement("a");
			link.setAttribute("href", href);
			link.setAttribute("title", title);
			link.onclick = function() {
				trackPageview(tracking);
			};
			if (inNewWindow) {
				link.setAttribute("target", "_blank");
			}
			if (arguments.length > 5 && trackingImgSrc != null) {
				link.trackingImgSrc = trackingImgSrc;
			}
			link.appendChild(span.cloneNode(true));
			return link;
		},
		addTrackingImg: function(span, src) {
			var img = createTrackingImg(src);
			span.appendChild(img);
			return img;
		},
		processMapFile: function(code) {
			document.write('<sc' + 'ript src="' + 'll-' + code + '.js' +
				'" type="text/javascript" charset="utf-8"></sc' + 'ript>');
			addOnDOMLoadedFunction(function() {
				var map = eval(code.replace(/-/g, ""));
				processMap(map);
				//eval("spanProcessor.processMap(" + code.replace(/-/g, "") + ")");
			});
		}
	};
}();

