//<!------------------------------------------------------------------------------------
// @(#) JCheckData.js   1.0
//
// Copyright 2002 by AnotherWave Co.,Ltd.
// All rights reserved.
// This software is the confidential and proprietary information of AnotherWave Co.,Ltd.
// You shall not disclose such Confidential Information and shall use it only in
// accordance with the terms of the license agreement you entered into with AnotherWave.
//
// @author   Jinsoo,Kim (jskim@sbsgolf.com)
// @company  AnotherWave Co.,Ltd.
//-------------------------------------------------------------------------------------->
// <script language='JavaScript' src="JCheckData.js"></script>
// jsÆÄÀÏ°£¿¡´Â ÇÔ¼ö È£ÃâÀ» ÇÒ ¼ö¾ø´Ù.(°°Àº ±¸¿ª¾ÈÀÇ ÇÔ¼öµé°£¿¡¸¸ ¼­·Î È£Ãâ°¡´É)

var JCHECK_LEN_ERR =	-91;
var JCHECK_SPACE_ERR =	-92;
var JCHECK_MAXLEN_ERR = -93;
var JCHECK_NUMBER_ERR = -94;
var JCHECK_FORMAT_ERR = -95;
var JCHECK_DATE_ERR =	 -96;
var JCHECK_CKBIT_ERR =	-97;
var JCHECK_AREA_ERR =	 -98;

var JCHECK_NOT =	 0;
var JCHECK_TEL =	 1;
var JCHECK_DATE =	2;
var JCHECK_JUMIN = 3;
var JCHECK_NUM =	 4;

//<!------------------------------------------------------------------------------
// [ÇÑ±ÛÀ» Æ÷ÇÔÇÑ Byte length °è»ê]
// param :	String data - µ¥ÀÌÅ¸¿­
// return : int length
//------------------------------------------------------------------------------->
function JGetLength(value)
{
	var data = value;
	var len = value.length;

	for (i = 0; i < value.length; i++)
		if (data.charCodeAt(i) > 127)
			len++;

	return len;
}

//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ Áß ¼ýÀÚÀÌ¿Ü ¹®ÀÚÃ¼Å©]
// param :	String data - µ¥ÀÌÅ¸¿­
// return : int 0=¼ýÀÚ¸¸ ÀÖÀ½/0<¹®ÀÚµµ ÀÖÀ½
//------------------------------------------------------------------------------->
function JCheckNumber(data)
{
	if( isNaN(data) )
		return JCHECK_NUMBER_ERR;

	return 0;
}

//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ÀÇ ³¯Â¥ À¯È¿¼ºÃ¼Å©]
// param :	String data - µ¥ÀÌÅ¸¿­(9999.99.99 OR 9999-99-99)
// return : int 0=³¯Â¥/0<³¯Â¥¾Æ´Ô
//------------------------------------------------------------------------------->
function JCheckDate(data)
{
	var chkYear;
	var chkMonth;
	var chkDate;
	var chkData;
	var fmt1;
	var fmt2;

	fmt1 = /^\d{4}.\d{2}.\d{2}$/;
	fmt2 = /^\d{4}.\d{2}.\d{2}$/;
	fmt3 = /^\d{8}$/;

	if ( !(fmt1.test(data) || fmt2.test(data) || fmt3.test(data)) )
	{
		return JCHECK_FORMAT_ERR;
	}

	if ( fmt1.test(data) || fmt2.test(data) )
	{
		chkYear = data.substr(0, 4);
		chkMonth = data.substr(5, 2) - 1;
		chkDay = data.substr(8, 2);
	}
	else
	{
		chkYear = data.substr(0, 4);
		chkMonth = data.substr(4, 2) - 1;
		chkDay = data.substr(6, 2);
	}

	// ³¯Â¥ À¯È¿¼º °Ë»ç
	chkData = new Date(chkYear, chkMonth, chkDay);
	if( chkData.getYear() < 100 )
		chkYear = chkYear.substr(2,2);
	if ( chkData.getYear() != chkYear ||
		 chkData.getMonth() != chkMonth ||
		 chkData.getDate() != chkDay)
	{
		return JCHECK_DATE_ERR;
	}
	return 0;
}

//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ÀÇ ÁÖ¹Îµî·Ï¹øÈ£ À¯È¿¼ºÃ¼Å©]
// param :	String data - µ¥ÀÌÅ¸¿­(999999-9999999)
// return : int 0=ÁÖ¹Îµî·Ï¹øÈ£/0<ÁÖ¹Îµî·Ï¹øÈ£¾Æ´Ô
//------------------------------------------------------------------------------->
function JCheckJumin(data)
{
	var birth;
	var chkData;
	var fmt1;
	var fmt2;
	var sum;

	fmt1 = /^\d{6}-[1234]\d{6}$/;
	fmt2 = /^\d{6}[1234]\d{6}$/;

	if ( !(fmt1.test(data) || fmt2.test(data)) )
	{
		return JCHECK_FORMAT_ERR;
	}

	if (fmt1.test(data))
	{
		birth = (data.charAt(7) <= "2") ? "19" : "20";
		birth += data.substr(0, 6);
		chkData = birth;
		chkData += data.substr(7, 7);
	}
	else
	{
		birth = (data.charAt(6) <= "2") ? "19" : "20";
		birth += data.substr(0, 6);
		chkData = birth;
		chkData += data.substr(6, 7);
	}

	// ³¯Â¥ À¯È¿¼º °Ë»ç
	if ( JCheckDate(birth) < 0 )
	{
		return JCHECK_DATE_ERR;
	}

	// Check Sum ÄÚµåÀÇ À¯È¿¼º °Ë»ç
	buf = new Array(13);
	for (i = 0; i < 13;	i++) buf[i] = parseInt(chkData.charAt(i+2));

	multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
	for (i = 0, sum = 0; i < 12; i++)
		sum = sum + (buf[i] * multipliers[i]);

	if (((11 - (sum % 11)) % 10) != buf[12])
	{
		return JCHECK_CKBIT_ERR;
	}
	return 0;
}

//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ÀÇ ÀüÈ­¹øÈ£ À¯È¿¼ºÃ¼Å©]
// param :	String data - µ¥ÀÌÅ¸¿­(99-999-9999,99-9999-9999,999-999-9999,999-9999-9999)
// return : int 0=ÀüÈ­¹øÈ£/0<ÀüÈ­¹øÈ£¾Æ´Ô
//------------------------------------------------------------------------------->
function JCheckTel(data)
{
	var fmt1;
	var fmt2;
	var fmt3;
	var fmt4;
	var fmt5;
	var fmt6;
	var fmt7;
	var jiyuk;

	fmt1 = /^\d{2}-\d{3}-\d{4}$/;
	fmt2 = /^\d{2}-\d{4}-\d{4}$/;
	fmt3 = /^\d{3}-\d{3}-\d{4}$/;
	fmt4 = /^\d{3}-\d{4}-\d{4}$/;
	fmt5 = /^\d{9}$/;
	fmt6 = /^\d{10}$/;
	fmt7 = /^\d{11}$/;
	if ( !( fmt1.test(data) || fmt2.test(data) || fmt3.test(data) || fmt4.test(data) ||
			fmt5.test(data) || fmt6.test(data) || fmt7.test(data) ) )
	{
		return JCHECK_FORMAT_ERR;
	}

	if ( fmt1.test(data) || fmt2.test(data) )
	{
		jiyuk = data.substr(0, 2);
		if( jiyuk != "02" )
			return JCHECK_AREA_ERR;
	}
	else
	{
		jiyuk = data.substr(0, 2);
		if( jiyuk == "02" && data.length > 10 )
			return JCHECK_AREA_ERR;

		jiyuk = data.substr(0, 3);
		if( !(jiyuk.substr(0, 2) == "02") &&
				!(jiyuk >= "031" && jiyuk <= "033") &&
				!(jiyuk >= "041" && jiyuk <= "043") &&
				!(jiyuk >= "051" && jiyuk <= "055") &&
				!(jiyuk >= "061" && jiyuk <= "064") &&
				!(jiyuk == "011" || jiyuk == "016" || jiyuk == "017" || jiyuk == "018" || jiyuk == "019" || jiyuk == "010") )
		{
				return JCHECK_AREA_ERR;
		}
	}
	return jiyuk;
}


//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ÀÇ À¯È¿¼ºÃ¼Å©]
// param :	String data - µ¥ÀÌÅ¸¿­
// param :	int mode - Ã¼Å©¸ðµå(JCHECK_TEL,_DATE,_JUMIN,_NUM)
// param :	boolean spflag - ºó¹®ÀÚ¿­ Ã¼Å©¿©ºÎ
// param :	int maxlen - ÃÖ´ë±æÀÌ(¾ç¼ö:ÃÖ´ë±æÀÌ ÀÌÇÏ Çã¿ë/À½¼ö:ÃÖ´ë±æÀÌ ±îÁö)
// return : int 0=À¯È¿¼º ÀÖÀ½/0<À¯È¿¼º ¾øÀ½
//------------------------------------------------------------------------------->
function JCheckData(data, mode, spflag, maxlen)
{
	//alert("JCheckData("+data+","+mode+","+spflag+","+maxlen+")");
	
	var lowlen = true;
	var datalen = JGetLength(data);

	if( datalen == 0 )
	{
		if( spflag == false )
			return 0;
		else
			return JCHECK_SPACE_ERR;
	}

	if( maxlen < 0 )
	{
		lowlen = false;
		maxlen = maxlen*(-1);
		if( datalen != maxlen )
			return JCHECK_LEN_ERR;
	}

	if( maxlen > 0 )
	{
		if( datalen > maxlen )
			return JCHECK_MAXLEN_ERR;
	}

	if( mode == JCHECK_TEL )
	{
		return( JCheckTel(data) );
	}

	if( mode == JCHECK_DATE )
	{
		return( JCheckDate(data) );
	}

	if( mode == JCHECK_NUM )
	{
		return( JCheckNumber(data) );
	}

	if( mode == JCHECK_JUMIN )
	{
		return( JCheckJumin(data) );
	}

	return 0;
}


//<!------------------------------------------------------------------------------
// [¹®ÀÚ¿­ÀÇ À¯È¿¼ºÃ¼Å©ÈÄ ¸Þ¼¼Áö Ç¥½Ã]
// param :	Object ctrl - ÀÔ·Â ÄÁÆ®·Ñ
// param :	int mode - Ã¼Å©¸ðµå(JCHECK_TEL,_DATE,_JUMIN,_NUM)
// param :	boolean spflag - ºó¹®ÀÚ¿­ Ã¼Å©¿©ºÎ
// param :	int maxlen - ÃÖ´ë±æÀÌ(¾ç¼ö:ÃÖ´ë±æÀÌ ÀÌÇÏ Çã¿ë/À½¼ö:ÃÖ´ë±æÀÌ ±îÁö)
// return : int 0=À¯È¿¼º ÀÖÀ½/0<À¯È¿¼º ¾øÀ½
//------------------------------------------------------------------------------->
function JCheckDataMsg(ctrl, mode, spflag, maxlen, msg)
{
	//alert("JCheckDataMsg("+ctrl+","+mode+","+spflag+","+maxlen+","+msg+")");
	var retvalue = true;
	var data = ctrl.value;

	var ret = JCheckData(data, mode, spflag, maxlen);

	if( ret == 0 )
		return 0;

	if( ret == JCHECK_SPACE_ERR )
		alert( msg + " Ç×¸ñÀº ¹Ýµå½Ã ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.");

	if( ret == JCHECK_LEN_ERR )
		alert( msg + " Ç×¸ñÀÇ ±æÀÌ´Â ¹Ýµå½Ã "+(maxlen*(-1))+"ÀÚ¸®¸¦ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.");

	if( ret == JCHECK_MAXLEN_ERR )
		alert( msg + " Ç×¸ñÀÇ ±æÀÌ°¡ "+maxlen+"ÀÚ¸®¸¦ ÃÊ°ú Çß½À´Ï´Ù.");

	if( ret == JCHECK_NUMBER_ERR )
		alert( msg + " Ç×¸ñ¿¡ ¼öÄ¡°¡ ¾Æ´Ñ °ªÀÌ Æ÷ÇÔµÇ¾î ÀÖ½À´Ï´Ù.");

	if( ret == JCHECK_FORMAT_ERR )
		alert( msg + " Ç×¸ñÀÇ FORMATÀÌ Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù.");

	if( ret == JCHECK_DATE_ERR )
		alert( msg + " Ç×¸ñÀº ¿Ã¹Ù¸¥ ÀÏÀÚ°¡ ¾Æ´Ô´Ï´Ù.");

	if( ret == JCHECK_AREA_ERR )
		alert( msg + " Ç×¸ñÀº ¿Ã¹Ù¸¥ Áö¿ª¹øÈ£°¡ ¾Æ´Ô´Ï´Ù.");

	if( ret == JCHECK_CKBIT_ERR )
		alert( msg + " Ç×¸ñÀº ¿Ã¹Ù¸¥ ÁÖ¹Îµî·Ï¹øÈ£°¡ ¾Æ´Ô´Ï´Ù.");


	if(msg == " ÁÖ¹Îµî·Ï¹øÈ£")
	{
		document.writeForm.jumin1.focus();
		return ret;
	}
	if(msg == " ÀüÈ­¹øÈ£")
	{
		document.writeForm.tel1.focus();
		return ret;
	}

	ctrl.focus();

	return ret;
}

