var AzUploaderVars = "UploadPath=/exec/upload.php&ButtonPath=/images/icon/icon_upload.gif";
var AzUploaderWidth = 96;
var AzUploaderHeight = 21;
var AzUploaderURL = "/flash/AzUploader.swf?rnd="+Math.random();

var AzUploader;
var AzUploaderID;
var AzUploaderIsIE = '\v'=='v';


function AzUploaderRenderer(id,render) {
	AzUploaderID = id;

	if (AzUploaderIsIE == true) {
		var AzUploaderHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+AzUploaderWidth+'" height="'+AzUploaderHeight+'" id="'+AzUploaderID+'" align="middle">';
		AzUploaderHTML+= '<param name="allowScriptAccess" value="always" />';
		AzUploaderHTML+= '<param name="flashVars" value="'+AzUploaderVars+'" />';
		AzUploaderHTML+= '<param name="movie" value="'+AzUploaderURL+'" />';
		AzUploaderHTML+= '<param name="quality" value="high" />';
		AzUploaderHTML+= '<param name="wmode" value="transparent" />';
		AzUploaderHTML+= '<embed src="'+AzUploaderURL+'" quality="high" wmode="transparent" style="width:'+AzUploaderWidth+'px; height:'+AzUploaderHeight+'px;" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+AzUploaderVars+'"></embed>';
		AzUploaderHTML+= '</object>';

		if (render) document.getElementById(render).innerHTML = AzUploaderHTML;
		else document.write(AzUploaderHTML);
		eval("window."+AzUploaderID+" = document.getElementById('"+AzUploaderID+"');");
	} else {
		AzUploaderHTML = '<embed id="'+AzUploaderID+'" src="'+AzUploaderURL+'" quality="high" wmode="transparent" style="width:'+AzUploaderWidth+'px; height:'+AzUploaderHeight+'px;" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+AzUploaderVars+'"></embed>';
		if (render) document.getElementById(render).innerHTML = AzUploaderHTML;
		else document.write(AzUploaderHTML);
	}

	AzUploader = document.getElementById(AzUploaderID);
}

function AzUploaderUpload() {
	AzUploader.FileUpload();
}


// 모듈 리턴부
function AzUploaderError(code) {
	Ext.getCmp("AzFileProgress").hide();

	switch (code) {
		case 101 :
			alert("버튼이미지가 정의되지 않았습니다.");
		break;

		case 102 :
			alert("버튼이미지를 로딩할 수 없습니다.\n경로를 다시 확인하여 주십시오.");
		break;

		case 201 :
			alert("업로드경로가 정의되지 않았습니다.");
		break;

		case 202 :
			alert("업로드경로가 유효하지 않습니다.\n경로를 다시 확인하여 주십시오.");
		break;

		case 203 :
			alert("업로드경로에 파일을 업로드할 수 없습니다.\n업로드 도메인은 AzUploader가 위치한 도메인과 일치하여야 합니다.");
		break;

		case 204 :
			alert("업로드할 파일이 없습니다.");
		break;

		case 999 :
			alert("AzUploader가 로딩되는 도중 문제가 발생하였습니다.");
		break;
	}
}

function AzUploaderSelectedFile(fileList) {
	var fileInfor = new Array();
	for (var i=0, loop=fileList.length;i<loop;i++) {
		fileInfor[i] = {};
		fileInfor[i].idx = fileList[i][0];
		fileInfor[i].name = fileList[i][1];
		fileInfor[i].size = fileList[i][2];
	}

	AzUploaderSelectedFileByUser(fileInfor);
}

function AzUploaderUploadedFile(file) {
	var fileInfor = {};
	fileInfor.idx = file[0];
	fileInfor.name = file[1];
	fileInfor.size = file[2];
	fileInfor.server = file[3];

	AzUploaderUploadedFileByUser(fileInfor);
}

function AzUploaderDeleteFile(idxs) {
	return AzUploader.fileDelete(idxs);
}

function AzUploaderUploadedComplete() {
	AzUploaderUploadedCompleteByUser();
}

function AzUploaderProgress(infor) {
	var fileInfor = {};
	fileInfor.file = {}
	fileInfor.file.idx = infor[0];
	fileInfor.file.name = infor[1];
	fileInfor.file.size = infor[2];

	fileInfor.uploaded = {}
	fileInfor.uploaded.file = infor[3];
	fileInfor.uploaded.total = infor[4];

	fileInfor.time = {}
	fileInfor.time.file = infor[5];
	fileInfor.time.total = infor[6];
	fileInfor.time.remain = infor[7];

	fileInfor.speed = {}
	fileInfor.speed.file = infor[8];
	fileInfor.speed.total = infor[9];

	fileInfor.total = {}
	fileInfor.total.size = infor[10];
	fileInfor.total.count = infor[11];
	fileInfor.total.upload = infor[12];

	AzUploaderProgressByUser(fileInfor);
}

// 기타 유용한 함수
function AzUploaderFileSize(size) {
	if(size < 1024) {
		return size + "B";
	} else if(size < 1048576) {
		return (Math.round(((size*10) / 1024))/10) + "KB";
	} else {
		return (Math.round(((size*10) / 1048576))/10) + "MB";
	}
}

/************************************** USERS CUSTOMIZE **************************************
 * 유저 정의 함수부
 *********************************************************************************************/

function AzUploaderSelectedFileByUser(fileInfor) {
	var record = Ext.data.Record.create([
		{name:"idx",type:"int"},
		{name:"filename",type:"string"},
		{name:"filesize",type:"string"},
		{name:"status",type:"string"},
		{name:"server",type:"string"}
	]);

	for (var i=0, loop=fileInfor.length;i<loop;i++) {
		var list = new record({
			idx:fileInfor[i].idx,
			filename:fileInfor[i].name,
			filesize:AzUploaderFileSize(fileInfor[i].size),
			status:"대기중",
			server:""
		});
		Ext.getCmp("AzFileList").getStore().add(list);
	}
}

function AzUploaderUploadStartFileByUser(idx) {

}

function AzUploaderUploadedFileByUser(fileInfor) {
	var store = Ext.getCmp("AzFileList").getStore();

	for (var i=0, loop=store.getCount();i<loop;i++) {
		if (store.getAt(i).get("idx") == fileInfor.idx) {
			store.getAt(i).set("status","업로드완료");
			store.getAt(i).set("server",fileInfor.server);
		}
	}
}

function InsertPhoto(image,width) {
	if (width > 750) width = 750;

	sHTML = '<img src="'+image.src+'" width="'+width+'" />';
	if (document.getElementById("IsInsertPreview")) {
		if (document.getElementById("IsInsertPreview").checked == false) oPreviews.getById["previewarea"].exec("PASTE_HTML", [sHTML]);
		else oEditors.getById["postarea"].exec("PASTE_HTML", [sHTML]);
	} else oEditors.getById["postarea"].exec("PASTE_HTML", [sHTML]);
}

function DeleteFile(idx,path) {
	if (confirm("해당 파일을 삭제하시겠습니까?") == true) {
		var oForm = document.getElementsByName("files[]");

		for (var i=0, loop=oForm.length;i<loop;i++) {
			var temp = oForm[i].value.split("|");

			if (temp[0] == path) {
				oForm[i].value = "|"+temp[1];
				document.getElementById("file"+idx).style.display = "none";
				break;
			}
		}
	}
}

function AzUploaderUploadedCompleteByUser() {
	Ext.getCmp("AzFileProgress").hide();
}

function AzUploaderProgressByUser(fileInfor) {
	Ext.getCmp("AzFileProgressBar").updateProgress(fileInfor.uploaded.file/fileInfor.file.size, fileInfor.file.name+" 업로드 중... ("+Math.round(100*fileInfor.uploaded.file/fileInfor.file.size)+"%)");
	Ext.getCmp("AzTotalProgressBar").updateProgress(fileInfor.uploaded.total/fileInfor.total.size, "전체 "+fileInfor.total.count+"개의 파일중 "+fileInfor.file.upload+"번째 파일 업로드 중... ("+Math.round(100*fileInfor.uploaded.total/fileInfor.total.size)+"%)");

	if (fileInfor.time.total) {
		document.getElementById("AzTime1").innerHTML = "";
		var s = fileInfor.time.total%60 < 10 ? "0"+Math.floor(fileInfor.time.total%60) : Math.floor(fileInfor.time.total%60);
		var m = Math.floor(fileInfor.time.total/60);
		if (m > 60) {
			var h = Math.floor(m/60);
			var m = m%60 < 10 ? "0"+Math.floor(m%60) : Math.floor(m%60);
			document.getElementById("AzTime1").innerHTML+= h+":"
		}
		document.getElementById("AzTime1").innerHTML+= m+":"+s;
	}

	if (fileInfor.time.remain) {
		document.getElementById("AzTime2").innerHTML = "";
		var s = fileInfor.time.remain%60 < 10 ? "0"+Math.floor(fileInfor.time.remain%60) : Math.floor(fileInfor.time.remain%60);
		var m = Math.floor(fileInfor.time.remain/60);
		if (m > 60) {
			var h = Math.floor(m/60);
			var m = m%60 < 10 ? "0"+Math.floor(m%60) : Math.floor(m%60);
			document.getElementById("AzTime2").innerHTML+= h+":"
		}
		document.getElementById("AzTime2").innerHTML+= m+":"+s;
	}

	document.getElementById("AzSpeed").innerHTML = AzUploaderFileSize(parseInt(fileInfor.speed.total)*1024);
}

/**************************** UPLOADER SENDER ****************************
 * 업로더로 데이터를 보내는 함수들이다.
 * 매개변수와 함수명들은 자유롭게 바꾸어 사용할 수 있다.
 * 하지만, 리턴되는 함수호출부분은 변경할 수 없다.
 *************************************************************************/

function AzUploaderDeleteFileByUser() {

}