gConst.kMonitorInterval=2000;
gConst.kGetStatusTimeOutPeriod=6000;
gConst.kAddUploadedImageTimeOutPeriod=10000;
gConst.kUploadFilenameTruncateLength=32;
gConst.kGetUploadStatusUrl="data/getUploadStatus.php";
gConst.kCommState={Idle:null,Connect:1,Upload:2,Cancel:3,Err:4};
function HtmlUploader(){
var _1=null;
var _2=null;
var _3=null;
var _4=null;
var _5=[];
var _6=null;
var _7=[];
var _8=null;
var _9=null;
var _a=true;
this.init=function(){
var _b=function(){
gPage.iHtmlUploader.finishInit();
};
var _c={parameters:{clear:1},timeout:20000};
HTTP.get(gConst.kGetUploadStatusUrl,_b,_c);
_6=gConst.kGetStatusTimeOutPeriod;
};
this.finishInit=function(){
var _d=$("htmlUploader").getElementsByTagName("input");
var _e=0;
for(var i=0;i<_d.length;i++){
if(_d[i].id.match(/^file/)){
_d[i].onchange=function(){
gPage.iHtmlUploader.uploadForm(this.parentNode);
};
_5[_e++]={timer:null,orderRq:null,orderRqTimeouts:0,state:gConst.kCommState.Idle};
}
}
$("htmlUploader").style.visibility="visible";
};
this.setNoDuplicateCheck=function(){
_a=false;
};
this.getIsActive=function(){
var _10=false;
for(var i=0;i<_5.length;i++){
if(_5[i].state!=null){
_10=true;
break;
}
}
return _10;
};
this.uploadForm=function(_12){
if(_12.name){
var _13=_12.name.match(/form(\d+)$/);
_9=_13[1];
var _14=true;
if(_a){
var _15=$("file"+_13[1]).value;
if(gUtils.arrayFind(_7,_15)==gConst.kNotDefined){
_7.push(_15);
}else{
_14=false;
var _16="a file with this name has already been uploaded. if it is identical, it will "+"be ignored by the server.";
gPage.iDialog=new Dialog("confirm change settings",_16,null,this,this.confirmCallback,"cancel","continue");
gPage.iDialog.display();
}
}
if(_14){
this.doUpload();
}
}
};
this.confirmCallback=function(_17){
if(_17){
this.doUpload();
}else{
this.clearUpload(_9);
}
};
this.doUpload=function(){
_5[_9].state=gConst.kCommState.Connect;
this.showUploadFeedback(_9,"connecting..");
var _18=$("progressBox"+_9).style;
_18.background="white";
_18.borderColor="#888";
this.setControlEnabled(_9,false);
this.setStopButtonEnabled(_9,true);
$("form"+_9).submit();
if(_3===null&&_2===null){
_1=0;
this.startStatusUpdate();
}
};
this.startStatusUpdate=function(){
_2=HTTP.newRequest();
_2.onreadystatechange=function(){
gPage.iHtmlUploader.monitorStateChanged();
};
_2.open("GET",gConst.kGetUploadStatusUrl,true);
_2.setRequestHeader("Connection","close");
_2.send(null);
_4=window.setTimeout("gPage.iHtmlUploader.requestTimedOut();",_6);
};
this.monitorStateChanged=function(){
if(_2.readyState==4){
window.clearTimeout(_4);
try{
if(_2.status==200){
this.handleStatusResponse();
}else{
this.monitorError("communication error");
}
}
catch(e){
}
_2=null;
this.restartGetStatusIfUploadActive();
}
};
this.restartGetStatusIfUploadActive=function(){
_3=null;
for(var i=0;i<_5.length;i++){
if(_5[i].state==gConst.kCommState.Connect||_5[i].state==gConst.kCommState.Upload){
_3=window.setTimeout(function(){
gPage.iHtmlUploader.startStatusUpdate();
},gConst.kMonitorInterval);
break;
}
}
};
this.handleStatusResponse=function(){
var _1a,i,_1c,_1d;
if(_2.responseText!="null"){
_1a=JSON.parse(_2.responseText);
if(_1a!=false){
for(i=0;i<_1a.statusArray.length;i++){
_1c=_1a.statusArray[i].index;
window.clearTimeout(_5[_1c].timer);
_5[_1c].timer=null;
if(_1a.statusArray[i].status=="ok"){
if(_1a.statusArray[i].percent==100){
if(_5[_1c].state!="process"){
_5[_1c].state="process";
this.setStopButtonEnabled(_1c,false);
window.setTimeout("gPage.iHtmlUploader.startAddUploadedImageRequest("+_1c+")",250);
}
}else{
if(_5[_1c].state!=gConst.kCommState.Cancel){
_5[_1c].state=gConst.kCommState.Upload;
this.setUploadProgressDisplay(_1c,_1a.statusArray[i].percent);
_1d=_1a.statusArray[i].speed;
this.showUploadFeedback(_1c,_1d.length>0?"eta "+_1a.statusArray[i].eta+" :: "+_1d:"connected");
}
}
}else{
if(_1a.statusArray[i].status=="err"){
this.showClearingUploadFeedback(_1c,_1a.statusArray[i].info,true,7000);
_5[_1c].state=gConst.kCommState.Err;
if(_1a.statusArray[i].info=="upload too big"){
window.location.reload();
}
}
}
}
}
}
};
this.monitorError=function(_1e){
_3=null;
for(var i=0;i<_5.length;i++){
if(_5[i].state==gConst.kCommState.Connect||_5[i].state==gConst.kCommState.Upload){
this.showClearingUploadFeedback(i,_1e,true,7000);
}
}
};
this.requestTimedOut=function(){
_1++;
if(_1%4==0){
this.monitorFeedback("in progress.");
}else{
this.concatMonitorFeedback(".");
}
_4=window.setTimeout("gPage.iHtmlUploader.requestTimedOut();",_6);
};
this.clearUpload=function(_20){
_5[_20].timer=null;
this.showUploadFeedback(_20,"");
var _21=$("progress"+_20).style;
_21.width=0;
_21.background="#9797FF";
this.clearUploadControl(_20);
var _22=$("progressBox"+_20).style;
_22.background="#dedede";
_22.borderColor="#ccc";
};
if(navigator.userAgent.match(/(msie|opera|safari)/i)){
this.clearUploadControl=function(_23){
this.setControlEnabled(_23,true);
var _24=$("file"+_23);
var _25=document.createElement("input");
_25.type="file";
_25.id="file"+_23;
_25.name="file"+_23;
_25.accept="image/jpeg,image/jpg,image/jpe,image/pjpeg,image/tiff,image/tiff-fx,application/zip";
_24.parentNode.replaceChild(_25,_24);
_25.onchange=function(){
gPage.iHtmlUploader.uploadForm(this.parentNode);
};
};
}else{
this.clearUploadControl=function(_26){
this.setControlEnabled(_26,true);
$("file"+_26).value="";
};
}
this.startAddUploadedImageRequest=function(_27){
this.setUploadProgressDisplay(_27,100);
this.showUploadFeedback(_27,"processing..");
_5[_27].orderRq=HTTP.newRequest();
_5[_27].orderRq.onreadystatechange=function(_28){
gPage.iHtmlUploader.handleAddUploadedImageResponse(_28,_27);
};
var url=this.getUploadStatusUrl(_27);
_5[_27].orderRq.open("GET",url,true);
_5[_27].orderRq.send(null);
_5[_27].orderRqTimeouts=0;
_5[_27].timer=window.setTimeout("gPage.iHtmlUploader.addUploadedImageTimeout("+_27+");",gConst.kAddUploadedImageTimeOutPeriod);
};
this.handleAddUploadedImageResponse=function(_2a,_2b){
if(_5[_2b].orderRq.readyState==4){
window.clearTimeout(_5[_2b].timer);
_5[_2b].timer=null;
if(_5[_2b].orderRq.status==200){
this.addUploadedImageComplete(_2b);
}else{
this.showClearingUploadFeedback(_2b,"communication error",true,7000);
}
}
};
this.addUploadedImageComplete=function(_2c){
var _2d=JSON.parse(_5[_2c].orderRq.responseText);
if(_2d!=false){
if(_2d.status=="ok"){
this.showClearingUploadFeedback(_2c,"complete (updating...)",false,2000);
$("iframe"+_2c).src="inl/blank.html";
this.onUploadSuccess(_2c,_2d);
}else{
this.showClearingUploadFeedback(_2c,_2d.info,true,7000);
}
}else{
this.showClearingUploadFeedback(_2c,"server warning",true,7000);
}
_5[_2c].state=gConst.kCommState.Idle;
};
this.addUploadedImageTimeout=function(_2e){
_5[_2e].orderRqTimeouts++;
if(_5[_2e].orderRqTimeouts%4==0){
$("progressText"+_2e).innerHTML="processing..";
}else{
if(_5[_2e].orderRqTimeouts%2==0){
$("progressText"+_2e).innerHTML="adding images..";
}else{
$("progressText"+_2e).innerHTML+="...";
}
}
if(_5[_2e].orderRqTimeouts==90){
_5[_2e].orderRq.abort();
window.clearTimeout(_5[_2e].timer);
_5[_2e].timer=null;
this.showClearingUploadFeedback(_2e,"no response",true,7000);
}else{
_5[_2e].timer=window.setTimeout("gPage.iHtmlUploader.addUploadedImageTimeout("+_2e+");",gConst.kAddUploadedImageTimeOutPeriod);
}
};
this.showUploadFeedback=function(_2f,_30,_31){
if(_31){
$("progress"+_2f).style.background="#FE428F";
this.setUploadProgressDisplay(_2f,100);
}else{
$("progress"+_2f).style.background="#9797FF";
}
$("progressText"+_2f).innerHTML=_30;
};
this.monitorFeedback=function(_32){
for(var i=0;i<_5.length;i++){
if(_5[i].state==gConst.kCommState.Connect||_5[i].state==gConst.kCommState.Upload){
$("progressText"+i).innerHTML=_32;
}
}
};
this.concatMonitorFeedback=function(_34){
for(var i=0;i<_5.length;i++){
if(_5[i].state==gConst.kCommState.Connect||_5[i].state==gConst.kCommState.Upload){
$("progressText"+i).innerHTML+=_34;
}
}
};
this.showClearingUploadFeedback=function(_36,_37,_38,_39){
if(_5[_36].timer!=null){
window.clearTimeout(_5[_36].timer);
}
this.showUploadFeedback(_36,_37,_38);
_5[_36].timer=window.setTimeout("gPage.iHtmlUploader.clearUpload("+_36+");",_39);
};
this.setUploadProgressDisplay=function(_3a,_3b){
try{
var _3c=$("progressBox"+_3a).offsetWidth-2;
$("progress"+_3a).style.width=Math.round(_3c*_3b/100)+"px";
}
catch(e){
}
};
this.setControlEnabled=function(_3d,_3e){
var _3f=$("file"+_3d);
var _40=$("fileName"+_3d);
var _41=_40.firstChild;
if(_3e){
_40.style.display="none";
_3f.style.display="inline";
_41.replaceChild(document.createTextNode(" "),_41.firstChild);
}else{
_3f.style.display="none";
_40.style.display="block";
var _42=_3f.value;
if(_42.length>gConst.kUploadFilenameTruncateLength){
_42=".."+_42.substring(_42.length-gConst.kUploadFilenameTruncateLength,_42.length);
}
_41.replaceChild(document.createTextNode(_42),_41.firstChild);
}
};
this.setStopButtonEnabled=function(_43,_44){
var img=$("stop_"+_43);
if(_44){
img.src=img.src.replace(/[^\/]+\.gif$/,"stop_upload.gif");
img.title="cancel upload";
img.onmouseover=function(){
mouseOverGif(this);
};
img.onmouseout=function(){
mouseOut(this);
};
img.onclick=function(){
gPage.iHtmlUploader.stopUpload(this.id);
};
}else{
img.src=img.src.replace(/[^\/]+\.gif$/,"stop_upload_inactive.gif");
img.title=undefined;
img.onmouseover=function(){
};
img.onmouseout=function(){
};
img.onclick=function(){
};
}
};
this.stopUpload=function(aId){
var _47=aId.match(/^stop\_(\d+)/);
this.showUploadFeedback(_47[1],"cancelling...");
if(_5[_47[1]].orderRq){
_5[_47[1]].orderRq.abort();
}
$("iframe"+_47[1]).src="inl/blank.html";
_5[_47[1]].state=gConst.kCommState.Cancel;
if(_5[_47[1]].timer){
window.clearTimeout(_5[_47[1]].timer);
_5[_47[1]].timer=null;
}
this.removeControlValueFromUploadedFilenames(_47[1]);
this.setControlEnabled(_47[1],true);
this.setStopButtonEnabled(_47[1],false);
var _48=function(_49){
gPage.iHtmlUploader.cancelUploadDone(_49);
};
var _4a={parameters:{clear:1,index:_47[1]},timeout:20000};
HTTP.get(gConst.kGetUploadStatusUrl,_48,_4a);
};
this.removeControlValueFromUploadedFilenames=function(_4b){
var _4c=gUtils.arrayFind(_7,$("file"+_4b).value);
if(_4c!==gConst.kNotDefined){
_7.splice(_4c,1);
}
};
this.cancelUploadDone=function(_4d){
var _4e=_4d.index;
this.clearUpload(_4e);
_5[_4e].state=gConst.kCommState.Idle;
this.stopUploadComplete();
};
this.stopAllUploads=function(_4f){
for(var i=0;i<gConst.kMaxFileUploadControls;i++){
if(_5[i].state==gConst.kCommState.Connect||_5[i].state==gConst.kCommState.Upload){
this.stopUpload("stop_"+i);
}
}
_8=_4f;
};
this.stopUploadComplete=function(){
if(_8!==null){
var ok=true;
for(var i=0;i<gConst.kMaxFileUploadControls;i++){
if(_5[i].state!=gConst.kCommState.Idle){
ok=false;
}
}
if(ok){
_8();
}
}
};
}
HtmlUploader.prototype.getUploadStatusUrl=function(_53){
return gConst.kGetUploadStatusUrl+"?process="+_53;
};
HtmlUploader.prototype.onUploadSuccess=function(_54,_55){
gPage.iImagePager.updateFromServer();
};


