Собственно, приветствую всех. Задали нам задачку, дан скрипт, нужно осмысленно объяснить его работу. Вроде кусочно что то могу объснить, а суть всего скрипта не ясна. Как не ломала голову, ну никак, даже тут пыталась отрабатывать скрипт
http://jsfiddle.net/, а что то никак. Сам скрипт
window._$0 = window._$0 || {
__ : []
}
;
_$0.Loader = function (obj){
_$0.__$0 = function (data){
data = _$0.unescpe(data);
_$0.data = _$0.data || {
}
;
if (typeof _$0.data.ads !== 'undefined'){
_$0.data.ads = _$0.data.ads.concat(data.ads)
}
else {
_$0.data = data
}
if (_$0.data.frameUrl){
var a = document.createElement('iframe');
a.setAttribute('src', _$0.data.frameUrl);
a.style.cssText = 'width:0px; height:0px; overflow:hidden; border:none;';
document.getElementsByTagName('body')[0].appendChild(a)
}
for (var i = 0, l = _$0.data.ads.length; i < l; i += 1){
var fName = _$0._.versions[_$0.data.ads[i].format];
if (fName){
_$0.Loader.instance.load(_$0._.scriptsDomain + fName)
}
}
var i = setInterval(function (){
if (typeof _$0.Common !== "undefined"){
new _$0.Common();
clearInterval(i)
}
}
, 100);
setTimeout(function (){
clearInterval(i)
}
, 2000)
}
;
_$0.unescpe = function (input){
return eval('(' + _$0.unescped(input) + ')')
}
;
_$0.utf8Decode = function (bytes){
var chars = [], offset = 0, length = bytes.length, c, c2, c3;
while (offset < length){
c = bytes[offset];
c2 = bytes[offset + 1];
c3 = bytes[offset + 2];
if (128 > c){
chars.push(String.fromCharCode(c));
offset += 1
}
else if (191 < c && c < 224){
chars.push(String.fromCharCode(((c & 31) << 6) | (c2 & 63)));
offset += 2
}
else {
chars.push(String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)));
offset += 3
}
}
return chars.join('')
}
;
_$0.utf8Encode = function (string){
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n ++ ){
var c = string.charCodeAt(n);
if (c < 128){
utftext += String.fromCharCode(c)
}
else if ((c > 127) && (c < 2048)){
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128)
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128)
}
}
return utftext
}
;
_$0.chrTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
_$0.pad = '=';
_$0.toescaped = function (input, r){
var output = "", out = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
r &= 255;
input = _$0.utf8Encode(input);
for (var j = 0; j < input.length; out += String.fromCharCode(r ^ input.charCodeAt(j)),
j ++ ){
}
input = out;
while (i < input.length){
chr1 = input.charCodeAt(i ++ );
chr2 = input.charCodeAt(i ++ );
chr3 = input.charCodeAt(i ++ );
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)){
enc3 = enc4 = 64
}
else if (isNaN(chr3)){
enc4 = 64
}
output = output + _$0.chrTable.charAt(enc1) + _$0.chrTable.charAt(enc2) + _$0.
chrTable.charAt(enc3) + _$0.chrTable.charAt(enc4)
}
return output
}
;
_$0.toescapeduri = function (uri){
if (_$0.preview){
return uri
}
var r = ( + new Date()) % 1000000;
return "/?" + r + "=" + _$0.toescaped(uri.replace("/?", ""), r)
}
;
_$0.unescped = function (data){
data = data.replace(/[\-]/g, "+").replace(/[_]/g, "/");
var binTable = [ - 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1
,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1
,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1, 62 ,- 1 ,- 1 ,- 1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61 ,- 1 ,- 1 ,- 1, 0 ,- 1 ,- 1 ,- 1, 0, 1, 2, 3, 4
, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ,- 1 ,-
1 ,- 1 ,- 1 ,- 1 ,- 1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1];
var value, code, idx = 0, bytes = [], leftbits = 0, leftdata = 0;
for (idx = 0; idx < data.length; idx ++ ){
code = data.charCodeAt(idx);
value = binTable[code & 0x7F];
if ( - 1 === value){
console.log("Illegal characters (code=" + code + ") in position " + idx)
}
else {
leftdata = (leftdata << 6) | value;
leftbits += 6;
if (leftbits >= 8){
leftbits -= 8;
if (_$0.pad !== data.charAt(idx)){
bytes.push((leftdata >> leftbits) & 0xFF)
}
leftdata &= (1 << leftbits) - 1
}
}
}
return _$0.utf8Decode(bytes)
}
;
if (navigator.cookieEnabled){
return this .init.call(this , arguments)
}
}
;
_$0.Loader.prototype = {
init : function (){
this .applyParams();
var json = document.createElement('script');
var u = _$0._.rtUri.pop();
json.src = _$0._.rotatorDomain + _$0.toescapeduri(u + this ._getReferer(u) + this .
_getResolution());
document.body.appendChild(json);
this .load(_$0._.scriptsDomain + _$0._.versions['common'])
}
, applyParams : function (){
var c = _$0.unescpe(_$0.__.pop());
if (_$0._){
_$0._.rtUri.push(c.rtUri)
}
else {
_$0._ = c;
_$0._.rtUri = [_$0._.rtUri]
}
if (_$0._.ukDomain && _$0._.ukUri){
var img = document.createElement('img');
img.src = _$0._.ukDomain + _$0.toescapeduri(_$0._.ukUri);
img.style.cssText = "width:1px;height:1px;position:absolute;left:-10000px;";
document.body.appendChild(img)
}
}
, load : function (url){
var scripts = document.getElementsByTagName('script'), count = 0;
for (var i = 0, l = scripts.length; i < l; i += 1){
if (scripts[i].src == url){
count++;
break
}
}
if (count == 0){
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script)
}
}
, _getResolution : function (){
var height = 0, width = 0;
if (self.screen){
width = screen.width;
height = screen.height
}
else {
if (self.java){
var jkit = java.awt.Toolkit.getDefaultToolkit();
var scrsize = jkit.getScreenSize();
width = scrsize.width;
height = scrsize.height
}
}
return '&width=' + width + '&height=' + height
}
, _getReferer : function (u){
if (document.referrer && u.indexOf('&ref=') ==- 1){
return '&ref=' + encodeURIComponent(document.referrer)
}
return ''
}
, _findRival : function (){
return false
}
}
;
_$0.__.push('тут массив кодированный base64');
Собственно, прошу так скзать дать наводку, что делает скрипт, объясните пожалуйста каждую подпрограмму, если нетрудно.