/*********   OBFUSCAPERY   *******
********************************
* Version 1.10                 *
* (c)2011 Lilaea Media LLC     *
********************************
****************************************************************************/


/***** PUT ME IN YOUR JS INCLUDE FOLDER AND POINT THE HTML SCRIPT SRC TAG AT ME ****/
$(document).ready(function(e) {	
	$(document).mousemove(isHuman); // requires a mouse move to load email address
});

function isHuman(e) { // handles mouse move event, assumes must be human
	$(document).unbind('mousemove'); // unbind mouse event
	var descriptor = '#set_o'; // change this 
	var hex = $(descriptor).text();
	if (hex != '' && hex != null) {
		var res;
		$.ajax({ // post back to php to get decrypt key and count
		/*EDIT ME* CHANGE URL TO THE ACTUAL LOCATION OF THIS INCLUDE ON YOUR SERVER vvv**/
			url: jsRoot + 'inc/obfuscapery.inc.php',
		/*EDIT ME* CHANGE URL TO THE ACTUAL LOCATION OF THIS INCLUDE ON YOUR SERVER ^^^**/
			data: { 
				token: hex
			}, // pass token
			type: 'POST', // only works on post data
			error: function() { 
				return; 
			}, // bail on error
			success: function(response) { // get params 
				res = response;
			},
			complete: function() { // gracefully replace each link with mailto link
				var dec = xor_dec(res, document.location.host).split("\t"); // host must match to decode
				var secret = dec.shift();
				var count = dec.shift();
				var prefix = dec.shift();
				for (e = 0; e < count; e++) {
					var email = $('#' + prefix + e).text(); // get encrypted email address from div
					if (email != '' && email != null) {
						var selector = '#mailto_' + e;
						email = xor_dec(email, secret).split("\t");
						swapMailTo(selector, email[1]);
					}
				}
			}
		});
	}
}

function swapMailTo(selector, email) 
{
	/*EDIT ME* MODIFY THIS OUTPUT TO SUIT YOUR NEEDS vvv**/
	var mailto = '<a href="mailto:' + email + '">' + email + '</a>'; // customize this
	/*EDIT ME* MODIFY THIS OUTPUT TO SUIT YOUR NEEDS ^^^**/
	$(selector).fadeOut('slow', function(e) { $(this).html(mailto).fadeIn('slow'); } );
}

function xor_dec(hex, key)
{
	if (hex.length == 0 || key.length == 0) return; // verify input exists
 	while (key.length < hex.length) key += key; // pad key to >= hex
	var string = ''; // initialize result string
 	for(p = 0; p < hex.length; p += 2) 
	{ // iterate through input string two chars at a time
		var h = hex.charAt(p) + hex.charAt(p + 1); // get next two hex chars
		var b = parseInt(h, 16); // convert to decimal
		var k = key.charCodeAt(p / 2); // get ascii value of corresponding key
		var c = String.fromCharCode(b ^ k); // get ascii char from xor bitwise conversion
		string += c; // add to result string
	}
	return string;
}

