var rankup_opinion = {
	form: null,
	infos: {},
	delay: 100,
	empty: '<div class="no">등록된 기사의견이 없습니다.</div>',
	initialize: function(form) {
		this.form = form;
		this.loaded = false;
		this.form_setting();
		//this.load_datas();
	},
	// 의견 등록폼 설정
	form_setting: function() {
		var new_item = document.createElement('span');
		var items = this.infos;
		items.mode = 'regist_opinion';
		items.icon = '1';
		for(var name in items) {
			if(name.match(/login/i)) continue;
			new_item.innerHTML += "<input type='hidden' name='"+name+"' value='"+items[name]+"'>";
		}
		this.form.appendChild(new_item);
		this.active_form(this.infos.login.match(/on/i));
	},
	// 기사의견 번호 반환
	get_opinion_index: function(el) {
		while(!el.id.match(/comment_list/i)) el = el.parentNode;
		var obj = el.getElementsByTagName('div')[0];
		return obj.className.match(/info/i) ? obj.getAttribute('no') : 0;
	},
	// 한줄댓글 번호 반환
	get_reply_index: function(el) {
		return el.parentNode.getElementsByTagName('input')[0].value;
	},
	// 노드 치환 - 공통
	get_node_datas: function(item) {
		var nickname = item.getElementsByTagName('nickname')[0].firstChild.nodeValue;
		var content = item.getElementsByTagName('content')[0].firstChild.nodeValue;
		var wdate = item.getElementsByTagName('wdate')[0].firstChild.nodeValue;
		return {
			'no': item.getAttribute('no'),
			'ano': item.getAttribute('ano'),
			'ono': item.getAttribute('ono'),
			'uid': item.getAttribute('uid'),
			'rnum': item.getAttribute('rnum'),
			'gnum': item.getAttribute('gnum'),
			'bnum': item.getAttribute('bnum'),
			'icon': item.getAttribute('icon'),
			'nickname': nickname,
			'content': content,
			'wdate': wdate
		}
	},
	// 의견/댓글 로드
	load_datas: function(ono) {
		var classObj = this;
		if(ono==undefined) this.reset_opinion(ono);
		else {
			// 댓글이 달린경우 로딩 이미지 처리
			var rnums = parseInt($('opinion_'+ono+'_nums').getElementsBySelector('label[id="rnum"]')[0].innerHTML, 10);
			if(rnums) this.reset_opinion(ono);
		}
		var params = {mode: 'opinion_load', ano: this.infos.ano, ono: String(ono).replace(/undefined/, ''), opage: this.infos.opage, osort: this.infos.osort};
		new Ajax.Request('./multiProcess.ajax.html', {
			parameters: $H(params).toQueryString(),
			onSuccess: function(trans) {
				var resultData = trans.responseXML.getElementsByTagName('resultData')[0];
				var items = resultData.getElementsByTagName('item');
				// 기사의견
				if(ono==undefined) {
					setTimeout(function() {
						if(items.length) for(var i=0; i<items.length; i++) classObj.draw_opinion(classObj.get_node_datas(items[i]));
						else new Insertion.After('comment_topbar', classObj.empty);
						classObj.remove_loader('comment');
					}, (classObj.loaded==false ? 0 : classObj.delay));
				}
				// 한줄댓글
				else {
					if(!rnums) { // 한줄댓글이 있는 경우
						if(items.length) for(var i=0; i<items.length; i++) classObj.draw_reply(classObj.get_node_datas(items[i]))
					}
					else {
						setTimeout(function() {
							if(items.length) for(var i=0; i<items.length; i++) classObj.draw_reply(classObj.get_node_datas(items[i]))
							classObj.remove_loader('comment');
						}, classObj.delay);
					}
				}
			},
			onComplete: function(trans) {
				var login_status = trans.responseXML.getElementsByTagName('loginStatus')[0];
				classObj.infos.login = login_status.getAttribute('result').match(/true/i) ? 'on' : 'off';
				try { rankup_toolbar.login = classObj.infos.login } catch(e) { } // 툴바 로그인상태 갱신
			}
		});
	},
	// 의견 그리기
	draw_opinion: function(rows) {
		with(rows) {
			var new_opinion = "\
			<div id='comment_list'>\
				<div class='info' no='"+no+"'>\
					<div class='writer'><img src='"+domain+"images/face_"+icon+".gif' align='absmiddle' style='margin-right:5px'><span class='name'>"+nickname+" ("+uid+")</span> <span class='date'>"+wdate+"</span><a onClick=\"rankup_opinion.tools.opinion_delete(this)\"><img src='"+domain+"images/ic_del.gif' alt='삭제'></a></div>\
					<div class='recom' id='opinion_"+no+"_nums'>\
						<a onClick=\"rankup_opinion.open_reply(this)\"><img src='"+domain+"images/btn_reply.gif' alt='답글'></a><label id='rnum'>"+rnum+"건</label>\
						<a onClick=\"rankup_opinion.tools.opinion_vote(this, 'good')\"><img src='"+domain+"images/btn_recom.gif' alt='추천'></a><label id='gnum'>"+gnum+"건</label>\
						<a onClick=\"rankup_opinion.tools.opinion_vote(this, 'bad')\"><img src='"+domain+"images/btn_no.gif' alt='반대'></a><label id='bnum'>"+bnum+"건</label>\
						<a onClick=\"rankup_opinion.tools.opinion_vote(this, 'report')\"><img src='"+domain+"images/btn_report.gif' alt='신고'></a>\
					</div>\
				</div>\
				<div class='content'>"+content+"</div>\
				<div class='re' id='reply_content_"+no+"' style='display:none'>\
					<div class='re_box'><!--한줄댓글폼--></div>\
					<div class='re_list'><!--한줄댓글--></div>\
				</div>\
			</div>";
		}
		var empty_item = $('comment').getElementsBySelector('div[class="no"]')[0];
		if(empty_item!==undefined) empty_item.parentNode.removeChild(empty_item);
		new Insertion.After('comment_topbar', new_opinion);
	},
	// 의견 초기화 - 리로딩시
	reset_opinion: function(ono) {
		if(ono==undefined) {
			var obj = $('comment');
			obj.getElementsBySelector('div[id="comment_list"]').each(function(opinion) { obj.removeChild(opinion) });
			new Insertion.After('comment_topbar', this.create_loader());
		}
		else {
			var obj = $('reply_content_'+ono).getElementsBySelector('div[class="re_list"]')[0];
			new Insertion.After(obj, this.create_loader());
		}
	},
	// 로딩이미지 생성 - 공통
	create_loader: function() {
		return "<div id='data_loading' style='text-align:center;margin-bottom:8px'><img src='"+domain+"images/data_loading.gif'></div>"
	},
	// 로딩이미지 제거 - 공통
	remove_loader: function(el) {
		$(el).getElementsBySelector('div[id="data_loading"]').each(function(loader) {
			loader.parentNode.removeChild(loader);
		});
	},
	// 추천/반대 투표
	tools: {
		handler: function(params) {
			params.procedure = params.mode;
			params.mode = 'opinion_handler';
			params.dummy = Math.random();
			this.procedure(params);
		},
		opinion_vote: function(el, cmd) { this.handler({mode: 'opinion_vote', cmd: cmd, ono: rankup_opinion.get_opinion_index(el)}) },
		opinion_delete: function(el) { this.handler({mode: 'opinion_delete', ono: rankup_opinion.get_opinion_index(el)}) },
		reply_report: function(el) { this.handler({mode: 'reply_report', rno: rankup_opinion.get_reply_index(el)}) },
		reply_delete: function(el) { this.handler({mode: 'reply_delete', rno: rankup_opinion.get_reply_index(el)}) },
		procedure: function(params) {
			new Ajax.Request('./multiProcess.ajax.html', {
				parameters:  $H(params).toQueryString(),
				onSuccess: function(trans) { trans.responseText.evalScripts() }
			});
		},
		reform: {
			opinion: function(ono) {
				var items = $('comment').getElementsBySelector('div[class="info"]');
				for(var i=0; i<items.length; i++) {
					if(items[i].getAttribute('no')!=ono) continue;

					var el = items[i];
					while(!el.id.match(/comment_list/i)) el = el.parentNode;
					el.parentNode.removeChild(el);
					rankup_opinion.num_recount({onum: false});
					if(!$('comment').getElementsBySelector('div[id="comment_list"]').length) new Insertion.After('comment_topbar', rankup_opinion.empty);
				}
			},
			reply: function(rno, ono) {
				rankup_opinion.num_recount({rnum: false}, ono);
				var obj = $('reply_content_'+ono);
				var el = obj.getElementsBySelector('input[value="'+rno+'"]')[0].parentNode;
				el.parentNode.removeChild(el);
				if(!obj.getElementsBySelector('li').length) {
					var ul = obj.getElementsBySelector('div[class="re_list"]')[0].getElementsByTagName('ul')[0];
					ul.parentNode.removeChild(ul);
				}
			}
		}
	},
	// 입력키 체크
	check_key: function(event) {
		if(event.keyCode==Event.KEY_RETURN) {
			rankup_opinion.save_reply(event);
			event.returnValue = false;
		}
	},
	// 한줄댓글 달기 뷰/설정
	open_reply: function(el) {
		var ono = this.get_opinion_index(el);
		var obj = $('reply_content_'+ono);
		this.reply_form(obj); // 한줄댓글 입력폼 설정
		if(obj.getAttribute('loaded')==null) {
			this.load_datas(ono);
			obj.setAttribute('loaded', true);
		}
		if(obj.style.display=='none') obj.style.display = '';
		else obj.getElementsBySelector('div[class="re_box"]')[0].toggle();
	},
	// 한줄댓글 입력폼 설정
	reply_form: function(obj) {
		var note_form = '<span class="re_text">한줄댓글</span><input type="text" hname="댓글 내용" disabled maxlength="30" value="로그인 후 글을 남겨주세요."><img src="'+domain+'images/btn_comment.gif" alt="댓글달글"> (30자 이내)';
		var reply_box = obj.select('div[class="re_box"]')[0];
		reply_box.update(note_form);
		var input = reply_box.getElementsByTagName('input')[0];
		var button = reply_box.getElementsByTagName('img')[0];
		if(this.infos.login.match(/on/i)) {
			Event.observe(input, 'keydown', this.check_key);
			Event.observe(button, 'click', this.save_reply);
			button.setStyle({cursor: 'pointer'});
			input.disabled = false;
			input.value = '';
		}
		else {
			Event.stopObserving(input, 'keydown', this.check_key);
			Event.stopObserving(button, 'click', this.save_reply);
			button.setStyle({cursor: 'default'});
		}
	},
	// 한줄댓글 저장
	save_reply: function(event) {
		var el = Event.element(event);
		rankup_opinion.infos.ono = rankup_opinion.get_opinion_index(el);
		var content = el.parentNode.getElementsByTagName('input')[0];
		content.value = content.value.trim();
		if(!content.value) return doError(content);

		var params = rankup_opinion.infos;
		params.mode = 'reply_save';
		params.content = content.value;
		new Ajax.Request('./multiProcess.ajax.html', {
			parameters: $H(params).toQueryString(),
			onSuccess: function(trans) { 
				content.value = '';
				trans.responseText.evalScripts()
			}
		});
	},
	// 한줄댓글 그리기
	draw_reply: function(rows) {
		with(rows) {
			var obj = $("reply_content_"+ono).getElementsBySelector('div[class="re_list"]')[0];
			if(obj.getElementsByTagName('ul')[0]==null) {
				var reply_box = document.createElement('ul');
				obj.appendChild(reply_box);
			}
			var new_item = document.createElement('li');
			new_item.innerHTML = "<input type='hidden' name='no' value='"+no+"'>"+nickname+" ("+uid+")<span class='bar'>:</span>"+content+" <span class='date'>"+wdate+"</span><a onClick='rankup_opinion.tools.reply_report(this)'><img src='"+domain+"images/ic_report.gif' alt='신고' class='ic_report' hspace='3'></a><a onClick='rankup_opinion.tools.reply_delete(this)'><img src='"+domain+"images/ic_del.gif' alt='삭제' align='absmiddle'></a>";
			obj.getElementsByTagName('ul')[0].appendChild(new_item);
		}
	},
	// 갯수 카운팅 - 공통
	num_recount: function(infos, ono) {
		for(var index in infos) {
			if(infos[index]==null) continue;
			var obj = (ono==undefined) ? $(index) : $('opinion_'+ono+'_nums').getElementsBySelector('label[id="'+index+'"]')[0];
			var pattern = /([0-9]{1,})+([가-힝]{1,})?$/; pattern.test(obj.innerHTML);
			var tag = { nums: parseInt(RegExp.$1, 10), units: RegExp.$2 };
			if(infos[index]==true) obj.update((tag.nums+1)+tag.units);
			else {
				var nums = tag.nums-1;
				obj.update((nums<1 ? 0 : nums)+tag.units);
			}
		}
	},
	// 표정 아이콘 선택폼
	draw_icons: function(el) {
		var obj = $(el);
		var icons = obj.getElementsByTagName('li');
		if(icons.length<=2) {
			obj.update();
			for(var no=1; no<=10; no++) {
				var new_icon = document.createElement('li');
				new_icon.innerHTML = "<img src='"+domain+"images/face_"+no+".gif' no='"+no+"' align='absmiddle'>";
				obj.appendChild(new_icon);
			}
			var classObj = this;
			Event.observe('comment_box', 'mouseover', function() { obj.hide() });
			$$('#'+el+' li').each(function(item) { 
				Event.observe(item, 'click', function(event) {
					var elem = Event.element(event);
					if(elem.src==undefined) return;
					$('preview_icon').src = elem.src;
					classObj.form.icon.value = elem.getAttribute('no');
					obj.hide();
				});
			});
		}
		if(browser.kind=="GEKO") obj.setStyle({marginTop:'18px'});
		obj.show();
	},
	// 로그인 체크
	check_login: function() {
		if(!this.infos.login.match(/on/i)) {
			alerts('죄송합니다. 로그인 후 이용해 주시기 바랍니다.');
			return false;
		}
		return true;
	},
	// 동적인 로그인
	dynamic_login: function(el) {
		var items = $A(el.parentNode.parentNode.getElementsByTagName('input'));
		for(var i=0; i<items.length; i++) {
			var item = items[i];
			var option = item.getAttribute('option');
			if(option!=null) { if(!funcs[option](item)) return false }
			else { if(!isBlank(item)) return false }
		}
		var params = $H({mode: 'dynamic', id: items[0].value, passwd: items[1].value});
		var url = domain+"rankup_module/rankup_member/login_regist.php";
		new Ajax.Request(url, {
			parameters: params.toQueryString(),
			onSuccess: function(trans) { trans.responseText.evalScripts() }
		});
	},
	// 의견쓰기 폼 활성화
	active_form: function(mode) {
		var content = this.form.content;
		if(mode==true || mode=='on') {
			$('dynamicLoginFrame').hide();
			this.infos.login = 'on';
			content.disabled = false;
			content.value = '';
			content.focus();
		}
		else {
			$('dynamicLoginFrame').show();
			this.infos.login = 'off';
			content.disabled = true;
			content.value = '로그인 후 기사의견을 작성하실 수 있습니다.';
		}
		//this.reply_form($('comment'));
	}
}

