/*------------------------------------------------------------------------------
 * 1. 파일명: date.js
 * 2. 설  명: 일자(정확히는 일자형 문자열)를 취급하기 위한 함수를 정의한다.
 * 3. 의존성: string.js
 * 4. 작성일: 2006.10.11.
 -----------------------------------------------------------------------------*/




var DATE_DELIMETER = "-";


function splitDateStr(dateStr) {
	var dateStr = formatDateStr(removeChar(dateStr, DATE_DELIMETER));

	var arr = dateStr.split(DATE_DELIMETER);

	arr[0] = parseInt(arr[0], 10);
	arr[1] = parseInt(arr[1], 10) - 1;
	arr[2] = parseInt(arr[2], 10);

	return arr;
}

/**
 * 주어진 날짜형 문자열에 일정 연 수를
 * 더한 날짜형 문자열로 돌려준다.
 */
function afterYears(dateStr, addYear) {
	addYear = parseInt(addYear);

	var dateArr = splitDateStr(dateStr);

	var date = new Date(dateArr[0], dateArr[1], dateArr[2]);

	date.setFullYear(date.getFullYear() + addYear);

	return formatDate(date);
}


/**
 * 주어진 날짜형 문자열에 일정 개월 수를
 * 더한 날짜형 문자열로 돌려준다.
 */
function afterMonths(dateStr, addMonth) {
	addMonth = parseInt(addMonth);

	var dateArr = splitDateStr(dateStr);

	var date = new Date(dateArr[0], dateArr[1], dateArr[2]);

	date.setMonth(date.getMonth() + addMonth);

	return formatDate(date);
}


/**
 * 주어진 날짜형 문자열에 일정 일 수를
 * 더한 날짜형 문자열로 돌려준다.
 */
function afterDays(dateStr, addDay) {
	addDay = parseInt(addDay);

	var dateArr = splitDateStr(dateStr);

	var date = new Date(dateArr[0], dateArr[1], dateArr[2]);

	date.setDate(date.getDate() + addDay);

	return formatDate(date);
}


/**
 * 주어진 날짜 문자열을 형식화한다.
 */
function formatDateStr(dateStr) {
	/* 값이 없으면 빈 문자열을 돌려 준다. */
	if ( isEmpty(dateStr) ) return "";

	dateStr = removeChar(dateStr, DATE_DELIMETER);

	return dateStr.substr(0, 4) + DATE_DELIMETER
			+ dateStr.substr(4, 2) + DATE_DELIMETER
			+ dateStr.substr(6, 2);
}


/**
 * 주어진 객체의 값을 날짜형 문자열이라고
 * 가정하고 형식화한다.
 */
function formatDateStrObj(obj) {
	obj.value = formatDateStr(obj.value);
}


/**
 * 주어진 Date 객체의 값을 형식화한다.
 */
function formatDate(date) {
	var year  = date.getFullYear();
	var month = date.getMonth() + 1;
	var day   = date.getDate();

	return ateStr = year + DATE_DELIMETER
			+ (month < 10 ? "0" : "" ) + month + DATE_DELIMETER
			+ (day   < 10 ? "0" : "" ) + day;
}

/**
 * 현재 시스템 일자 값을 형식화하여 돌려 준다.
 */
function getSysDateStr() {
	return formatDate(new Date());
}


/**
 * 주어진 객체가 Focus를 받으면 일자 구분자를 삭제한다.
 */
function removeDateDelimOnFocus(obj) {
	removeCharObj(obj, DATE_DELIMETER);

	obj.select();
}

/**
 * 주어진 연도가 윤연인지 여부를 돌려 준다.
 */
function isLeapYear(year) {
	if ( year == null || year == undefined || year == "" ) {
		showMessage("파라미터 year의 값이 빈 값입니다: " + year);
		return false;
	}

	if ( typeof(year) == "string" ) {
		year = parseInt(year, 10);
	}

	/* 근데 뒤는 맞나 모르겠다. 10000 년 뒤에는 나도 몰라. - -; */
	var isLeap = true;

	if ( year % 4 != 0 ) {
		isLeap = false;
	}
	else if ( year % 100 != 0 ) {
		isLeap = true;
	}
	else if ( year % 400 != 0 ) {
		isLeap = false;
	}

	return isLeap;
}
