/**
 * @author hooriza (ajaxUI team)
 */

(function(className) {

	SPS[className] = $Class({
		
		_o : null,
		
		_sAction : null,
		_oParam : null,
		
		_templateCmt : null,
		
		$init : function(sEl, oArg) {
			
			var oEl = $(sEl);
			
			this._oParam = {
				'vocabEntryID' : oArg.vocabEntryID
			};
			
			var o = this._o = {
				wrap : oEl,
				
				listComment : $$('.list_comment', oEl)[0],
				formComment : $$('.form_comment', oEl)[0],
				
				grapPopup : $$('.grab_popup', oEl)[0]
			};
			
			if (o.grapPopup) {
				$Element(o.grapPopup).hide();
				SPS.selectbox.touchAll('select_d', o.grapPopup);
			}
			
			if (!o.formComment) return;
			
			var oTemplate = $$('.list', o.listComment)[0];
			this._templateCmt = oTemplate.cloneNode(true);
			oTemplate.parentNode.removeChild(oTemplate);
			
			$Element(o.formComment).hide();
			this._bindEvents();
			
		},
		
		_showFormComment : function(oItem) {
			
			var o = this._o;
			this._editCmt = null;
			
			if (oItem) { // 수정할때
				
				this._sAction = 'edit';
				
				SPS.hideOne.hide(oItem, 'list');
				$Element(oItem).after(o.formComment);

			} else {
			
				this._sAction = 'insert';
				
				SPS.data.setValue('.cmt_', o.formComment, { 'title' : '', 'content' : '' });
				$Element(o.listComment).append(o.formComment);
				
				this._oParam.vocabStudyInfoID = null;
				delete this._oParam.vocabStudyInfoID;
				
			}
			
			SPS.layer.show(o.formComment);

			$$('.cmt_title', o.formComment)[0].focus();
			$$('.cmt_title', o.formComment)[0].select();
			
		},

		_getCommentIndex : function(oItem) {
			
			// 몇번째 목록 인지 알아내기
			var nIdx = 0;
			for (var oEl = oItem.previousSibling; oEl; oEl = oEl.previousSibling)
				if (oEl.nodeType == 1 && $Element(oEl).hasClass('list')) nIdx++;

			return nIdx;			
			
		},
		
		_getCommentItem : function(oEl) {
			
			var eBox = $Element(oEl).findElement('parentNode', function(oEl) { return $Element(oEl).hasClass('list'); });
			return eBox ? eBox.$value() : null;
			
		},
		
		_editComment : function(oEl) {
			
			var o = this._o;
			
			var oItem = this._getCommentItem(oEl); // 목록 아이템 태그 얻기
			if (!oItem) return;
			
			var oData = SPS.data.getValue('.cmt_', oItem, [ 'uid', 'title', 'content' ]);
			SPS.data.setValue('.cmt_', o.formComment, oData);
			
			this._oParam.vocabStudyInfoID = oData.uid;
			this._showFormComment(oItem);
			
		},
		
		_deleteComment : function(oEl) {
			
			var oItem = this._getCommentItem(oEl); // 목록 아이템 태그 얻기
			if (!oItem) return;
			
			var oData = SPS.data.getValue('.cmt_', oItem, [ 'uid' ]);
			this._oParam.vocabStudyInfoID = oData.uid;

			this._sAction = 'delete';
			this._requestCommentAction();
			
		},
		
		_applyComment : function() {
			
			var o = this._o;
			if (!SPS.validator.validate(o.formComment)) return;
			
			var oData = SPS.data.getValue('.cmt_', o.formComment, [ 'title', 'content' ]);
			
			this._requestCommentAction({
				'title' : oData.title,
				'contents' : oData.content
			});
			
		},
		
		_findComment : function(vocabStudyInfoID) {
			
			var oFound;
			
			var o = this._o;
			var aIDs = $A($$('.cmt_uid', o.listComment)).forEach(function(oID) {
				if (oID.innerHTML == vocabStudyInfoID) oFound = oID;
			});
			
			if (oFound)
				return this._getCommentItem(oFound);
			
			return null;
			
		},
		
		_requestCommentAction : function(oData) {
			
			var o = this._o;
			var self = this;
			
			oData = oData || {};
			$H(this._oParam).forEach(function(sValue, sKey) { oData[sKey] = sValue; });
			
			var sUrl; // Comment
			
			switch (this._sAction) {
			case 'insert':
				sUrl = 'addVocabEntryStudyInfo';
				break;
			
			case 'edit':
				sUrl = 'editVocabEntryStudyInfo';
				break;
			
			case 'delete':
				sUrl = 'deleteVocabEntryStudyInfo';
				break;
			}
			
			var oAjax = $Ajax(sUrl, {
				
				onload : function(oRes) {
					
					var oData = null;
					try { eval('oData = ' + oRes.text() + ';'); } catch(e) { return; }
					
					self._processCommentResponse(oData);
					
				}
				
			});
			
			oAjax.request(oData);
			
		},
		
		_processCommentResponse : function(oData) {
			
			var o = this._o;
			var oComment = this._findComment(oData.vocabStudyInfoID);
			// alert(oComment);
			
			switch (oData.action) {
			case 'delete':
				o.listComment.removeChild(oComment);
				break;
				
			case 'insert':
				var oNewComment = this._templateCmt.cloneNode(true);

				SPS.data.setValue('.cmt_', oNewComment, {
					'uid' : oData.vocabStudyInfoID,
					'title' : oData.title,
					'content' : oData.contents
				});
				
				o.listComment.appendChild(oNewComment);
				SPS.layer.hide(true);
				break;
				
			case 'edit':
			
				SPS.data.setValue('.cmt_', oComment, {
					'title' : oData.title,
					'content' : oData.contents
				});
			
				SPS.layer.hide(true);
				break;
			}
			
		},
		
		_bindEvents : function() {

			var o = this._o;
			var self = this;
			
		},
		
		_showGrapPopup : function() {
			
			var o = this._o;
			SPS.layer.show(o.grapPopup);
			
			o.grapPopup.style.zoom = 1;
			o.grapPopup.style.zoom = '';
			
		},

		_grab : function(sVocabID) {

			var o = this._o;
			var oTarget = $$('[name=target]', o.wrap)[0];
			var sTargetVocabID = SPS.getFormValue(oTarget);

			if (sTargetVocabID === null) {
				alert(SPS.text('SELECT_FOLDER'));
				oTarget.focus();
				return;			
			}
			
			var oQuery = {
				'vocabID' : sVocabID,
				'vocabEntryID' : this._oParam.vocabEntryID,
				'targetVocabID' : sTargetVocabID
			};
			
			var sQueryString = SPS.makeQueryString(oQuery);
			var sUrl = 'scrap1VocabEntryScrap?' + sQueryString;
						
			location.href = sUrl;
			
		}

	});

})('ct_59_01');
