/*

소스 : SWFUPLOAD
수정 : 안상신 (kikky22@naver.com)
날짜 : 2009/7

*/
function getUploaderVar(url, limitsize, limitcount, types, types_desc,  progressdivid , btndivid , title, width, height, leftpadding, toppadding, btnbgurl, params){
var setting = {
				flash_url : "/swfupload/swfupload.swf",
				upload_url: url,
				post_params: params,
				file_size_limit : limitsize,
				file_types : types,
				file_types_description : types_desc,
				file_upload_limit : limitcount,
				file_queue_limit : 0,
				custom_settings : {
					progressTarget : progressdivid/*,
					cancelButtonId : "btnCancel"*/
				},
				debug: false,

				// Button settings
				button_window_mode : "transparent",
				button_image_url: btnbgurl,
				button_width: width,
				button_height: height,
				button_placeholder_id: btndivid,
				button_text: '<span class="theFont">'+title+'</span>',
				button_text_style: ".theFont { font-size: 12; font-family:Dotum; font-weight:bold; }",
				button_text_left_padding: leftpadding,
				button_text_top_padding: toppadding,
				 button_cursor: SWFUpload.CURSOR.HAND,
				
				// The event handler functions are defined in handlers.js
				file_queued_handler : fileQueued,
				file_queue_error_handler : fileQueueError,
				file_dialog_complete_handler : fileDialogComplete,
				upload_start_handler : uploadStart,
				upload_progress_handler : uploadProgress,
				upload_error_handler : uploadError,
				upload_success_handler : uploadSuccess,
				upload_complete_handler : uploadComplete,
				queue_complete_handler : queueComplete	// Queue plugin event
			};	
			
			
			return setting;
	
}
function getSize(byte){
				 
				var tmpsize
				if (byte >= (1024*1024)) 
					tmpsize = (Math.round( (byte/(1024*1024))  *10 ) /10) + "MB";
				else
					tmpsize = (Math.round( (byte/(1024))*10 ) /10) + "KB";
				
				return tmpsize;
			}

function fileQueued(file) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setStatus("업로드 대기중입니다.");
		progress.toggleCancel(true, this);

	} catch (ex) {
		this.debug(ex);
	}

}

function fileQueueError(file, errorCode, message) {
	try {
		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
			alert("너무 많은 파일을 동시에 업로드하였습니다.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
			return;
		}

		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			progress.setStatus("파일용량이 너무 큽니다.");
			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			progress.setStatus("0바이트 파일은 업로드하실 수 없습니다.");
			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			progress.setStatus("허용되지 않는 파일 타입입니다.");
			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				progress.setStatus("알 수 없는 오류가 발생하였습니다.");
			}
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}

function fileDialogComplete(numFilesSelected, numFilesQueued) {
	try {
		if (numFilesSelected > 0) {
			//document.getElementById(this.customSettings.cancelButtonId).disabled = false;
		}
		
		/* I want auto start the upload and I can do that here */
		this.startUpload();
	} catch (ex)  {
        this.debug(ex);
	}
}

function uploadStart(file) {
	try {
		/* I don't want to do any file validation or anything,  I'll just update the UI and
		return true to indicate that the upload should start.
		It's important to update the UI here because in Linux no uploadProgress events are called. The best
		we can do is say we are uploading.
		 */
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setStatus("업로드를 시작합니다.");
		progress.toggleCancel(true, this);
	}
	catch (ex) {}
	
	return true;
}

function uploadProgress(file, bytesLoaded, bytesTotal) {
	try {
		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);

		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setProgress(percent);
		progress.setStatus("업로드중입니다.");
	} catch (ex) {
		this.debug(ex);
	}
}

function uploadSuccess(file, serverData) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("업로드가 완료되었습니다.");
		progress.toggleCancel(false);
		 
		//serverData가 이미지일 경우 다른 시도를 함.
		eval("data = "+serverData)
		 
		 if (data.error == true)
		 {
			 alert(data.msg);
		 }else{
			  
			 appendFile(data, true);
		 }
		
 	} catch (ex) {
		this.debug(ex);
	}
}

function uploadError(file, errorCode, message) {
	try {
		 
		 alert(message)
			 
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
	
			progress.setStatus("Upload Error: " + message);
			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			progress.setStatus("Upload Failed.");
			this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
		
			progress.setStatus("Server (IO) Error");
			this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			progress.setStatus("Security Error");
			this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			progress.setStatus("Upload limit exceeded.");
			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
			progress.setStatus("Failed Validation.  Upload skipped.");
			this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
			// If there aren't any files left (they were all cancelled) disable the cancel button
			if (this.getStats().files_queued === 0) {
				//document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("업로드를 취소하셨습니다.");
			progress.setCancelled();
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			progress.setStatus("업로드가 중지되었습니다.");
			break;
		default:
			progress.setStatus("Unhandled Error: " + errorCode);
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}

function uploadComplete(file) {
	if (this.getStats().files_queued === 0) {
		//document.getElementById(this.customSettings.cancelButtonId).disabled = true;
	}
}

// This event comes from the Queue Plugin
function queueComplete(numFilesUploaded) {
	var status = document.getElementById("divStatus");
	//status.innerHTML = numFilesUploaded + " file" + (numFilesUploaded === 1 ? "" : "s") + " uploaded.";
	//status.innerHTML = numFilesUploaded + "개의 파일이 업로드 되었습니다.";
}


function appendFile(data, isdoc){
	 
	 
	if (data.filetype =="image" || data.filetype =="docimage" || data.filetype =="thumbnail" || data.filetype =="ebook" || data.filetype == "orgimage" ){
			addImage(data);
			if ( (data.filetype == "image" || data.filetype =="docimage" ) && isdoc == true)
			insertDocImg(data);
	  }
		
		if (data.filetype =="attach"){
		addAttach(data);	
		}
		
		if (data.filetype =="attachmemo"){
		addAttachmemo(data);	
		}		
		if (data.filetype =="imagememo"){
		addImagememo(data);	
		}

}

function addImagememo(objfile){

	var obj = document.getElementById(objfile.filetype + "list");
	var newDiv = document.createElement("li");
	var filesize = getSize(objfile.filesize);

	newDiv.innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td with="80"><img src="/data/'+objfile.filename + '" class="thumbnail"></td><td align="left">링크 입력 : <input type="text" size="50" name="memo_'+objfile.filetype+'" value="'+objfile.memo+'"  class=" font11input"  /></td><td width="100" align="right" class="fileinfo">'+filesize+'  <a href="javascript:deleteAttach(\''+objfile.filename+'\');"><img src="/swfupload/images/btn_file_delete.gif" border="0"  align="middle"></a></td></tr></table>';
	//폼테그
	newDiv.innerHTML += '<input type="hidden" name="up_'+objfile.filetype+'" value="'+objfile.filename+'" />';
	newDiv.id = "file_"+objfile.filename;
	obj.appendChild(newDiv);

	
	$("#"+objfile.filetype+"list").sortable("destroy");
	$("#"+objfile.filetype+"list").sortable({items: 'li', opacity: 0.6, scroll: false , update:function(event, ui){
															 
															 fileThreadSave(objfile.filetype + "list", objfile.filetype); 
															 }
															 });

}

function addAttachmemo(objfile){
	 
	var obj = document.getElementById(objfile.filetype + "list");
	var newDiv = document.createElement("li");
	var filesize = getSize(objfile.filesize);
	newDiv.innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="200"><input type="text" size="30" name="memo_'+objfile.filetype+'" value="'+objfile.memo+'"  class=" font11input"  /></td><td><a href="/lib/download.asp?if='+encodeURIComponent(objfile.infilename)+'&of='+objfile.filename+'">'+objfile.infilename+'</a></td><td width="100" align="right" class="fileinfo">'+filesize+'  <a href="javascript:deleteAttach(\''+objfile.filename+'\');"><img src="/swfupload/images/btn_file_delete.gif" border="0"  align="middle"></a></td></tr></table>';
	//폼테그
	newDiv.innerHTML += '<input type="hidden" name="up_'+objfile.filetype+'" value="'+objfile.filename+'" />';
	
	
	newDiv.id = "file_"+objfile.filename;
	obj.appendChild(newDiv);

	
	$("#"+objfile.filetype+"list").sortable("destroy");
	$("#"+objfile.filetype+"list").sortable({items: 'li', opacity: 0.6, scroll: false , update:function(event, ui){
															 
															 fileThreadSave(objfile.filetype + "list", objfile.filetype); 
															 }
															 });
 
	
}




function addAttach(objfile){
		
	var obj = document.getElementById(objfile.filetype + "list");
	var newDiv = document.createElement("li");
	var filesize = getSize(objfile.filesize);
	newDiv.innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><a href="/lib/download.asp?if='+encodeURIComponent(objfile.infilename)+'&of='+objfile.filename+'">'+objfile.infilename+'</a></td><td width="100" align="right" class="fileinfo">'+filesize+'  <a href="javascript:deleteAttach(\''+objfile.filename+'\');"><img src="/swfupload/images/btn_file_delete.gif" border="0"  align="middle"></a></td></tr></table>';
	//폼테그
	newDiv.innerHTML += '<input type="hidden" name="up_'+objfile.filetype+'" value="'+objfile.filename+'" />';
 	newDiv.id = "file_"+objfile.filename;
	obj.appendChild(newDiv);
	
	 

	$("#"+objfile.filetype+"list").sortable("destroy");
	$("#"+objfile.filetype+"list").sortable({items: 'li', opacity: 0.6, scroll: false , update:function(event, ui){
														 
															 fileThreadSave(objfile.filetype + "list", objfile.filetype); 
															 }
															 });



 
}

function addImage(objfile){
	 
	var obj = document.getElementById(objfile.filetype + "list");
 
	var filesize = getSize(objfile.filesize);
	var newDiv = document.createElement("li");
	var newA = document.createElement("a");
	var newImg = document.createElement("img");
	var newDiv2 = document.createElement("div");
	
	 
	newDiv.className = "imageWrap";
	newDiv.appendChild(newA);
	newA.appendChild(newImg);
	newA.href="javascript:tb_show('','/data/"+objfile.filename+"','','"+objfile.filetype+"')";
 	newDiv2.className ="imageInfo";
	newDiv2.innerHTML = filesize + ' <a href="javascript:deleteImage(\''+objfile.filename+'\');"><img src="/swfupload/images/btn_file_delete.gif" border="0"  align="middle" style="width:12px; height:11px; border:none;" ></a>';
	//폼태그 추가
	newDiv2.innerHTML += '<input type="hidden" name="up_'+objfile.filetype+'" value="'+objfile.filename+'" />';
	 
	newDiv.appendChild(newDiv2);
	newDiv.id = "file_"+objfile.filename;
 
	obj.appendChild(newDiv);

	newImg.src = "/data/"+objfile.filename;

	if (newImg.filters) {
		try {
			newImg.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 0;
		} catch (e) {
			// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
			newImg.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + 0 + ')';
		}
	} else {
		newImg.style.opacity = 0;
	}
	
	
	newImg.onload = function () {
		fadeIn(newImg, 0);
	};
	
	$("#"+objfile.filetype+"list").sortable("destroy");
	$("#"+objfile.filetype+"list").sortable({items: 'li.imageWrap', handle:"img",  scroll: false ,  opacity: 0.6, update:function(event, ui){
															//alert($("#"+objfile.filetype+"list").sortable("serialize"));	 
															 fileThreadSave(objfile.filetype + "list", objfile.filetype); 
															 }
															 });
 
 
}

	function fileThreadSave(objid, filetype){
	 
		
		$.post("/lib/fileOrder.asp",
			   				$("#"+objid).sortable("serialize") + "&filetype=" + filetype
						   , 
						   function(data){
							   
							   eval("var objResult = "+data);
					
							if (objResult.error == true)
							{
								alert(objResult.msg);
								return;	
							}
							  
							   showmessagebox("변경된 순서를 저장하였습니다.");
						   });
 		
	}

			function deleteImage(s){
				 
				if (confirm("정말 삭제하시겠습니까?"))
				jQuery.post("/lib/deletefile.asp",
						   {f : s}, 
						   function(data){
					 
					eval("var objResult = "+data);
					
					if (objResult.error == true)
					{
						alert(objResult.msg);
						return;	
					}
				 
					
				document.getElementById("file_" + s).parentNode.removeChild(document.getElementById("file_" + s))
				 
				if (document.getElementById("db_content") != null && typeof(oEditors) != "undefined" ){
					
				var doc = oEditors.getById["db_content"].getWYSIWYGDocument();
				while (doc.getElementById("file_" + s) !=null) {
					doc.getElementById("file_" + s).parentNode.removeChild(doc.getElementById("file_" + s))
				} 	
				}
					//showmessagebox("이미지를 삭제하였습니다.");
					
					})
				
				
				
						   
				//disappearAttach();
			}
			
			function deleteAttach(s){
 		
				
				if (confirm("정말 삭제하시겠습니까?"))
				jQuery.post("/lib/deletefile.asp",
						   {f : s}, 
						   function(data){
							   
					eval("var objResult = "+data);
					
					if (objResult.error == true)
					{
						alert(objResult.msg);
						return;	
					}
				 		   
							   
					
					document.getElementById("file_" + s).parentNode.removeChild(document.getElementById("file_" + s));
					showmessagebox("첨부파일을 삭제하였습니다.");
					
					})
			}
			



function insertDocImg(objfile){
	 
	if (oEditors != undefined && oEditors !=null){
	
	sHTML = "<img id='file_"+objfile.filename+"' name='contents_image' src='/data/"+objfile.filename+"'/>";
	oEditors.getById["db_content"].exec("PASTE_HTML", [sHTML]);
	
	}
}


function fadeIn(element, opacity) {
	var reduceOpacityBy = 5;
	var rate = 30;	// 15 fps


	if (opacity < 100) {
		opacity += reduceOpacityBy;
		if (opacity > 100) {
			opacity = 100;
		}

		if (element.filters) {
			try {
				element.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
			} catch (e) {
				// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
				element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
			}
		} else {
			element.style.opacity = opacity / 100;
		}
	}

	if (opacity < 100) {
		setTimeout(function () {
			fadeIn(element, opacity);
		}, rate);
	}
}

 
