
// 元素
var oFileBox = $(".fileBox");					//选择文件父级盒子
var oFileInput = $("#fileInput");				//选择文件按钮

var oFileList_parent = $(".fileList_parent");	//表格
var oFileList = $(".fileList");					//表格tbody
var oFileBtn = $("#fileBtn");					//上传按钮

var flieList = [];								//数据，为一个复合数组
//var sizeObj = [];								//存放每个文件大小的数组，用来比较去重

$(function(){
	
	//点击选择文件按钮选文件
	oFileInput.on("change",function(){
		flieList = new Array(); // 重新选择前先删除上次选择的
		analysisList(this.files);
	})
	
	// 删除表格单行文件
	oFileList.on("click","a.btn_delfile",function(){
		if(!confirm("确认删除？"))return;
		var oTr = $(this).parents("tr");
		var index = oTr.index();
		oTr.remove();	//删除这一行
		flieList.splice(index,1);	// 删除数据
	//	sizeObj.splice(index,1);	// 删除文件大小数组中的项
	});
	
	// 预览表格单行文件
	oFileList.on("click","a.btn_viewfile",function(){
		var imgurl = $(this).parent().find('.imgurl').val();
		if(imgurl==null || $.trim(imgurl)=='')return;
		layer.photos({
			photos: {"id":'a1',"start":0,"data":[{"src":""+imgurl+""}]}
			,anim: 5 // 0-6的选择，指定弹出图片动画类型，默认随机
		});
	});
	
	// 只允许输入数字
	oFileList.on("keyup",".sort",function(){
		$(this).val($(this).val().replace(/\D/g,''));
	});
	// 只允许粘贴数字
	oFileList.on("paste",".sort",function(){
		$(this).val($(this).val().replace(/\D/g,''));
	});
	
	//上传
	oFileBtn.on("click",function(){
	//	oFileBtn.off();
		var tr = oFileList.find(".uploaddata");		//获取所有tr列表
		var successNum = 0;					//已上传成功的数目
	//	oFileList.off();					//取消删除事件
		oFileBox.slideUp();					//隐藏输入框
	//	oFileList.find("a.btn_delfile").text("等待上传");
		
		for( var i=0;i<tr.length;i++ ){
			uploadFn(tr.eq(i),i);		//参数为当前项，下标
		}
	});
});

//解析列表函数
function analysisList(obj){
	//如果没有文件
	if(obj.length < 1){
		return false;
	}
	
	// 花絮最多只能上传16张照片
	var value = parseInt($('#stage').val());
	if(value == 4){
		if(obj.length > 16){
			alert('最多只能上传16张图片');
			return false;
		}else{
			var totallength = obj.length;
			var uptr = oFileList.find(".uploaddata");
			if(uptr.length > 0)totallength+=uptr.length;
			var dbtr = oFileList.find(".dbdata");
			if(dbtr.length > 0)totallength+=dbtr.length;
			if(totallength > 16){
				alert('最多只能上传16张图片');
				return false;
			}
		}
	}
	
	
	// 先全部校验一遍
	for( var i=0;i<obj.length;i++ ){
		var fileObj = obj[i];		//单个文件
		var name = fileObj.name;	//文件名
		var size = fileObj.size;	//文件大小
		var type = fileType(name);	//文件类型，获取的是文件的后缀
		//文件为空不上传
		if(size == 0){
			alert('文件"'+ name +'"为空，不能上传');
			return false;
		}
		//文件大于10M，就不上传
	//	if(size > 10*1024*1024){
		if(size > 2*1024*1024){
			alert('文件"'+ name +'"超过了2M，不能上传');
			return false;
		}
		//文件类型不为这几种，就不上传
		if(("png/jpg/jpeg/bmp/gif").indexOf(type) == -1){
			alert('文件"'+ name +'"类型不对，不能上传');
			return false;
		}
	}
	
	for( var i=0;i<obj.length;i++ ){
		var fileObj = obj[i];		//单个文件
		var name = fileObj.name;	//文件名
		var size = fileObj.size;	//文件大小
		var type = fileType(name);	//文件类型，获取的是文件的后缀
		
		//给json对象添加内容，得到选择的文件的数据
		var itemArr = [fileObj,name,size,type];	//文件，文件名，文件大小，文件类型
		flieList.push(itemArr);
		
		//把这个文件的大小放进数组中
	//	sizeObj.push(size);
	}
	
	createList();				//生成列表
	oFileList_parent.show();	//表格显示
//	oFileBtn.show();			//上传按钮显示
	
	oFileBtn.click();			// 自动上传到后台
};
	
//生成列表
function createList(){
//	oFileList.empty();	//先清空元素内容(修改操作，先从数据库加载，所以这里不情况表格)
	for( var i=0;i<flieList.length;i++){
		var fileData = flieList[i];		//flieList数组中的某一个
		var objData = fileData[0];		//文件
		var name = fileData[1];			//文件名
		var type = fileData[2];			//文件类型
		
		if(name!=null && name.length>20)name=name.substr(0,10)+'...'+name.substr(name.length-5);
		
		var oTr = $("<tr class='uploaddata'></tr>");
		var str = '<td class="td-filename"><span class="filename">'+ name +'</span></td>';
		str += '<td><input type="text" class="sort" value="0" maxlength="3" style="width: 50px;" /></td>';
		str += '<td>';
		str += '<div class="progressParent">';
		str += '<p class="progress"></p>';
		str += '<span class="progressNum">0%</span>';
		str += '</div>';
		str += '</td>';
		str += '<td>';
		str += '<input type="hidden" class="imgurl" value="" />';
		str += '<a href="javascript:;" class="imgbtn btn_delfile" style="display:\'\';">删除</a>';
		str += '&nbsp;&nbsp;<a href="javascript:;" class="imgbtn btn_viewfile" style="display:\'\';">预览</a>';
		str += '</td>';
		
		oTr.html(str);
		oTr.appendTo(oFileList);
	}
}

function uploadFn(obj,i){
	var formData = new FormData();
	var arrNow = flieList[i];						//获取数据数组的当前项
	
	// 从当前项中获取上传文件，放到 formData对象里面，formData参数以key name的方式
	var result = arrNow[0];							//数据
	formData.append("file" , result);
	
	var name = arrNow[1];							//文件名
	formData.append("filename" , name);
	
	var progress = obj.find(".progress");			//上传进度背景元素
	var progressNum = obj.find(".progressNum");		//上传进度元素文字
//	var obtn_delfile = obj.find("a.btn_delfile");		//按钮
	
//	obtn_delfile.text("正在上传");							//改变操作按钮
//	obtn_delfile.off();
	
	var request = $.ajax({
		type: "POST",
		url: 'console/tool/oss/uploadFile?caseType='+caseType+'&category=image',
		data: formData,			//这里上传的数据使用了formData 对象
		processData : false, 	//必须false才会自动加上正确的Content-Type
		contentType : false,
		//这里我们先拿到jQuery产生的XMLHttpRequest对象，为其增加 progress 事件绑定，然后再返回交给ajax使用
		xhr: function(){
			var xhr = $.ajaxSettings.xhr();
			if(onprogress && xhr.upload){
				xhr.upload.addEventListener("progress", onprogress, false);
				return xhr;
			}
		},
		//上传成功后回调
		success: function(result){
			result = result.data;
			obj.removeClass('uploaddata').addClass('dbdata'); // 删除待上传标记，增加已上传成功标记
			obj.find(".imgbtn").show();
			obj.find(".imgurl").val(result.url);
			obj.find(".filename").text(result.ori_name);
		},
		
		//上传失败后回调
		error: function(){
			obj.find(".imgbtn").show();
			/*
			obtn_delfile.text("重传");
			obtn_delfile.on("click",function(){
				request.abort();		//终止本次
				uploadFn(obj,i);
			});
			*/
		}
		
	});
	
	//侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次
	function onprogress(evt){
		var loaded = evt.loaded;	//已经上传大小情况  
		var tot = evt.total;		//附件总大小  
		var per = Math.floor(100*loaded/tot);  //已经上传的百分比
		progressNum.html(per +"%"); 
		progress.css("width", per +"%");
	}
}


//字节大小转换，参数为b
function bytesToSize(bytes) {
    var sizes = ['Bytes', 'KB', 'MB'];
    if (bytes == 0) return 'n/a';
    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
    return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
};

//通过文件名，返回文件的后缀名
function fileType(name){
	var nameArr = name.split(".");
	return nameArr[nameArr.length-1].toLowerCase();
}

// 设置数据行到表格
function setTableList(dataList){
	if(dataList == null || dataList == undefined || dataList.length == 0)return;
	dataList=dataList.replace(new RegExp('&quot;','g'),'"'); // java返回的引号变成了&quot;
//	dataList=dataList.replace(/\s*/g,'');	// 去除字符串内所有的空格
//	console.log('dataList='+dataList);
	dataList = JSON.parse(dataList);
	oFileList.empty();	// 先清空元素内容
	for( var i=0; i<dataList.length; i++){
		var fileData = dataList[i];
		var fname = fileData.ori_name;
		if(fname!=null && fname.length>20)fname=fname.substr(0,10)+'...'+fname.substr(fname.length-5);
		var oTr = $("<tr class='dbdata'></tr>");
		var str = '<td class="td-filename"><span class="filename">'+ fname +'</span></td>';
		str += '<td  style="width: 45px;"><input type="text" class="sort" value="'+fileData.sort+'" maxlength="3" style="width: 50px;" /></td>';
		str += '<td></td>';
		str += '<td>';
		str += '<input type="hidden" class="imgurl" value="'+ fileData.imgurl +'" />';
		str += '<a href="javascript:;" class="imgbtn btn_delfile" style="display:none;">删除</a>';
		str += '&nbsp;&nbsp;<a href="javascript:;" class="imgbtn btn_viewfile" style="display:none;">预览</a>';
		str += '</td>';
		
		oTr.html(str);
		oTr.appendTo(oFileList);
	}
	oFileList_parent.show();	// 表格显示
	oFileList.find(".imgbtn").show();		// 操作按钮显示
}

// 返回json格式数据给后端
function getImgJsonList(){
	var jsonArray = new Array();
	var trs = oFileList.find(".dbdata");	//获取所有tr列表
	for( var i=0;i<trs.length;i++ ){
		var tr = trs.eq(i);
		var filename = tr.find('.filename').text();
		var sort = tr.find('.sort').val();
		var imgurl = tr.find('.imgurl').val();
		var jsontext = '{"filename":"'+filename+'","sort":"'+sort+'","imgurl":"'+imgurl+'"}';
		jsonArray.push(jsontext);
	}
//	console.log('jsonArray='+JSON.stringify(jsonArray));
	return JSON.stringify(jsonArray);
}

