/* 
 * Class name : UploaderFlex
 * Description : Flex Uploader Handler
 * Since : Aug 20, 2008 5:10:30 PM
 * Author : IkYong, Choi
 */
var UploaderFlex = Class.create({
  // 값 초기 설정.
  initialize: function(image_ids, images, params){
    this.tpl = new Template("<img src='#{image_server}#{public_filename}' height='#{height}' width='#{width}'>");
    this.thumbnail_tpl = new Template("<img src='#{image_server}#{thumbnail_image}'>");
    this.org_image_infos = new Array();
    this.org_image_names = new Array();
    this.thumbnail_image_infos = new Array();
	
    this.image_id = "";

    //동영상 관련	
	this.video_thumbnail_image_infos = new Array();
	this.video_thumbnail_image_ids = new Array();
	this.video_tpl =  new Template("#{image_server}#{public_filename}");
	this.video_urls = new Array()
    
    eval("this.image_ids = ["+image_ids+"];");
    eval("this.images = $H({"+images+"});");
    eval("this.params = $H({"+params+"});");
	
	
    this._initializeImageObject();
    this._initializeParamObject();
	
    //alert(this.image_ids.toSource());   
    //alert(this.images.toSource());    
    //alert(this.params.toSource()); 


    this.setOrgImageInfo();
    this._setThumbnailImageInfo();
    this._setImageIds();
    this._setOrgImageName();
	
	
	this._setVideoThumbnailImageInfo();
  },

  // 이미지정보 초기 설정.
  _initializeImageObject: function(){
    try {
    	this.images.each(function(org_image){
        if(!this.image_ids.include(org_image.key)){
          this.images.unset(org_image.key);
        }
      }, this);
    } catch (e) {}
  },
  
  // 파라미터정보 초기 설정.
  _initializeParamObject: function(){
    try {
    	this.params.each(function(param){
        /*if(param.key == "obj_target"){
          alert("param.key => [" + param.key + "], param.value => [" + param.value + "]");
          (param.value == "this") ? eval(param.key+" = "+param.value+";") : eval("this."+param.key+" = "+param.value+";");
          
        }else{
          eval("this."+param.key+" = '"+param.value+"';");
        }*/
        (param.key == "obj_target") ? (param.value=="this") ? eval(param.key+" = "+param.value+";") : eval("this."+param.key+" = "+param.value+";") : eval("this."+param.key+" = '"+param.value+"';");
//        (param.key == "obj_target") ? eval("this."+param.key+" = "+param.value+";") : eval("this."+param.key+" = '"+param.value+"';");
      }, this);
    } catch (e) {
      alert("Uploader._initializeParamObject : " + e.description);
    }
  },
  
  // 이미지정보 설정(메인 이미지).
  setOrgImageInfo: function(){
    try{
      this.images.each(function(image, index){
        this.org_image_infos[index] = this.tpl.evaluate(image.value);
        this.org_image_names[index] = image.value.original_name;
		
	    this.video_urls[index] = this.video_tpl.evaluate(image.value);
		
      }, this);
    }catch(ee){}
  },
  
  // Thumbnail 이미지정보 설정(메인 제외).
  _setThumbnailImageInfo: function(){
    try{
      if(!this.params.get("thumbnail_name")) return;
      this.images.each(function(thumbnail, index){
        this.thumbnail_image_infos[index]  = this.thumbnail_tpl.evaluate({"thumbnail_image" :thumbnail.value.public_filename.split(".")[0]+"_"+ this.params.get("thumbnail_name") +"."+thumbnail.value.public_filename.split(".")[1], "image_server" : thumbnail.value["image_server"]});
      }, this);
    }catch(ee){}
  },
  
  
  //동영상 Thumbnail 이미지 정보설정
  _setVideoThumbnailImageInfo : function() {
  	 try{
        if(this.params.get("upload_type") != '003') return;
	    
        this.images.each(function(thumbnail, index){
		
	  	    thumb_urls = thumbnail.value.video_thumbnail_url.split("|") ;
			thumb_urls.each(function(t,i) {
				 this.video_thumbnail_image_infos[i]  =  t;	
			},this);
			
			thumb_ids = thumbnail.value.video_thumbnail_ids.split("|") ;
			thumb_ids.each(function(t,i) {
				 this.video_thumbnail_image_ids[i]  =  t;	
			},this);
      }, this);
    }catch(ee){}
  },
  
  
  // 이미지 아이디 설정.
  _setImageIds: function(){
    try{
      try{
        if(this.obj_target){
          if(this.params.get("is_restore") == "1"){
            this.obj_target.$(this.params.get("input_name")).value = this.image_ids.join(';')+";"
            return;
          }else{
            this.obj_target.$(this.params.get("input_name")).value += this.image_ids.join(';')+";"
            return;
          }
        }else{
          if(this.params.get("is_restore") == "1"){
            $(this.params.get("input_name")).value = this.image_ids.join(';')+";"
            return;
          }else{
            $(this.params.get("input_name")).value += this.image_ids.join(';')+";"
            return;
          }
        }
      }catch(e){
        if(this.obj_target){
          if(this.params.get("is_restore") == "1"){
            this.obj_target.$(this.params.get("input_name").gsub(/\[/,"_").gsub(/\]/, "") ).value = this.image_ids.join(';')+";"
            return;
          }else{
            this.obj_target.$(this.params.get("input_name").gsub(/\[/,"_").gsub(/\]/, "") ).value += this.image_ids.join(';')+";"
            return;
          }
        }else{
          if(this.params.get("is_restore") == "1"){
            $(this.params.get("input_name").gsub(/\[/,"_").gsub(/\]/, "") ).value = this.image_ids.join(';')+";"
            return;
          }else{
            $(this.params.get("input_name").gsub(/\[/,"_").gsub(/\]/, "") ).value += this.image_ids.join(';')+";"
            return;
          }
        }
      }
    }catch(ee){}
  },
  
  // 가상 input tag에 원본이미지명 설정. 
  _setOrgImageName: function(){
    try{
      try{
        if(this.obj_target){
          this.obj_target.$(this.params.get("org_tag_name")).value = this.org_image_names[0];
        }else{
          $(this.params.get("org_tag_name")).value = this.org_image_names[0];
        }
      }catch(e){
        if(this.obj_target){
          this.obj_target.$(this.params.get("org_tag_name").gsub(/\[/,"_").gsub(/\]/, "") ).value = this.org_image_names[0];
        }else{
          $(this.params.get("org_tag_name").gsub(/\[/,"_").gsub(/\]/, "") ).value = this.org_image_names[0];
        }
      }
    }catch(ee){}
  },
  
  setTemplate: function(tpl){
    this.tpl = tpl;
  },
  
  setThumbnailTemplate: function(thumbnail_tpl){
    this.thumbnail_tpl = thumbnail_tpl;
  },
  
  // 
  setImagePreview: function(){
    try {
    	if(this.obj_target){
        if(this.params.get("is_restore") == "1"){
          this.obj_target.$(this.params.get("div_id")).innerHTML = (this.params.get("thumbnail_name")!=null ? this.thumbnail_image_infos.join("") : this.org_image_infos.join(""));
        }else{
          this.obj_target.$(this.params.get("div_id")).innerHTML += (this.params.get("thumbnail_name")!=null ? this.thumbnail_image_infos.join("") : this.org_image_infos.join(""));
        }
      }else{
        if(this.params.get("is_restore") == "1"){
          $(this.params.get("div_id")).innerHTML = (this.params.get("thumbnail_name")!=null ? this.thumbnail_image_infos.join("") : this.org_image_infos.join(""));
        }else{
          $(this.params.get("div_id")).innerHTML += (this.params.get("thumbnail_name")!=null ? this.thumbnail_image_infos.join("") : this.org_image_infos.join(""));
        }
      }
    } catch (e) {}
  },
  
  uploader_close: function(){
    try {
    	if(this.obj_target){
        this.obj_target.Windows.close(this.params.get("layer_name"));
      }else{
        Windows.close(this.params.get("layer_name"));
      }
    } catch (e) {}
  }
});

/*
 * Function name : initUploader
 * Description : Flex Uploader가 호출하는 함수(upload된 이미지정보 설정).
 * Since : Nov 11, 2008 8:54:01 PM
 * Author : IkYong, Choi
 */
function initUploader(image_ids, images, params){
  var uploader = new UploaderFlex(image_ids.gsub(";",","), images, params);
  if(uploader.params.get("call_back") && uploader.params.get("call_back") != "Uploader.setImage")
    eval(uploader.params.get("call_back")+"(uploader);");
  else
    UploaderFlex.setImage(uploader);
    
  uploader.uploader_close();
}

UploaderFlex.setImage = function(obj){
  obj.setImagePreview();
}

UploaderFlex.openUploader = function(value){
  var params = $H(value);
  var _width = params.get('width');
  var _height = params.get('height');
  var _left = screen.availWidth / 2 - parseInt(_width) / 2;
  var _top = screen.availHeight / 2 - parseInt(_height) / 2 - 30;
  var upload_popup = window.open('/wedding/common/uploader/second?' + params.get('params'), 'upload_popup', 'left=' + _left + ', top=' + _top + ', width=' + _width + ', height=' + _height + ', menubar=no, resizeble=no, scrollbars=no, status=no, titlebar=no, toolbar=no');
  
  
  if(!upload_popup) 
  	alert('업로드 팝업이 차단되었습니다. 상단의 노란줄을 클릭하고 차단을 해제해주세요!');
  
  return false;
}

UploaderFlex.destroyUploader = function(obj){
	var uploader = $(obj) || self;
	try{
		uploader.close();
	}catch(e){
		
	}
}

/*레이어에서 팝업으로 교체하면서 삭제됨! 2009.05.07
UploaderFlex.openUploader = function(value){
	
  if(!$('uploaderLayer')) {
    var photoLayer = document.createElement('div');
    photoLayer.style.display = 'none';
    photoLayer.setAttribute('id', 'uploaderLayer');
    document.body.insertBefore(photoLayer, document.body.firstChild);
  }else{
  	alert("업로드 창이 존재합니다.");
  	return false;
  }
 
  
  if(Prototype.Browser.IE)
    $('uploaderLayer').setStyle($H(value).get("width"), $H(value).get("height")+10);
  else
    $('uploaderLayer').setStyle($H(value).get("width"), $H(value).get("height"));
  
  $('uploaderLayer').update($H(value).get("str"));
  Application.toCenter('uploaderLayer');
  $('uploaderLayer').show();
  
  return false;
}


UploaderFlex.destroyUploader = function(obj){
	var uploader = $(obj) || $('uploaderLayer');
	try{
		uploader.remove();
	}catch(e){
		
	}
}
*/

UploaderFlex.flexMessage = function(msg){
  alert(msg);
}

UploaderFlex.destroyUploaderLayer = function(id){
  Windows.close(id);
}

/* 
 * Class name : Uploader
 * Description : flex업로더를 사용하지 않고 단일 이미지 업로드시 사용.
 * Since : Aug 20, 2008 5:10:30 PM
 * Author : IkYong, Choi
 */
 
var Uploader = {
   _target : new Object()     // Html 객체 target.
  , _imgView : new Object()   // Image 전달받은 이미지가 display될 id.
  , _imgInput : new Object()    // Input 객체 name.
  , _textInput : new Object()   // Text input 객체 name.
  , _isEmptyInput : false     // Input 객체 기존 저장된 이미지 존재여부.
  , _imageServer : ""       // 이미지서버.
  , _imageFileName : ""     // 이미지 파일명.
  , _textValue : ""               // 입력텍스트
  , _isThumbnail : false      // Thumbnail 사용여부.
  , _status : 0         // 다중 이미지 업로드의 마지막 파일여부('0'이 전달되면 마지막 파일).
  , _layer : new Object()     // uploader가 layer 내 출력된경우 해당 layer.
  , _imageId : ""         // 전달받은 image id.
  , _originalName : ""      // 원본이미지명
  , _orgTagName : ""        // 원본이미지명을 표시 할 tag명
  , _isRestore : true       // 이미지 교체여부
  , _thumbnailName : "_thumbnail"           // thumbnail명
  , _arr : new Object()
};


Uploader.init = function(arr){
  try{
      this._target = eval(arr.obj_target != "" ? arr.obj_target : "opener");
        this._imgView = this._target.document.getElementById(arr.div_id);
        this._imgInput = this._target.document.getElementsByName(arr.input_name);
        this._index = arr.index != null && arr.index != '' ?  parseInt(arr.index) : 0
        try{
          this._isEmptyInput = this._imgInput[0].value == "";
        }catch(ee){
          this._isEmptyInput = this._imgInput.value == "";
        }
        this._status = arr.current_num == "0";
        this._layer = arr.layer_name;
        this._isThumbnail = arr.is_thumbnail == "1";
        this._thumbnailName = arr.thumbnail_name || this._thumbnailName; 
        this._imageServer = arr.image_server;
        this._imageFileName = arr.public_filename;
		
        this._imageId = arr.id;
        this._orgTagName = this._target.document.getElementsByName(arr.org_tag_name);
        this._originalName = arr.original_name;
        this._isRestore = arr.is_restore == "1";
        this._arr = arr;
  }catch(e){
//    alert("Uloader.init : " + e.description);
    return;
  }
}

//arr => obj_target, image_id, image_name, image_server, current_num, file_length, div_id, input_name, is_thumbnail, layer_name
Uploader.setImage = function(arr){
  try{
    this.init(arr);
    this.displayInit();
    this.displayImage();
    this.setImageId();
    this.setOriginalName();
    this.closeWindow();
  }catch(e){
//    alert("Uploader.setImage : " + e.description);
    return;
  }
}

Uploader.singleImageInit = function(arr){
  try{
    this.init(arr);
    this._submitUrl = arr.submit_url;
    this._submitTarget = arr.submit_target;
    //this._imgInput = document.getElementsByName(arr.input_name);
    this._imgInput = $(arr.input_name);
    this._imageId = arr.common_image_id;
  }catch(e){
//    alert("Uploader.singleImageInit" + e.description);
  }
}

/*
 * Function name : Uploader.setSubmitImage
 * Description : Single image uploader call back method
 * Since : Aug 25, 2008 11:40:00 PM
 * Author : IkYong, Choi
 */
Uploader.setSubmitImage = function(arr){
    try{
        this.singleImageInit(arr);
        this.setImageId();
        this.submitWindow();
        this.closeWindow();
    }catch(e){
//      alert("Uploader.setSingleImage : "+e.description);
        return false;
    }
}

/*
 * Function name : Uploader.setSubmitImage
 * Description : Single image uploader call back method
 * Since : Aug 25, 2008 11:40:00 PM
 * Author : IkYong, Choi
 */
Uploader.setTextImage = function(arr){
    try{
        this.init(arr);
        this.displayInit();
        this.displayImage();
        this.setImageId();
        this.setInputText(arr.text_input_name, arr.text_area);
        if(arr.public_filename != null && arr.public_filename != '')
        this.setInputText(arr.sketch_map_url_name, arr.image_server + arr.public_filename);
        if(arr.original_name != null && arr.original_name != '')
        this.setInputText(arr.sketch_map_image_name, arr.original_name);
        this.closeWindow();
    }catch(e){
      alert("Uploader.setTextImage : "+e.description);
        return false;
    }
}

/*
 * Function name : Uploader.displayImage
 * Description : 이미지 display
 * Since : 2008. 08. 05 오후 2:01:19
 * Author : IkYong, Choi
 * input obj Object : 이미지를 display할 대상 객체.
 * input image_url String : 이미지 전체경로.
 * input is_thumbnail String : thumbnail 사용여부.
 */
Uploader.displayImage = function(){
  try{
    if(this._isThumbnail){
      if(this._isRestore){
        this._imgView.innerHTML = "<img src='"+this._imageServer+this._imageFileName.split(".")[0]+this._thumbnailName+"."+this._imageFileName.split(".")[1]+"'/>"; 
      }else{
        this._imgView.innerHTML += "<img src='"+this._imageServer+this._imageFileName.split(".")[0]+this._thumbnailName+"."+this._imageFileName.split(".")[1]+"'/>";  
      }
    }else{
      if(this._isRestore){
        this._imgView.innerHTML = "<img src='"+this._imageServer+this._imageFileName+"'/>"; 
      }else{
        this._imgView.innerHTML += "<img src='"+this._imageServer+this._imageFileName+"'/>";  
      }
    }
    
    if (this._imageFileName.split(".").last().toLowerCase() == "swf") {
      this._imgView.innerHTML = Uploader.viewFlash(this._imageServer+this._imageFileName);
    } 
  }catch(e){
//    alert("Uploader.displayImage : " + e.description);
    return;
  }
}

/*
 * Function name : Uploader.setImageId
 * Description : 이미지 id 설정.
 * Since : 2008. 08. 05 오후 2:03:29
 * Author : IkYong, Choi
 * input obj Object : 이미지 id를 설정한 input 객체.
 * input value String : input 객체에 저장 할 값.
 */
Uploader.setImageId = function(){
    try{
        if(this._isRestore) 
            this._imgInput[0].value = this._imageId+";";
        else
            this._imgInput[0].value += (this._imgInput[0].value != ""? ";" : "") +this._imageId+";";
        
    }catch(e){
//        alert("Uploader.setImageId : " + e.description);
        return;
    }
}


Uploader.setInputText = function(obj, txt_value){
    try{
        this._target.document.getElementsByName(obj)[0].value = txt_value;
    }catch(e){
        alert("Uploader.setInputText : " + e.description);
        return;
    }
}

/*
 * Function name : Uploader.displayInit
 * Description : display할 대상 객체의 초기화.
 * Since : 2008. 08. 05 오후 2:04:31
 * Author : IkYong, Choi
 */
Uploader.displayInit = function(){
  try{
    if(this._isEmptyInput) this._imgView.innerHTML = "";
  }catch(e){
//    alert("Uploader.displayInit : " + e.description);
    return;
  }
}

/*
 * Function name : Uploader.setOriginalName
 * Description : 파일 업로드 후 파일원본명 input에 설정.
 * Since : 2008. 08. 08 오후 1:04:52
 * Author : IkYong, Choi
 */
Uploader.setOriginalName = function(){
  try{
    this._orgTagName[0].value = this._originalName;
  }catch(e){
//    alert("Uploader.setOriginalName : " + e.description);
    return;
  }
}

Uploader.setOriginalById = function(){
  try{
    $(this._orgTagName).value = this._originalName;
  }catch(e){
//    alert("Uploader.setOriginalById : " + e.description);
    return;
  }
}


Uploader.submitWindow = function(){
  try{
    var f = document.form;
    document.forms[0].action = this._submitUrl;
    document.forms[0].target = this._submitTarget;
    document.forms[0].submit();
    
  }catch(e){
//    alert("Uploader.submitWindow : " + e.description);
    return;
  }
}

/*
 * Function name : Uploader.closeWindow
 * Description : Image uploader 닫기.
 * Since : 2008. 08. 05 오후 2:06:35
 * Author : IkYong, Choi
 */
Uploader.closeWindow = function(){
  try{
    if(this._status){
      if(this._layer != null &&  this._layer != ''){
        //this._target.document.getElementById(this._layer).style.visibility = "hidden";
        // Windows.js 닫기 설정.
        this._target.Windows.close(this._layer);
      }
      
      if(this._target == "opener") self.close();
      
    }else{
      return;
    }
  }catch(e){
//    alert("Uploader.closeWindow : " + e.description);
    //self.close();
    return;
  }
}


/*
 * Function name : Uploader.autoAttachUpload
 * Description : 단일 파일업로드 사용 시 input=file 의 값을 dummy input 에 파일명 출력. 
 * Since : Aug 25, 2008 11:00:08 AM
 * Author : IkYong, Choi
 * @input file_value String 파일명
 * @input dummy_obj Object 파일명을 출력 할 input object명
 */
Uploader.autoAttachUpload = function(file_value, dummy_obj) {
  try{
      if(file_value != '')
    document.getElementsByName(dummy_obj)[0].value = file_value;
  }catch(e){
//    alert("Uploader.autoAttachUpload : " + e.description);
    return false;
  }
} 


Uploader.isEmptyInputfile = function(){
    try{
        if(document.getElementsByName('common_image[uploaded_data]')[0].value == null 
        || document.getElementsByName('common_image[uploaded_data]')[0].value == ''){
            alert('파일을 선택해 주십시오.')
            return false;
        }else{
            return true;
        }
    }catch(e){
        alert("Uploader.isEmptyInputfile : "+e.description);
        return false;
    }
}

/*
 * Function name : Uploader.preImageView
 * Description : 로컬이미지 미리보기 (IE 5.5이상만 가능)
 * Since : Sep 2, 2008 4:28:43 PM
 * Author : IkYong, Choi
 */
Uploader.preImageView = function(){
    try {
     if (arguments[0].match(/\.(gif|jpg|jpeg|png)$/i)) {
        var obj = document.getElementById("previewImage");
        obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + arguments[0] + "',sizingMethod=scale)";
      } 
    } catch (e) {
        alert("Uploader.preImageView : "+e.description);
        return false;
    }
}

Uploader.closeUploader = function(layer_name){
  parent.Windows.close(layer_name);
}

Uploader.checkExtension = function(type){
  if(type.toLowerCase() == "swf"){
    if($('dummy_dummy').value.split(".").last().toLowerCase() != type.toLowerCase()){
      alert("파일 유형을 확인해 주십시오.");
      return false;
    }
  }
}


Uploader.viewFlash = function(file_name){
  var version = "9,0,28,0";
  var width = this._arr.skin_width || 940
  var height = this._arr.skin_height || 278
  
  // 가로 크기에 따라 세로크기 비율도 축소함.
  height = width >= 940 ? parseInt((parseInt(height) / 3), 10) : height
  width = width >= 940 ? parseInt((parseInt(width) / 3), 10) : width

  return new Template('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ' +
      'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=#{version}" width="#{width}" height="#{height}">' +
      '<param name="movie" value="#{file_name}" />' +
      '<param name="quality" value="high" />' +
      '<param name="wmode" value="transparent" />' +
      '<embed src="#{file_name}" ' +
      'quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" ' +
      'type="application/x-shockwave-flash" wmode="transparent" width="#{width}" height="#{height}"></embed></object>').evaluate({"version" : version, "file_name" : file_name, "width" : width, "height" : height});
}