Вход Регистрация
Файл: js/al/upload.js
Строк: 1457
<?php
if (!window.jsonpManager) {
  
window.jsonpManager window.__jsp = {
    
c1,
    
h: {},
    
reg: function(h) {
      
__jsp.h[__jsp.c] = isFunction(h) ? : function(){};
      return 
__jsp.c++;
    }
  }
}

if (!
window.Upload) {
var 
Upload = {

init: function(objuploadUrlvarsoptions) {
  
window.uploadInterface = (window.uploadInterface != undefined) ? uploadInterface 0;
  var 
iUpload uploadInterface;

  
each(['obj''dropbox''options''vars''types''uploadUrls''callbacks''checks'], function(iv) {
    if (!
Upload[v]) Upload[v] = {};
  });

  
this.obj[iUpload] = ge(obj);
  if (
options.dropbox) {
    
this.dropbox[iUpload] = ge(options.dropbox);
  }
  
this.vars[iUpload] = vars;
  
options.file_input ge(options.file_input);
  
this.options[iUpload] = options;
  if (
options.clear) {
    
cur.destroy.push(Upload.deinit.pbind(iUpload));
  }

  
this.uploadUrls[iUpload] = uploadUrl;
  if (
options.flash_lite && !browser.flash && !this.checkFileApi()) {
    
this.obj[iUpload] = ge(options.fieldEl) || this.obj[iUpload].parentNode.firstChild;
  } else {
    if (
options.customShowProgress) {
      
options.customShowProgress();
    } else {
      if (
this.obj[iUpload].tagName == 'INPUT' && !this.checkFileApi()) {
        
this.obj[iUpload] = ge(options.fieldEl) || this.obj[iUpload].parentNode.firstChild;
      } else if (!
options.flash_lite) {
        
this.obj[iUpload].innerHTML '<div class="loading"><img src="/images/upload.gif" /></div>';
      }
    }
  }
  if (
options.noCheck) {
    
this.embed(iUpload);
  } else {
    
this.check(iUpload);
  }

  return 
iUpload;
},
deinit: function(iUpload) {
  if (!
Upload.obj[iUpload]) return;

  var 
options Upload.options[iUpload] || {}, dragEl options.dragEvObj;
  if (
dragEl) {
    
removeEvent(dragEl'dragenter');
    
removeEvent(dragEl'dragover');
    
removeEvent(dragEl'dragleave');
  }
  
each(['obj''dropbox''options''vars''types''uploadUrls''callbacks'], function(iv) {if (Upload[v]) delete Upload[v][iUpload]});
  if (
Upload.callbacks) {
    if (
Upload.callbacks['oncheck'+iUpload]) delete Upload.callbacks['oncheck'+iUpload];
    if (
Upload.callbacks['ondone'+iUpload]) delete Upload.callbacks['ondone'+iUpload];
    if (
Upload.callbacks['onfail'+iUpload]) delete Upload.callbacks['onfail'+iUpload];
  }
  
clearTimeout(Upload.checks['timer'+iUpload]);
},

check: function(iUpload) {
  var 
obj this.obj[iUpload], vars this.vars[iUpload], options this.options[iUpload];
  var 
check_url options.check_url options.check_url this.uploadUrls[iUpload], check_vars = {};
  if (
options.signed) {
    if (!
check_url) return Upload.onCheckComplete(iUpload);
    
extend(check_vars, {_jsonpjsonpManager.reg(function(r) { Upload.onCheckComplete(iUploadr); })});
  } else {
    if (!
options.check_hash && !options.server) {
      return 
Upload.onCheckComplete(iUpload);
    }

    
this.callbacks['oncheck'+iUpload] = Upload.onCheckComplete.pbind(iUpload);
    var 
= ['mid''aid''gid''hash''rhash'];
    for (var 
i in t) {
      
check_vars[t[i]] = vars[t[i]];
    }
    if (
options.check_hash) {
      
check_vars.hash options.check_hash;
    }
    if (
options.check_rhash) {
      
check_vars.rhash options.check_rhash;
    }
    if (
vars.https_resp) {
      
check_vars.https_resp vars.https_resp;
    }
    
extend(check_vars, {al1act'check_upload'typeoptions.typeondone"Upload.callbacks.oncheck"+iUpload});
  }
  var 
html '<form action="' check_url '" enctype="multipart/form-data" method="post" id="check_upload_form' iUpload '" target="check_iframe' iUpload '">';
  for (var 
i in check_vars) {
    
html += '<input type="hidden" name="' '" value="' check_vars[i] + '" />';
  }
  
html += '</form><iframe style="visibility: hidden; width: 1px; height: 1px;" id="check_iframe' iUpload '" name="check_iframe' iUpload '"></iframe>';
  var 
check ce('div', {id'check_upload_'+iUploadinnerHTMLhtmlclassNameoptions.checkClass || ''}, {display'none'});
  if (
ge('check_upload_'+iUpload)) re('check_upload_'+iUpload);
  
obj.appendChild(check);
  var 
form ge('check_upload_form' iUpload);
  
form && form.submit();
  
clearTimeout(Upload.checks['timer'+iUpload]);
  
this.checks['timer'+iUpload] = setTimeout(Upload.serverFail.pbind(iUpload), 10000);
},

onCheckComplete: function(ires) {
  
clearTimeout(Upload.checks['timer' i]);
  
delete Upload.checks['timer' i];

  var 
obj = {}, options Upload.options[i], data res;
  if (
options.signed) {
    
obj parseJSON(res || '{}');
  } else {
    
res res || '';
    
res res.split('&');
    for (var 
j in res) {
      var 
res[j].split('=');
      
obj[t[0]] = t[1];
    }
    
data obj;
  }
  if (
options.customHideProgress) {
    
options.customHideProgress();
  }
  if (!
obj.error && !obj.fail) {
    
options.noCheck 1;
    if (
options.onCheckComplete) {
      
options.onCheckComplete(i);
    } else if (
options.flash_lite && browser.flash) {
      
Upload.initFlash(iUpload.obj[i]);
    } else {
      
Upload.embed(i);
    }
    
Upload.serverSuccess(idata);
  } else {
    
Upload.serverFail(idata);
  }
},

serverFail: function(ierr_obj) {
  var 
obj Upload.obj[i], options Upload.options[i], vars Upload.vars[i];
  if (!
obj) return;
  if (!
options.signed && !options.server) return;

  if (!
Upload.failsUpload.fails = {};
  
Upload.fails[i] = Upload.fails[i] ? Upload.fails[i] + 1;
  if (
options.signed) {
    var 
parts Upload.uploadUrls[i].split('?'), tmp q2ajx(parts[1]), extend({
      
act'check_result',
      
_resigntmp._query || parts[1]
    }, 
err_obj ? {_queryerr_obj} : {_checkoptions.check_url.split('?')[1]});
    
ajax.post('upload_fails.php'q, {
      
onDone: function(urlcheck_urlbase_urlstatic_url) {
        if (
Upload.fails[i] < options.max_attempts) {
          
Upload.uploadUrls[i] = url;
          
extend(Upload.options[i], {
            
check_urlcheck_url,
            
base_urlbase_url,
            
static_urlstatic_url
          
});
          
Upload.check(i);
        } else {
          
obj.innerHTML '';
          if (
options.lang && options.lang.cannot_upload_title && options.lang.cannot_upload_text) {
            
showFastBox({titleoptions.lang.cannot_upload_titlewidth430}, options.lang.cannot_upload_text);
          }
        }
      }
    });
    return;
  }
  var 
query extend({
    
act'fail',
    
roleoptions.type,
    
midvars.mid,
    
oidvars.oid,
    
gidvars.gid,
    
aidvars.aid,
    
serveroptions.server,
    
erroroptions.error,
    
hashoptions.error_hash
  
}, err_obj);
  if (
options.custom_hash) {
    
extend(query, {custom_hashoptions.custom_hashphoto_hashvars.photo_hashsizevars.sizefidvars.fidvidvars.vidtagvars.tag});
  }
  if (
window.ajax) {
    
ajax.post('upload_fails.php'query, {
      
onDone: function(urlnew_varsopts) {
        if (
Upload.fails[i] < options.max_attempts) {
          
Upload.uploadUrls[i] = url;
          
extend(Upload.options[i], opts);
          
extend(Upload.vars[i], new_vars);
          
Upload.check(i);
        } else {
          
obj.innerHTML '';
          if (
options.lang && options.lang.cannot_upload_title && options.lang.cannot_upload_text) {
            
showFastBox({titleoptions.lang.cannot_upload_titlewidth430}, options.lang.cannot_upload_text);
          }
        }
      }
    });
  } else {
    if (
options.server != 100000) return;
    
Ajax.Send('/upload_fails.php'query, function(ajaxObjresponse) {
      try {
        
response = eval('(' response ')');
      } catch (
e) {
        
response null;
      }
      var 
opts response.optionsnew_vars response.varsurl response.upload_url;
      if (
Upload.fails[i] < options.max_attempts) {
        
Upload.uploadUrls[i] = url;
        
extend(Upload.options[i], opts);
        
extend(Upload.vars[i], new_vars);
        
Upload.check(i);
      } else {
        
obj.innerHTML '';
        if (
options.lang && options.lang.cannot_upload_title && options.lang.cannot_upload_text) {
          
showFastBox({titleoptions.lang.cannot_upload_titlewidth430}, options.lang.cannot_upload_text);
        }
        
options.onCheckServerFailed && options.onCheckServerFailed();
      }
    });
  }
},

serverSuccess: function(ierr_obj) {
  var 
options Upload.options[i], vars Upload.vars[i];
  
Upload.checked Upload.checked || {};
  
Upload.checked[i] = 1;
  if (
options.signed) {
    
ajax.post('upload_fails.php', {act'check_result'_queryerr_obj});
    return;
  }
  if (!
options.server && !options.error_hash) return;
  var 
query extend({
    
act'success',
    
midvars.mid,
    
oidvars.oid,
    
gidvars.gid,
    
aidvars.aid,
    
serveroptions.server,
    
erroroptions.error,
    
hashoptions.error_hash
  
}, err_obj);
  if (
window.ajax) {
    
ajax.post('upload_fails.php'query);
  } else {
    
Ajax.Send('/upload_fails.php'query);
  }
},

embed: function(iUpload) {
  var 
iUpload.num != undefined iUpload.num iUploadobj this.obj[i], dropbox this.dropbox[i], options this.options[i];
  if (
options.noEmbed) {
    
re('check_upload_'+iUpload);
    return;
  }
  if (!
options.noCheck) return;

  if (
browser.flash && options.forceFlash) {
    
this.initFlash(iobj);
  } else if (
this.checkFileApi() && !options.flash_lite) {
    
this.initFileApi(iobjdropbox);
  } else if (
browser.flash && !options.noFlash) {
    
this.initFlash(iobj);
  } else if (!
options.noForm) {
    
this.initForm(iobj);
  }
},

checkFileApi: function() {
  return (
window.XMLHttpRequest || window.XDomainRequest) && (window.FormData || window.FileReader && (window.XMLHttpRequest && XMLHttpRequest.sendAsBinary ||  window.ArrayBuffer && window.Uint8Array && (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)));
},

initFlash: function(iUploadobj) {
  var 
postData = [], vars Upload.vars[iUpload], options Upload.options[iUpload];
  var 
opts = {
    
urloptions.flashPath || '/swf/uploader_lite.swf',
    
id'uploader_lite'+iUpload,
    
preventhidetrue,
    
width'100%',
    
heightbrowser.safari || browser.msie || browser.chrome && intval(browser.version) < 17 ? (options.flashHeight options.flashHeight 'px' : (cur.flash_lite && !isVisible('photos_flash_add_button') ? '67px' '25px')) : '100%'
  
};
  var 
params = {
    
swliveconnect'true',
    
allowscriptaccess'always',
    
wmodebrowser.msie 'opaque' 'transparent'
  
}
  
Upload.types[iUpload]  = 'flash';
  for (var 
i in vars) {
    
postData.push(i+'='+vars[i]);
  }
  if (!
options.signed && !vars['ajx']) {
    
postData.push('ajx=1');
  }

  var 
flashVars = clone(vars)
  
extend(flashVars, {
    
'upload_url'Upload.uploadUrls[iUpload],
    
'file_size_limit'options.file_size_limit,
    
'file_types_description'options.file_types_description,
    
'file_types'options.file_types,
    
'file_name'options.file_name,
    
'post_data'escape(postData.join('&')),
    
'onUploadStart'"Upload.onUploadStart.pbind("+iUpload+")",
    
'onUploadProgress'"Upload.onUploadProgress.pbind("+iUpload+")",
    
'onUploadSuccess'"Upload.onUploadComplete.pbind("+iUpload+")",
    
'onUploadComplete'"Upload.onUploadCompleteAll.pbind("+iUpload+")",
    
'onUploadError'"Upload.onUploadError.pbind("+iUpload+")",
    
'onDebug'"Upload.onDebug.pbind("+iUpload+")",
    
'onMouseDown'"Upload.buttonDown.pbind("+iUpload+")",
    
'onMouseUp'"Upload.buttonUp.pbind("+iUpload+")",
    
'onMouseOver'"Upload.buttonOver.pbind("+iUpload+")",
    
'onMouseOut'"Upload.buttonOut.pbind("+iUpload+")",
    
'onSelectClick'"Upload.onSelectClick.pbind("+iUpload+")"
  
});

  if (!
options.flash_lite) {
    if (!
options.lang['button_browse']) {
      
options.lang['button_browse'] = 'Выбрать файл';
    }
    
obj.innerHTML '<div id="uploader'+iUpload+'" class="button_blue" style="position: relative;"><div id="lite_upload' iUpload '" style="position: absolute; height: 100%; width: 100%; z-index: 10000; cursor: pointer;"></div><button class="upload_btn">' options.lang['button_browse'] + '</button></div>';
  } else {
    
obj.innerHTML '<div class="lite_upload" id="lite_upload' iUpload '" style="z-index:10000; width: 100%; height: 100%; cursor: pointer;"></div>';
  }
  
renderFlash(ge('lite_upload'+iUpload), optsparamsflashVars);
  if (
browser.msiesetStyle(ge('lite_upload'+iUpload), {opacity0cursor'pointer'});

  if (
options.lang.switch_mode) {
    var 
text options.lang.switch_mode.replace('{link}''<a onclick="Upload.switchMode('+iUpload+');">');
    
text text.replace('{/link}''</a>');
    
obj.appendChild(ce('div', {
      
innerHTMLtext,
      
align'left'
    
}, {
      
marginTop'15px'
    
}));
  }
},

initForm: function(iUploadobj) {
  var 
_iu iUploadvars this.vars[_iu], options this.options[_iu];
  
this.types[_iu] = 'form';

  
// setTimeout is needed at least for Opera to allow to do ajax requests in this callbacks. Otherwise it hangs up on XHR.open() call.

  
var html '<form action="' this.uploadUrls[_iu] + '" enctype="multipart/form-data" method="post" id="file_uploader_form' _iu '" target="upload_iframe' _iu '" style="text-align: center; width: 100%;">';
  if (
options.signed) {
    
extend(vars, {_jsonpjsonpManager.reg(function(r) { Upload.onUploadComplete(_iur); })});
  } else {
    var 
onDoneCallback Upload.onUploadComplete.pbind(_iu);
    var 
onFailCallback Upload.onUploadError.pbind(_iu);
    
this.callbacks['ondone'+_iu] = function() { var callback onDoneCallback.pbind.apply(onDoneCallbackarguments); setTimeout(function(){ callback(); }, 1); };
    
this.callbacks['onfail'+_iu] = function() { var callback onFailCallback.pbind.apply(onFailCallbackarguments); setTimeout(function(){ callback(); }, 1); };
    
extend(vars, {al1ondone"Upload.callbacks.ondone"+_iuonfail"Upload.callbacks.onfail"+_iu});
  }
  for (var 
i in vars) {
    
html += '<input type="hidden" name="' '" value="' vars[i] + '" />';
  }
  var 
input '<input type="file" class="file" size="28" onchange="Upload.onUploadStart(' _iu ');" name="' options['file_name'] + '" style="cursor: pointer;"' + (options.accept ' accept="' options.accept '"' '') + '/>
  
  </form><iframe style="position: absolute; visibility: hidden; width: 1px; height: 1px;" id="upload_iframe' 
_iu '" name="upload_iframe' _iu '"></iframe>';
  if (
options.label) {
    
html += options.label.split('{file}').join(input);
  } else {
    
html += input;
  }
  
obj.innerHTML html;
  var 
nfile options.file_input,
      
cfile geByClass1('file'obj'input');

  
delete options.file_input;
  if (
nfile && cfile) {
    
cfile.parentNode.replaceChild(nfilecfile);
    
nfile.onchange = function () {Upload.onUploadStart(_iu)};
    if (
data(nfile'changed')) {
      
data(nfile'changed'false);
      
nfile.onchange();
    }
  }
},

buttonOver: function(iUpload) {
  var 
options Upload.options[iUpload];
  if (
options.flash_lite) {
    if (
options.hoverEl) {
      
addClass(options.hoverEl'hover');
    } else if (
isVisible('photos_flash_add_button')) {
      
addClass(ge('photos_flash_add_button'), 'hover');
    } else {
      
addClass(ge('photos_upload_area'), 'hover');
    }
  } else {
    
addClass(ge('lite_upload'+iUpload).nextSibling'hover');
  }
},
buttonOut: function(iUpload) {
  var 
options Upload.options[iUpload];
  if (
options.flash_lite) {
    if (
options.hoverEl) {
      
removeClass(options.hoverEl'hover');
    } else if (
isVisible('photos_flash_add_button')) {
      
removeClass(ge('photos_flash_add_button'), 'hover');
      
removeClass(ge('photos_flash_add_button'), 'active');
    } else {
      
removeClass(ge('photos_upload_area'), 'hover');
    }
  } else {
    
removeClass(ge('lite_upload'+iUpload).nextSibling'hover');
    
removeClass(ge('lite_upload'+iUpload).nextSibling'active');
  }
},
buttonDown: function(iUpload) {
  if (
Upload.options[iUpload].flash_lite) {
    if (
isVisible('photos_flash_add_button')) {
      
addClass(ge('photos_flash_add_button'), 'active');
    }
  } else {
    
addClass(ge('lite_upload'+iUpload).nextSibling'active');
  }
},
buttonUp: function(iUpload) {
  if (
Upload.options[iUpload].flash_lite) {
    if (
isVisible('photos_flash_add_button')) {
      
removeClass(ge('photos_flash_add_button'), 'active');
    }
  } else {
    
removeClass(ge('lite_upload'+iUpload).nextSibling'active');
  }
},

initFileApi: function(iUploadobjdropbox) {
  var 
options this.options[iUpload], input,
      
dragEl options && options.dragEl || window.boxLayerWrap;
  if (
dropbox && dragEl) {
    if (!
Upload.addedDocEvent) {
      
addEvent(document'drop'Upload.drop);
      
Upload.addedDocEvent true;
    }
    
options.dragEvObj dragEl;
    
addEvent(dragEl'dragenter'Upload.dragEnter.pbind(iUpload));
    
addEvent(dragEl'dragover'Upload.dragOver.pbind(iUpload));
    
addEvent(dragEl'dragleave'Upload.dragOut.pbind(iUpload));
  }
  
this.types[iUpload] = 'fileApi';
  if (
options.chooseBox) {
    
input '<input class="file" type="file" size="28" onchange="Upload.onFileApiSend('+iUpload+', this.files);"' + (options.multiple ' multiple="true"' '') + (options.accept ' accept="' options.accept '"' '') + ' name="' options['file_name'] + '" style="cursor: pointer;"/>';
  } else {
    if (!
options.lang['button_browse']) {
      
options.lang['button_browse'] = 'Выбрать файл';
    }
    
input '<div class="button_blue"><button class="upload_btn" onclick="this.parentNode.nextSibling.click()">' options.lang['button_browse'] + '</button></div><input class="file" type="file" size="28" onchange="Upload.onFileApiSend('+iUpload+', this.files);"' + (options.multiple ' multiple="true"' '') + (options.accept ' accept="' options.accept '"' '') + ' name="' options['file_name'] + '" style="visibility: hidden; position: absolute;"/>';
  }
  if (
options.label) {
    
obj.innerHTML options.label.split('{file}').join(input);
  } else {
    
obj.innerHTML input;
  }
  var 
nfile options.file_input,
      
cfile geByClass1('file'obj'input');
  if (
nfile && cfile) {
    
cfile.parentNode.replaceChild(nfilecfile);
    
nfile.onchange = function () {Upload.onFileApiSend(iUploadthis.files);};
    if (
data(nfile'changed')) {
      
data(nfile'changed'false);
      
setTimeout(nfile.onchange.bind(nfile), 0);
    }
  }
},

switchMode: function(i) {
  
Upload.options[i].noFlash Upload.options[i].noCheck 1;
  
Upload.embed(i);
},

onUploadStart: function(inforesult) {
  
cur.fileApiUploadStarted true;
  var 
info.ind !== undefined info.ind info;
  if (
Upload.types[i] == 'form') {
    var 
form ge('file_uploader_form' i);
    
form.submit();
    var 
file geByClass1('file'Upload.obj[i]);
    
file.disabled true;
  }

  var 
options Upload.options[i];
  if (
options.onUploadStart) {
    
options.onUploadStart(inforesult);
  };
},

getErrorAdditional: function(obj) {
  if (
obj.error && obj.server !== undefined && obj.bwact !== undefined) {
    return ((
obj.error.indexOf(':') !== -1) ? ',' ':') + ' from upl_' intval(obj.server) + '?act=' obj.bwact.replace(/[^a-zA-Z_0-9]/g'');
  }
  return 
'';
},
onUploadComplete: function(inforesultextra_info) {
  var 
info.ind !== undefined info.ind infooptions Upload.options[i], obj;
  if (
extra_info !== undefined && === info) {
    
info extra_info;
  }
  
info.ind i;
  if (
Upload.types[i] == 'form') {
    var 
file geByClass1('file'Upload.obj[i]);
    
file.disabled false;
  }
  if (
options.onUploadComplete) {
    var 
errorAdd '';
    if (
options.signed) {
      var 
obj parseJSON(result);
      if (!
obj) {
        
result '{"error":"ERR_CLIENT_UPLOAD_FAIL: upload request bad result, url \"' Upload.uploadUrls[i] + '\""}';
      } else {
        
errorAdd Upload.getErrorAdditional(obj);
      }
    }
    
options.onUploadComplete(inforesulterrorAdd);
  }
  if (
Upload.types[i] == 'form') {
    
Upload.onUploadCompleteAll(inforesult);
  }
},

onUploadCompleteAll: function(inforesultextra_info) {
  var 
info.ind !== undefined info.ind infooptions Upload.options[i];
  if (
extra_info !== undefined && === info) {
    
info extra_info;
  }
  if (
Upload.types[i] == 'fileApi') {
    var 
cfile geByClass1('file'Upload.obj[i], 'input');
    if (
cfile) {
      
cfile.value '';
    }
  }

  if (
options.onUploadCompleteAll) {
    
options.onUploadCompleteAll(inforesult);
  }
},

onUploadError: function(inforesult) {
  var 
info.ind !== undefined info.ind infooptions Upload.options[i];
  if (
Upload.types[i] == 'form') {
    var 
file geByClass1('file'Upload.obj[i]);
    
file.disabled false;
  }
  if (
options.signed) {
    if (
options.onUploadComplete) {
      
options.onUploadComplete('{"error":"ERR_CLIENT_UPLOAD_FAIL: upload request fail, code \"' result.replace(/([\"])/g, '\$1').replace(/n/g, '\n') + '\", url \"' + Upload.uploadUrls[i] + '\""}');
    }
  } else if (options.onUploadError) {
    options.onUploadError(info, result);
  };
},

onUploadProgress: function(info, bytesLoaded, bytesTotal) {
  var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
  if (options.onUploadProgress) {
    options.onUploadProgress(info, bytesLoaded, bytesTotal);
  };
},

onDebug: function(info, result) {
  var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
  if (options.onDebug) {
    options.onDebug(info, result);
  }
},

onSelectClick: function(info, result) {
  var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
  if (options.onSelectClick) {
    options.onSelectClick(info, result);
  }
},

onFileApiSend: function(i, files, force) {
  if (!files || !files.length) return;

  var options = this.options[i];
  if (options.reverse_files) {
    files = Array.prototype.slice.call(files).reverse();
  }

  if (!options.multiple && files.length > 1) {
    files = [files[0]]
  }

  if (options.photoBox && !force) {
    return Upload.onPhotoAdd(i, files);
  }

  if (options.beforeUpload) options.beforeUpload(i);

  cur.notStarted = cur.fileApiUploadStarted = true;
  if (!options.multi_progress) this.onUploadStart(i);
  var max_files = files.length;
  if (options.max_files) {
    var curCount = cur.attachCount ? cur.attachCount() : 0;
    if (options.max_files - curCount < files.length && options.lang && options.lang.max_files_warning) {
      max_files = options.max_files - curCount;
      showFastBox({
        title: getLang('
global_error'),
        width: 430,
        onHide: function() {
          Upload.embed(i);
          delete cur.notStarted;
        }
      }, options.lang.max_files_warning, getLang('
global_continue'), function() {
        Upload.uploadFiles(i, files, max_files);
        if (options.max_files_hide_last) {
          curBox().hide();
        } else {
          boxQueue.hideAll();
        }
      }, getLang('
global_cancel'));
    } else {
      if (options.force_max_files) {
        max_files = Math.min(max_files, options.max_files - (cur.savedPhotos || []).length);
      }
      this.uploadFiles(i, files, max_files);
    }
  } else {
    this.uploadFiles(i, files, max_files);
  }
},

onPhotoAdd: function(i, files) {
  var needFire = 0, count = 0;
  Upload.fileList = Upload.fileList || {};
  if (!Upload.fileList[i]) {
    Upload.fileList[i] = [];
    if (Upload.options[i].onPhotoBox) {
      needFire = true;
    }
  }
  each(files, function(n, file) {
    count++;
    var preview = Upload.options[i].photoBox;
    var imageType = new RegExp('
image.*')
    if (!file.type.match(imageType)) {
      //return false;
    }
    cur.uploaderPhotoId = (cur.uploaderPhotoId || 0) + 1;
    var photoId = cur.uploaderPhotoId;
    Upload.fileList[i][photoId] = file;

    var img = ce('
img');
    var photo = ce('
div', {
      id: '
photos_add_item'+photoId,
      className: '
photos_add_item',
      innerHTML: '
<span class="photos_add_img photos_add_wait" id="photos_add_cont'+photoId+'" onmouseover="PhotosAdd.thumbOver('+photoId+', this);" onmouseout="PhotosAdd.thumbOut('+photoId+');"><span class="photos_add_s" id="photos_add_s'+photoId+'">&nbsp;</span></span><span class="bg">&nbsp;</span>'
    });
    preview.appendChild(photo);

    var reader = new FileReader();
    reader.onload = function(e) {
      img.src = e.target.result;
      img.onload = function() {
        img.onload = false;
        var size = {w: img.width, h: img.height}, dx, dy;
        if (size.w > 130) {
          dx = 130 / size.w;
          size.w = 130;
          size.h = parseInt(size.h * dx);
        }


        if (size.h > 130) {
          dy = 130 / size.h;
          size.h = 130;
          size.w = parseInt(size.w * dy);
        }

        var cnv = ce('
canvas', {
          width: size.w,
          height: size.h
        });
        var ctx = cnv.getContext('
2d');
        ctx.drawImage(img, 0, 0, size.w, size.h);
        delete img;
        var dataURL = cnv.toDataURL("image/jpeg");
        img.src = dataURL;
        var thumbCont = ge('
photos_add_s'+photoId);
        var tw = Math.max(size.w, 80);
        var th = Math.min(size.h, 98);
        setStyle(thumbCont, {
          width: tw,
          height: th,
          //marginTop: Math.ceil((98 - th) / 2),
          marginLeft: Math.ceil((130 - tw) / 2)
        });
        thumbCont.innerHTML = '';
        thumbCont.appendChild(img);
        img.onload = function() {
          setTimeout(function() {
            thumbCont.parentNode.className = '
photos_add_img';
          }, 0);
          img.onload = false;
        }
        Upload.finishTask();
      }
    }
    Upload.taskToQ(function() {
      reader.readAsDataURL(file);
    });
  });
  if (needFire && count) {
    Upload.options[i].onPhotoBox();
  }
  if (Upload.options[i].onPhotoAdd && count) {
    Upload.options[i].onPhotoAdd();
  }
},

uploadPhotos: function(uplId) {
  var files = [], flist = Upload.fileList[uplId];
  for (var i in flist) {
    if (flist[i]) {
      files.push(extend(flist[i], {
        fileRef: i
      }));
    }
  }
  if (Upload.options[uplId].onUploadStart) Upload.options[uplId].onUploadStart();
  if (files.length) {
    cur.uploadCount = Math.min(500, files.length);
    Upload.uploadFiles(uplId, files, cur.uploadCount);
    return true;
  } else {
    return false;
  }
},

taskToQ: function(task) {
  if (!Upload.previewFileQ) {
    Upload.previewFileQ = [];
  }
  if (task) {
    Upload.previewFileQ.push(task);
  }

  if (Upload.doingQ) {
    return;
  }
  var newTask = Upload.previewFileQ.shift();
  if (newTask) {
    Upload.doingQ = true;
    newTask();
  }
},

finishTask: function() {
  setTimeout(function() {
    Upload.doingQ = false;
    Upload.taskToQ();

  }, 100);
},

uploadFiles: function(i, files, max_files) {
  if (max_files <= 0) return;
  var options = this.options[i],
      vars = options.signed ? this.vars[i] : extend(this.vars[i], {ajx: 1}),
      params = [],
      totalSize = 0,
      totalCount = 0,
      loadedSize = 0,
      loadedCount = 0,
      filesQueue = [],
      re;

  if (options.uploading) {
    totalSize = options.filesTotalSize || 0;
    totalCount = options.filesTotalCount || 0;
    loadedCount = options.filesLoadedCount || 0;
    loadedSize = options.filesLoadedSize || 0;
    filesQueue = options.filesQueue;
  }

  if (options.file_match) re = new RegExp(options.file_match, "i");
  for (var j in vars) {
    params.push(j + "=" + vars[j]);
  }
  var uploadUrl = this.uploadUrls[i] + (this.uploadUrls[i].match(/?/) ? '
&' : '?') + params.join('&'),
      fileName;

  var errors = false;
  for (var j = 0; j < max_files; j++) {
    fileName = files[j].fileName || files[j].name || '';
    if (options.file_match) {
      if (!fileName.match(re)) {
        errors = true;
        continue;
      }
    }
    if (options.multi_progress && !options.multi_sequence) {
      this.onUploadStart({ind: i, fileName: fileName});
    }
    totalSize += files[j].size;
    totalCount += 1;
    filesQueue.push(files[j]);
  }
  filesQueue.reverse();

  extend(options, {
    filesQueue: filesQueue,
    filesTotalSize: totalSize,
    filesLoadedSize: loadedSize,
    filesLoadedCount: loadedCount,
    filesTotalCount: totalCount
  });

  // if (options.multi_sequence && options.onUploadProgress) {
  //   options.onUploadProgress(Upload.getFileInfo(i, options, false));
  // }

  if (filesQueue.length > 0) {
    if (cur.multiProgressIndex !== undefined) {
      if (!cur.nextQueues) cur.nextQueues = [];
      cur.nextQueues.push(i);
    } else {
      this.uploadFile(i, filesQueue.pop(), uploadUrl);
      if (options.multi_progress) cur.multiProgressIndex = i;
    }
  } else if (errors) {
    Upload.onUploadError(i, '
file type not supported');
  }
},

getFileInfo: function(i, options, file) {
  return options.multi_progress ? {
    ind: i,
    fileName: (file) ? file.fileName || file.name || '' : '',
    num: options.filesLoadedCount,
    totalSize: options.filesTotalSize,
    loadedSize: options.filesLoadedSize,
    totalCount: options.filesTotalCount,
    file: file
  } : i;
},

uploadFile: function(uplId, file, url) {
  var options = this.options[uplId];
  var XHR = (browser.msie && intval(browser.version) < 10) ? window.XDomainRequest : window.XMLHttpRequest;

  var info = Upload.getFileInfo(uplId, options, file);

  if (options.multi_sequence) {
    this.onUploadStart(info);
  }

  options.uploading = true;

  if (window.FormData) {
    var formData = new FormData();
    formData.append(options.file_name, file);

    var xhr = new XHR(), fastFail = true;
    xhr.open('
POST', url, true);
    xhr.onload = function(e) {
      extend(info, Upload.getFileInfo(uplId, options, file)); // can be extended
      Upload.options[uplId].filesLoadedSize += file.size;
      Upload.options[uplId].filesLoadedCount += 1;
      Upload.onUploadComplete(info, e.target.responseText);
      if (Upload.options[uplId].filesQueue && Upload.options[uplId].filesQueue.length > 0) {
        Upload.uploadFile(uplId, Upload.options[uplId].filesQueue.pop(), url);
      } else {
        Upload.startNextQueue(uplId);
        Upload.onUploadCompleteAll(info, e.target.responseText);
        options.uploading = false;
      }
    };
    xhr.onerror = function(e) {
      if (!e.target.responseText && fastFail) {
        return nav.go('
/login?act=upload_fail', false, {nocur: true, params: {context: 0, name: file.fileName || file.name || ''}});
      }
      extend(info, Upload.getFileInfo(uplId, options, file));
      Upload.options[uplId].filesTotalSize -= file.size;
      Upload.options[uplId].filesTotalCount -= 1;
      Upload.onUploadError(info, e.target.responseText);
      if (Upload.options[uplId].filesQueue.length > 0) {
        Upload.uploadFile(uplId, Upload.options[uplId].filesQueue.pop(), url);
      } else {
        Upload.startNextQueue(uplId);
        Upload.onUploadCompleteAll(info, e.target.responseText);
        options.uploading = false;
      }
    };
    xhr.upload.onprogress = function(e) {
      fastFail = false;
      extend(info, Upload.getFileInfo(uplId, options, file));
      if (e.lengthComputable) {
        if (!options.multi_progress) {
          Upload.onUploadProgress(uplId, Math.min(e.loaded + options.filesLoadedSize, options.filesTotalSize), options.filesTotalSize);
        } else {
          Upload.onUploadProgress(info, e.loaded, e.total);
        }
      }
    };
    xhr.send(formData);
  } else try {
    if (XHR && !XHR.prototype.sendAsBinary && window.ArrayBuffer && window.Uint8Array) {
      var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;
      if (BlobBuilder) {
        XHR.prototype.sendAsBinary = function(text){
          var data = new ArrayBuffer(text.length);
          var ui8a = new Uint8Array(data, 0);
          for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff);
          var bb = new BlobBuilder();
          bb.append(data);
          var blob = bb.getBlob();
          this.send(blob);
        }
      }
    }

    var reader = new FileReader();

    reader.onload = function() {
      var xhr = new XHR(), fastFail = true;

      xhr.onload = function(e) {
        extend(info, Upload.getFileInfo(uplId, options, file));
        Upload.options[uplId].filesLoadedSize += file.size;
        Upload.options[uplId].filesLoadedCount += 1;
        Upload.onUploadComplete(info, e.target.responseText);
        if (Upload.options[uplId].filesQueue.length > 0) {
          Upload.uploadFile(uplId, Upload.options[uplId].filesQueue.pop(), url);
        } else {
          Upload.startNextQueue(uplId);
          Upload.onUploadCompleteAll(info, e.target.responseText);
        }
      };
      xhr.onerror = function(e) {
        if (!e.target.responseText && fastFail) {
          return nav.go('
/login?act=upload_fail', false, {nocur: true, params: {context: 1, name: file.fileName || file.name || ''}});
        }
        extend(info, Upload.getFileInfo(uplId, options, file));
        Upload.options[uplId].filesTotalSize -= file.size;
        Upload.options[uplId].filesTotalCount -= 1;
        Upload.onUploadError(info, e.target.responseText);
        if (Upload.options[uplId].filesQueue.length > 0) {
          Upload.uploadFile(uplId, Upload.options[uplId].filesQueue.pop(), url);
        } else {
          Upload.startNextQueue(uplId);
          Upload.onUploadCompleteAll(info, e.target.responseText);
          options.uploading = false;
        }
      };
      xhr.upload.onprogress = function(e) {
        fastFail = false;
        extend(info, Upload.getFileInfo(uplId, options, file));
        if (e.lengthComputable) {
          if (!options.multi_progress) {
            Upload.onUploadProgress(uplId, Math.min(e.loaded + options.filesLoadedSize, options.filesTotalSize), options.filesTotalSize);
          } else {
            Upload.onUploadProgress(info, e.loaded, e.total);
            options.uploading = false;
          }
        }
      };

      xhr.open('
POST', url, true);
      var boundary = '
---------' + irand(1111111111, 9999999999);
      xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary=" + boundary);
      var body = '
--' + boundary + "rn";
      body += "Content-Disposition: form-data; name='" + options.file_name + "'; filename='" + file.name + "'rn";
      body += "Content-Type: application/octet-streamrnrn";
      body += reader.result + "rn";
      body += '
--' + boundary + '--';

      xhr.sendAsBinary(body);
    };
    reader.readAsBinaryString(file);
  } catch (e) {
    try { console.error(e); } catch (e2) {}
  }
  Upload.options[uplId].xhr = xhr;
},

terminateUpload: function(i, name) {
  try {
    var vars = Upload.vars[i],
        options = Upload.options[i],
        params = [],
        queue = options.filesQueue;
        inQueue = false,
        info = options.multi_progress ? {ind: i, fileName: name} : i,
        ind = name ? i + '
_' + name : i;

    for (var j in vars) {
      params.push(j + "=" + vars[j]);
    }
    for (var j in queue) {
      if (name == (queue[j].fileName || queue[j].name || '')) {
        queue.splice(j, 1);
        inQueue = true;
        break;
      }
    }
    re('
upload' + ind + '_progress_wrap');
    Upload.onUploadComplete(info, '');
    if (!inQueue && options.xhr) options.xhr.abort();
    var url = this.uploadUrls[i] + (this.uploadUrls[i].match(/?/) ? '
&' : '?') + params.join('&');
    if (!inQueue) {
      if (queue.length > 0) {
        Upload.uploadFile(i, queue.pop(), url);
      } else {
        Upload.startNextQueue(i);
        Upload.onUploadCompleteAll(info, '');
      }
    }
  } catch (e) {
    try { console.error(e); } catch (e2) {}
  }
},

startNextQueue: function(i) {
  if (cur.multiProgressIndex === undefined) {
    setTimeout(function() {delete cur.fileApiUploadStarted;}, 1000);
  }
  if (i != cur.multiProgressIndex) return;
  var options = this.options[i];
  if (options.multi_progress && cur.nextQueues && cur.nextQueues.length) {
    var next = cur.nextQueues[0],
        queue = Upload.options[next].filesQueue;
    cur.nextQueues.splice(0, 1);
    while (queue.length == 0 && cur.nextQueues.length > 0) {
      next = cur.nextQueues[0];
      cur.nextQueues.splice(0, 1);
      queue = Upload.options[next].filesQueue;
    }
    if (queue.length > 0) {
      var vars = Upload.vars[next], params = [];
      for (var j in vars) {
        params.push(j + "=" + vars[j]);
      }
      var url = Upload.uploadUrls[next] + (Upload.uploadUrls[next].match(/?/) ? '
&' : '?') + params.join('&');
      Upload.uploadFile(next, queue.pop(), url);
      cur.multiProgressIndex = next;
    } else {
      delete cur.multiProgressIndex;
      setTimeout(function() {delete cur.fileApiUploadStarted;}, 1000);
    }
  } else {
    delete cur.multiProgressIndex;
    setTimeout(function() {delete cur.fileApiUploadStarted;}, 1000);
  }
},

isFileDrag: function(e) {
  if (!e || e.target && (e.target.tagName == '
IMG' || e.target.tagName == 'A')) return false;
  if (e.dataTransfer.types) {
    for (var i = 0; i < e.dataTransfer.types.length; i++) {
      if (e.dataTransfer.types[i] == "Files") {
        return true;
      }
    }
  } else {
    return true;
  }
  return false;
},

dragEnter: function(i, e) {
  if (!cur.uploadDragStarted || cur.uploadDragStarted == 1) {
    cur.uploadDragStarted = Upload.isFileDrag(e) ? 2 : 1;
  }
  if (cur.uploadDragStarted == 1 || !Upload.dropbox[i]) {
    cancelEvent(e);
    return;
  }
  setTimeout(function() {
    clearTimeout(cur.dragTimer);
    delete cur.dragTimer;
  }, 0);
  if (Upload.options[i].onDragEnter) {
    Upload.options[i].onDragEnter();
  }
  show(Upload.dropbox[i]);
  cancelEvent(e);
},

dragOut: function(i, e) {
  if (cur.uploadDragStarted == 1 || !Upload.dropbox[i]) {
    cancelEvent(e);
    return;
  }
  if (cur.dragTimer) {
    clearTimeout(cur.dragTimer);
    delete cur.dragTimer;
  }
  cur.dragTimer = setTimeout(function() {
    if (!Upload.options[i].visibleDropbox) {
      hide(Upload.dropbox[i]);
    }
    removeClass(Upload.dropbox[i], '
dropbox_over');
  }, 100);
  cancelEvent(e);
},

dragOver: function(i, e) {
  if (cur.uploadDragStarted == 1 || !Upload.dropbox[i]) {
    cancelEvent(e);
    return;
  }
  if (browser.mozilla && intval(browser.version) > 3 && !Upload.options[i].visibleDropbox) {
    if (cur.dragOverTimer) {
      clearTimeout(cur.dragOverTimer);
      delete cur.dragOverTimer;
    }
    cur.dragOverTimer = setTimeout(function() {
      hide(Upload.dropbox[i]);
    }, 100);
  }
  var inside = Upload.insideDropbox(i, e);
  if (e.dataTransfer) {
    e.dataTransfer.dropEffect = inside ? '
copy' : 'none';
  }
  toggleClass(Upload.dropbox[i], '
dropbox_over', inside);
  cancelEvent(e);
},

drop: function(e) {
  each (Upload.dropbox, function (i, dropbox) {
    if (!dropbox) {return;}
    if (Upload.insideDropbox(i, e)) {
      Upload.onFileApiSend(i, e.dataTransfer.files);
    }
    if (!Upload.options[i].visibleDropbox) {
      hide(dropbox);
    }
    removeClass(dropbox, '
dropbox_over');
  });
  delete cur.uploadDragStarted;
  cancelEvent(e);
  return false;
},

insideDropbox: function(i, e) {
  var el = e.target;
  while (el.parentNode) {
    if (el == Upload.dropbox[i]) return true;
    el = el.parentNode;
  }
  return false;
},

_eof: 1};

}

try{stManager.done('
upload.js');}catch(e){}
?>
Онлайн: 1
Реклама