/*---------------------------------------------------------------------------
 * ???????????? ???????????? ????????
 *---------------------------------------------------------------------------
 * @(#)common.js
 * @author K.Y.W
 * @version 1.0, 2005/10/19
 *
 * 1.Description   : ???? ??????
 * 2.Page Type     : Java Script
 * 3.Update Source :
 *       <2005/10/19><??????>:<init version>
 *--------------------------------------------------------------------------*/

/******************************************************************************
	?????? ???? ????
******************************************************************************/
/**
 *  ???? ?????? ???? ?????? ????
 *
 * @param source ??????????
 * @param target_length
 * @param ch
 */
function lpad(source,target_length,ch)
{
	if ( source==null )
	{
		source	= "";
		return source;
	}
	else
	{
		source=ltrim(source);
		var ch_size=target_length-source.length;
		var chs="";
		if(ch_size<=0)
			return source;
		for(var i=0;i<ch_size;i++){
			chs+="0";
		}
		return chs+source;
	}
}

/**
 *  ???? ?????? ?????? ?????? ????
 *
 * @param source ??????????
 * @param target_length
 * @param ch
 */
function rpad(source,target_length,ch)
{
	if ( source==null )
	{
		source	= "";
		return source;
	}
	else
	{
		source=rtrim(source);
		var ch_size=target_length-source.length;
		var chs="";
		if(ch_size<=0)
			return source;
		for(var i=0;i<ch_size;i++){
			chs+="0";
		}
		return source+chs;
	}
}

/**
 *  ?????? ?????? ???? ?????? ???????? ????
 *
 * @param source ??????????
 */
function ltrim(source)
{
	var i = 0;
	var j = source.length - 1;

	if(source==null) return "";

	for(j = source.length - 1; j >= 0; j--)
	{
		if (source.substr(j, 1) != ' ' && source.substr(j, 1) != '\t') 	break;
	}

	if (i <= j)
		return source.substr(i, (j+1)-i);
	else
		return "";
}

/**
 *  ?????? ?????? ?????? ?????? ???????? ????
 *
 * @param source ??????????
 */
function rtrim(source)
{
	var i = 0;
	var j = source.length - 1;

	if (source==null) return "";

	for(j = source.length - 1; j >= 0; j--)
	{
		if (source.substr(j, 1) != ' ' && source.substr(j, 1) != '\t') 	break;
	}

	if (i <= j)
		return source.substr(i, (j+1)-i);
	else
		return "";
}

/**
 *  ?????? ?????? ???? ?????? ???????? ????
 *
 * @param source ??????????
 */
function trim(source)
{
	if(source==null) return "";

	return rtrim(ltrim(source));
}

/**
 *  ?????? ????
 *
 * @param source 		???? ??????
 * @param expression	?????? ??????
 * @param replaced string
 */
function replace(source, expression, replace)
{
	var pos = 0;
	var pre_str = "";
	var post_str = "";
	pos = source.indexOf(target)

	while (pos != -1)
	{
		pre_str = source.substr(0,pos) ;
		post_str = source.substr(pos+expression.length, source.length) ;
		source = pre_str + replace + post_str;
		pos = source.indexOf(expression) ;
	}

	return source;
}

/**
 *  ?????? ????(???????? ????????)
 *
 * @param source		???? ??????
 * @param expression	?????? ??????
 * @param replaced string
 */
function replaceIgnoreCase(source, expression, replace)
{
	var tmpstr = new String(source).toUpperCase();
	var strSearch = new String(expression).toUpperCase();

	var pos = 0;
	var pre_str = "";
	var post_str = "";
	pos = tmpstr.indexOf(strSearch)

	while (pos != -1)
	{
		pre_str = source.substr(0,pos) ;
		post_str = source.substr(pos+strSearch.length,source.length) ;
		source = pre_str + replace + post_str;

		pre_str = tmpstr.substr(0,pos) ;
		post_str = tmpstr.substr(pos+strSearch.length,tmpstr.length) ;
		tmpstr = pre_str + replace + post_str;

		pos = tmpstr.indexOf(strSearch) ;
	}
	return source;
}


/**
 *  ?????? ?? ?????? ???? ?????? Delimiter?? ???????? ????
 *
 * @param array	1????????
 * @param Delimiter	????character("" ?? ????All concatenation)
 * @param String
 */
function join(array, delimiter)
{
	var temp = '';

	if (array.length == 0) 	return '';

	if (Delimiter.length == 0) delimiter = ' ';

	for (var i = 0; i < array.length; i++)
	{
		temp = temp + array[i]
		if (i < array.length - 1) temp = temp + delimiter;
	}
	return temp;
}

/**
 * Delimiter?? ?????? ?????? ???? ????
 *
 * @param Expression	??????("" ?? ???? ?????? ????)
 * @param Delimiter	????character("" ?? ???? ?????? ???? ????)
 * @return 1????????
 */
function split(expression, delimiter)
{
	var temp = expression;
	var a, b = 0;
	var array = new Array();

	if (Delimiter.length == 0)
	{
		array[0] = expression;
		return (array);
	}

	if (expression.length == 0)
	{
		array[0] = expression;
		return (array);
	}

	delimiter = delimiter.charAt(0);

	for (var i = 0; i < expression.length; i++)
	{
		a = temp.indexOf(delimiter);
		if (a == -1)
		{
			array[i] = temp;
			break;
		}
		else
		{
			b = (b + a) + 1;
			var temp2 = temp.substring(0, a);
			array[i] = temp2;
			temp = expression.substr(b, expression.length - temp2.length);
		}
	}

	return (array);
}


/**
 * ???????? ????
 *
 * @param s string
 * @return length
 */
function getByteLength(s)
{
   if (s == null) return 0;

   var len = 0;

   for (var i = 0; i < s.length; i++) {
      var c = escape(s.charAt(i));
      if (c.length == 1) len ++;
      else if (c.indexOf("%u") != -1) len += 2;
      else if (c.indexOf("%") != -1) len += c.length / 3;
   }

   return len;
}

/******************************************************************************
	???? ???? ????
******************************************************************************/

/**
 * Returns a Boolean value indicating whether an expression can be evaluated as a number.
 *
 * @param source	?????? Nemeric String	ex) 15,656.00
 * @return boolean
 */
function isNumber(source)
{
	source = source.toString();
	source = source.toLowerCase();

	refString = "0123456789,.-";

	if (source.length < 1) return (false);

	for (var i = 0; i < source.length; i++)
	{
		var ch = source.substr(i, 1)
		var a = refString.indexOf(ch, 0)
		if (a == -1) return (false);
	}
	return true;
}

/**
 * ???????? ???? ????
 *
 * @param source	?????? Nemeric String
 */
function stripComma(source)
{
	if (source.length == 0) return "";

	return source.toString().replace( /,/g, "" );
}

/**
 * ?????? 1000 ???? ????
 *
 * @param source	?????? Nemeric String
 */
function putComma(source)
{
	if (source.length == 0) return "";
	source = stripComma(source);
	if(! isNumber(source)) return "";

	var sign = "";
	if(source.indexOf("-")==0)
	{
		sign = "-";
		source = replace(source, "-", "");
	}

	var tempValue = "";
	var iIndex = source.indexOf(".");
	if(-1 == iIndex) iIndex = source.length;

	for(iIndexComma = iIndex-3; iIndexComma >0;iIndexComma = iIndex-3)
	{
		tempValue = "";
		tempValue += source.substring(0,iIndexComma);
		tempValue += ",";
		tempValue += source.substring(iIndexComma);
		source = tempValue;
		iIndex = iIndexComma;
	}
	return sign + source;
}

/**
 * Numeric String ?? Number Formatting
 *
 * @param expression	???? ????
 * @param iNumDecimals	?????? ?????????? ??????
 * @return formatted string
 */
function formatNumber(expression, iNumDecimals)
{
	var dbInVal = expression.replace( /,/g, "" );
	var bNegative = false;
	var iInVal = 0;
	var strInVal
	var strWhole = "", strDec = "";
	var strTemp = "", strOut = "";
	var iLen = 0;

	if (iNumDecimals == null) iNumDecimals = 0;

	if (dbInVal < 0)
	{
		bNegative = true;
		dbInVal *= -1;
	}

	dbInVal = dbInVal * Math.pow(10, iNumDecimals)
	iInVal = parseInt(dbInVal);
	if ((dbInVal - iInVal) >= .5) 	iInVal++;
	strInVal = iInVal + "";
	strWhole = strInVal.substring(0, (strInVal.length - iNumDecimals));
	strDec = strInVal.substring((strInVal.length - iNumDecimals), strInVal.length);


	while (strDec.length < iNumDecimals)
	{
		strDec = "0" + strDec;
	}

	iLen = strWhole.length;
	if (iLen >= 3)
	{
		while (iLen > 0)
		{
			strTemp = strWhole.substring(iLen - 3, iLen);
			if (strTemp.length == 3)
			{
				strOut = "," + strTemp + strOut;
				iLen -= 3;
			}
			else
			{
				strOut = strTemp + strOut;
				iLen = 0;
			}
		}
		if (strOut.substring(0, 1) == ",")
			strWhole = strOut.substring(1, strOut.length);
		else
			strWhole = strOut;
	}

	if (strWhole == "") strWhole = "0";

	if (bNegative)
		return "-" + strWhole + "." + strDec;
	else
		return strWhole + ((iNumDecimals!=0)?".":"") + strDec;

}



/******************************************************************************
	???? ???? ????
******************************************************************************/

/**
 * ????????(????????) date ???? ????
 * ex) var date = form.date.value; //'20010231'
 *     if (!isDate(date)) {
 *         alert("?????? ?????? ????????.");
 *     }
 *
 * @param	date	date string
 */
function isDate(date)
{
	date = date.replace( /\/|\-/g, "" );
	if(date.length!=8) return false;

    var year  = date.substring(0,4);
    var month = date.substring(4,6);
    var day   = date.substring(6,8);

    if (parseInt(year,10) >= 1900  && isValidMonth(month) &&
        isValidDay(year,month,day) ) {
        return true;
    }
    return false;
}

/**
 * ??????(????????) ??(??)???? ????
 *
 * @param	mm	month string
 */
function isValidMonth(mm)
{
    var m = parseInt(mm,10);
    return (m >= 1 && m <= 12);
}

/**
 * ??????(????????) ??(??)???? ????
 *
 * @param	yyyy	year string
 * @param	mm	month string
 * @param	dd	date string
 */
function isValidDay(yyyy, mm, dd)
{
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}

/**
 * Time ???????? ???????????? Date ?????? ????
 *
 * @param	date	Time ?????? String
 */
function toDateObject(date)
{
    var year  = date.substr(0,4);
    var month = date.substr(4,2) - 1; // 1??=0,12??=11
    var day   = date.substr(6,2);

    return new Date(year,month,day);
}

/**
 * ???????????? Date ?????? Time ?????????? ????
 *
 * @param	date	JavaScript Date Object
 */
function toDateString(date)
{
    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1??=0,12??=11?????? 1 ????
    var day   = date.getDate();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }

    return ("" + year + month + day);
}

/**
 * ???? ??????
 * ex) var date = form.date.value; //'20000101'
 *     alert(addDate(time,0,-2,0));
 *     => 2000/01/01 ???????? 2???? ????
 *
 * @param	date
 * @param	y
 * @param	m
 * @param	d
 */
function addDate(date,y,m,d)
{
    var source = toDateObject(date);

    source.setFullYear(source.getFullYear() + y); //y???? ????
    source.setMonth(source.getMonth() + m);       //m???? ????
    source.setDate(source.getDate() + d);         //d???? ????

    return toDateString(source);
}

/**
 * ?? ?????? ?? ???? ?????????? ????
 * date1?? date2???? ????(??????) minus(-)
 *
 * @param	date1
 * @param	date2
 */
function getMonthInterval(date1,date2)
{
    var source1 = toDateObject(date1);
    var source2 = toDateObject(date2);

    var years  = source2.getFullYear() - source1.getFullYear();
    var months = source2.getMonth() - source1.getMonth();
    var days   = source2.getDate() - source1.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/**
 * ?? ?????? ???? ?????????? ????
 * date1?? date2???? ????(??????) minus(-)
 *
 * @param	date1
 * @param	date2
 */
function getDayInterval(date1,date2)
{
    var source1 = toDateObject(date1);
    var source2 = toDateObject(date2);
    var day   	= 1000 * 3600 * 24; //24????

    return parseInt((source2 - source1) / day, 10);
}

/**
 * ???? ???? YYYY???????? ????
 */
function getYear()
{
    return getCurrentTime().substr(0,4);
}

/**
 * ???? ???? MM???????? ????
 */
function getMonth()
{
    return getCurrentTime().substr(4,2);
}

/**
 * ???? ???? DD???????? ????
 */
function getDay()
{
    return getCurrentTime().substr(6,2);
}

/**
 * ?????? ???? ?????????
 * ex) alert('?????? ' + getDayOfWeek() + '??????????.');
 */
function getDayOfWeek()
{
    var now = new Date();

    var day = now.getDay(); //??????=0,??????=1,...,??????=6
    var week = new Array('??','??','??','??','??','??','??');

    return week[day];
}

/**
 * ???????? ?????????? ??????.
 *
 * @param year
 * @param month
 * @return day string
 */
function getDaysOfMonth(year,month)
{
	if(month < 1 || month >12)
		return -1;

	if(month == 2){
		if((year% 4 == 0 && year % 100 !=0)|| year%400==0)
			return 29;
		else
			return 28;
	}else if(month==4||month==6||month==9||month==11){
		return 30;
	}else{
		return 31;
	}
}

/**
 * ???? ????
 *
 * @param src_date
 * @param comp_date
 * @return int  1 : src_date > comp_date
 *              0 : src_date == comp_date
 *             -1 : src_date < comp_date
 *             -2 : error(date?????? ????)
 */
function compareDate(src_date,comp_date)
{
	if(! (isDate(src_date.replace( /\/|\-/g, "")) && isDate(comp_date.replace( /\/|\-/g, "") ) ) )
		return -2;

	if(src_date>comp_date)
		return 1;
	else if (src_date==comp_date)
		return 0;
	else
		return -1;
}

/**
 * ???? ???? ????
 *
 * @param date	date string
 */
function formatDate(date)
{
	date = date.toString().replace( /\/|\-/g, "" );

	if( date=="" ) return "";
	if(! isDate(date) ) return "";

	date=date.substring(0,4)+DATE_SEPERATOR+date.substring(4,6)+DATE_SEPERATOR+date.substring(6,8);
	return date;
}

/******************************************************************************
	???? ???? ????
******************************************************************************/

/**
 * ???? ????
 *
 * @param name		??????
 * @param value		??????
 * @param expiredays	??????
 */
function setCookie( name, value, expiredays )
{
	var todayDate = new Date();
	todayDate.setDate( todayDate.getDate() + expiredays );
	document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}

/**
 * ???? ????
 *
 * @param name		??????
 * @return string	??????
 */
function getCookie( name )
{
	var nameOfCookie = name + "=";
	var x = 0;
	while ( x <= document.cookie.length )
	{
		var y = (x+nameOfCookie.length);
		if ( document.cookie.substring( x, y ) == nameOfCookie )
		{
			if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 )
				endOfCookie = document.cookie.length;
			return unescape( document.cookie.substring( y, endOfCookie ) );
		}
		x = document.cookie.indexOf( " ", x ) + 1;
		if ( x == 0 ) break;
	}
	return "";
}


/******************************************************************************
	?????? ???? ????
******************************************************************************/

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_findObj(n, d)	//v3.0
{
	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);
	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];}
}

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 toggleBoxTR(sName)
{
	for(var i=1; i<=4; i++)
	{
		var oTR = eval(sName + i.toString());
		( oTR.style.display == "none" ) ? oTR.style.display = "": oTR.style.display = "none";
	}
}*/

/*
 * ???????????? ????
 */
function check_res_no( num )
{
	var ch ;

	// null check
	if (num == null || num == "" || num == "undefined") return false ;

	// ???????? ????
	//num = num.replace(/[~`!@#$%^&*-_=+,./?;:'"\|]/gi,"").split("") ;
	num = num.replace(/\-/gi,"") ;

	// length check
	if (num.length != 13)	return false ;

	// number check
	for (var i = 0; i < num.length; i++)
	{
		ch = num.charAt(i) ;
		if (!(ch >= '0' || ch <= '9')) return false ;
	}

	// ?????? ????
	if (parseInt(num) != NaN) {
		var lid = parseInt(num.substring(12,13), 10) ;

		var n01 = parseInt(num.substring(0,1), 10) * 2 ;
		var n02 = parseInt(num.substring(1,2), 10) * 3 ;
		var n03 = parseInt(num.substring(2,3), 10) * 4 ;
		var n04 = parseInt(num.substring(3,4), 10) * 5 ;
		var n05 = parseInt(num.substring(4,5), 10) * 6 ;
		var n06 = parseInt(num.substring(5,6), 10) * 7 ;
		var n07 = parseInt(num.substring(6,7), 10) * 8 ;
		var n08 = parseInt(num.substring(7,8), 10) * 9 ;
		var n09 = parseInt(num.substring(8,9), 10) * 2 ;
		var n10 = parseInt(num.substring(9,10), 10) * 3 ;
		var n11 = parseInt(num.substring(10,11), 10) * 4 ;
		var n12 = parseInt(num.substring(11,12), 10) * 5 ;
		var nSum = n01 + n02 + n03 + n04 + n05 + n06 + n07 + n08 + n09 + n10 + n11 + n12 ;

		var lmod = nSum % 11 ;
		var lminus = 11 - lmod ;
		var llast = lminus % 10 ;
		
		if (llast != lid) return false ;
	}

	return true ;
} 


function fgn_reg_no_chk(fgn_reg_no){

  if ((fgn_reg_no.charAt(6) == "5") || (fgn_reg_no.charAt(6) == "6"))
  {
     birthYear = "19";
  }
  else if ((fgn_reg_no.charAt(6) == "7") || (fgn_reg_no.charAt(6) == "8"))
  {
     birthYear = "20";
  }
  else if ((fgn_reg_no.charAt(6) == "9") || (fgn_reg_no.charAt(6) == "0"))
  {
     birthYear = "18";
  }
  else
  {
    return false;
  }        

  birthYear += fgn_reg_no.substr(0, 2);
  birthMonth = fgn_reg_no.substr(2, 2) - 1;
  birthDate = fgn_reg_no.substr(4, 2);
  birth = new Date(birthYear, birthMonth, birthDate);
  
  if ( birth.getYear() % 100 != fgn_reg_no.substr(0, 2) ||
       birth.getMonth() != birthMonth ||
       birth.getDate() != birthDate) {
    return false;
  }
  
  if (fgn_no_chksum(fgn_reg_no) == false){
      return false;
  }
  else {
      return true;
  }
    
}


function fgn_no_chksum(reg_no) {
    var sum = 0;
    var odd = 0;
    
    buf = new Array(13);
    for (i = 0; i < 13; i++) buf[i] = parseInt(reg_no.charAt(i));

    odd = buf[7]*10 + buf[8];
    
    if (odd%2 != 0) {
      return false;
    }

    if ((buf[11] != 6)&&(buf[11] != 7)&&(buf[11] != 8)&&(buf[11] != 9)) {
      return false;
    }
    	
    multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
    for (i = 0, sum = 0; i < 12; i++) sum += (buf[i] *= multipliers[i]);


    sum=11-(sum%11);
    
    if (sum>=10) sum-=10;

    sum += 2;

    if (sum>=10) sum-=10;

    if ( sum != buf[12]) {
        return false;
    }
    else {
        return true;
    }
}
