// 대상자 전역화
var DIV_ID;

// xmlHttpRequest 객체 할당
function getXHR()
{
	var rq = false;
	if (window.XMLHttpRequest) {
		rq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			rq = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e1) {
			try {
				rq = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e2) {
				return false;
			}
		}
	}
	return rq;
}

// 출력을 위한 콜백
function callBackMe()
{
	if(req.readyState == 1) {
		showLoading(DIV_ID);
	} else if(req.readyState == 4) {
		loadShow = document.getElementById('loadWait');
		loadShow.style.display = 'none';
		if(req.status == 200) {
			showResult(DIV_ID);
		} else {
			alert('문제가 발생했습니다 : '+req.statusText);
		}
	}
}

// 페이지 부분 갱신 요청 시작
function startAction(where)
{
	DIV_ID = where;
	req = getXHR();
	req.onreadystatechange = callBackMe;
	req.open('POST', 'result.php', true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.send('where='+where);
}

// 갱신 결과 받고 처리
function showResult(where)
{
	var result = '<table rules="none" summary="싱크넷 공유된 게시물" cellpadding="0" cellspacing="0" border="0">'+
		'<caption></caption><colgroup><col style="width:90px" /><col /><col style="width:120px" />'+
		'<col style="width:50px" /></colgroup><thead><tr><th>수집시간</th><th>제목</th><th>글쓴이</th>'+
		'<th>추천</th></tr></thead><tbody>';
	var showBox = document.getElementById(where);
	var lists = req.responseXML.getElementsByTagName('lists')[0];	
	var items = lists.getElementsByTagName('item');

	for(i=0; i<items.length; i++) {
		var title = items[i].getElementsByTagName('title')[0].firstChild.nodeValue;
		var link = items[i].getElementsByTagName('link')[0].firstChild.nodeValue;
		var isNew = items[i].getElementsByTagName('isNew')[0].firstChild.nodeValue;
		title = htmlspecialchars(title);
		var no = items[i].getAttribute('no');
		var name = items[i].getElementsByTagName('name')[0].firstChild.nodeValue;
		var site = items[i].getElementsByTagName('site')[0].firstChild.nodeValue;
		var signdate = items[i].getElementsByTagName('signdate')[0].firstChild.nodeValue;
		result += '<tr><td class="date">'+signdate+'</td><td class="title"><a href="view.php?uid='+no+'&move='+link+'"';
		result += ' onclick="window.open(this.href, \'_blank\'); return false;">';
		if(isNew==1) result += '<img src="image/new.gif" alt="new" style="vertical-align: middle" /> ';
		result += title+'</a></td>';
		result += '<td class="name"><a href="http://'+site+'" onclick="window.open(this.href, \'_blank\'); return false;">';
		result += name+'</a></td><td><img src="image/vote_good.gif" alt="추천하기" style="vertical-align: middle;cursor: pointer" onclick="voteGood('+no+');" />';
		result += '</td></tr>';
	}
	result += '</tbody></table>';
	showBox.style.display = '';
	showBox.innerHTML = result;
}

// 로딩 시 보여주기
function showLoading(where)
{
	if(where == 'sinkData') var where = 'loadWait';
	var showBox = document.getElementById(where);
	showBox.style.display = '';
	showBox.innerHTML = '<div id="nowLoading">수집이 시작되었습니다.<div>';
	window.setTimeout('showLoadMsg()', 2000);
}

// 로딩 문구 호출
function showLoadMsg(i)
{
	showBox = document.getElementById('loadWait');
	showBox.innerHTML = '<div id="nowLoading">업데이트 감사합니다!<div>';
}

// 문자열 치환
function str_replace(str1, str2, str3)
{
	var r = new RegExp(str1, 'g');
	return str3.replace(r, str2);
}

// 검색 결과값 처리
function htmlspecialchars(str)
{
	result = str_replace('<', '&lt;', str);
	result = str_replace('>', '&gt;', result);
	return result;
}

// RSS 피드 추가하기
function addNew()
{
	t = document.forms['addNewFeed'].elements['feedUrl'];
	if(!t.value) {
		alert('피드 주소를 입력해 주세요. http:// 없이 입력하시면 됩니다.');
		t.focus();
		return;
	}
	if(t.value.indexOf('http://') != -1)
		t.value = str_replace('http://', '', t.value);
	if(t.value.indexOf(' ') != -1)
	{
		alert('피드 주소에는 공백이 들어갈 수 없습니다');
		t.focus();
		return;
	}
	rq = getXHR();
	rq.open('POST', 'add.php', true);
	rq.onreadystatechange = addCallBack;
	rq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	rq.send('url='+t.value);
}

// 피드 추가시 콜백
function addCallBack()
{
	if(rq.readyState == 1) {
		showLoading('addResult');
	} else if(rq.readyState == 4) {
		if(rq.status == 200) {
			showAddResult('addResult');
		} else {
			alert('문제가 발생했습니다 : '+rq.statusText);
		}
	}
}

// 피드 추가 결과 출력
function showAddResult(where)
{
	var totalResult = rq.responseXML.getElementsByTagName('result')[0];
	var showBox = document.getElementById(where);
	var result = totalResult.getElementsByTagName('value')[0].firstChild.nodeValue;

	if(result == 1) showBox.innerHTML = '성공적으로 RSS 피드 주소가 등록되었습니다. 곧 수집을 시작합니다.';
	else if(result == 2) showBox.innerHTML = '입력하신 RSS 피드 주소가 이미 등록되어 있습니다.';
	else if(result == 3) {
		var reason = totalResult.getElementsByTagName('reason')[0].firstChild.nodeValue;
		showBox.innerHTML = '입력하신 RSS 피드는 싱크넷에서 수집이 불가능한 형식을 사용하고 있습니다.<br />'+
			'<strong>이유:</strong> '+reason;
	}
	else showBox.innerHTML = '알 수 없는 이유로 싱크넷에 피드를 등록하지 못했습니다.';
}

// 글을 추천했을 때
function voteGood(no)
{
	if(confirm('이 글을 추천하시겠습니까?'))
	{
		location.href='http://sirini.net/sink/?vote='+no;
	}
}