/**
 * Copyright 2007 SK Communications. All rights reserved
 * @since 07.09.16
 * @author okjungsoo
 * 
 *  이오공감 추천 다이얼로그를 정의합니다. 
 */
if(typeof(Modal) == 'undefined') {
//	alert("You must first include Modal.js");
}

Object.extend(Modal, {
	searchURL: function(url) {
		if(Modal.current && Modal.current.searchURL) {
			Modal.current.searchURL(url);
		}
	}, 
	
	setFocus: function(element) {
		if(Modal.current && Modal.current.setFocus) {
			Modal.current.setFocus(element);
		}
	},
	
	recommendPost: function() {
		if(Modal.current && Modal.current.recommendPost) {
			Modal.current.recommendPost();
		}		
	}
});

Modal.RecommendDlg = Class.create();
Object.extend(Modal.RecommendDlg.prototype, {
	isLoaded: false,
	isFocused: false,
	
	focusedColor: '#333333',
	
	URL_NOTICE: 'http://',
	CONTENT_NOTICE: '이 글을 읽는 분들을 위해 간단하게 추천평을 써주세요. (200자 이하) 추천평에는 ' +
			'상대방에 대한 욕설이나 비방의 내용은 삼가 주시기 바랍니다.',
	TITLE_NOTICE: '(아래 주소창에 URL을 입력하면 추천할 글의 제목을 불러옵니다.)',
	
	initialize: function(_dialogID, _options) {
		this.dialogID = _dialogID;
		this.dialog = $(this.dialogID);
		this.options = _options;
		
		this.subject = this.dialog.getElementsByClassName('subject')[0];
		this.message = this.dialog.getElementsByClassName('warning')[0];
	
		var textareas = this.dialog.getElementsByTagName('textarea');
		for(var i=0; i<textareas.length; i++) {
			var textarea = textareas[i];
			switch(textarea.className){
				case 'url':
					this.permaLink = textarea;
					break;
				case 'write':
					this.content = textarea;
					break;
			}
		}
		if(this.options.isRecommended) {
			this.permaLink = this.dialog.getElementsByTagName('input')[0];
		}
		this.isLoaded = Modal.addDialog(this);
	},
	
	/**
	 * @param _params = {
	 * 		'subject':subject, 
	 * 		'permaLink':permaLink, 
	 * 		'handlePosition':function(source element){
	 * 			//TODO must be return top and right position
	 * 		}
	 *	}
	 */
	open: function(_params) {
		var topPosition = this.options.top;
		var leftPosition = this.options.left;
		
		if(_params && _params.handlePosition) {
			var srcElement = Event.element(_params['event']);
			var dlgPosition = _params.handlePosition(srcElement);
			
			leftPosition = dlgPosition[0] +"px";
			topPosition	= dlgPosition[1] +"px";
		}
		
		this.dialog.setStyle({ zIndex: this.options.zIndex, top: topPosition, left: leftPosition });
		this.dialog.show();
		this.initForm(_params);
	},
	
	close: function() {
		this.dialog.hide();
	},
	
	initForm: function(_params) {
		if(!this.options.isRecommended) {
			this.permaLink.value = this.URL_NOTICE;
			this.subject.innerHTML	= this.TITLE_NOTICE;
		}else if(_params){
			this.subject.innerHTML = _params['subject'];
			this.permaLink.value =  _params['permaLink'];
			_params = null;
		}
		this.content.value = this.CONTENT_NOTICE;
		this.content.style.color = "";

		this.message.update('');
		this.isFocused = false;
	},
	
	searchURL: function(permalink) {
		if(!this.isLoaded) { return;}
		
		new Ajax.Request('/exec/eofeeling/get_egloourl_exec.php', {
			parameters : $H({'permalink': permalink}),
			onSuccess: function(response) {
				var text = response.responseText;
				
				if(text.isJSON()) {
					var responseArr = text.evalJSON();
					if(responseArr.result == '1') {
						this.subject.innerHTML = responseArr.item.subject;
						this.message.innerHTML = '';
					}else {
						this.message.innerHTML = responseArr.message;
						if(responseArr.item) {
							this.subject.innerHTML = responseArr.item.subject;							
						}else {
							this.subject.innerHTML = 'URL을 입력하면 자동으로 추천할 글의 제목을 불러옵니다.';
						}
					}
				}
			}.bind(this),
			onFailure: this.handleFailure.bind(this)
		})
	}, 
	
	setFocus: function(element) {
		if(!this.isLoaded) { return;}
		if(!this.isFocused) {
			element.value = '';
			element.style.color = this.focusedColor;
			this.isFocused = true;
		}
	},

	handleFailure: function() {
		this.subject.innerHTML = '통신에 실패했습니다.';
	},
	
	recommendPost: function() {
		var permanentLink = this.permaLink.value;
		var recommendation = this.content.value.stripScripts().stripTags();
		
		if(this.isValidPermaLink(permanentLink) && this.isValidContent(recommendation)) {
			if(this.isFocused != true) {
				recommendation = '';
			}	
			
			new Ajax.Request('/exec/eofeeling/insert_recommend_exec.php', {
				parameters: $H({
					'eo_permalink': permanentLink,
					'eo_message': recommendation
				}),
				onSuccess: function(response){
					var text = response.responseText;
					
					if(text.isJSON()) {
						var responseArr = text.evalJSON();
						if(responseArr.result == '1') {
							if(typeof(Page) != 'undefined' && Page.refresh) {
								Page.refresh(responseArr.isFirstRecommendation);								
							}else {
								this.close();
							}
						}else if(responseArr.result == '0'){
							this.showErrorMsg(responseArr.message);
						}
					}					
				}.bind(this)
			});
		}
	},
	
	isValidPermaLink: function(url) {
		if(url.length == 0 || url == 'http://') {
			return this.showErrorMsg('퍼머링크가 없습니다.');
		}else if(url.search('egloos.com') == -1) {
			return this.showErrorMsg('URL을 확인해 주세요. 이글루스의 글만 추천하실 수 있습니다.');
		}
		return true;
	},
	
	isValidContent: function(content) {
		if(content.length > 200) {
			return this.showErrorMsg('추천평은 200자까지 입력할 수 있습니다.');
		}else if(content.blank() && !this.options.isRecommended) {		
			return this.showErrorMsg('추천평을 반드시 입력하셔야 합니다.');
		}
		return true;
	},
	
	showErrorMsg: function(content) {
		this.message.innerHTML = content;
		return false;
	}
});
