transmission-web-control/src/tr-web-control/script/system.min.js

241 lines
44 KiB
JavaScript

// Current system global object
function pagerFilter(t){"number"==typeof t.length&&"function"==typeof t.splice&&(t={total:t.length,rows:t})
var e=$(this),s=e.datagrid("options"),n=e.datagrid("getPager"),a=e.data("buttons")
n.pagination({onSelectPage:function(a,r){s.pageNumber=a,s.pageSize=r,n.pagination("refresh",{pageNumber:a,pageSize:r}),e.datagrid("loadData",t)},buttons:a}),t.originalRows||(t.originalRows=t.rows)
var r=(s.pageNumber-1)*parseInt(s.pageSize),o=r+parseInt(s.pageSize)
return t.rows=t.originalRows.slice(r,o),t}var system={version:"1.1 Beta",rootPath:"tr-web-control/",codeupdate:"20170317",configHead:"transmission-web-control",config:{autoReload:!0,reloadStep:5e3,pageSize:30,defaultSelectNode:null,autoExpandAttribute:!1,defaultLang:""},storageKeys:{dictionary:{folders:"dictionary.folders"}},dictionary:{folders:null},checkUpdateScript:"https://transmission-control.googlecode.com/svn/resouces/checkupdate.js",contextMenus:{},panel:null,lang:null,reloading:!1,autoReloadTimer:null,downloadDir:"",islocal:!1,B64:new Base64,currentTorrentId:0,control:{tree:null,torrentlist:null},userConfig:{torrentList:{fields:[],sortName:null,sortOrder:"asc"}},serverConfig:null,serverSessionStats:null,templates:{},setlang:function(t,e){t||(t=this.config.defaultLang?this.config.defaultLang:navigator.language||navigator.browserLanguage),t||(t="zh-CN"),t.indexOf("-")!=-1&&(t=t.split("-")[0].toLocaleLowerCase()+"-"+t.split("-")[1].toLocaleUpperCase()),this.languages[t]||(t="en"),$.getScript(system.rootPath+"lang/"+t+".js",function(){system.lang=$.extend(!0,system.defaultLang,system.lang),system.resetLangText(),$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-"+t.replace("-","_")+".js").done(function(t,s){e&&e()}).fail(function(t,s,n){$.getScript(system.rootPath+"script/easyui/locale/easyui-lang-en.js",function(){e&&e()})})})},init:function(t,e,s){this.readConfig(),this.islocal=1==e,this.panel={main:$("#main"),top:$("#m_top"),toolbar:$("#m_toolbar"),left_layout:$("#m_left_layout"),left:$("#m_left"),body:$("#m_body"),layout_body:$("#layout_body"),list:$("#m_list"),attribute:$("#m_attribute"),bottom:$("#m_bottom"),title:$("#m_title"),status:$("#m_status"),statusbar:$("#m_statusbar"),status_text:$("#status_text"),droparea:$("#dropArea")},null==this.lang?this.setlang(t,function(){system.initdata()}):this.initdata()},resetLangText:function(parent){parent||(parent=$)
var items=parent.find("*[system-lang]")
$.each(items,function(key,item){var name=$(item).attr("system-lang")
"["==name.substr(0,1)?$(item).html(eval("system.lang"+name)):$(item).html(eval("system.lang."+name))}),items=parent.find("*[system-tip-lang]"),$.each(items,function(key,item){var name=$(item).attr("system-tip-lang")
"["==name.substr(0,1)?$(item).attr("title",eval("system.lang"+name)):$(item).attr("title",eval("system.lang."+name))})},initdata:function(){$(document).attr("title",this.lang.system.title+" "+this.version)
var t=new Array,e="<span>"+this.lang.title.left+"</span>"
t.push("<span class='tree-title-toolbar'>")
for(var s in this.lang.tree.toolbar.nav){var n=this.lang.tree.toolbar.nav[s]
t.push('<a href="javascript:void(0);" id="tree-toolbar-nav-'+s+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+n+"</a>")}if(t.push("</span>"),t.length>1){e+=t.join(""),this.panel.left_layout.panel("setTitle",e)
for(var s in this.lang.tree.toolbar.nav)$("#tree-toolbar-nav-"+s).linkbutton()}else this.panel.left_layout.panel("setTitle",e)
e="<span>"+this.lang.title.list+"</span>",t.length=0,t.push("<span class='tree-title-toolbar'>")
for(var s in this.lang["torrent-head"].buttons){var n=this.lang["torrent-head"].buttons[s]
t.push('<a href="javascript:void(0);" id="torrent-head-buttons-'+s+'" class="easyui-linkbutton" data-options="plain:true,iconCls:\'icon-disabled\'" onclick="javascript:system.navToolbarClick(this);">'+n+"</a>")}if(t.push("</span>"),t.length>1){e+=t.join(""),this.panel.body.panel("setTitle",e)
for(var s in this.lang["torrent-head"].buttons)switch($("#torrent-head-buttons-"+s).linkbutton(),s){case"autoExpandAttribute":system.config.autoExpandAttribute?$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-enabled"}).data("status",1):$("#torrent-head-buttons-"+s).linkbutton({iconCls:"icon-disabled"}).data("status",0)}}else this.panel.body.panel("setTitle",e)
this.panel.status.panel("setTitle",this.lang.title.status),this.panel.attribute.panel({title:this.lang.title.attribute,onExpand:function(){0!=system.currentTorrentId&&$(this).data("isload")?system.getTorrentInfos(system.currentTorrentId):system.clearTorrentAttribute()},onLoad:function(){$(this).data("isload")||($(this).data("isload",!0),0!=system.currentTorrentId&&setTimeout(function(){system.getTorrentInfos(system.currentTorrentId)},500))}}),$.each(this.languages,function(t,e){$("<option/>").text(e).val(t).attr("selected",t==system.lang.name).appendTo(system.panel.top.find("#lang"))}),this.panel.top.find("#lang").change(function(){location.href="?lang="+this.value}),this.panel.toolbar.attr("class","panel-header"),this.initTree(),this.initToolbar(),this.initStatusBar(),this.initTorrentTable(),this.connect(),this.initEvent()},initEvent:function(){$(window).resize(function(){$("#main").layout("resize")}),this.panel.droparea[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.debug("#dropArea.dragover")},!1),this.panel.list[0].addEventListener("dragover",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.show(),system.debug("dragover")},!1),this.panel.droparea[0].addEventListener("drop",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.hide(),system.debug("drop.e.dataTransfer:",t.dataTransfer),system.checkDropFiles(t.dataTransfer.files)},!1),this.panel.droparea[0].addEventListener("dragleave",function(t){t.stopPropagation(),t.preventDefault(),system.panel.droparea.hide(),system.debug("dragleave")},!1),$("#text-drop-title").html(this.lang.public["text-drop-title"])},navToolbarClick:function(t){var e=t.id,s=$(t).data("status"),n=null
switch(e){case"tree-toolbar-nav-folders":n=this.panel.left.tree("find","folders")
break
case"tree-toolbar-nav-statistics":n=this.panel.left.tree("find","statistics")
break
case"torrent-head-buttons-autoExpandAttribute":n={},n.target=null,1==s?this.config.autoExpandAttribute=!1:this.config.autoExpandAttribute=!0}n&&(1==s?($(t).linkbutton({iconCls:"icon-disabled"}),$(n.target).parent().hide(),s=0):($(t).linkbutton({iconCls:"icon-enabled"}),$(n.target).parent().show(),s=1),$(t).data("status",s),this.saveConfig())},checkDropFiles:function(t){if(t&&t.length){for(var e=new Array,s=0;s<t.length;s++){var n=t[s]
"torrent"==n.name.split(".").pop().toLowerCase()&&e.push(n)}e.length>0&&system.openDialogFromTemplate({id:"dialog-torrent-addfile",options:{title:system.lang.toolbar["add-torrent"],width:620,height:300,resizable:!0},datas:{files:e}})}},initTree:function(){this.panel.left.tree({data:[{id:"torrent-all",iconCls:"icon-home",text:this.lang.tree.all+" ("+this.lang.tree.status.loading+")",children:[{id:"downloading",text:this.lang.tree.downloading,iconCls:"icon-download"},{id:"paused",text:this.lang.tree.paused,iconCls:"icon-pause"},{id:"sending",text:this.lang.tree.sending,iconCls:"icon-seed"},{id:"check",text:this.lang.tree.check,iconCls:"icon-check"},{id:"actively",text:this.lang.tree.actively,iconCls:"icon-actively"},{id:"error",text:this.lang.tree.error,iconCls:"icon-error"},{id:"warning",text:this.lang.tree.warning,iconCls:"icon-warning"}]},{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers",children:[{id:"servers-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"folders",text:this.lang.tree.folders,children:[{id:"folders-loading",text:this.lang.tree.status.loading,iconCls:"tree-loading"}]},{id:"statistics",text:this.lang.tree.statistics.title,state:"closed",iconCls:"icon-chart",children:[{id:"cumulative-stats",text:this.lang.tree.statistics.cumulative,children:[{id:"uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"secondsActive",text:this.lang.tree.statistics.secondsActive}]},{id:"current-stats",text:this.lang.tree.statistics.current,children:[{id:"current-uploadedBytes",text:this.lang.tree.statistics.uploadedBytes},{id:"current-downloadedBytes",text:this.lang.tree.statistics.downloadedBytes},{id:"current-filesAdded",text:this.lang.tree.statistics.filesAdded},{id:"current-sessionCount",text:this.lang.tree.statistics.sessionCount},{id:"current-secondsActive",text:this.lang.tree.statistics.secondsActive}]}]}],onSelect:function(t){system.loadTorrentToList({node:t})},lines:!0})
for(var t in this.lang.tree.toolbar.nav){var e=this.panel.left.tree("find",t)
$(e.target).parent().hide()}if(this.config.defaultSelectNode){var s=this.panel.left.tree("find",this.config.defaultSelectNode)
s&&this.panel.left.tree("select",s.target)}},initTorrentTable:function(){function t(){e&&$(e).remove(),e=$("<div/>").appendTo("body"),e.menu({onClick:function(t){"icon-ok"==t.iconCls?(system.control.torrentlist.datagrid("hideColumn",t.name),e.menu("setIcon",{target:t.target,iconCls:"icon-empty"})):(system.control.torrentlist.datagrid("showColumn",t.name),e.menu("setIcon",{target:t.target,iconCls:"icon-ok"})),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()}})
for(var t=system.control.torrentlist.datagrid("getColumnFields"),s=0;s<t.length;s++){var n=t[s],a=system.control.torrentlist.datagrid("getColumnOption",n)
0!=a.allowCustom&&"false"!=a.allowCustom&&e.menu("appendItem",{text:a.title,name:n,iconCls:a.hidden?"icon-empty":"icon-ok"})}}this.control.torrentlist=$("<table/>").attr("class","torrent-list").appendTo(this.panel.list)
var e=null,s=-1,n=!1
$.get(system.rootPath+"template/torrent-fields.json?time="+new Date,function(a){var r=a.fields
0!=system.userConfig.torrentList.fields.length&&(r=system.userConfig.torrentList.fields)
var o=JSON.stringify(r)
system.userConfig.torrentList.fields=JSON.parse(o)
for(var i in r)r[i].title=system.lang.torrent.fields[r[i].field]||r[i].field,system.setFieldFormat(r[i])
system.control.torrentlist.datagrid({autoRowHeight:!1,pagination:!0,rownumbers:!0,remoteSort:!1,checkOnSelect:!1,pageSize:system.config.pageSize,idField:"id",fit:!0,striped:!0,sortName:system.userConfig.torrentList.sortName,sortOrder:system.userConfig.torrentList.sortOrder,drophead:!0,columns:[r],onCheck:function(t,e){system.checkTorrentRow(t,e)},onUncheck:function(t,e){system.checkTorrentRow(t,e)},onCheckAll:function(t){system.checkTorrentRow("all",!1)},onUncheckAll:function(t){system.checkTorrentRow("all",!0)},onSelect:function(t,e){s!=-1&&(n=!0,system.control.torrentlist.datagrid("unselectRow",s),n=!1),system.config.autoExpandAttribute&&system.panel.attribute.panel("options").collapsed&&system.panel.layout_body.layout("expand","south"),system.getTorrentInfos(e.id),s=t},onUnselect:function(t,e){system.config.autoExpandAttribute&&0==n&&(system.panel.attribute.panel("options").collapsed||system.panel.layout_body.layout("collapse","south")),system.currentTorrentId=0,s=-1},onBeforeLoad:function(t){system.currentTorrentId=0},onSortColumn:function(t,e){var s=t
"remainingTime"==t&&(s="remainingTimeRaw")
var n=system.control.torrentlist.datagrid("getData").originalRows.sort(arrayObjectSort(s,e))
system.control.torrentlist.datagrid("loadData",n),system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.userConfig.torrentList.sortName=t,system.userConfig.torrentList.sortOrder=e,system.saveUserConfig()},onRowContextMenu:function(t,e,s){system.control.torrentlist.datagrid("uncheckAll"),system.control.torrentlist.datagrid("checkRow",e),t.preventDefault(),system.showContextMenu("torrent-list",t)},onHeadDrop:function(t,e){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onResizeColumn:function(t,e){system.resetTorrentListFieldsUserConfig(system.control.torrentlist.datagrid("options").columns[0]),system.saveUserConfig()},onHeaderContextMenu:function(s,n){s.preventDefault(),e||t(),e.menu("show",{left:s.pageX,top:s.pageY})}})},"json")},resetTorrentListFieldsUserConfig:function(t){var e={}
$.each(this.userConfig.torrentList.fields,function(t,s){e[s.field]=s}),this.userConfig.torrentList.fields=[],$.each(t,function(t,s){var n=$.extend({},e[s.field])
n.width=s.width,n.hidden=s.hidden,system.userConfig.torrentList.fields.push(n)})},showContextMenu:function(t,e){var s=this.contextMenus[t]
s?s.empty():(s=$("<div/>").attr("class","easyui-menu").css({width:"180px"}).appendTo(this.panel.main),this.contextMenus[t]=s,s.menu())
var n=null
switch(t){case"torrent-list":n=new Array("start","pause","-","rename","remove","recheck","-","morepeers","changeDownloadDir","-","menu-queue-move-top","menu-queue-move-up","menu-queue-move-down","menu-queue-move-bottom")
var a=this.panel.toolbar
for(var r in n){var o=n[r]
if("-"==o)$("<div class='menu-sep'></div>").appendTo(s)
else{var i=a.find("#toolbar_"+o)
i.length>0?s.menu("appendItem",{text:i.attr("title"),id:o,iconCls:i.linkbutton("options").iconCls,disabled:i.linkbutton("options").disabled,onclick:function(){system.panel.toolbar.find("#toolbar_"+$(this).attr("id")).click()}}):(i=$("#"+o),i.length>0&&s.menu("appendItem",{text:i.attr("title"),id:o,iconCls:i.attr("id").replace("menu","icon"),disabled:a.find("#toolbar_changeDownloadDir").linkbutton("options").disabled,onclick:function(){$("#"+$(this).attr("id")).click()}})),i=null}}}s.menu("show",{left:e.pageX,top:e.pageY}),s=null,n=null},checkTorrentRow:function(t,e){this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!1}),this.panel.toolbar.find("#toolbar_queue").menubutton("enable")},initToolbar:function(){this.panel.toolbar.find("#toolbar_label_reload_time").html(this.lang.toolbar["reload-time"]),this.panel.toolbar.find("#toolbar_label_reload_time_unit").html(this.lang.toolbar["reload-time-unit"]),this.panel.toolbar.find("#toolbar_reload_time").numberspinner({value:this.config.reloadStep/1e3,min:3,disabled:!this.config.autoReload,onChange:function(){var t=this.value
$.isNumeric(t)&&(system.config.reloadStep=1e3*t,system.saveConfig())}}),this.panel.toolbar.find("#toolbar_autoreload").linkbutton({text:this.config.autoReload?this.lang.toolbar["autoreload-enabled"]:this.lang.toolbar["autoreload-disabled"],iconCls:this.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",this.config.autoReload?this.lang.toolbar.tip["autoreload-disabled"]:this.lang.toolbar.tip["autoreload-enabled"]).click(function(){system.config.autoReload?(system.config.autoReload=!1,clearTimeout(system.autoReloadTimer),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("disable")):(system.config.autoReload=!0,system.reloadData(),system.panel.toolbar.find("#toolbar_reload_time").numberspinner("enable")),system.saveConfig(),$(this).linkbutton({text:system.config.autoReload?system.lang.toolbar["autoreload-enabled"]:system.lang.toolbar["autoreload-disabled"],iconCls:system.config.autoReload?"icon-enabled":"icon-disabled"}).attr("title",system.config.autoReload?system.lang.toolbar.tip["autoreload-disabled"]:system.lang.toolbar.tip["autoreload-enabled"])}),this.panel.toolbar.find("#toolbar_add_torrents").linkbutton({text:this.lang.toolbar["add-torrent"],disabled:!1}).attr("title",this.lang.toolbar.tip["add-torrent"]).click(function(){system.openDialogFromTemplate({id:"dialog-torrent-add",options:{title:system.lang.toolbar["add-torrent"],width:620,height:400,resizable:!0}})}),this.panel.toolbar.find("#toolbar_start_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["start-all"]).click(function(){var t=$(this),e=t.linkbutton("options").iconCls
t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-start"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=null})}),this.panel.toolbar.find("#toolbar_pause_all").linkbutton({disabled:!1}).attr("title",this.lang.toolbar.tip["pause-all"]).click(function(){var t=$(this),e=t.linkbutton("options").iconCls
t.linkbutton({disabled:!0,iconCls:"icon-loading"}),transmission.exec({method:"torrent-stop"},function(s){t.linkbutton({iconCls:e,disabled:!1}),t=null})}),this.panel.toolbar.find("#toolbar_start").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.start).click(function(){system.changeSelectedTorrentStatus("start",$(this))}),this.panel.toolbar.find("#toolbar_pause").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.pause).click(function(){system.changeSelectedTorrentStatus("stop",$(this))}),this.panel.toolbar.find("#toolbar_recheck").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.recheck).click(function(){var t=system.control.torrentlist.datagrid("getChecked")
if(t.length>0)if(1==t.length){var e=transmission.torrents.all[t[0].id]
e.percentDone>0?confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this)):system.changeSelectedTorrentStatus("verify",$(this))}else confirm(system.lang.toolbar.tip["recheck-confirm"])&&system.changeSelectedTorrentStatus("verify",$(this))}),this.panel.toolbar.find("#toolbar_morepeers").linkbutton({disabled:!0}).click(function(){system.changeSelectedTorrentStatus("reannounce",$(this))}),this.panel.toolbar.find("#toolbar_remove").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip.remove).click(function(){var t=system.control.torrentlist.datagrid("getChecked"),e=new Array
for(var s in t)e.push(t[s].id)
0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-remove-confirm",options:{title:system.lang.dialog["torrent-remove"].title,width:350,height:150},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_rename").linkbutton({disabled:!0}).click(function(){var t=system.control.torrentlist.datagrid("getChecked")
0!=t.length&&system.openDialogFromTemplate({id:"dialog-torrent-rename",options:{title:system.lang.dialog["torrent-rename"].title,width:450,height:150,resizable:!0},datas:{id:t[0].id}})}),this.panel.toolbar.find("#toolbar_changeDownloadDir").linkbutton({disabled:!0}).attr("title",this.lang.toolbar.tip["change-download-dir"]).click(function(){var t=system.control.torrentlist.datagrid("getChecked"),e=new Array
for(var s in t)e.push(t[s].id)
0!=e.length&&system.openDialogFromTemplate({id:"dialog-torrent-changeDownloadDir",options:{title:system.lang.dialog["torrent-changeDownloadDir"].title,width:520,height:200},datas:{ids:e}})}),this.panel.toolbar.find("#toolbar_alt_speed").linkbutton().attr("title",this.lang.toolbar.tip["alt-speed"]).click(function(){var t=$(this),e=t.linkbutton("options"),s=!1
"icon-alt-speed-false"==e.iconCls&&(s=!0),transmission.exec({method:"session-set",arguments:{"alt-speed-enabled":s}},function(e){"success"==e.result&&(system.serverConfig["alt-speed-enabled"]=s,t.linkbutton({iconCls:"icon-alt-speed-"+s.toString()}),s?$("#status_alt_speed").show():$("#status_alt_speed").hide())}),t.linkbutton({iconCls:"icon-loading"})}),this.panel.toolbar.find("#toolbar_config").linkbutton().attr("title",this.lang.toolbar.tip["system-config"]).click(function(){system.openDialogFromTemplate({id:"dialog-system-config",options:{title:system.lang.toolbar["system-config"],width:620,height:440,resizable:!0}})}),this.panel.toolbar.find("#toolbar_reload").linkbutton().attr("title",this.lang.toolbar.tip["system-reload"]).click(function(){system.reloadData()}),this.panel.toolbar.find("#toolbar_search").searchbox({searcher:function(t){system.searchTorrents(t)},prompt:this.lang.toolbar["search-prompt"]})},initStatusBar:function(){this.panel.statusbar.find("#status_title_downloadspeed").html(this.lang.statusbar.downloadspeed),this.panel.statusbar.find("#status_title_uploadspeed").html(this.lang.statusbar.uploadspeed)},connect:function(){this.showStatus(this.lang.system.status.connect,0),transmission.on.torrentCountChange=function(){system.reloadTorrentBaseInfos()},transmission.on.postError=function(){},transmission.init({islocal:!0},function(){system.reloadSession(!0),system.getServerStatus()})},reloadSession:function(t){transmission.getSession(function(e){system.serverConfig=e,$("#status_version").html("Transmission "+system.lang.statusbar.version+e.version+", RPC: "+e["rpc-version"]+", WEB Control: "+system.version+"("+system.codeupdate+")"),1==e["alt-speed-enabled"]?(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-true"}),$("#status_alt_speed").show()):(system.panel.toolbar.find("#toolbar_alt_speed").linkbutton({iconCls:"icon-alt-speed-false"}),$("#status_alt_speed").hide()),system.downloadDir=e["download-dir"],0==transmission.downloadDirs.length&&transmission.downloadDirs.push(system.downloadDir),parseInt(system.serverConfig["rpc-version"])>=15?transmission.getFreeSpace(system.downloadDir,function(t){system.serverConfig["download-dir-free-space"]=t.arguments["size-bytes"],system.showFreeSpace(t.arguments["size-bytes"])}):system.showFreeSpace(system.serverConfig["download-dir-free-space"]),t&&system.showStatus(system.lang.system.status.connected)})},showFreeSpace:function(t){var e=t
e=e==-1?system.lang.public["text-unknown"]:formatSize(e),$("#status_freespace").text(system.lang.dialog["system-config"]["download-dir-free-space"]+" "+e)},reloadTorrentBaseInfos:function(t,e){if(!this.reloading){clearTimeout(this.autoReloadTimer),this.reloading=!0
var s={trackers:transmission.trackers,folders:transmission.torrents.folders}
transmission.torrents.getallids(function(t){var e=new Array
for(var n in t){var a=t[n]
e.push(a.id)}var r=transmission.torrents.getErrorIds(e,!0)
r.length>0?transmission.torrents.getallids(function(){system.resetTorrentInfos(s)},r):system.resetTorrentInfos(s)},t,e)}},resetTorrentInfos:function(t){var e=this.currentTorrentId,s=this.panel.left.tree("find","servers")
if(s){var n=s.state
this.removeTreeNode("servers-loading")}else this.appendTreeNode(null,[{id:"servers",text:this.lang.tree.servers,state:"closed",iconCls:"icon-servers"}]),s=this.panel.left.tree("find","servers")
new Array
for(var a in transmission.trackers){var r=transmission.trackers[a],o=system.panel.left.tree("find",r.nodeid),i=r.name+this.showNodeMoreInfos(r.count,r.size)
o?system.updateTreeNodeText(r.nodeid,i,r.connected?"icon-server":"icon-server-error"):system.appendTreeNode(s,[{id:r.nodeid,text:i,iconCls:r.connected?"icon-server":"icon-server-error"}]),t.trackers[r.nodeid]=null}"closed"==n&&this.panel.left.tree("collapse",s.target)
for(var a in t.trackers){var r=t.trackers[a]
r&&system.removeTreeNode(r.nodeid)}if(transmission.torrents.status[transmission._status.stopped]?system.updateTreeNodeText("paused",system.lang.tree.paused+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.stopped].length)):system.updateTreeNodeText("paused",system.lang.tree.paused),transmission.torrents.status[transmission._status.seed]?system.updateTreeNodeText("sending",system.lang.tree.sending+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seed].length)):system.updateTreeNodeText("sending",system.lang.tree.sending),transmission.torrents.status[transmission._status.seedwait]){var o=system.panel.left.tree("find","sending"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.seedwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"seedwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("seedwait")
if(transmission.torrents.status[transmission._status.check]?system.updateTreeNodeText("check",system.lang.tree.check+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.check].length)):system.updateTreeNodeText("check",system.lang.tree.check),transmission.torrents.status[transmission._status.checkwait]){var o=system.panel.left.tree("find","check"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.checkwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"checkwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("checkwait")
if(transmission.torrents.status[transmission._status.download]?system.updateTreeNodeText("downloading",system.lang.tree.downloading+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.download].length)):system.updateTreeNodeText("downloading",system.lang.tree.downloading),transmission.torrents.status[transmission._status.downloadwait]){var o=system.panel.left.tree("find","downloading"),l=system.panel.left.tree("getChildren",o.target),i=system.lang.tree.wait+this.showNodeMoreInfos(transmission.torrents.status[transmission._status.downloadwait].length)
l.length>0?system.updateTreeNodeText(l[0].id,i):system.appendTreeNode(o,[{id:"downloadwait",text:i,iconCls:"icon-wait"}])}else system.removeTreeNode("downloadwait")
system.updateTreeNodeText("actively",system.lang.tree.actively+this.showNodeMoreInfos(transmission.torrents.actively.length)),system.updateTreeNodeText("error",system.lang.tree.error+this.showNodeMoreInfos(transmission.torrents.error.length)),system.updateTreeNodeText("warning",system.lang.tree.warning+this.showNodeMoreInfos(transmission.torrents.warning.length))
var o=system.panel.left.tree("getSelected")
if(null!=o){var d=system.control.torrentlist.datagrid("options").pageNumber
system.loadTorrentToList({node:o,page:d})}0!=e&&system.control.torrentlist.datagrid("selectRecord",e),system.reloading=!1,system.config.autoReload&&(system.autoReloadTimer=setTimeout(function(){system.reloadData()},system.config.reloadStep)),system.updateTreeNodeText("torrent-all",system.lang.tree.all+this.showNodeMoreInfos(transmission.torrents.count,transmission.torrents.totalSize))
var c="uploadedBytes,downloadedBytes,filesAdded,sessionCount,secondsActive".split(",")
$.each(c,function(t,e){switch(e){case"uploadedBytes":case"downloadedBytes":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+formatSize(system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+formatSize(system.serverSessionStats["current-stats"][e]))
break
case"secondsActive":system.updateTreeNodeText(e,system.lang.tree.statistics[e]+getTotalTime(1e3*system.serverSessionStats["cumulative-stats"][e])),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+getTotalTime(1e3*system.serverSessionStats["current-stats"][e]))
break
default:system.updateTreeNodeText(e,system.lang.tree.statistics[e]+system.serverSessionStats["cumulative-stats"][e]),system.updateTreeNodeText("current-"+e,system.lang.tree.statistics[e]+system.serverSessionStats["current-stats"][e])}})
for(var a in transmission.torrents.folders){var u=transmission.torrents.folders[a]
t.folders[u.nodeid]=null}this.loadFolderList(t.folders),navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})},showNodeMoreInfos:function(t,e){var s=""
return t>0&&(s=" <span class='nav-torrents-number'>("+t+")</span>"),e>0&&(s+="<span class='nav-total-size'>["+formatSize(e)+"]</span>"),s},getServerStatus:function(){this.reloading||(clearTimeout(this.autoReloadTimer),this.reloading=!0,transmission.getStatus(function(t){if(system.reloading=!1,$("#status_downloadspeed").html(formatSize(t.downloadSpeed,!1,"speed")),$("#status_uploadspeed").html(formatSize(t.uploadSpeed,!1,"speed")),system.serverSessionStats=t,0==t.torrentCount){var e=system.panel.left.tree("find","servers")
e&&system.panel.left.tree("remove",e.target),system.updateTreeNodeText("torrent-all",system.lang.tree.all)}}))},showStatus:function(t,e){$("#m_status").panel("options").collapsed&&$("#layout_left").layout("expand","south"),this.panel.status_text.show(),this.panel.status_text.html(t),0!=e&&(void 0==e&&(e=3e3),this.panel.status_text.fadeOut(e,function(){$("#layout_left").layout("collapse","south")}))},updateTreeNodeText:function(t,e,s){var n=this.panel.left.tree("find",t)
if(n){var a={target:n.target,text:e}
void 0!=s&&(a.iconCls=s),this.panel.left.tree("update",a)}n=null},appendTreeNode:function(t,e){var s=null
s="string"==typeof t?this.panel.left.tree("find",t):t,s?this.panel.left.tree("append",{parent:s.target,data:e}):this.panel.left.tree("append",{data:e}),s=null},removeTreeNode:function(t){var e=this.panel.left.tree("find",t)
e&&this.panel.left.tree("remove",e.target),e=null},loadTorrentToList:function(t){if(transmission.torrents.all){var e={node:null,page:1}
if(jQuery.extend(e,t),t.node){var s=null,n=this.panel.left.tree("getParent",t.node.target)||{id:""},a=this.panel.left.data("currentNodeId")
switch(a!=t.node.id&&(this.control.torrentlist.datagrid({pageNumber:1}),a=t.node.id),this.panel.left.data("currentNodeId",a),n.id){case"servers":s=transmission.trackers[t.node.id].torrents
break
default:switch(t.node.id){case"torrent-all":case"servers":s=transmission.torrents.all
break
case"paused":s=transmission.torrents.status[transmission._status.stopped]
break
case"sending":s=transmission.torrents.status[transmission._status.seed]
break
case"seedwait":s=transmission.torrents.status[transmission._status.seedwait]
break
case"check":s=transmission.torrents.status[transmission._status.check]
break
case"checkwait":s=transmission.torrents.status[transmission._status.checkwait]
break
case"downloading":s=transmission.torrents.status[transmission._status.download]
break
case"downloadwait":s=transmission.torrents.status[transmission._status.downloadwait]
break
case"actively":s=transmission.torrents.actively
break
case"error":s=transmission.torrents.error
break
case"warning":s=transmission.torrents.warning
break
case"search-result":s=transmission.torrents.searchResult
break
default:if(t.node.id.indexOf("folders-")!=-1){var r=transmission.torrents.folders[t.node.id]
r&&(s=r.torrents)}}}this.config.defaultSelectNode!=t.node.id&&(this.control.torrentlist.datagrid("loadData",[]),this.config.defaultSelectNode=t.node.id,this.saveConfig())
var o=new Array
for(var i in s){if(!s[i])return
var l=this.lang.torrent["status-text"][s[i].status],d=parseFloat(100*s[i].percentDone).toFixed(2)
l==transmission._status.check&&(d=parseFloat(100*s[i].recheckProgress).toFixed(2)),0!=s[i].error?l="<span class='text-status-error'>"+l+"</span>":s[i].warning&&(l="<span class='text-status-warning' title='"+s[i].warning+"'>"+l+"</span>")
var c={}
c=$.extend(c,s[i]),c.status=l,c.statusCode=s[i].status,c.completeSize=Math.max(0,s[i].totalSize-s[i].leftUntilDone),c.leecherCount=s[i].leecher,c.seederCount=s[i].seeder,o.push(c)}this.updateTorrentCurrentPageDatas(o)}}},updateTorrentCurrentPageDatas:function(t){var e=this.control.torrentlist.datagrid("getRows")
if(0==t.length&&e.length>0)return void this.control.torrentlist.datagrid("loadData",[])
var s=this.control.torrentlist.datagrid("options"),n=null
if(s.sortName){n=s.sortName
var a=n
"remainingTime"==n&&(a="remainingTimeRaw"),t=t.sort(arrayObjectSort(a,s.sortOrder))}if(0==e.length||t.length!=this.control.torrentlist.datagrid("getData").total&&t.length>s.pageSize)return void this.control.torrentlist.datagrid({loadFilter:pagerFilter,pageNumber:s.pageNumber,sortName:n,sortOrder:s.sortOrder}).datagrid("loadData",t)
this.control.torrentlist.datagrid("getData").originalRows=t
var r=(s.pageNumber-1)*parseInt(s.pageSize),o=r+parseInt(s.pageSize)
t=t.slice(r,o)
var i={},l={}
for(var d in transmission.torrents.recently){var c=transmission.torrents.recently[d]
i[c.id]=!0,c=null}for(var d in t){var c=t[d]
l[c.id]=c,c=null}for(var u={},d=e.length-1;d>=0;d--){var c=e[d],m=l[c.id]
m?i[c.id]?(this.control.torrentlist.datagrid("updateRow",{index:d,row:m}),u[c.id]=c):transmission.torrents.removed&&transmission.torrents.removed.length>0&&$.inArray(c.id,transmission.torrents.removed)!=-1?this.control.torrentlist.datagrid("deleteRow",d):u[c.id]=c:this.control.torrentlist.datagrid("deleteRow",d),c=null,m=null}for(var d in t){var c=t[d]
u[c.id]||this.control.torrentlist.datagrid("appendRow",c)}e=null,i=null,l=null},getTorrentNameBar:function(t){var e="",s=t.name
switch(t.status){case transmission._status.stopped:e="iconlabel icon-pause-small"
break
case transmission._status.check:e="iconlabel icon-checking"
break
case transmission._status.download:e="iconlabel icon-down"
break
case transmission._status.seed:e="iconlabel icon-up"
break
case transmission._status.seedwait:case transmission._status.downloadwait:case transmission._status.checkwait:e="iconlabel icon-wait"}return s+="\n"+t.downloadDir,t.warning&&(e="iconlabel icon-warning-type1",s+="\n\n"+this.lang.public["text-info"]+": "+t.warning),0!=t.error&&(e="iconlabel icon-exclamation",s+="\n\n"+this.lang.public["text-info"]+": "+t.errorString),'<span class="'+e+'" title="'+s+'">'+t.name+"</span>"},getTorrentProgressBar:function(t,e){t+="%"
var s="",n=0
switch(n="object"==typeof e?e.status:e){case transmission._status.stopped:s="torrent-progress-stop"
break
case transmission._status.checkwait:case transmission._status.check:s="torrent-progress-check"
break
case transmission._status.downloadwait:case transmission._status.download:s="torrent-progress-download"
break
case transmission._status.seedwait:case transmission._status.seed:s="torrent-progress-seed"}return"object"==typeof e&&(e.warning&&(s="torrent-progress-warning"),0!=e.error&&(s="torrent-progress-error")),'<div class="torrent-progress" title="'+t+'"><div class="torrent-progress-text">'+t+'</div><div class="torrent-progress-bar '+s+'" style="width:'+t+';"></div></div>'},addTorrentsToServer:function(t,e,s,n){var a=e-t.length,r=t.shift()
return r?(this.showStatus(this.lang.system.status.queue+(a+1)+"/"+e+"<br/>"+r,0),void transmission.addTorrentFromUrl(r,n,s,function(a){system.addTorrentsToServer(t,e,s,n)})):(this.showStatus(this.lang.system.status.queuefinish),void this.getServerStatus())},changeSelectedTorrentStatus:function(t,e,s){var n=this.control.torrentlist.datagrid("getChecked"),a=new Array
t||(t="start")
for(var r in n)a.push(n[r].id)
if(s||(s="torrent-"+t),a.length>0){if(e){var o=e.linkbutton("options").iconCls
e.linkbutton({disabled:!0,iconCls:"icon-loading"})}transmission.exec({method:s,arguments:{ids:a}},function(t){e&&e.linkbutton({iconCls:o}),system.control.torrentlist.datagrid("uncheckAll"),system.reloadTorrentBaseInfos()})}},searchTorrents:function(t){if(""!=t){var e=transmission.torrents.search(t)
if(null==e||0==e.length)return void this.removeTreeNode("search-result")
var s=this.panel.left.tree("find","search-result"),n=this.lang.tree["search-result"]+" : "+t+" ("+e.length+")"
null==s?(this.appendTreeNode("torrent-all",[{id:"search-result",text:n,iconCls:"icon-search"}]),s=this.panel.left.tree("find","search-result")):this.panel.left.tree("update",{target:s.target,text:n}),this.panel.left.tree("select",s.target)}},getTorrentInfos:function(t){if(transmission.torrents.all[t]&&!transmission.torrents.all[t].infoIsLoading&&!(this.currentTorrentId>0&&transmission.torrents.all[this.currentTorrentId]&&transmission.torrents.all[this.currentTorrentId].infoIsLoading||(this.currentTorrentId=t,this.panel.attribute.panel("options").collapsed))){var e=transmission.torrents.all[t]
e.infoIsLoading=!0
var s="fileStats,trackerStats,peers,leftUntilDone,status,rateDownload,rateUpload,uploadedEver,uploadRatio,error,errorString"
e.moreInfosTag||(s+=",files,trackers,comment,dateCreated,creator,downloadDir"),transmission.torrents.getMoreInfos(s,t,function(s){if(e.infoIsLoading=!1,null!=s){if(jQuery.extend(e,s[0]),0==system.currentTorrentId||system.currentTorrentId!=t)return void system.clearTorrentAttribute()
e.completeSize=e.totalSize-e.leftUntilDone,e.moreInfosTag=!0,system.fillTorrentBaseInfos(e),system.fillTorrentFileList(e),system.fillTorrentServerList(e),system.fillTorrentPeersList(e),system.fillTorrentConfig(e),transmission.torrents.all[t]=e,transmission.torrents.datas[t]=e}})}},clearTorrentAttribute:function(){system.panel.attribute.find("#torrent-files-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-servers-table").datagrid("loadData",[]),system.panel.attribute.find("#torrent-peers-table").datagrid("loadData",[]),system.panel.attribute.find("span[id*='torrent-attribute-value']").html("")},updateCurrentPageDatas:function(t,e,s){var n=s.datagrid("getRows"),a=s.datagrid("options"),r=null
if(a.sortName&&(r=a.sortName,e=e.sort(arrayObjectSort(r,a.sortOrder))),0==n.length||e.length!=s.datagrid("getData").total&&e.length>a.pageSize)return void s.datagrid({loadFilter:pagerFilter,pageNumber:1,sortName:r,sortOrder:a.sortOrder}).datagrid("loadData",e)
s.datagrid("getData").originalRows=e
var o=(a.pageNumber-1)*parseInt(a.pageSize),i=o+parseInt(a.pageSize)
e=e.slice(o,i)
var l={}
for(var d in e){var c=e[d]
l[c[t]]=c,c=null}for(var d=n.length-1;d>=0;d--){var c=n[d],u=l[c[t]]
u?s.datagrid("updateRow",{index:d,row:u}):s.datagrid("deleteRow",d),u=null,c=null}},fillTorrentBaseInfos:function(t){$.each(t,function(t,e){switch(t){case"rateDownload":case"rateUpload":e=formatSize(e,!0,"speed")
break
case"totalSize":case"uploadedEver":case"leftUntilDone":case"completeSize":e=formatSize(e)
break
case"addedDate":case"dateCreated":case"doneDate":e=formatLongTime(e)
break
case"status":e=system.lang.torrent["status-text"][e]
break
case"error":0==e?system.panel.attribute.find("#torrent-attribute-tr-error").hide():system.panel.attribute.find("#torrent-attribute-tr-error").show()
break
case"comment":e=system.replaceURI(e)}system.panel.attribute.find("#torrent-attribute-value-"+t).html(e)})},fillTorrentFileList:function(t){var e=t.files,s=t.fileStats,n=new Array,a=t.name.length+1
for(var r in e){var o=e[r],i=s[r],l=parseFloat(i.bytesCompleted/o.length*100).toFixed(2)
n.push({name:o.name==t.name?o.name:o.name.substr(a),index:r,bytesCompleted:i.bytesCompleted,percentDone:system.getTorrentProgressBar(l,transmission._status.download),length:o.length,wanted:system.lang.torrent.attribute.status[i.wanted],priority:'<span class="iconlabel icon-flag-'+i.priority+'">'+system.lang.torrent.attribute.priority[i.priority]+"</span>"})}this.updateCurrentPageDatas("index",n,system.panel.attribute.find("#torrent-files-table"))},fillTorrentServerList:function(t){var e=t.trackers,s=t.trackerStats,n=new Array
for(var a in e){var r=(e[a],s[a]),o={}
for(var i in r)switch(i){case"lastAnnounceTime":case"nextAnnounceTime":o[i]=formatLongTime(r[i])
break
case"lastAnnounceSucceeded":case"lastAnnounceTimedOut":o[i]=system.lang.torrent.attribute.status[r[i]]
break
default:o[i]=r[i]}n.push(o)}transmission.torrents.addTracker(t),this.updateCurrentPageDatas("id",n,system.panel.attribute.find("#torrent-servers-table"))},fillTorrentPeersList:function(t){var e=t.peers,s=new Array
for(var n in e){var a=e[n],r={}
for(var o in a)r[o]=a[o]
var i=parseFloat(100*a.progress).toFixed(2)
r.progress=system.getTorrentProgressBar(i,transmission._status.download),s.push(r)}this.updateCurrentPageDatas("address",s,system.panel.attribute.find("#torrent-peers-table"))},fillTorrentConfig:function(t){4==system.panel.attribute.find("#torrent-attribute-tabs").data("selectedIndex")&&transmission.torrents.getConfig(t.id,function(t){if(null!=t){var e=transmission.torrents.all[system.currentTorrentId]
jQuery.extend(e,t[0]),0!=system.currentTorrentId&&$.each(t[0],function(t,e){var s=!1,n=!1,a=!1
switch(t){case"seedIdleMode":case"seedRatioMode":0==e&&(n=!1,s=!0),a=!0
case"downloadLimited":case"uploadLimited":1!=e&&1!=e||(n=!0),system.panel.attribute.find("input[enabledof='"+t+"']").prop("disabled",!n),a&&system.panel.attribute.find("#"+t).prop("indeterminate",s).data("_tag",e),system.panel.attribute.find("#"+t).prop("checked",n)
break
default:system.panel.attribute.find("#"+t).val(e),system.panel.attribute.find("#"+t).numberspinner("setValue",e)}})}})},setFieldFormat:function(t){if(t.formatter)switch(t.formatter){case"size":t.formatter=function(t,e,s){return formatSize(t)}
break
case"speed":t.formatter=function(t,e,s){return formatSize(t,!0,"speed")}
break
case"longtime":t.formatter=function(t,e,s){return formatLongTime(t)}
break
case"progress":t.formatter=function(t,e,s){var n=parseFloat(100*t).toFixed(2)
return system.getTorrentProgressBar(n,transmission.torrents.all[e.id])}
break
case"_usename_":switch(t.field){case"name":t.formatter=function(t,e,s){return system.getTorrentNameBar(transmission.torrents.all[e.id])}}}},reloadData:function(){this.reloadSession(),this.reloading=!1,this.getServerStatus(),this.reloading=!1,this.reloadTorrentBaseInfos(),this.checkTorrentRow("all",!1)},loadFolderList:function(t){this.removeTreeNode("folders-loading")
for(var e in t){var s=t[e]
s&&system.removeTreeNode(s.nodeid)}0!=transmission.downloadDirs.length&&timedChunk(transmission.downloadDirs,this.appendFolder,this,10,function(){navigator.userAgent.indexOf("Firefox")>0&&system.panel.left.find("span.nav-total-size").css({"margin-top":"-19px"})})},appendFolder:function(t){if(t){var e="folders",s=e,n=t.split("/"),a=e+"-"
for(var r in n){var o=n[r]
if(""!=o){a+=this.B64.encode(o)
var i=this.panel.left.tree("find",a),l=transmission.torrents.folders[a],d=o+this.showNodeMoreInfos(l.count,l.size)
i?this.updateTreeNodeText(a,d):(this.appendTreeNode(s,[{id:a,text:d}]),s!=e&&(i=this.panel.left.tree("find",s),this.panel.left.tree("collapse",i.target))),s=a}}}},replaceURI:function(t){var e=/(http|https|ftp):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi
return t.replace(e,function(t){return'<a href="'+t+'" target="_blank">'+t+"</a>"})},readConfig:function(){this.readUserConfig()
var t=cookies.get(this.configHead)
$.isPlainObject(t)&&(this.config=$.extend(this.config,t))
for(var e in this.storageKeys.dictionary)this.dictionary[e]=this.getStorageData(this.storageKeys.dictionary[e])},saveConfig:function(){cookies.set(this.configHead,this.config,100)
for(var t in this.storageKeys.dictionary)this.setStorageData(this.storageKeys.dictionary[t],this.dictionary[t])
this.saveUserConfig()},readUserConfig:function(){var t=window.localStorage[this.configHead]
if(t){var e=JSON.parse(t)
this.userConfig=$.extend(!0,this.userConfig,e)}},saveUserConfig:function(){window.localStorage[this.configHead]=JSON.stringify(this.userConfig)},uploadTorrentFile:function(t,e,s,n){if(window.FileReader){var a=$("input[id='"+t+"']")[0].files
$.each(a,function(t,r){transmission.addTorrentFromFile(r,e,s,n,a.length)})}else alert(system.lang.publit["text-browsers-not-support-features"])},checkUpdate:function(){$.getScript(this.checkUpdateScript,function(){system.codeupdate<system.lastUpdateInfos.update?($("#area-update-infos").show(),$("#msg-updateInfos").html(system.lastUpdateInfos.update+" -> "+system.lastUpdateInfos.infos)):$("#area-update-infos").hide()})},changeLanguages:function(t){t!=this.lang.name&&t&&(this.config.defaultLang=t,this.saveConfig(),location.href="?lang="+t)},getStorageData:function(t,e){return null==window.localStorage[t]?e:window.localStorage[t]},setStorageData:function(t,e){window.localStorage[t]=e},openDialogFromTemplate:function(t){var e={id:null,options:null,datas:null}
if(t=$.extend(!0,e,t),null!=t.id){var s=t.id,n=t.options,a=t.datas,r=$("#"+s)
if(r.length)return r.dialog("open"),a&&$.each(a,function(t,e){r.data(t,e)}),void r.dialog({content:system.templates[s]})
var o={title:"",width:100,height:100,resizable:!1,cache:!0,content:"loading...",modal:!0}
n=$.extend(!0,o,n),$("<div/>").attr("id",s).appendTo(document.body).dialog(n),$.get(system.rootPath+"template/"+s+".html?time="+new Date,function(t){system.templates[s]=t,a&&$.each(a,function(t,e){$("#"+s).data(t,e)}),$("#"+s).dialog({content:t})})}},debug:function(t,e){window.console&&window.console.log&&window.console.log(t,e)}}
$(document).ready(function(){$.getScript(system.rootPath+"lang/default.js"),$.getScript(system.rootPath+"lang/_languages.js",function(){system.init(location.search.getQueryString("lang"),location.search.getQueryString("local"))})})