function z(el) { return document.getElementById(el); } var sxd = { version: {num: 20007, type: 'lite', full: ''}, init: function () { var icons = { ' .lb': '0 -80px', ' .rb': '-2px -80px', ' .mb': '-4px -80px', '.ovr': '0 -20px', '.ovr .lb': '0 -100px', '.ovr .rb': '-2px -100px', '.ovr .mb': '-4px -100px', '.ovr .arr': '0 -40px', '.dwn': '0 -20px', '.dwn .lb': '0 -100px', '.dwn .rb': '-2px -120px', '.dwn .mb': '-4px -120px', '.dwn .arr': '0 -60px' }; for (var ico in icons) { this.css.add('.zSel' + ico + ' {background-position:' + icons[ico] + ';}'); } this.version.full = z('header').innerHTML; this.main = z('main_div'); this.menu.el = z('sxdMenu'); this.name = z('name').lastChild; this.loading = z('loading'); this.overlay = z('overlay'); this.progress.current = zProgressObject(); this.progress.current.init('sxdProc1', 1); this.progress.total = zProgressObject(); this.progress.total.init('sxdProc2', 2); this.tbar = zToolbarObject(); this.tree.backup = zTreeObject(); this.tree.backup.init('backup_tree', 1); this.tree.restore = zTreeObject(); this.tree.restore.init('restore_tree', 2); this.tree.services = zTreeObject(); this.tree.services.init('services_tree', 3); this.comment.backup = z('backup_comment'); this.comment.restore = z('restore_comment'); this.timer.t1 = z('sxdTime1'); this.timer.t2 = z('sxdTime2'); this.timeout = null; this.log = zGridObject(); this.log.init('sxdGrid1', {header: [[this.lng('dt'), 120], [this.lng('action')]], width: 565, height: 286}); this.files = zGridObject(); this.files.init('sxdGrid2', { header: [[this.lng('db'), 90], [this.lng('dt'), 90], [this.lng('type'), 30], [this.lng('tab'), 30, 1, this.lng('table')], [this.lng('records'), 60, 1], [this.lng('size'), 45, 1], [this.lng('comment')]], width: 565, height: 334 }); this.result = zGridObject(); this.result.init('sxdGrid3', { header: [['Table', 160], ['Op', 70], ['Msg_type', 50], ['Msg_text']], width: 565, height: 334 }); this.addDialogs(['connect', 'createdb', 'savejob', 'charsets']); this.addTabs(['backup', 'restore', 'log', 'result', 'files', 'services', 'options']); }, job: {name: 'abcdefgh', stop: 0, log_seek: 0, type: ''}, menu: {el: null, type: 'zSelMenu'}, tabs: {}, openTab: function (name) { if (this.opened)this.tabs[this.opened].el.style.display = 'none'; this.opened = name; this.name.innerHTML = this.tabs[name].name; this.tabs[name].el.style.display = ''; document.title = sxd.version.full; }, addTabs: function (o) { for (var i = 0, l = o.length; i < l; i++) { this.tabs[o[i]] = {name: this.lng(o[i]), el: z('tab_' + o[i])}; } this.openTab(o[0]); }, dialogs: {}, addDialogs: function (o) { for (var i = 0, l = o.length; i < l; i++) { this.dialogs[o[i]] = z('dia_' + o[i]); } }, tbar: {}, tree: {}, options: {}, progress: {}, combos: {}, comment: {}, lng: function (s) { return sxdlng[s] ? sxdlng[s] : '[LNG: ' + s + ']'; }, timer: { set: function (time1, time2, proc) { function lead0(i) { return i < 10 ? '0' + i : i; } function sec2time(sec) { return lead0(Math.floor(sec / 60)) + ':' + lead0(sec % 60); } if (!time1 && !time2)this.t1.innerHTML = '00:00', this.t2.innerHTML = '00:00'; else { var t = time2 - time1; this.t1.innerHTML = sec2time(t); this.t2.innerHTML = sec2time(t > 0 && proc > 0 ? Math.round(t / (proc / 100) - t) : 0); } } }, actions: { db: function () { if (!this.value)return; if (this.name == 'backup_db' || this.name == 'services_db')sxd.ajax('index', sxd.lng('load'), { act: 'load_db', name: this.name, value: this.value }); }, dblist: function () { sxd.ajax('index', sxd.lng('load'), {act: 'dblist'}); }, filelist: function () { sxd.ajax('index', sxd.lng('load'), {act: 'filelist'}); }, files: function () { if (!this.value)return; sxd.ajax('index', sxd.lng('load'), {act: 'load_files', name: this.name, value: this.value}); }, tab_connects: function () { sxd.ajax('index', sxd.lng('load'), {act: 'load_connect'}); sxd.showDialog('connect'); }, tab_createdb: function () { sxd.showDialog('createdb'); }, tab_backup: function () { sxd.openTab('backup'); if (sxd.tree.backup.load)sxd.combos.backup_db.action(); }, tab_restore: function () { sxd.openTab('restore'); if (sxd.tree.restore.load)sxd.combos.restore_file.action(); }, tab_files: function () { sxd.ajax('index', sxd.lng('load'), {act: 'load_files_ext'}); sxd.openTab('files'); }, tab_services: function () { sxd.openTab('services'); if (sxd.tree.services.load)sxd.combos.services_db.action(); }, tab_options: function () { sxd.ajax('index', sxd.lng('load'), {act: 'load_options'}); sxd.openTab('options'); }, tab_exit: function () { sxd.ajax('index', sxd.lng('load'), {act: 'exit'}); } }, informer: function () { if (sxd.job.timer)clearTimeout(sxd.job.timer); if (sxd.job.stop)return; sxd.job.timer = setTimeout(function () { sxd.ajax('info', sxd.lng('run'), {job: sxd.job.name, act: 'info', lseek: sxd.job.log_seek}, 1, function () { sxd.informer(); }); }, 250); }, addDb: function () { sxd.ajax('index', this.lng('sdb'), { act: 'add_db', name: z('db_name').value, charset: this.combos.db_charset.value, collate: this.combos.db_charset_col.value }); sxd.hideDialog('createdb'); }, saveConnect: function () { sxd.ajax('index', this.lng('sc'), { act: 'save_connect', host: z('con_host').value, port: z('con_port').value, user: z('con_user').value, pass: z('con_pass').changed ? z('con_pass').value : null, comp: z('con_comp').checked ? '1' : '0', db: z('con_db').value }); sxd.hideDialog('connect'); z('con_pass').value = ''; }, job2php: function () { return sxd.opened == 'restore' || sxd.job.type == 'restore' ? { act: 'restore', type: 'restore', db: this.combos.restore_db.value, charset: this.combos.restore_charset.value, file: this.combos.restore_file.value, strategy: this.combos.restore_type.value, correct: z('correct').checked ? 1 : 0, autoinc: z('autoinc').checked ? 1 : 0, obj: this.tree.restore.save() } : { act: 'backup', type: 'backup', db: this.combos.backup_db.value, charset: this.combos.backup_charset.value, zip: this.combos.backup_zip.value, comment: this.comment.backup.value, del_time: z('del_time').value, del_count: z('del_count').value, obj: this.tree.backup.save() }; }, saveJob: function () { var t = this.job2php(); t.job = z('sj_name').value, t.act = 'save_job', t.title = z('sj_title').value; sxd.ajax('index', this.lng('sj'), t); sxd.hideDialog('savejob'); }, runSavedJob: function (type, job) { if (job == 0)return; this.clearLogTab(); sxd.job.name = job; sxd.job.type = type; sxd.job.act = 'run_savedjob'; sxd.ajax('index', this.lng('run'), {act: 'run_savedjob', type: type, job: job}, 1); this.openTab('log'); z('btn_resume').style.display = 'none'; z('btn_pause').style.display = ''; z('btn_stop').disabled = false; z('btn_pause').disabled = false; z('btn_again').disabled = true; sxd.job.stop = 0; sxd.informer(); }, saveOptions: function () { sxd.confirms = z('conf_import').checked * 1 + z('conf_file').checked * 2 + z('conf_db').checked * 4; sxd.ajax('index', this.lng('so'), { act: 'save_options', time_web: z('time_web').value * 1, time_cron: z('time_cron').value * 1, backup_path: z('backup_path').value, backup_url: z('backup_url').value, globstat: z('globstat').checked ? '1' : '0', charsets: z('charsets').value, only_create: z('only_create').value, auth: z('auth').value, confirm: sxd.confirms }); sxd.hideDialog('connect'); z('con_pass').value = ''; }, clearLogTab: function () { this.log.clear(); this.timer.set(0); this.job.log_seek = 0; this.progress.current.set(0); this.progress.total.set(0); }, runBackup: function () { this.clearLogTab(); z('btn_resume').style.display = 'none'; z('btn_pause').style.display = ''; z('btn_down').style.display = 'none'; z('btn_stop').disabled = false; z('btn_pause').disabled = false; z('btn_again').disabled = true; sxd.job.name = this.newJob(); sxd.job.type = 'backup'; var t = this.job2php(); this.openTab('log'); t.type = 'run', t.job = sxd.job.name; this.ajax('index', this.lng('run'), t, 1); sxd.job.stop = 0; sxd.informer(); }, stopJob: function () { z('btn_again').disabled = false; z('btn_stop').disabled = true; z('btn_pause').disabled = true; sxd.ajax('info', this.lng('run'), {job: sxd.job.name, act: 'stop'}, 1); }, pauseJob: function () { z('btn_again').disabled = false; z('btn_stop').disabled = true; z('btn_pause').disabled = true; sxd.ajax('info', this.lng('run'), {job: sxd.job.name, act: 'pause'}, 1); z('btn_resume').style.display = ''; z('btn_pause').style.display = 'none'; }, resumeJob: function () { z('btn_stop').disabled = false; z('btn_pause').disabled = false; z('btn_again').disabled = true; sxd.ajax('index', this.lng('run'), {job: sxd.job.name, act: 'resume'}, 1); z('btn_resume').style.display = 'none'; z('btn_pause').style.display = ''; sxd.job.stop = 0; sxd.informer(); }, runAgain: function () { if (sxd.job.act == 'run_savedjob') { sxd.runSavedJob(sxd.job.type, sxd.job.name); } else if (sxd.job.type == 'backup') { sxd.runBackup(); } else if (sxd.job.type == 'restore') { sxd.runRestore(); } }, runRestore: function () { if (sxd.confirms & 1 && !confirm(sxd.lng('fic')))return; this.clearLogTab(); z('btn_resume').style.display = 'none'; z('btn_pause').style.display = ''; z('btn_down').style.display = 'none'; z('btn_stop').disabled = false; z('btn_pause').disabled = false; z('btn_again').disabled = true; sxd.job.name = this.newJob(); sxd.job.type = 'restore'; var t = this.job2php(); this.openTab('log'); t.type = 'run', t.job = sxd.job.name; this.ajax('index', this.lng('run'), t, 1); sxd.job.stop = 0; sxd.informer(); }, runServices: function (type) { switch (type) { case'delete': if (sxd.confirms & 4 && !confirm(sxd.lng('ddc')))return; sxd.ajax('index', sxd.lng('run'), {act: 'delete_db', name: this.combos.services_db.value}); return; } this.result.clear(); this.openTab('result'); this.ajax('index', this.lng('run'), { act: 'services', type: type, db: this.combos.services_db.value, check: this.combos.services_check.value, repair: this.combos.services_repair.value, obj: this.tree.services.save() }); }, runFiles: function (type, file) { file = file || this.files.selected.file; switch (type) { case'open': sxd.combos.restore_file.select(file); sxd.openTab('restore'); break; case'download': location.href = sxd.backupUrl + file; break; case'delete': if (!file)return; if (sxd.confirms & 2 && !confirm(sxd.lng('fdc')))return; sxd.ajax('index', sxd.lng('run'), {act: 'delete_file', name: file}); sxd.actions.filelist(); break; } }, ajax: function (url, txt, req, nothide, onload) { function obj2php(obj, depth) { var s = ''; depth = depth || ''; for (var o in obj) { s += typeof obj[o] == 'object' ? obj2php(obj[o], depth + '[' + o + ']') : 'ajax' + depth + '[' + o + ']=' + encodeURIComponent(obj[o]) + '&'; } return s; } this.showLoading(txt); url += '.php'; var params = obj2php(req); var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : null); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); var t = this; function oncomplete() { if (xhr && xhr.readyState == 4) { if (xhr.status == 200) { eval(xhr.responseText); } else { alert(xhr.statusText); } if (onload)onload(); xhr = null; clearInterval(iv); iv = null; if (!nothide)t.hideLoading(); } } var iv = setInterval(oncomplete, 33); xhr.send(params); }, css: { add: function (rule, index) { var s = document.styleSheets[0]; if (!index)index = s.cssRules ? s.cssRules.length : s.rules.length; if (s.addRule) { if (/^([^{]+)\{(.*)\}\s*$/.test(rule)) { s.addRule(RegExp.$1, RegExp.$2, index); } } else { s.insertRule(rule, index); } }, swap: function (elem, classes, sel) { var tmp = elem.className.split(/\s+/); for (var t in tmp) { for (var c in classes) { if (tmp[t] == classes[c]) { tmp[t] = classes[sel]; break; } } } elem.className = tmp.join(' '); } }, showDialog: function (name) { this.overlay.style.display = 'block'; var d = this.dialogs[name]; d.style.display = 'block'; d.style.marginTop = '-' + Math.round(d.clientHeight / 2 - 2) + 'px'; d.getElementsByTagName('input')[0].focus(); }, hideDialog: function (name) { this.dialogs[name].style.display = 'none'; this.overlay.style.display = 'none'; }, addCombo: function (name, value, ico, opts) { this.combos[name] = {ico: ico || 0, el: z(name)}; var c = this.combos[name]; var t; if (typeof opts == 'object') { opts = this.addOpt(opts); } else if (t = /^(\w+):(\w+)$/.exec(opts)) { var tmp = {}; if (this.combos[t[2]].options.length > 0)tmp[opts] = this.combos[t[2]].options[this.combos[t[2]].sel].opts; else tmp[opts] = []; value = this.addOpt(tmp, 1); this.combos[t[2]].child = c; } else { var t = {}; t[opts] = {}; opts = this.addOpt(t); } c.options = this.options[opts]; c.optName = opts; c.name = name; c.parent = this; c.el.className = 'zSel'; c.el.innerHTML = '
'; c.action = function () { }; c.select = function (value, wheel) { this.sel *= 1; if (this.options == undefined)return false; if (value == '+') { this.sel += this.sel < this.options.length - 1 ? 1 : 0; } else if (value == '-') { this.sel -= this.sel > 0 ? 1 : 0; } else { this.sel = 0; for (var i in this.options)if (this.options[i].value == value) { this.sel = i; break; } } if (wheel) { this.parent.menu.el.style.display = 'none'; document.body.onclick = null; } this.value = this.options[this.sel] ? this.options[this.sel].value : 0; this.text = this.options[this.sel] ? this.options[this.sel].text : ''; this.el.childNodes[1].innerHTML = this.text; if (this.child) { this.parent.clearOpt(this.child.optName); var tmp = {}; tmp[this.child.optName] = this.options[this.sel].opts; this.child.select(this.parent.addOpt(tmp, 1), 0); } var _this = this; if (wheel) { clearTimeout(sxd.timeout); sxd.timeout = setTimeout(function () { _this.action(); }, 333); } else this.action(); }; c.select(value, 0); c.action = this.actions[opts] || function () { }; c.show = function () { if (!c.el.disabled)_this.showMenu(c, c.options, {}); }; var _this = this; c.el.onmouseover = function (e) { e = e || window.event; if (!c.el.disabled)c.el.className = 'zSel ovr'; }; c.el.onmousewheel = function (e) { e = e || window.event; var s = e.wheelDelta > 0 ? '-' : '+'; if (!c.el.disabled)c.select(s, 1); }; if (c.el.addEventListener)c.el.addEventListener('DOMMouseScroll', function (e) { e.wheelDelta = -e.detail; c.el.onmousewheel(e); }, false); c.el.onmouseout = function (e) { c.el.className = 'zSel'; }; c.el.onmousedown = function (e) { e = e || window.event; if (!c.el.disabled) { if (_this.menu.el.style.display != 'none' && _this.menu.el.obj.name == c.name) { _this.menu.el.style.display = 'none'; c.el.className = 'zSel ovr'; } else { c.el.className = 'zSel dwn'; c.show(); } } if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; }; }, addOpt: function (options, txt) { txt = txt || 0; var def = ''; for (var o in options) { if (!this.options[o]) { this.options[o] = []; } for (var i in options[o]) { if (typeof options[o][i] == 'object') this.options[o].push({text: i, value: i * 1 == i ? i * 1 : i, opts: options[o][i]}); else { if (txt && options[o][i])def = i; this.options[o].push({text: txt ? i : options[o][i], value: i * 1 == i ? i * 1 : i}); } } this.options[o] = this.options[o].sort(this.keyNatSort); } return txt ? def : o; }, clearOpt: function (name) { if (name) { if (this.options[name])this.options[name].length = 0; } else for (var o in this.options)this.options[o].length = 0; }, showMenu: function (obj, opts, cfg) { var s = '', m = this.menu.el; m.className = 'zSelMenu'; m.innerHTML = '
'; for (var o in opts) { s = document.createElement('DIV'); s.innerHTML = opts[o].text; s.title = s.firstChild.nodeValue || ''; if (o == obj.sel) { s.className = 'ovr'; m.over = s; } s.value = opts[o].value; s.onmouseover = function () { if (m.over)m.over.className = ''; this.className = 'ovr'; m.over = this; }; s.onmousedown = function () { if (cfg.runjob)sxd.runSavedJob(m.obj.com, this.value); else if (cfg.btn)sxd.runServices(this.value); else m.obj.select(this.value, 0); m.style.display = 'none'; }; m.firstChild.appendChild(s); } m.style.display = 'block'; var pos = this.offset(obj.el); m.style.width = (cfg.width ? cfg.width : obj.el.offsetWidth - 4) + 'px'; var height = (m.firstChild.offsetHeight < 260 ? m.firstChild.offsetHeight : 260); m.style.height = height + 'px'; m.style.top = pos.top - (cfg.btn ? height + obj.el.offsetHeight + 2 : 0) + 'px'; m.style.left = pos.left + 'px'; m.scrollTop = m.over ? m.over.offsetTop : 0; m.obj = obj; m.onmousedown = function (e) { e = e || window.event; if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; }; document.body.onmousedown = function () { m.style.display = 'none'; document.body.onclick = null; }; }, offset: function (el) { var top = el.offsetTop + el.offsetHeight + 1, left = el.offsetLeft + 2; while ((el = el.offsetParent))top += el.offsetTop - el.scrollTop, left += el.offsetLeft - el.scrollLeft; return {top: top, left: left}; }, keyNatSort: function (a, b) { var aa, bb; a = a.value, b = b.value; while ((aa = /^(\D+|(\d+))(.*?)$/.exec(a)) && (bb = /^(\D+|(\d+))(.*?)$/.exec(b))) { if (aa[2] && bb[2] && aa[2] != bb[2])return aa[2] * 1 > bb[2] * 1 ? 1 : -1; else if (aa[1] && bb[1] && aa[1] != bb[1])return aa[1] > bb[1] ? 1 : -1; else if (aa[3] && bb[3] && aa[3] != bb[3])a = aa[3], b = bb[3]; else return 0; } }, formatSize: function (size, add) { add = add || 0; if (size >= 0) { var i = 0; while (size > 999 && (size /= 1024))i++; size = (i > 0 ? size.toPrecision(3) : size) + ' ' + sxdlng.sizes[i]; if (add == 2)return size; else if (add == 1)return ' [ ' + size + ' ]'; return '[ ' + size + ' ]'; } return ''; }, showLoading: function (txt) { this.loading.innerHTML = txt; this.loading.style.visibility = 'visible'; }, hideLoading: function () { this.loading.style.visibility = 'hidden'; sxd.job.stop = 1; z('btn_stop').disabled = true; z('btn_pause').disabled = true; z('btn_again').disabled = false; }, newJob: function () { var key = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'; var name = ''; for (var i = 0; i < 8; i++)name += key.charAt(Math.round(Math.random() * 61)); return name; } }; function zTreeObject() { return { init: function (elem, num) { this.el = z(elem); this.name = elem; this.prefix = 'zti_' + num + '_'; this.id = '#' + elem; this.index = []; this.data = []; this.load = true; this.err = false; var _this = this; this.el.className = 'zTree'; this.el.onselectstart = function () { return false; }; this.el.onclick = function (e) { e = e || window.event; var t = e.target || e.srcElement; switch (t.tagName.toUpperCase()) { case'I': if (t.className == 'pm') { _this.openBranch(_this.getId(t)); } else if (t.className.match(/^cb[0124]$/)) { _this.clickBranch(_this.getId(t)); } break; case'A': _this.clickBranch(_this.getId(t)); if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; break; } if (t.parentNode.tagName.toUpperCase() == 'A') { _this.clickBranch(_this.getId(t)); } return false; }; this.el.onmousedown = function (e) { e = e || window.event; var t = e.target || e.srcElement; if (t.tagName.toUpperCase() == 'A' || t.parentNode.tagName.toUpperCase() == 'A') { return false; } }; var treeIcons = ['li.df > div', 'li.dt > div', 'li.dl > div', '.close .pm', '.pm', '.cb0', '.cb1', '.cb2', '.cb3', '.cb4']; for (var ico in treeIcons) { sxd.css.add('.zTree ' + treeIcons[ico] + ' {background-position: 0 -' + (ico * 18) + 'px;}'); } var Icons = ['.cTA', '.cVI', '.cPR', '.cFU', '.cTR', '.cEV', '.iTA', '.iVI', '.iPR', '.iFU', '.iTR', '.iEV']; for (ico in Icons) { sxd.css.add('.zTree ' + Icons[ico] + ' {background-position: 0 -' + (ico * 16) + 'px;}'); } }, getId: function (o) { while (!o.parentNode.id && (o = o.parentNode)) { } return o.parentNode.id.replace(this.prefix, '') * 1; }, openBranch: function (id) { var o = this.index[id]; o.open = (o.open + 1) % 2; sxd.css.swap(o.el, ['close', 'open'], o.open); }, clickBranch: function (id) { if (sxd.version.type == 'lite' && this.name == 'restore_tree') { alert(sxd.lng('pro')); return false; } var o = this.index[id]; if (o.checked == 3) { return false; } this.setCheckBox(id, o.checked == 4 ? 1 : (o.checked + 1) % (o.type.match(/^.TA$/) ? 3 : 2)); this.changeChilds(o); this.checkParents(o); }, setCheckBox: function (id, check) { check = (this.index[id].typen == 2 && check == 1 && this.index[id].size == undefined) ? 2 : check; this.index[id].checked = check; this.index[id].el.firstChild.childNodes[1].className = 'cb' + check; }, changeChilds: function (o) { if (o.childs) { for (var c in o.childs) { this.setCheckBox(o.childs[c].id, o.checked); this.changeChilds(o.childs[c]); } } }, checkParents: function (o) { var check; while (o.pid > 0) { o = this.index[o.pid]; check = -1; for (var c in o.childs) { if (check >= 0 && check != o.childs[c].checked) { check = 4; break; } check = o.childs[c].checked; } this.setCheckBox(o.id, check); } if (o.id == 1) { this.recountSizes(o); } }, drawTree: function (d) { this.load = this.err = false; if (typeof(d) != 'object')return false; var index = [''], data = []; var types = ['', 'cTA', 'iTA', 'cVI', 'iVI', 'cPR', 'iPR', 'cFU', 'iFU', 'cTR', 'iTR', 'cEV', 'iEV']; for (var k = 0, l = d.length; k < l; k++) { o = {}; o.id = d[k][0]; o.pid = d[k][1]; o.parent = index[o.pid]; o.name = d[k][2]; o.type = types[d[k][3]]; o.typen = d[k][3]; o.checked = d[k][4] || 0; if (d[k][3] < 3)o.size = d[k][3] == 2 ? d[k][5] : 0; if (d[k][3] & 1)o.childs = [], o.open = d[k][5] || 0; index[o.id] = o; if (o.pid > 0)index[o.pid].childs.push(o); else data.push(o); } this.lastId = 0; this.el.innerHTML = this.drawChilds(data, 0); for (k = 1, l = index.length; k < l; k++) { if (!index[k])continue; o = z(this.prefix + index[k].id); index[k].el = o; } this.data = data; this.index = index; }, recountSizes: function (o) { if (!o.childs) { return 0; } var size = 0; for (var k in o.childs) { size += this.recountSizes(o.childs[k]); if (o.childs[k].type == 'iTA' && o.childs[k].checked == 1) { size += o.childs[k].size || 0; } } o.el.getElementsByTagName('span')[0].innerHTML = sxd.formatSize(size, 0); return size; }, drawChilds: function (aChilds, pid) { if (aChilds.length == 0)return ''; var sTree = ''; }, save: function () { if (this.err)return null; var data = this.data; var saved = {TA: [], TC: [], VI: [], PR: [], FU: [], TR: [], EV: []}; var o, c, tc; for (var i1 = 0, l1 = data.length; i1 < l1; i1++) { o = data[i1]; if (o.checked == 4) { for (var i2 = 0, l2 = o.childs.length; i2 < l2; i2++) { c = o.childs[i2]; if (c.checked == 4) { for (var i3 = 0, l3 = c.childs.length; i3 < l3; i3++) { tc = c.childs[i3]; if (tc.checked == 1)saved['TA'].push(tc.name); else if (tc.checked == 2)saved['TC'].push(tc.name); } } else if (c.checked == 1)saved[c.type.substr(1, 2)].push(c.name); else if (c.checked == 2)saved['TC'].push(c.name); } } else if (o.checked == 1)saved[o.type.substr(1, 2)].push('*'); else if (o.checked == 2)saved['TC'].push('*'); } return saved; }, error: function (str) { str = str || 'Empty'; this.err = true; this.el.innerHTML = '
' + str + '
'; } }; } function zToolbarObject() { return { init: function (elem, buttons) { this.el = z(elem); this.name = elem; this.id = '#' + elem; this.el.className = 'zTBar'; this.buttons = buttons; this.curBtn = {id: 0, more: 0, pop: 0, el: null, com: null}; var _this = this; this.el.onmouseover = function (e) { if (_this.curBtn.pop)return; if (_this.getId(e || window.event)) { _this.curBtn.el.className = 'btn ovr'; } }; this.el.onmouseout = function (e) { if (_this.curBtn.pop)return; if (_this.getId(e || window.event)) { _this.curBtn.el.className = 'btn'; } }; this.el.onmousedown = function (e) { e = e || window.event; if (_this.curBtn.pop)return; if (_this.getId(e || window.event)) { _this.curBtn.el.className = _this.curBtn.more ? 'btn ovr' : 'btn dwn'; if (_this.curBtn.more) { _this.curBtn.el.lastChild.className = 'arr dwn'; _this.curBtn.pop = 1; sxd.showMenu(_this.curBtn, sxd.options['sj_' + _this.curBtn.com], {width: 220, runjob: true}); document.body.onclick = function () { _this.curBtn.el.className = 'btn'; _this.curBtn.el.lastChild.className = 'arr'; _this.curBtn.pop = 0; document.body.onclick = null; }; if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; } } }; this.el.onmouseup = function (e) { if (_this.curBtn.pop)return; if (_this.getId(e || window.event)) { _this.curBtn.el.className = 'btn ovr'; if (_this.curBtn.more) { _this.curBtn.el.lastChild.className = 'arr'; } sxd.actions['tab_' + _this.curBtn.com](_this.curBtn.more); } }; var icons = { '.btn.ovr': '0 -28px', '.ovr .lb': '0 -72px', '.ovr .rb': '-4px -72px', '.ovr .mb': '0 -138px', '.btn.dwn': '0 -94px', '.dwn .lb': '0 -116px', '.dwn .rb': '-4px -116px', '.dwn .mb': '-4px -138px', '.dwn.arr': '0 -94px', '.dwn.arr .mb': '-4px -50px' }; for (var ico in icons) { sxd.css.add('.zTBar ' + ico + ' {background-position:' + icons[ico] + ';}'); } var btn, sTBar = ''; for (var b in buttons) { btn = buttons[b]; if (btn[0] == '|') { sTBar += '
'; continue; } ico = ' style="background-position:-16px ' + ((btn[2] - 1) * -16) + 'px;"'; sTBar += '
'; sTBar += btn[3] & 1 ? '
' + btn[1] + '
' : '
'; sTBar += btn[3] & 2 ? '
' : '
'; sTBar += '
'; } this.el.innerHTML = sTBar; if (this.el.lastChild.offsetTop > 30) { btn = this.el.lastChild.childNodes[1]; btn.className = 'ico'; btn.title = btn.innerHTML; btn.innerHTML = ''; } }, getId: function (e) { var o = e.target || e.srcElement; var r = {id: 0, more: 0, pop: 0, el: null, com: null}; while (!o.id) { if (o.className.match(/arr/)) { r.more = 1; } o = o.parentNode; } if (o.id && o.className != 'zTBar') { r.id = o.id.replace('ztbi_', '') * 1; r.el = o; r.com = this.buttons[r.id][0]; this.curBtn = r; return true; } return false; } }; } function zProgressObject() { return { init: function (elem, type) { this.el = z(elem); this.name = elem; this.type = type; this.el.className = 'zProc ' + (type == 2 ? 'blue' : 'green'); this.el.innerHTML = '
0%
0%
'; this.txt1 = this.el.firstChild.firstChild; this.txt2 = this.el.lastChild.firstChild; this.top = this.el.lastChild; }, set: function (proc, size, cur, tot) { proc = proc > 0 ? (proc > 100 ? 100 : proc) : 0; size = size || 0; cur = cur || 0; tot = tot || 0; this.txt1.innerHTML = proc + '%' + (size ? ' ' + sxd.formatSize(size) : '') + (cur && tot ? ' [' + cur + '/' + tot + ']' : ''); this.txt2.innerHTML = this.txt1.innerHTML; if (this.type == 2)document.title = proc + '% - ' + sxd.version.full; this.top.style.width = Math.round(proc * 3) + 'px'; } }; } function zGridObject() { return { init: function (elem, cfg) { this.el = z(elem); this.name = elem; this.cfg = cfg; this.el.className = 'zGrid'; var header = ''; this.cols = cfg.header.length; for (var i = 0; i < this.cols; i++) { header += '' + cfg.header[i][0] + ''; } this.el.innerHTML = '
' + header + '
'; this.data = this.el.lastChild.firstChild; this.datadiv = this.el.lastChild; this.data.style.width = cfg.width + 'px'; this.el.firstChild.style.height = '22px'; this.el.firstChild.style.width = (cfg.width - 1) + 'px'; this.datadiv.style.height = (cfg.height - 23) + 'px'; this.datadiv.style.width = (cfg.width - 1) + 'px'; if (this.name == 'sxdGrid1') { this.oldtime = ''; this.add = this.addLog; } else { var _this = this; this.selected = null; this.add = function (rows) { if (typeof rows[0] == 'object') { for (var row in rows)this.addRow(rows[row]); } else this.addRow(rows); }; this.datadiv.onclick = function () { _this.selected.className = ''; _this.selected = null; }; } }, addLog: function (time, txt, color) { var newrow, td1, td2; for (var i = 0; i < txt.length; i++) { newrow = this.data.insertRow(-1); td1 = newrow.insertCell(-1); td2 = newrow.insertCell(-1); td1.width = 120; if (!i) { td1.innerHTML = this.oldtime != time ? time : ' '; this.oldtime = time; } td2.className = 'wrap'; td2.innerHTML = txt[i] || ' '; if (color)td2.style.color = color; } this.datadiv.scrollTop = this.datadiv.scrollHeight; }, addRow: function (row) { var newrow = this.data.insertRow(-1); var td; if (this.name == 'sxdGrid2')row[5] = sxd.formatSize(row[5], 2); for (var i = 0; i < this.cols; i++) { td = newrow.insertCell(-1); if (this.cfg.header[i][1])td.width = this.cfg.header[i][1]; if (this.cfg.header[i][2] == 1)td.style.textAlign = 'right'; td.innerHTML = row[i] || ' '; td.title = row[i] || ''; if (i == 0 && this.name == 'sxdGrid2')td.title += "\n" + row[7]; } newrow.file = row[this.cols]; var _this = this; newrow.onclick = function (e) { e = e || window.event; if (_this.selected)_this.selected.className = ''; this.className = 'sel'; _this.selected = this; if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; }; newrow.ondblclick = function (e) { e = e || window.event; if (_this.selected)_this.selected.className = ''; this.className = 'sel'; _this.selected = this; sxd.runFiles('open'); if (e.stopPropagation)e.stopPropagation(); e.cancelBubble = true; }; }, clear: function () { for (var i = 0, l = this.data.rows.length; i < l; i++) { this.data.deleteRow(0); } this.oldtime = ''; } }; }