/**
* by koder_alex
* @type {{setTick, clearTick, setTime, stopTick}}
*/
var Tick = function () {
var IDTimers = [];
var IDCallFuncTick = [];
var IDCallFuncTime = [];
var Time = 5e3;
var t = function iv() {
var t = {
i: -1,
change: function (e) {
if (!t.isSupported()) return !1;
t.i += 1;
var n = t.i;
return t._callbacks[n] = e, t._listen(), n
}, hidden: function () {
return !(!t._doc.hidden && !t._doc.webkitHidden)
}, state: function () {
return t._doc.visibilityState || t._doc.webkitVisibilityState || "visible"
}, isSupported: function () {
return !(!t._doc.visibilityState && !t._doc.webkitVisibilityState)
}, _doc: document || {},
_callbacks: {}, _change: function (e) {
var i = t.state();
for (var n in t._callbacks) t._callbacks[n].call(t._doc, e, i)
}, _listen: function () {
if (!t._init) {
var e = "visibilitychange";
t._doc.webkitVisibilityState && (e = "webkit" + e);
var i = function () {
t._change.apply(t, arguments)
};
t._doc.addEventListener ? t._doc.addEventListener(e, i) : t._doc.attachEvent(e, i), t._init = !0
}
}, _timers: {}, _time: function () {
t._timed || (t._timed = !0, t._wasHidden = t.hidden(), t.change(function () {
t._stopRun(), t._wasHidden = t.hidden()
}))
}, _run: function (i, n) {
var r, d = t._timers[i];
if (t.hidden()) {
if (null === d.hidden) return;
r = d.hidden
} else r = d.visible;
var a = function () {
d.last = new Date, d.callback.apply(null, d.args)
};
if (n) {
var o = new Date, c = o - d.last;
r > c ? d.delay = setTimeout(function () {
d.id = setInterval(a, r), a()
}, r - c) : (d.id = setInterval(a, r), a())
} else d.id = setInterval(a, r)
}, _stop: function (e) {
var i = t._timers[e];
clearInterval(i.id), clearTimeout(i.delay), delete i.id, delete i.delay
}, _stopRun: function (e) {
var i = t.hidden(), n = t._wasHidden;
if (i && !n || !i && n) for (var r in t._timers) t._stop(r), t._run(r, !i)
}
};
return {
every: function ev(e, n, r, args) {
t._time(), r || (r = n, n = null), t.i += 1;
var d = t.i;
return t._timers[d] = {
visible: e,
hidden: n,
callback: r,
args: args
}, t._run(d, !1), t.isSupported() && t._listen(), d
}, stop: function st(e) {
return !!t._timers[e] && (t._stop(e), delete t._timers[e], !0)
}
}
}();
return {
setTick: function (func) {
var r = Array.prototype.slice.call(arguments);
r.shift();
if ((typeof func).toLowerCase() != 'function') {
return false;
}
var key = func.name;
if (key == undefined || key == '') {
return false;
}
if (IDCallFuncTick[key] == undefined) {
IDCallFuncTime[key] = Time;
Time = 5e3;
var idT = t.every( IDCallFuncTime[key], null, func, r);
if (typeof idT != 'undefined') {
IDTimers.push(idT);
IDCallFuncTick[key] = idT;
return true;
}
}
return false;
},clearTick: function () {
for (var i = 0; i < IDTimers.length; i++) {
t.stop(IDTimers[i]);
}
IDTimers = [];
IDCallFuncTick = [];
IDCallFuncTime = [];
}, setTime: function (t) {
Time = t;
return true;
}, getTime: function (e) {
if (IDCallFuncTime[e] === undefined)
return Time;
return IDCallFuncTime[e];
}, stopTick: function (e) {
if (IDCallFuncTick[e] === undefined)
return false;
t.stop(IDCallFuncTick[e]);
IDTimers.splice(IDTimers.indexOf(IDCallFuncTick[e]), 1);
delete IDCallFuncTick[e];
delete IDCallFuncTime[e];
return true;
}
}
}();