Свернуть ↑
(function(w) {
if (w.fast

M) return;
var handlers = {};
var onEnvLoad = [];
var env = {};
// Key generation
function genKey() {
var key = '';
for (var i = 0; i < 5; i++) {
key += Math.ceil(Math.random() * 15).toString(16);
}
return key;
}
function waitFor(obj, prop, func, self, count) {
if (obj[prop]) {
func.apply(self);
} else {
count = count || 0;
if (count < 1000) {
setTimeout(function() {
waitFor(obj, prop, func, self, count + 1);
}, 0);
}
}
}
function attachScript(url) {
setTimeout(function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = url || w.fast

M.helperUrl;
waitFor(document, 'body', function() {
document.getElementsByTagName('HEAD')[0].appendChild(newScript);
});
}, 0);
}
function walkVar(value, clean) {
var newValue;
switch (typeof value) {
case 'string':
if (clean) {
newValue = value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
} else {
newValue = value.replace(/'/g, '\'').replace(/"/g, '"').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&');
}
break;
case 'object':
if (Object.prototype.toString.apply(value) === '[object Array]') {
newValue = [];
for (var i = 0, len = value.length; i < len; i++) {
newValue[i] = walkVar(value[i], clean);
}
} else {
newValue = {};
for (var k in value) {
if (Object.hasOwnProperty.call(value, k)) {
newValue[k] = walkVar(value[k], clean);
}
}
}
break;
default:
newValue = value;
break;
}
return newValue;
}
// Env functions
function getEnv(callback, self) {
if (env.loaded) {
callback.apply(self, [env]);
} else {
onEnvLoad.push([self, callback]);
}
}
function envLoaded() {
env.loaded = true;
for (var i = 0, len = onEnvLoad.length; i < len; i++) {
onEnvLoad[i][1].apply(onEnvLoad[i][0], [env]);
}
}
function applyMethod(strData, self) {
getEnv(function(env) {
var data = env.json.parse(strData);
if (data[0]) {
if (!data[1]) data[1] = [];
for (var i = 0, len = data[1].length; i < len; i++) {
if (data[1][i] && data[1][i]._func) {
var funcNum = data[1][i]._func;
data[1][i] = function() {
var args = Array.prototype.slice.call(arguments);
args.unshift('_func' + funcNum);
self.callMethod.apply(self, args);
}
} else if (self.options.safe) {
data[1][i] = walkVar(data[1][i], true);
}
}
setTimeout(function() {
if (!self.methods[data[0]]) {
throw Error('fast

M: Method ' + data[0] + ' is undefined');
}
self.methods[data[0]].apply(self, data[1]);
}, 0);
}
});
}
function extend(obj1, obj2) {
for (var i in obj2) {
if (obj1[i] && typeof(obj1[i]) === 'object') {
extend(obj1[i], obj2[i])
} else {
obj1[i] = obj2[i];
}
}
}