
// JavaScript Document

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 문자열 처리
////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 문자열 좌우 공백문자를 제거한다. (문자열 내부의 공백은 제거하지 않는다.)
function trim(s) {
	s += ''; // 숫자라도 문자열로 변환
	return s.replace(/^\s*|\s*$/g, '');
}

// 문자열 좌우 공백문자를 제거하고. 문자열 내부의 공백은 앤티티로 교체한다.
function trimAndSetSpace(s) {
	return trim(s).replace(/\s/g,'&nbsp;');
}

// 특수문자를 html 엔티티로 변환시킨다. 최적화용으로 테리팡에서만 적용된다
// 이미 사용이 불가능한 특수문자 검사는 제외( % & + < = > ), 따라서 ' 와 " 을 검사하여 대체한다.
function htmlEntitiesEx(str) {
	return String(str).replace(/\"/g, '&quot;').replace(/\'/g, '&#39;');
}

// 테리팡에서 사용하는 이름, 코멘트 문자열을 html로 제대로 표시되게 한다.
function setHtmlString(s) {
	// 1) 문자열 좌,우 공백을 제거하고,
	// 2) 문자열 중간의 2개이상의 연결된  공백은 제대로 표시 될 수 있도록 한다!	
	// 3) 특수문자를 html 엔티티로 변환시킨다.
	return ((s.replace(/^\s*|\s*$/g, '')).replace(/\s/g,'&nbsp;')).replace(/\"/g, '&quot;').replace(/\'/g, '&#39;'); 
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajax 루틴
////////////////////////////////////////////////////////////////////////////////////////////////////////////

function getXmlHttpObject() {

	if (window.XMLHttpRequest) {
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}

	if (window.ActiveXObject) {
		// code for IE6, IE5, ...
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return null;
			}
		}
	}

	return null;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 날짜 계산 함수
////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 날짜를 구한다 2009/08/21형태
function getDateYMDString(date) {

	var str = new String();
	str =  date.getFullYear().toString() + "/";

	var month = date.getMonth()+1;
	if (month < 10) str += ("0" + month.toString());
	else str += month.toString();
	
	str += "/";
	
	var day = date.getDate();
	if (day < 10) str += ("0" + day.toString());
	else str += day.toString();

	return str;	
}

// 랭킹용으로 날짜를 구한다 2009/08/21 07:13:36 형태
function getDateString(date) {

	var str = new String();
	str =  date.getFullYear().toString() + "/";

	var month = date.getMonth()+1;
	if (month < 10) str += ("0" + month.toString());
	else str += month.toString();
	
	str += "/";
	
	var day = date.getDate();
	if (day < 10) str += ("0" + day.toString());
	else str += day.toString();
	
	str += "&nbsp;";
	
	var hour = date.getHours();
	if (hour < 10) str += ("0" + hour.toString());
	else str += hour.toString();
	
	str += ":";
	
	var min = date.getMinutes();
	if (min < 10) str += ("0" + min.toString());
	else str += min.toString();
	
	str += ":";

	var sec = date.getSeconds();
	if (sec < 10) str += ("0" + sec.toString());
	else str += sec.toString();
	
	return str;	
}

function getPlayTimeSec(span) {
	
	// 시간을 구한다
	var hours = span/3600;
	span = span%3600;
	
	// 분을 구한다
	var min = span/60;
	
	// 초를 구한다
	var sec = span%60;
	
	hours =  Math.floor(hours);
	min =  Math.floor(min);
	sec =  Math.floor(sec);
	
	var str = new String();
	if (hours < 10) str  = "0" +  hours.toString();
	else str =  hours.toString();
	str += ":";
	
	if (min < 10) str += ("0" + min.toString());
	else str += min.toString();
	str += ":";
	
	if (sec < 10) str += ("0" + sec.toString());
	else str += sec.toString();

	return str;	
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 주차 계산 함수
////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 주어진 연도(4자리)의 1주차가 시작하는 날짜를 ms(밀리세컨드) 로 구한다!
function getStartWeekOfYear(year) {

	var start = 0;
	var t = new Date(year, 0, 1);
	
	var day = t.getDay();
	
	if (day == 0) day = 7;
	
	if (day < 5) {
		start = t.getTime() - (day - 1) * 86400000;
	}
	else {
		start = t.getTime() + (8 - day) * 86400000;
	}
	
	return start;
}

// 주어진 연도(4자리)의 주차가 시작하는 날짜의 ms(밀리세컨드)를 구한다!
function getWeekStartTime(week, year) {
	
	if (week <= 0) week = 1;
		
	return  getStartWeekOfYear(year)+((week - 1) * 604800000);
}

// 주어진 연도(4자리)의 주차 개수를 구한다
function getWeekCount(year) {
	
	var result = 51;

	for(var week = 51; week < 55; week++) {
		
		if (getStartWeekOfYear(year + 1) == getWeekStartTime(week, year)) {
			result = week - 1;
			break;
		}
	} 
		
	return result;
}

// 미니 랭킹 제목 툴팁 작성용으로 문자열을 구성한다!
function getWeekTitle(year, week) {

	var y = parseInt(year,10) + 2000;
	var str = y + "년&nbsp;" + week + "주차&nbsp;순위";

	var t = getWeekStartTime(parseInt(week,10), y);
	var date = new Date(t);
	
	var start_day = getDateYMDString(date);
	
	date.setTime(t + (7*86400000) - 1000);
	
	var end_day = getDateYMDString(date);
	
	str = '<span title="주차 순위 자세히 보기(' + start_day + '~' + end_day + ')" style="cursor:pointer;">' + str + '</span>';
	
	return str;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 게임 퍼가기용 문자열 생성
////////////////////////////////////////////////////////////////////////////////////////////////////////////

function getFlashGameReference(game_style) {

	var flash_games = [{},
		{width:450, height:450, src:"game/tetris/Tetris_secure.swf", title:"테리팡 테트리스 - Teripang Tetris"}, // 테트리스
		{width:420, height:580, src:"game/tball/TBall_secure.swf", title:"테리팡 벽돌깨기 - Teripang T-Ball"}, // 벽돌깨기
		{width:800, height:600, src:"game/mahjong/Mahjong_secure.swf", title:"테리팡 사천성 - Teripang Mahjong"} // 사천성
	];

	var str = "";
		
	str += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="' + flash_games[game_style].width + '" height="' + flash_games[game_style].height + '" title="' + flash_games[game_style].title + '">';
	str += '<param name="movie" value="' + flash_games[game_style].src + '" />';
	str += '<param name="quality" value="high" />';
	str += '<embed src="' + flash_games[game_style].src + '" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="' + flash_games[game_style].width + '" height="' + flash_games[game_style].height + '"></embed>';
	str += '</object>';
	
	return str;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 마우스 롤 오버 이미지 세팅용 함수 : 드림위버 함수
////////////////////////////////////////////////////////////////////////////////////////////////////////////


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


