﻿
__trGroup('UploadButton');Ext.namespace("Ext.ux");Ext.ux.UploadButton=function(config){Ext.ux.UploadButton.superclass.constructor.call(this,config);this.addEvents({"beforeupload":true,"upload":true,"uploadok":true,"uploaderror":true,"clear":true,"addFile":true});};Ext.extend(Ext.ux.UploadButton,Ext.BoxComponent,{initComponent:function(){var fields=[{name:'id',type:'text',system:true},{name:'shortName',type:'text',system:true},{name:'fileName',type:'text',system:true},{name:'filePath',type:'text',system:true},{name:'fileCls',type:'text',system:true},{name:'input',system:true},{name:'form',system:true},{name:'state',type:'text',system:true},{name:'error',type:'text',system:true},{name:'progressId',type:'int',system:true},{name:'bytesTotal',type:'int',system:true},{name:'bytesUploaded',type:'int',system:true},{name:'estSec',type:'int',system:true},{name:'filesUploaded',type:'int',system:true},{name:'speedAverage',type:'int',system:true},{name:'speedLast',type:'int',system:true},{name:'timeLast',type:'int',system:true},{name:'timeStart',type:'int',system:true},{name:'pctComplete',type:'int',system:true}];if(Ext.isArray(this.customFields)){fields.push(this.customFields);}
this.store=new Ext.data.SimpleStore({id:0,fields:fields,data:[]});},onRender:function(ct,position){var el=document.createElement("div");ct.dom.insertBefore(el,position);this.el=Ext.get(el);var fileElId=this.id;if(this.hideLabel!==true){this.label=this.el.createChild({tag:'span',html:__tr('Please choose a file')});}
new Ext.ux.BrowseButton({renderTo:this.el.createChild({tag:'div'}),text:__tr('Browse...'),iconCls:'icon-plus',scope:this,handler:this.onAddFile,tooltip:this.tooltip,renderImage:this.renderImage});var config={store:this.store,singleUpload:true,enableProgress:true,url:this.url||'upload.ashx',progressUrl:this.progressUrl?this.progressUrl:this.url?this.url+'?progress':'upload.ashx?progress',path:this.path};if(this.baseParams){config.baseParams=this.baseParams;}
this.uploader=new Ext.ux.FileUploader(config);this.uploader.setPath(this.path);this.uploader.on('progress',this.onProgress,this);this.relayEvents(this.uploader,['allfinished','filefinished']);Ext.ux.UploadButton.superclass.onRender.call(this,ct,position);},cancel:function(){if(!this.uploader)
return;this.uploader.stopUpload();},twoDigit:function(n){var x=parseInt(n,10);if(x<10)
return'0'+x;return x;},onProgress:function(uploader,data){var state=data.state;var bytesTotal=data.bytesTotal||1;var bytesUploaded=data.bytesUploaded||0;var status='';if(bytesTotal==bytesUploaded)
{status=__tr('Completed');}
else
{var speed=data.speedLast;if(speed!=null){var unit=__tr('b/s');var places=0;if(speed>1024.0){unit=__tr('Kb/s');speed/=1024.0;if(speed>1024.0){places=2;unit=__tr('Mb/s');speed/=1024.0;}}
status+=speed.toFixed(places)+' '+unit;}
var estSec=data.estSec;if(estSec){if(status!='')status+=', ';var h=estSec/3600;if(h>=1){status+=this.twoDigit(h)+":";}
status+=this.twoDigit(estSec%3600/60)+":"+
this.twoDigit(estSec%60)+__tr(' remaining');}}
Ext.MessageBox.updateProgress(bytesUploaded/bytesTotal,status);},getFileName:function(inp){return inp.getValue().split(/[\/\\]/).pop();},getFilePath:function(inp){return inp.getValue().replace(/[^\/\\]+$/,'');},getFileCls:function(name){var atmp=name.split('.');if(1===atmp.length){return'file';}
else{return'file-'+atmp.pop().toLowerCase();}},upload:function(extraFields){this.uploader.baseParams=extraFields;this.uploader.upload();},onAddFile:function(bb){if(true!==this.eventsSuspended&&false===this.fireEvent('beforefileadd',this,bb.getInputFile())){return;}
var inp=bb.detachInputFile();inp.addClass('x-hidden');var fileName=this.getFileName(inp);var fileCls=this.getFileCls(fileName);var filePath=this.getFilePath(inp);var rec=new this.store.recordType({input:inp,fileName:fileName,filePath:filePath,shortName:Ext.util.Format.ellipsis(fileName,this.maxLength),fileCls:fileCls,state:'queued'},inp.id);rec.commit();if(this.label&&fileName){this.label.dom.innerHTML=Ext.util.Format.htmlEncode(fileName);}
this.clearStore();this.store.add(rec);this.fireEvent('addfile',this,fileName,filePath);},hasFile:function(){return this.store.getCount()>0;},clearStore:function(){this.store.each(function(record){var i=record.get('input');if(i&&i.dom&&i.dom.parentNode){i.dom.parentNode.removeChild(i.dom);}});this.store.removeAll();},reset:function(){this.clearStore();if(this.label){this.label.dom.innerHTML=__tr('Please choose a file');}},getValue:function(){if(this.store.getCount()==0)
return null;var rec=this.store.getAt(0);return rec.get('fileName');}});Ext.reg('xupload',Ext.ux.UploadButton);