function (id, loader, size){
var maxFileSize = size * 1024 * 1024; // максимальный размер файла в Мбайтах.
var dashboard = document.getElementById(id);
var dropZone = document.createElement('div');
var transmitTable;
dropZone.id = 'dropZone';
dropZone.innerHTML = '<div>Перетащите файлы сюда для загрузки</div>';
document.body.appendChild(dropZone);
function transmit(file){
var formData = new FormData();
var row = document.createElement('tr');
row.innerHTML = '<td>' + file.name + '</td><td><div class="loadBar"><div class="progressBorder"></div></div></td><td></td>';
var percent;
var loadBar = row.getElementsByTagName('div')[0];
var progressBar = document.createElement('div');
progressBar.className = "progressBar"
loadBar.appendChild(progressBar);
var jsField = row.getElementsByTagName('td')[1];
var serverField = row.getElementsByTagName('td')[2];
function uploadProgress(event) {
percent = parseInt(event.loaded / event.total * 100);
progressBar.style.width = percent + '%';
}
function stateChange(event) {
if (event.target.readyState == 4) {
if (event.target.status == 200) {
var data = JSON.parse(event.target.responseText);
jsField.innerHTML = fn.Bt(file.size) + '<div class="button16 ok"></div>';
serverField.innerHTML = data.error[0] ? data.error[0] : data.message[0];
}else {
jsField.innerHTML = 'Произошла ошибка!';
}
}
}
formData.append('file', file);
transmitTable.getElementsByTagName('tbody')[0].appendChild(row);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', uploadProgress, false);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
jsField.innerHTML = fn.Bt(file.size) + '<div class="button16 ok"></div>';
serverField.innerHTML = data.error[0] ? data.error[0] : data.message[0];
}
};
xhr.open('POST', URL + loader);
xhr.send(formData);
}
var er = (function() {
var errors = [];
var e = function() {
dashboard.innerHTML = '<table id="transmitTable"><thead><tr><td>Устраните указанные ошибки, затем повторите выбор тех же файлов.</td><td><div class="button16 print" onclick="fn.print(\'transmitTable\')"></div><div class="button16 xls" onclick="fn.excel(\'transmitTable\')"></div></td></tr></thead><tbody></tbody></table>';
//Вывод ошибки:
if (errors.hasOwnProperty('length') && errors.length > 0) {
var errorList = dashboard.getElementsByTagName('tbody')[0];
for (var i = 0; i < errors.length; i++) {
errorList.innerHTML += "<tr><td>" + errors[i]['a'] + "</td><td>" + errors[i]['b'] + "</td></tr>";
}
reset();
return false;
}
return true;
}
e.setError = function(value) {
errors.push(value);
};
var reset = function() {
errors = [];
}
return e;
})();
if (typeof(window.FileReader) === 'undefined') {
dropZone.innerHTML = 'Не поддерживается браузером!';
dropZone.classList.add('error');
}
document.ondragover = function(event) {
event.stopPropagation();
event.preventDefault();
dropZone.classList.add('hover');
return false;
};
document.ondragleave = function(event) {
event.stopPropagation();
event.preventDefault();
dropZone.classList.remove('hover');
return false;
};
document.ondrop = function(event) {
event.stopPropagation();
event.preventDefault();
dropZone.classList.remove('hover');
dropZone.classList.add('drop');
var files = event.dataTransfer.files;
if (files.length === 0){
return false;
}
for(var i = 0; i < files.length; ++i) {
if (files[i].size > maxFileSize) {
er.setError({
'a' : 'Уменьшите размер файла <b>' + files[i].name + '</b> до ' + size + ' МБайта.',
'b' : fn.Bt(files[i].size)
});
}
}
if(er()){
dashboard.innerHTML = '<table id="transmitTable"><thead><tr><td>Загрузка:</td><td><div class="button16 print" onclick="fn.print(\'transmitTable\')"></div><div class="button16 xls" onclick="fn.excel(\'transmitTable\')"></div></td><td>ответ от сервера</td></tr></thead><tbody></tbody></table>';
transmitTable = document.getElementById('transmitTable');
for(var i = 0; i < files.length; ++i) {
transmit(files[i]);
}
}
};
}