function getFlashVersion(){ 
  // ie 
  try { 
    try { 
      // avoid fp6 minor version lookup issues 
      // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ 
      var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6'); 
      try { axo.AllowScriptAccess = 'always'; } 
      catch(e) { return '6,0,0'; } 
    } catch(e) {} 
    return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1]; 
  // other browsers 
  } catch(e) { 
    try { 
      if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){ 
        return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1]; 
      } 
    } catch(e) {} 
  } 
  return '0,0,0'; 
} 
 
var version = getFlashVersion().split(',').shift();
var SWFUpload = null;

if (version<9) {

SWFUpload = function (settings){try
{document.execCommand('BackgroundImageCache',false,true);}catch(e){}
this.movieName="SWFUpload_"+SWFUpload.movieCount++;this.init(settings);this.loadFlash();if(this.debug)
this.debugSettings();}
SWFUpload.movieCount=0;SWFUpload.handleErrors=function(errcode,file,msg){switch(errcode){case-10:alert("Error Code: HTTP Error, File name: "+file.name+", Message: "+msg);break;case-20:alert("Error Code: No upload script, File name: "+file.name+", Message: "+msg);break;case-30:alert("Error Code: IO Error, File name: "+file.name+", Message: "+msg);break;case-40:alert("Error Code: Security Error, File name: "+file.name+", Message: "+msg);break;case-50:alert("Error Code: Filesize exceeds limit, File name: "+file.name+", File size: "+file.size+", Message: "+msg);break;}};SWFUpload.prototype.init=function(settings){this.settings=[];this.addSetting("debug",settings["debug"],false);this.addSetting("target",settings["target"],"");this.addSetting("create_ui",settings["create_ui"],false);this.addSetting("browse_link_class",settings["browse_link_class"],"SWFBrowseLink");this.addSetting("upload_link_class",settings["upload_link_class"],"SWFUploadLink");this.addSetting("browse_link_innerhtml",settings["browse_link_innerhtml"],"<span>Browse...</span>");this.addSetting("upload_link_innerhtml",settings["upload_link_innerhtml"],"<span>Upload</span>");this.addSetting("flash_loaded_callback",settings["flash_loaded_callback"],"SWFUpload.flashLoaded");this.addSetting("upload_file_queued_callback",settings["upload_file_queued_callback"],"");this.addSetting("upload_file_start_callback",settings["upload_file_start_callback"],"");this.addSetting("upload_file_complete_callback",settings["upload_file_complete_callback"],"");this.addSetting("upload_queue_complete_callback",settings["upload_queue_complete_callback"],"");this.addSetting("upload_progress_callback",settings["upload_progress_callback"],"");this.addSetting("upload_dialog_cancel_callback",settings["upload_dialog_cancel_callback"],"");this.addSetting("upload_file_error_callback",settings["upload_file_error_callback"],"SWFUpload.handleErrors");this.addSetting("upload_file_cancel_callback",settings["upload_file_cancel_callback"],"");this.addSetting("upload_queue_cancel_callback",settings["upload_queue_cancel_callback"],"");this.addSetting("upload_script",escape(settings["upload_script"],""));this.addSetting("auto_upload",settings["auto_upload"],false);this.addSetting("allowed_filetypes",settings["allowed_filetypes"],"*.*");this.addSetting("allowed_filetypes_description",settings["allowed_filetypes_description"],"All files");this.addSetting("allowed_filesize",settings["allowed_filesize"],1024);this.addSetting("flash_path",settings["flash_path"],"jscripts/SWFUpload/SWFUpload.swf");this.addSetting("flash_target",settings["flash_target"],"");this.addSetting("flash_width",settings["flash_width"],"1px");this.addSetting("flash_height",settings["flash_height"],"1px");this.addSetting("flash_color",settings["flash_color"],"#000000");this.debug=this.getSetting("debug");};SWFUpload.prototype.loadFlash=function(){var html="";var sb=new stringBuilder();if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){sb.append('<embed type="application/x-shockwave-flash" src="'+this.getSetting("flash_path")+'" width="'+this.getSetting("flash_width")+'" height="'+this.getSetting("flash_height")+'"');sb.append(' id="'+this.movieName+'" name="'+this.movieName+'" ');sb.append('bgcolor="'+this.getSetting["flash_color"]+'" quality="high" wmode="transparent" menu="false" flashvars="');sb.append(this._getFlashVars());sb.append('" />');}else{sb.append('<object id="'+this.movieName+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getSetting("flash_width")+'" height="'+this.getSetting("flash_height")+'">');sb.append('<param name="movie" value="'+this.getSetting("flash_path")+'" />');sb.append('<param name="bgcolor" value="#000000" />');sb.append('<param name="quality" value="high" />');sb.append('<param name="wmode" value="transparent" />');sb.append('<param name="menu" value="false" />');sb.append('<param name="flashvars" value="'+this._getFlashVars()+'" />');sb.append('</object>');}
var container=document.createElement("div");container.style.width="0px";container.style.height="0px";container.style.position="absolute";container.style.top="0px";container.style.left="0px";var target_element=document.getElementsByTagName("body")[0];if(typeof(target_element)=="undefined"||target_element==null)
return false;var html=sb.toString();target_element.appendChild(container);container.innerHTML=html;this.movieElement=document.getElementById(this.movieName);};SWFUpload.prototype._getFlashVars=function(){var sb=new stringBuilder();sb.append("uploadScript="+this.getSetting("upload_script"));sb.append("&allowedFiletypesDescription="+this.getSetting("allowed_filetypes_description"))
sb.append("&flashLoadedCallback="+this.getSetting("flash_loaded_callback"));sb.append("&uploadFileQueuedCallback="+this.getSetting("upload_file_queued_callback"));sb.append("&uploadFileStartCallback="+this.getSetting("upload_file_start_callback"));sb.append("&uploadProgressCallback="+this.getSetting("upload_progress_callback"));sb.append("&uploadFileCompleteCallback="+this.getSetting("upload_file_complete_callback"));sb.append("&uploadQueueCompleteCallback="+this.getSetting("upload_queue_complete_callback"));sb.append("&uploadDialogCancelCallback="+this.getSetting("upload_dialog_cancel_callback"));sb.append("&uploadFileErrorCallback="+this.getSetting("upload_file_error_callback"));sb.append("&uploadFileCancelCallback="+this.getSetting("upload_file_cancel_callback"));sb.append("&uploadQueueCompleteCallback="+this.getSetting("upload_queue_complete_callback"));sb.append("&autoUpload="+this.getSetting("auto_upload"));sb.append("&allowedFiletypes="+this.getSetting("allowed_filetypes"));sb.append("&maximumFilesize="+this.getSetting("allowed_filesize"));return sb.toString();}
SWFUpload.prototype.flashLoaded=function(bool){this.loadUI();if(this.debug)
SWFUpload.debug("Flash called home and is ready.");};SWFUpload.prototype.loadUI=function(){if(this.getSetting("target")!=""&&this.getSetting("target")!="fileinputs"){var instance=this;var target=document.getElementById(this.getSetting("target"));var browselink=document.createElement("a");browselink.className=this.getSetting("browse_link_class");browselink.id=this.movieName+"BrowseBtn";browselink.href="javascript:void(0);";browselink.onclick=function(){instance.browse();return false;}
browselink.innerHTML=this.getSetting("browse_link_innerhtml");target.innerHTML="";target.appendChild(browselink);if(this.getSetting("auto_upload")==false){var uploadlink=document.createElement("a");uploadlink.className=this.getSetting("upload_link_class");uploadlink.id=this.movieName+"UploadBtn";uploadlink.href="#";uploadlink.onclick=function(){instance.upload();return false;}
uploadlink.innerHTML=this.getSetting("upload_link_innerhtml");target.appendChild(uploadlink);}}};SWFUpload.debug=function(value){if(window.console)
console.log(value);else
alert(value);}
SWFUpload.prototype.addSetting=function(name,value,default_value){return this.settings[name]=(typeof(value)=="undefined"||value==null)?default_value:value;};SWFUpload.prototype.getSetting=function(name){return(typeof(this.settings[name])=="undefined")?null:this.settings[name];};SWFUpload.prototype.browse=function(){this.movieElement.browse();};SWFUpload.prototype.setUploadScript=function(url){this.movieElement.setUploadScript(url);};SWFUpload.prototype.upload=function(){this.movieElement.upload();}
SWFUpload.prototype.cancelFile=function(file_id){this.movieElement.cancelFile(file_id);};SWFUpload.prototype.cancelQueue=function(){this.movieElement.cancelQueue();};SWFUpload.prototype.debugSettings=function(){var sb=new stringBuilder();sb.append("----- DEBUG SETTINGS START ----\n");sb.append("ID: "+this.movieElement.id+"\n");for(var key in this.settings)
sb.append(key+": "+this.settings[key]+"\n");sb.append("----- DEBUG SETTINGS END ----\n");sb.append("\n");var res=sb.toString();SWFUpload.debug(res);};function stringBuilder(join){this._strings=new Array;this._join=(typeof join=="undefined")?"":join;stringBuilder.prototype.append=function(str){this._strings.push(str);};stringBuilder.prototype.toString=function(){return this._strings.join(this._join);};};

		
var FlashUploader = {
	canMultiSelect: true,
	isLoadComplete: false,

	_swfu: null,

	_msrl: 0,
	_upload_url: null, 
	_sessionid: 0,

	_is_uploading: false,
	_queued_length: 0, 
	_completed_count: 0, 
	

	init: function(msrl, upload_url, canMultiSelect) {
		if (this._swfu) return;

		if (canMultiSelect != undefined) this.canMultiSelect = canMultiSelect;
		this._msrl = msrl;
		this._upload_url =  upload_url;

		this._swfu = new SWFUpload({
			upload_script : "aa",
			flash_path : "/Home/app/image_upload/swfupload.swf",
			allowed_filesize : 4096,	// 4 MB
			allowed_filetypes : "*.jpg;*.gif;*.png",
			allowed_filetypes_description : "*.jpg *.gif *.png ",
			flash_loaded_callback : 'FlashUploader.onFlashLoaded',

			upload_file_queued_callback : "FlashUploader.onFileQueued",
			upload_file_start_callback : 'FlashUploader.onUploadFileStart',
			upload_progress_callback : 'FlashUploader.onUploadProgress',
			upload_file_complete_callback : 'FlashUploader.onUploadFileComplete',
			upload_file_cancel_callback: "FlashUploader.onFileCancelCallback",
			upload_queue_complete_callback : "FlashUploader.onUploadQueueComplete",
			upload_error_callback : "FlashUploader.onUploadError",
			auto_upload : false
		});
		
	},

	onFlashLoaded: function() {
		this.isLoadComplete = true;
	},

	onFileQueued: function (file, queuelength) {
		this._queued_length = queuelength;
		if (!this._is_uploading) {
			this.upload();
		}
	},

	onUploadFileStart: function (file, position, queuelength) {
		this.onProgressStart();
	},

	onUploadProgress: function(file, bytesLoaded) {
		var percent = Math.ceil((bytesLoaded / file.size)*100)
		this.onProgressChanged(percent);
	},

	onUploadFileComplete: function(file) {
		this._completed_count++;
		if (!this.canMultiSelect && this._completed_count >= 1 ) {
			this._swfu.cancelQueue();
			return;
		}
	},

	onFileCancelCallback: function() {

	},

	onUploadQueueComplete: function() {
		// cancel을 부를 경우에도 queue complete가 오므로 반드시 upload가 완료된 count를 확인해서 getreult를 한다.
		if (this._completed_count>0) {
			this.getResult();
			this._completed_count = 0;
		}

		this._is_uploading = false;
	},

	onUploadError: function(errno) {
		// SWFUpload.debug(errno);
		this.onProgressEnd();
	},

	browse: function() {
		if (!this.isLoadComplete) return;

		this._swfu.browse();
	},
	
	upload: function () {
		this._is_uploading = true;

		this._sessionid = Date.getTime()%10000+this._msrl;
		this._swfu.setUploadScript(this._upload_url+"/_api/index.php?method=photo.savephotoflash&sessionid="+this._sessionid+"&msrl="+this._msrl+"&folder=1&param=Filedata");
		this._swfu.upload();
	},

	stop: function() {
		this._is_uploading = false;

		// cancel하고 지금까지 올린 upload결과는 가져온다.
		this._swfu.cancelQueue();

		this._queued_length = 0;
		this._completed_count = 0;

	},

	cancel: function() {
		this._is_uploading = false;

		// cancel 이후에 아무일도 안한다.
		this._queued_length = 0;
		this._completed_count = 0;

		this._swfu.cancelQueue();
	},


	remove: function(id) {
		this._swfu.cancelFile(id);
	},

	getResult: function() {

		var params = {
			method: "photo.getresult",//"msglist",
			callback:"FlashUploader._onGetResult",
			msrl: this._msrl,
			sessionid: this._sessionid,
			folder:1
		};
				
		nus.io.ScriptRequest.sendRequest(this._upload_url+"/_api/", params, null, "FlashUploader.onUploadError('fail to get result')");
	},

	_onGetResult: function(rsp) {
		var result = rsp;
		if (!this.canMultiSelect) {
			result = rsp[0];
		}
		this.onUploadResult(result);
		this.onProgressEnd();
	},

	onUploadResult: function (rsp) {
		
	},

	// progress
	onProgressStart: function() {

	},
	onProgressChanged: function() {

	},

	onProgressEnd: function(percent) {

	}
};

}
else {
	document.write("<scr"+"ipt src=\"/Home/app/image_upload/flashupload9.js\"><\/scr"+"ipt>");
}
