/**
 * systemÀÇ ÇöÀç³¯Â¥¸¦ °¡Á®¿Â´Ù
 * @return string ¿À´Ã³¯Â¥ (yyyy-MM-dd)
 */
function getStrToday() {
 	 var today=new Date();
 	 var strToDay = today.getYear();
 	 if (today.getMonth()+1 < 10)
 	 	strToDay += "-0"+ (parseInt(today.getMonth())+1);
 	 else
 	 	strToDay += "-" + (parseInt(today.getMonth())+1);

 	 if (today.getDate() < 10)
 	 	strToDay += "-0"+today.getDate();
 	 else
 	 	strToDay += "-" + today.getDate();

 	 return strToDay;
}

function getStrToday2() {
 	 var today=new Date();
 	 var strToDay = today.getYear();
 	 if (today.getMonth()+1 < 10)
 	 	strToDay += "/0"+ (parseInt(today.getMonth())+1);
 	 else
 	 	strToDay += "/" + (parseInt(today.getMonth())+1);

 	 if (today.getDate() < 10)
 	 	strToDay += "/0"+today.getDate();
 	 else
 	 	strToDay += "/" + today.getDate();

	if (today.getHours() < 10)
		strToDay += " 0"+today.getHours();
	else
		strToDay += " " + today.getHours();

	if (today.getMinutes() < 10)
		strToDay += ":0"+today.getMinutes();
	else
		strToDay += ":" + today.getMinutes();
 	 return strToDay;
}
/**
 * <pre>
 * javascript dateÇüÀ» ¾Æ·¡ÀÇ Æ÷¸ËÀ¸·Î º¯°æ (dwr¿¡¼­ ÁÖ·Î »ç¿ë)
 * transDateToStr(grpMasterTmp.reg_time, 'date')  <==== yyyy-mm-dd
 * transDateToStr(grpMasterTmp.reg_time, 'time')  <==== yyyy-mm-dd hh:mm:ss.0
 * </pre>
 * @param p_date DateÇü
 * @param p_add_time ¹®ÀÚ¿­ key (date, time)
 * @return ³¯Â¥ÇüÅÂÀÇ ¹®ÀÚ¿­
 */
function transDateToStr( p_date, p_add_time ){
	var strToDay = "";
	if(p_date != null){

		strToDay = p_date.getYear();

		if (p_date.getMonth()+1 < 10){
			strToDay += "-0"+ (parseInt(p_date.getMonth())+1);
		} else {
			strToDay += "-" + (parseInt(p_date.getMonth())+1);
		}

		if (p_date.getDate() < 10){
			strToDay += "-0"+p_date.getDate();
		} else {
			strToDay += "-" + p_date.getDate();
		}

		if(p_add_time !=null){

			if (p_date.getHours() < 10){
				strToDay += " 0"+p_date.getHours()+ ":";
			} else {
				strToDay += " "+p_date.getHours()+ ":";
			}

			if (p_date.getMinutes() < 10){
			strToDay += "0"+p_date.getMinutes()+ ":";
			} else {
				strToDay += ""+p_date.getMinutes()+ ":";
			}

			if (p_date.getSeconds() < 10){
				strToDay += "0"+p_date.getSeconds();
			} else {
				strToDay += ""+p_date.getSeconds()+".0";
			}
		}
	}
	return strToDay;
}

/**
 * ÁÖ¾îÁø 8ÀÚ¸® ¹®ÀÚ¿­À» ³¯Â¥Æ÷¸Ë(YYYY-MM-DD or YYYY/MM/DD)·Î ¹Ù²Ù¾îÁØ´Ù.
 *
 * @param	source		º¯È¯ÇÒ 8ÀÚ¸® ³¯Â¥¹®ÀÚ¿­
 * @param	format		³¯Â¥Çü½Ä
 * @return	string		º¯È¯µÈ ³¯Â¥ ¹®ÀÚ¿­
 **/
function dateFormat(source, format)
{
	ret = "";
	delimiter = "";

	if (format.indexOf("-") != -1)
		delimiter = "-";
	else if (format.indexOf("/") != -1)
		delimiter = "/";
	else
	{
		alert("ÀÔ·ÂµÈ ³¯Â¥Æ÷¸ËÀÌ Àß¸øµÇ¾ú½À´Ï´Ù.");
		return;
	}

	if (source.length == 8)
	{
		ret = source.substring(0, 4) + delimiter + source.substring(4, 6) + delimiter + source.substring(6, 8);
	} else if (source.length == 10)
	{
		ret = source.substring(0, 4) + delimiter + source.substring(5, 7) + delimiter + source.substring(8, 10);
	} else
	{
		alert("ÀÔ·ÂµÈ ³¯Â¥Çü½ÄÀÌ Àß¸øµÇ¾ú½À´Ï´Ù.");
		return;
	}
	return ret;
}

/**
 * ³¯Â¥Çü½ÄÀÌ ¿Ã¹Ù¸¥Áö °Ë»ç
 *
 * @param astrValue ³¯Â¥Æ÷¸Ë(yyyymmdd, yyyy/mm/dd, yyyy-mm-dd)
 * @param astrNotNull	nn:not null, "": null Çã¿ë
 * @return boolean true/false
 **/
function blnOkDate(astrValue, astrNotNull)
{
	var arrDate;

	if (astrValue=='')
	{
		if (astrNotNull == "nn")
			return false;
		else
			return true;
	}else{
		if (astrValue.indexOf("-") != -1)
			arrDate = astrValue.split("-");
		else if (astrValue.indexOf("/") != -1)
			arrDate = astrValue.split("/");
		else
		{
			if (astrValue.length != 8) return false;
			astrValue = astrValue.substring(0,4)+"/"+astrValue.substring(4,6)+"/" +astrValue.substring(6,8);
			arrDate = astrValue.split("/");
		}

		if (arrDate.length != 3) return false;

		var chkDate = new Date(arrDate[0] + "/" + arrDate[1] + "/" + arrDate[2]);
		if (isNaN(chkDate) == true ||
			(arrDate[1] != chkDate.getMonth() + 1 || arrDate[2] != chkDate.getDate()))
		{
			return false;
		}
	}
	return true;
}


/**
 * ±×¸®µå ³¯Â¥ ¼¿¿¡¼­ ³¯Â¥¸¦ ÀÔ·Â¹Þ°í¼­ À¯È¿ÇÑÁö Ã¼Å©(yyyymmdd or yyyy-mm-dd or yyyy/mm/dd)ÈÄ Æ²¸®¸é Calendar Popup
 *
 * @param	fgName	±×¸®µå°´Ã¼¸í
 * @param	row		Çà¼ö
 * @param	col		¿­¼ö
 **/
function openCalendarInGrid(fgName, row, col)
{
	var fg = document.all(fgName);
	if (!blnOkDate(fg.TextMatrix(row, col), "nn"))
	{
		fg.TextMatrix(row, col) = "";
		showDateCalendarGrid(fgName + ", " + row + ", " + col);
	}
	else
		fg.TextMatrix(row, col) = dateFormat(fg.TextMatrix(row, col), "YYYY-MM-DD");

}

/**
 * INPUT field¿¡¼­ ³¯Â¥¸¦ ÀÔ·Â¹Þ°í¼­ À¯È¿ÇÑÁö Ã¼Å©(yyyymmdd or yyyy-mm-dd or yyyy/mm/dd)ÈÄ Æ²¸®¸é Calendar Popup
 *
 * @param field INPUT °´Ã¼
 **/
function openCalendar(dateField)
{
 var obj = eval("document." + dateField);

 if (obj.value == "")
  return;
 if (!blnOkDate(obj.value, "nn"))
 {
  obj.value = "";
  showDateCalendar(dateField);
 }
 else
  obj.value = dateFormat(obj.value, "YYYY-MM-DD");

}

/**
 * systemÀÇ ÇöÀç³¯Â¥ + stValue ³¯ÀÚ¸¦ ¹ÝÈ¯ÇÑ´Ù.
 * @param stDate yyyy-MM-dd Çü½ÄÀÇ string
 * @param stType ³â,¿ù,ÀÏ {Year|Month|Day}
 * @param stValue int ´õÇÒ ¼ýÀÚ
 * @return string yyyy-MM-dd
 */
function addDate(stDate, stType, stValue) {
	var CurYear = stDate.substring(0,4);
	var CurMonth = stDate.substring(5,7);
	var CurDate = stDate.substring(8);

	var TDate = new Date();

	if (stType == 'Year') {
		CurYear = eval(CurYear) + eval(stValue);
		TDate.setFullYear(CurYear);
	} else if (stType == 'Month') {
		CurMonth = eval(CurMonth) + eval(stValue-1);
		TDate.setMonth(CurMonth);
	} else {
		CurDate = eval(CurDate) + eval(stValue);
		TDate.setDate(CurDate);
	}

	CurYear = TDate.getFullYear();
	CurMonth = TDate.getMonth()+1;
	CurDate = TDate.getDate();
	if (CurMonth<10) CurMonth = '0' + CurMonth;
	if (CurDate<10) CurDate = '0' + CurDate;

	return  (CurYear.toString() + '-' + CurMonth.toString() + '-' + CurDate.toString());
}

/**
 * ÇØ´ç ´ÞÀÇ ¸¶Áö¸·³¯Â¥¸¦ ±¸ÇÑ´Ù
 * @param month ±¸ÇÏ°íÀÚ ÇÏ´Â ³¯ÀÇ ´Þ
 * @param year ±¸ÇÏ°íÀÚÇÏ´Â ³¯ÀÇ ³â
 * return ¸¶Áö¸·³¯Â¥
 */
function getLastDayInMonth(month, year) {
	var m = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (month != 2) return m[month - 1];
	if (year%4 != 0) return m[1];
	if (year%100 == 0 && year%400 != 0) return m[1];
	return m[1] + 1;
}

/**
 * ¾Õ¿¡ ÇÊµå¸í µÎ°³¸¦ ³â/¿ùÀ» ¹Þ¾Æ¼­ ÇØ´çÇÏ´Â ÇÊµå¿¡ ÀûÇÕÇÑ ¸¶Áö¸·ÀÏ±îÁö Ãß°¡ÇÑ´Ù.
 * @param yearName ±¸ÇÏ°íÀÚ ÇÏ´Â ³¯ÀÇ ´Þ
 * @param monthName ±¸ÇÏ°íÀÚÇÏ´Â ³¯ÀÇ ³â
 * @param fieldName ÇØ´ç ÇÊµå
 */
function changeDateSelect(yearName, monthName, fieldName) {

	var year = document.getElementById(yearName).value;
	var month = document.getElementById(monthName).value;
	var field = document.getElementById(fieldName);

	if(field == undefined || field == null)
		return;
	if(field.tagName == "SELECT") {
		field.options.length = 0;
		var lastDay = getLastDayInMonth(month, year);
		for(var i=1; i <= lastDay; i++) {
			field.options[i-1] = new Option(i<10?"0"+i:""+i, i<10?"0"+i:""+i);
		}
	}
}

/**
 * ³¯Â¥ ºñ±³ÇÏ±â
 * @param date1 ±âÁØ ³¯Â¥
 * @param dateformat1 ±âÁØ ³¯Â¥ Æ÷¸Ë
 * @param date2 ºñ±³ ³¯Â¥
 * @param dateformat2 ºñ±³ ³¯Â¥ Æ÷¸Ë
 * return 1 if date1 is greater than date2
 * 		  0 if date2 is greater than date1 of if they are the same
 * 		 -1 if either of the dates is in an invalid format
 */
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
}

/**
 * javascript date object¸¦ ¿øÇÏ´Â Æ÷¸ËÀ¸·Î ¹Ù²ãÁØ´Ù
 * @param date_object javascript date object
 * @param format returnÇÒ format
 * return formatÇü½ÄÀÇ date string
 */
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
}

/**
 * Utility functions for parsing in getDateFromFormat()
 */
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
	}
	return true;
}
function _getInt(str,i,minlength,maxlength){
	for (var x=maxlength; x>=minlength; x--){
		var token=str.substring(i,i+x);
		if (token.length < minlength) return null;
		if (_isInteger(token)) return token;
	}
	return null;
}

/**
 * formatÇü½ÄÀÇ date¹®ÀÚ¿­À» getTime() of the date ·Î º¯È¯
 * @param val date_string
 * @param format format_string
 * return getTime() of the date
 *		  format¿Í ¸ÂÁö ¾ÊÀ»¶§´Â 0À» ¹ÝÈ¯
 */
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=1;
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";

	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"||token=="NNN"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					if (token=="MMM"||(token=="NNN"&&i>11)) {
						month=i+1;
						if (month>12) { month -= 12; }
						i_val += month_name.length;
						break;
						}
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="EE"||token=="E"){
			for (var i=0; i<DAY_NAMES.length; i++) {
				var day_name=DAY_NAMES[i];
				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
					i_val += day_name.length;
					break;
					}
				}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return 0; }
			}
		else { if (date > 28) { return 0; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return 0; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
}
