/**
 * @author SHS
 * @version 0.21
 * @make : 2008/06/24
 * @modify 
 * -. 2008/06/26 : 폼이 여러개 일 경우 해당 폼만 체크 기능 추가 
 * -. 2008/06/27 : 폼 포커스 기능 강화, 이메일 체크 기능 추가
 * -. 2008/07/03 : 체크박스 기능 추가, 금액 단위 기능 추가
 * @use 
 * -. checkValidForm 체크 후 각 페이지의 checkSubmit 으로 각 페이지 조절
 * -. class 명을 기준으로 체크
 * -. checkBtn input 버튼 클릭시 해당 폼을 체크 ( button 태그 사용시 FF에서 오류 발생 )
 * -. required 필수 항목
 * -. numeric 숫자 항목 [ 직접 호출시 : checkOnlyNum(this.name) ]
 * -. numStr 숫자를 금액 단위로 노출 [ 직접 호출시 : checkNumFormat(this.name), '#' + form.name + 'Str' 에 노출 ]
 * -. title 프로퍼티를 경고창 이름으로 인식
 * -. emailType 이메일 타입 체크 
 * -. 체크박스 일 경우 maxlength='2' 어트리뷰트로 최대 개수 체크
 */

$(document).ready(function(){
	$('input.checkBtn').click(function(){
        var rt = checkValidForm(this.form.name);
		if (rt)
        {
            checkSubmit(this.form.name);
        }
	});
});

function checkValidForm(frmName){
    var chkRet = true;
	var chkColor = '#EEFFEE';
	var tarObj = $('form[name="' + frmName + '"] input');     
	var tmpcnt = tarObj.size();
	tarObj.css('backgroundColor','');
    
	for (i=0; i<tmpcnt; i++)
	{
		if (!checkValue(tarObj.eq(i))) 
		{
			if (tarObj.eq(i).attr('type')!='radio' && tarObj.eq(i).attr('type')!='checkbox')
			{
				tarObj.eq(i).css('backgroundColor', chkColor);
			}
			else
			{
				tarObj.filter('[name="' + tarObj.eq(i).attr('name') + '"]').css('backgroundColor', chkColor);
			}			
			chkRet = false;
            break;
		}
	}
    return chkRet;
}

function checkValue(jqObj){
	var ret = true;
	var tType = jqObj.attr('type');
	var tClass = jqObj.attr('class');
	var tValue = jqObj.attr('value');
	var tName = jqObj.attr('name');

	if (tType == 'text' || tType == 'password')
	{
		if (tValue == '')
		{
			if (tType != 'button' && tType != 'hidden' && jqObj.hasClass('required'))
			{
				alert(jqObj.attr('title') + ' 항목을 체크해 주세요.');
				jqObj.focus();
				ret = false;
			}
		}
		else
		{
			if (jqObj.hasClass('numeric'))
			{
				ret = checkOnlyNum(tName);
			}
			
			if (jqObj.hasClass('numStr'))
			{
				checkNumFormat(tName);
			}
			
			if (jqObj.hasClass('emailType'))
			{
				ret = checkEmailType(tValue);
			}

			if (!isNaN(jqObj.attr("minlength")))
			{
				ret = checkSize(jqObj);
			}
		}
	}
	else if ((tType == 'radio' || tType == 'checkbox') && jqObj.hasClass('required'))
	{
		ret = checkRadio(tName);
	}
	return ret;
}

function checkRadio(str){
	var ret = true;
	tObj = $('input[name=' + str + ']:checked');
	var tmpcnt = 1;
    if ($('input[name=' + str + ']').attr('type')=='checkbox')
    {
        tmpcnt = $('input[name=' + str + ']').attr('maxlength');
    }
	var tmptxt = '';
	if (tmpcnt>1) 
	{
		tmptxt = '(' + tmpcnt + '개)';
	}
	
	if (tObj.size()<tmpcnt)
	{
		tObj = $('input[name=' + str + ']').eq(0);
		alert(tObj.attr('title') + ' 항목' + tmptxt + '을 체크해 주세요.');
		tObj.focus();
		ret = false;
	}
	return ret;
}

function checkOnlyNum(str){
	var ret = true;
	tObj = $('input[name=' + str + ']');
	tmp = tObj.attr('value');

	if (tmp!='')
	{
		tmp = tmp.trim();
		tmp = tmp.replaceAll(',', '');
		if (isNaN(tmp) || tmp=='')
		{
			alert('숫자만 입력 가능합니다.');
			tObj.attr('value','');			
			tObj.focus();
			ret = false;
		}
		else
		{
			tObj.attr('value',tmp);
		}
	}	
	
	return ret;
}

function checkInstr(oStr, tStr){
	if (oStr.indexOf(tStr, 0)>-1)
		return true;
	else
		return false;
}

function checkNumFormat(str1){		
	tmpstr = '';
	tmporg = '';
	kk = 0;
	tObj = $('input[name=' + str1 + ']');
	sObj = $('#' + str1 + 'Str');
	str = tObj.attr('value');
	tLen = str.length;	
	for (k=0; k<tLen; k++)
	{
		tmpstr += str.substr(k, 1);
		tmporg += str.substr(k, 1);
		kk++;
		
		if (k == 0 && tmporg == 0) 
		{
			tObj.attr('value','');
			sObj.html('');
			return false;
		}
		else
		{
			tmpstr += checkUnitStr(tLen-k, str);
			
			if (str.substr(k, 1)>0)
			{
				switch ((tLen-k)%4)
				{
					case 3: tmpstr += '백'; break;
					case 2: tmpstr += '십'; break;
					case 0: tmpstr += '천'; break;
				}
			}
		
			tmpstr = tmpstr.replaceAll('1', '일');
			tmpstr = tmpstr.replaceAll('2', '이');
			tmpstr = tmpstr.replaceAll('3', '삼');
			tmpstr = tmpstr.replaceAll('4', '사');
			tmpstr = tmpstr.replaceAll('5', '오');
			tmpstr = tmpstr.replaceAll('6', '육');
			tmpstr = tmpstr.replaceAll('7', '칠');
			tmpstr = tmpstr.replaceAll('8', '팔');
			tmpstr = tmpstr.replaceAll('9', '구');
			tmpstr = tmpstr.replaceAll('0', '');
			
			if ((tLen-k)%3 == 1 && k < tLen-1) tmporg += ',';
		}
	}
	tObj.attr('value', tmporg);
	sObj.html(tmpstr + ' 원');
	if (tmporg.length==0) sObj.html(''); 
}

function checkUnitStr(dvn, str){
	var tmps = '';
	if (dvn == 5) {tmps = '만 ';}
	else if (dvn == 9) {tmps = '억 ';}
	else if (dvn == 13) {tmps = '조 ';}
	if (str.length > (dvn+3)) 
	{
		if (str.substr((str.length-(dvn+3)), 4) == '0000') { tmps = '';}
	}
	return tmps;
}

function checkComma(obj){
	var str = obj.value;
	if (str)
	{
		str = addComma(str);
	}
	obj.value = str; 
}

function addComma(str){
	if (str)
	{
		str = removeComma(str);		
		var strlen = str.length;
		var tmporg = '';
		for (i=0; i<strlen; i++)
		{
			tmporg += str.substr(i, 1);
			if ((strlen-i)%3 == 1 && i<strlen-1) tmporg += ',';
		}
		str = tmporg;		
	}
	return str;
}

function removeComma(str){
	if (str) 
	{
		return str.replaceAll(',', '');
	}  
}

function checkEmailType(strEmail){
	var ret = true;
	if (strEmail.length>5)
	{
		if (checkInstr(strEmail, '@') && checkInstr(strEmail, '.'))
		{
			if (checkInstr(strEmail, '@.') || checkInstr(strEmail, '.@') || strEmail.substr(0,1)=='.' 
				|| strEmail.substr(0,1)=='@' || strEmail.substr(strEmail.length-1,1)=='.' || strEmail.substr(strEmail.length-1,1)=='@' )
			{
				ret = false;
			}
		}
		else
		{
			ret = false;
		}
	}
	else
	{
		ret = false;
	}
	
	if (!ret)
	{
		alert('이메일 형식에 맞지 않습니다.');
		$('input[value=' + strEmail +']').focus();			
	}
	
	return ret;
}

function checkSize(obj){
	var min = obj.attr("minlength");

	if (obj.val().length < min)
	{
		alert(obj.attr("title")+' 항목은 '+min+'글자 이상 입력하셔야 합니다');
		return false;
	}
	else
		return true;
}
