// --------------------------------------------------------------------------------
// ow_emails.js
// Travis Musika
// Contains functionality to de-obfuscate emails.
// --------------------------------------------------------------------------------
///<reference path="ow_util.js">

OneWeb.Email = {

	// --------------------------------------------------------------------------------
	// processEmailText()
	"processEmailText": function (elem, account, domain) {
		/// <summary>replace the domain names in the text content with the email address.</summary>
		/// <param name="elem">element to deobfuscate [object]</param>
		/// <param name="account">email account name [string]</param>
		/// <param name="domain">email domain [string]</param>
		/// <returns>void</returns>
		if (elem.hasChildNodes()) {
			var re = new RegExp("(^|\\s)" + domain.replace(".", "\\."), "ig");
			for (var i=0; i<elem.childNodes.length;i++) {
				switch(elem.childNodes[i].nodeType) {
					case 1:	// elements - recursively process
						OneWeb.Email.processEmailText(elem.childNodes[i], account, domain);
						break;
					case 3:	// text
						if (elem.childNodes[i].nodeValue.match(re)) {
							// match found against the domain name
							elem.replaceChild(document.createTextNode(elem.childNodes[i].nodeValue.replace(re, "$1" + account + "@" + domain)), elem.childNodes[i]);
						}
						break;
						
					case 4:	// CDATA
						if (elem.childNodes[i].nodeValue.match(re)) {
							// match found against the domain name
							elem.replaceChild(document.createCDATASection(elem.childNodes[i].nodeValue.replace(re, "$1" + account + "@" + domain)), elem.childNodes[i]);
						}
						break;
					default:					
				}
			}
		}
	},

	// --------------------------------------------------------------------------------
	// processEmails()
	"processEmails" : function () {
		/// <summary>Find all obfuscated emails and deobfuscate them for the browser.</summary>
		/// <returns>void</returns>
		var mailto = OneWeb.Util.getElementsByClassName("ow_mailto", "a");
		
		for (var i = mailto.length - 1; i >= 0; i--) {
			var m = mailto[i];

			var p = m.parentNode;
			var editor = false;
			while (p) {
				if (p.id)
					if (p.id.indexOf("radEditorContainer") == 0) {
						editor = true;
						break;
					}
				p = p.parentNode;
			}

			if (!editor) {
				if (m.getAttribute("prefix")) {
					var href = m.href;
					m.href = (m.href).replace(":", ":" + m.getAttribute("prefix") + "@");
					if (m.childNodes.length > 0) {
						href = href.substr(href.indexOf(":")+1);
						if (href.indexOf("?") != -1) href = href.substr(0, href.indexOf("?"));
						OneWeb.Email.processEmailText(m, m.getAttribute("prefix"), href);
					}
				}
			}
		}

	}
};

/// --------------------------------------------------------------------------------
/// add the process method to the OneWeb initializers
OneWeb.Util.appendInitEvent(OneWeb.Email.processEmails);
/* 6.0.3887 */ 

