/*
1. GetStringLength(str1)
 - str1 : 모든 유효한 문자식 
 - 설명 : 스트림(str1)의 바이트 수를 리턴 
 - 반환값 : 바이트 수 (int)
 
2. LimitStrLen(obj1, int1)
 - obj1 : 바이트수를 확인하기 위한 폼 요소명
 - int1 : 스트림의 제한 바이트 수
 - 설명 : 스트림의 바이트 수 제한두기(약간의 버그 있음)
 - 반환값 : 없음. 제한범위 보다 클 경우 Alert !!

   LimitStrLen2(obj1, int1)
 - 제한범위보다 클 경우 Alert 후에, false return

 
3. setFocusForLoadingForm(frm1)
 - frm1 : 모든 유효한 폼 명
 - 설명 : INPUT 박스 중 포커스를 가질 수 있는 객체에 포커스를 준다.
 - 반환값 : 없음
 
4. CheckFormValidation(str1, str2, int1, int2, boolean1, boolean2)
 - str1 : 체크할 폼 요소명(ex:form.txtId)
 - str2 : 체크할 폼의 출력명(ex:아이디)
 - int1 : 길이를 체크할 경우 최대 길이값. 길이를 체크하는 경우가 아니면 0으로 입력
 - int2 : 체크방식 (0:입력체크, 1:영문체크, 2:숫자체크, 3:email체크, 4:영문&숫자체크, 5:영문&숫자&_ (아이디)체크, 6:영문&숫자&_&한글 체크, 7:숫자체크('-' 불가)
 - boolean1 : 필수 입력사항여부 체크(true:체크, false:비체크)
 - boolean2 : 메세지 출력여부 o(true:alert창 출력, false:alert창 출력 안함)
 - 설명 : 폼에 입력 된 값의 유효성 검사.
 - 반환값 : 없음

5. CheckRadioButton(str1, str2)
 - str1 : 체크할 라디오 버튼명(ex:form.rdoCity)
 - str2 : 체크할 라디오의 출력명(ex:도시명)
 - 설명 : 라디오 버튼의 빈 값 체크.
 - 반환값 : 없음
 
6. AlertPrompt(str1, str2)
 - str1 : 포커스가 이동될 폼의 요소명(ex.form.txtId)
 - str2 : 출력될 메세지
 - 설명 : 메세지 알림 후 포커스.
 
7. checkEmailAddress(str1, boolean1)
 - str1 : 체크할 이메일 주소
 - boolean1 : 메세지 출력 여부 (true/false)
 - 설명 : 이메일 형식을 체크
 
8. launchCenter(str1, str2, int1, int2, str3)
 - str1 : 팝업될 url 
 - str2 : 팝업창 명
 - int1 : 팝업창의 가로길이
 - int2 : 팝업창의 세로길이
 - str3 : 기타 팝업창의 Attribute
 - 설명 : 팝업창을 모니터의 한가운데에 위치시킴
 - 반환값 : 없음

9. launchMaxWin() 
 - 설명 : 윈도우가 모니터의 전체화면으로 위치시킴
 
10. iSelect(chkFrom, chkTarget)
 - chkFrom : 체크 확인할 체크박스 객체
 - chkTarget : 체크될 체크박스 객체
 - 설명 : 전체 셀렉트 하거나 디셀렉트 함
 
11. goPage(form,page)
 - form : submit()이 일어날 폼 객체, currentPage를 hidden으로 가지고 있어야 함.
 - page : 이동할 페이지 번호
 - 설명 : page로 이동함, 페이징에서 사용되는 메소드
 
12. iOrder(form, condition, direction, kind)
 - form : submit()이 일어날 폼 객체
 - condition : 정렬할 컬럼명을 가질 객체
 - direction : 정렬 방식이 정의된 객체 , ASC 혹은 DESC를 가지고 있음
 - kind : 이번에 정렬할 컬럼명
 - 설명 : 컬럼명으로 정렬함

13. selectedCount(checkTarget)
 - checkTarget : checkbox 객체
 - 설명 : checkbox 선택된 갯수를 return한다.
 
14. logout()
 - 설명 : 로그아웃시 호출한다.
 
15. subStrDisp(str,limit)
 - limit : 제한 바이트 수
 - 설명 : str객체의 byte가 limit에 다다르면 자르고 '...'으로 표시한다.

16. moneyForm(str)
 - str : 금액
 - 설명 : str에 천 원 단위로 ,를 삽입한다.

*/


// 1.GetStringLength(p_str)
function GetStringLength(p_str)
{
	var c;
	var sLength = 0;

	for(k = 0;k < p_str.length; k++) {
		c = p_str.charAt(k);

		//내장함수 escape를 통해 그 글자의 길이가 4보다 크면 한글이므로 2를 더한다.
		if(escape(c).length > 4)
			sLength += 2;
		//\r\n일 경우
		else if (c == '\r' && p_str.charAt(k+1) == '\n')
			sLength += 2;
		else
			sLength++;
	}
	return sLength;
}

// 2.LimitStrLen(objText, maxByte)
function LimitStrLen(objText, maxByte)
{
   	var tmpStrNowByte;
   	var tmpStr = new String(objText.value);
	   	
	tmpStrNowByte = GetStringLength(tmpStr);
				
  	if(tmpStrNowByte > maxByte)
  	{	
  		objText.blur();
  		objText.value = tmpStr.substring(0, tmpStr.length - 1);
  		alert("한글은 " + (maxByte/2) + "자, 영어는 " + maxByte + "자까지만 입력이 가능합니다.");
  		objText.focus();
  	}
}

function LimitStrLen2(objText, maxByte)
{
   	var tmpStrNowByte;
   	var tmpStr = new String(objText.value);
	   	
	tmpStrNowByte = GetStringLength(tmpStr);
				
  	if(tmpStrNowByte > maxByte)
  	{	
  		objText.blur();
  		alert("한글은 " + (maxByte/2) + "자, 영어는 " + maxByte + "자까지만 입력이 가능합니다.");
  		objText.focus();
  		return false;
  	}
  	
  	return true;
}

// 3.setFocusForLoadingForm(p_objForm)
function setFocusForLoadingForm(p_objForm)
{
	for(i=0;i<p_objForm.elements.length;i++)
	{
		if(p_objForm.elements[i].type.toUpperCase() != "HIDDEN")
		{
			p_objForm.elements[i].focus();
			break;
		}
	}
}


//4. CheckFormValidation(p_sInputVar, p_sInputName, p_iMaxLength, p_iCheckType, p_bEssential, p_bMessage)
function CheckFormValidation(p_sInputVar, p_sInputName, p_iMaxLength, p_iCheckType, p_bEssential, p_bMessage)
{
	var iStringLength = GetStringLength(p_sInputVar.value)

	if ( p_bEssential ) {
		if( iStringLength == 0 ) {
			if (p_bMessage) {
				AlertPrompt( p_sInputVar, "입력하지 않은 항목(" + p_sInputName + ")이 있습니다.");
			}
			return( false );
		}
		var spacecount = 0;
		
		for( var i = 0; i < iStringLength; i++ ) {
			thisChar = p_sInputVar.value.charAt( i );
			if( thisChar == ' ' ) spacecount++;
		}
		if( spacecount == iStringLength ) {
			if (p_bMessage) {
				AlertPrompt( p_sInputVar, "입력하지 않은 항목(" + p_sInputName + ")이 있습니다.");
			}
			return( false );
		}
	}

	if ( p_iMaxLength > 0 ) {
		if( iStringLength > p_iMaxLength ) {
			if (p_bMessage) {
				AlertPrompt( p_sInputVar, "입력하신 항목(" + p_sInputName + ")의 길이(byte)가 초과하였습니다.\n\n" + (iStringLength-p_iMaxLength) + " 자 이상을 지우시기 바랍니다.")
			}
			return( false );
		}
	}

//	if (CheckValidTag(p_sInputVar)==false)
//		return( false );

	switch (p_iCheckType) {
		case 1 : // 영문만 입력
			var regEx = new RegExp("^[a-z]+$", "i");
		
			if ( regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("영문자만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;
		case 2 : // 숫자만 입력
			var regEx = new RegExp("^[0-9-]+$", "i");
		
			if ( p_sInputVar.value == "" || regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("숫자만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;
		case 3 : // Email입력
			if ( iStringLength > 0 ) {
				ret = checkEmailAddress(p_sInputVar.value, p_bMessage);
				if ( ! ret ) {
					p_sInputVar.focus();
					return false;
				}
			}
			break;
		case 4 : // 영문&숫자만 입력
			var regEx = new RegExp("^[a-z0-9]+$", "i");
		
			if ( regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("영문자와 숫자만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;
		case 5 : // 영문&숫자&_ 회원 아이디 확인시
			var regEx = new RegExp("^[a-z0-9][a-z0-9_]*$", "i");
		
			if ( regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("영문자와 숫자, 언더바만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;
		case 6 : // 영문&숫자&_&한글 입력 확인시
			var regEx = new RegExp("^[a-z가-R0-9][a-z가-R0-9_]*$", "i");
		
			if ( regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("영문자와 한글, 숫자, 언더바만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;		
		case 7 : // 숫자만 입력
			var regEx = new RegExp("^[0-9]+$", "i");

			p_sInputVar.value = p_sInputVar.value.replace(/-/g, "");

			if ( p_sInputVar.value == "" || regEx.test(p_sInputVar.value) ) 
			{
				return true;
			}
			else
			{
				if ( p_bMessage )
				{
					window.alert("숫자만 입력 가능합니다" + "\n\n" + "\"" + p_sInputVar.value + "\"");
				}
				p_sInputVar.focus();
				return false;
			}
			break;	
		default : // 제한 없음
			break;
	}

	return( true );
}

// 5.CheckRadioButton(p_obj, p_objName)
function CheckRadioButton(p_obj, p_objName)
{
	var checkflag = false;

	for(var i=0;i<p_obj.length;i++){
		if(p_obj[i].checked){
			checkflag = true;
			break;
		}
	}

	if(!checkflag)
	{
		AlertPrompt(p_obj[0], p_objName + ' 중 하나를 체크하시길 바랍니다.');
		return ( false );
	}

	return (true);
}

// 6. AlertPrompt(p_Ctrl, p_sAlertMessage)
function AlertPrompt(p_Ctrl, p_sAlertMessage)
{
    alert(p_sAlertMessage);
    p_Ctrl.focus();
    return;
}

// 7. checkEmailAddress(p_sMailAddress, p_bMessage)
function checkEmailAddress(p_sMailAddress, p_bMessage) 
{
	var regEx = new RegExp("^([a-z0-9_\\-,+\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-z0-9_\\-]+\\.)+))([a-z]{2,4}|[0-9]{1,3})(\\]?)$", "i");
	
	// 입력된 이메일 내용에 공백제거 추가. 2010.11.26 garden79
	while(p_sMailAddress.indexOf(" ") != -1){
		p_sMailAddress = p_sMailAddress.replace(" ","");
	}

	if ( regEx.test(p_sMailAddress) ) 
	{
		return true;
	}
	else
	{
		if ( p_bMessage )
		{
			window.alert("아래 이메일 주소가 잘못 되었습니다" + "\n\n" + "\"" + p_sMailAddress + "\"");
		}
		return false;
	}
}

// 8. launchCenter(url, name, width, height, att)
function launchCenter(url, name, width, height, att) 
{
  var str = "height=" + height + ",innerHeight=" + height;
  str += ",width=" + width + ",innerWidth=" + width;
  if (window.screen) {
    var ah = screen.availHeight - 30;
    var aw = screen.availWidth - 10;

    var xc = (aw - width) / 2;
    var yc = (ah - height) / 2;

    str += ",left=" + xc + ",screenX=" + xc;
    str += ",top=" + yc + ",screenY=" + yc;
    str += "," + att
  }
  return window.open(url, name, str);
}

// 9. launchMaxWin()
function launchMaxWin() 
{
  if (window.screen) {
    var aw = screen.availWidth;
    var ah = screen.availHeight;
    window.moveTo(0, 0);
    window.resizeTo(aw, ah);
  }
}

// 10. iSelect(chkFrom,chkTarget)
function iSelect(chkFrom,chkTarget) {
	if(chkTarget == null) return;	
	else {
		if( chkTarget.length == undefined ) {
			if(chkFrom.checked == true) {
				chkTarget.checked = true
			}
			else {
				chkTarget.checked = false;
			}
		}
		else {
			var size = chkTarget.length;
			if(chkFrom.checked == true) {		
				for(var v=0; v<size; v++)
					chkTarget[v].checked = true;
			}
			else if(chkFrom.checked == false) {		
				for(var v=0; v<size; v++)
					chkTarget[v].checked = false;
			}
		}
	}
}

// 11. goPage(form,page)
/*
function goPage(form,page) {
	form.currentPage.value = page;
	form.submit();
}
*/

function goPage(form, page, act) {
	if (act != null) form.action.value = act;
	form.currentPage.value = page;
	form.submit();
}

// 12. iOrder(form, condition, direction, kind)
function iOrder(form, condition, direction, kind, act) {
	var past_condition = condition.value;
	condition.value = kind;
	if( kind == past_condition ) {
		var past_direction = direction.value;
		if( past_direction == "DESC" ) 
			direction.value = "ASC";
		else
			direction.value = "DESC";
	}
	else {
		direction.value = "DESC";
	}
	
	if (act != null) form.action.value = act;	
	form.submit();
}

// 13. selectedCount(chkTarget)
function selectedCount(chkTarget) {
	
	if(chkTarget == null) {
		return 0;
	} else {
		var size = chkTarget.length;
		if(size == undefined) {
			if(chkTarget.checked == false)
				return 0;
			else {
				return 1;
			}
		}
		else {
			var selected_group_count = 0;
			for(var u=0; u<size; u++) {
				if(chkTarget[u].checked == true) {
					selected_group_count++;
				}
			}
			return selected_group_count;
		}
	}
}

// 14. logout()
function logout() {	
	this.location.href="/com/logout.jsp";
}

// 15. subStrDisp(str,limit)
function subStrDisp(str,limit){
	var kk = substrByte(str,limit);
	document.write(kk);
}

// 16. moneyForm(str)
function moneyForm(str){
        var cnt = 0;
        var temp = "";

        for(i=str.length-1;i>0;i--){
                temp = temp + str.charAt(i);
                cnt++;
                if(cnt%3==0){
                        temp = temp + ",";
                }
        }
        temp = temp + str.charAt(0);

        str = "";

        for(i=temp.length-1;i>=0;i--){
                str = str + temp.charAt(i);
        }

        return str;
}


function substrByte(str,byte){
	
	var temp = "";
	var temp2 = "";
	
	var strCnt = 0;
	var strTotCnt = 0;
	var ch;
	for (i=0;i<str.length;i++) 
    { 
        ch = escape(str.charAt(i));        //ISO-Latin-1 문자셋으로 변경 
        
        strCnt = strCharByte(ch);
        strTotCnt += strCnt;
        
        if( strTotCnt == byte )	{
        	if( str.length > i+1 ){
        		if( strCnt > 1 )	{temp = temp+"...";}
        		else	{temp = temp2+"...";}
        	}
        	else	temp += str.charAt(i);
        	
        	break;
        }
        else if( strTotCnt > byte ){
        	temp = temp2+"...";
        	break;
        }
        
        if( i > 0 )	temp2 += str.charAt(i-1);
        
        temp += str.charAt(i);
    }
    return temp;
	
}

function strCharByte(chStr) 
{ 
		if(chStr.substring(0,3) == '%20'){
			return 1;		//	스페이스는 영문으로 1byte 취급..
		}
        else if (chStr.substring(0, 2) == '%u') 
        { 
                if (chStr.substring(2,4) == '00') 
                        return 1;
                else 
                        return 2;        //한글 
        }
        
        else if (chStr.substring(0,1) == '%') 
        { 
                //alert (parseInt(chStr.substring(1,3), 16)); 
                if (parseInt(chStr.substring(1,3), 16)) 
                        return 2;        //한글 
                else 
                        return 1; 
        }
        else 
        { 
                return 1; 
        } 
} 

//17. autoFocus(strLen, from, to)
function autoFocus(strLen, from, to){
	
	if(from.value.length>=strLen){
		to.focus();
	}
}

// 18. simpleCheck(obj, limit, flag, msg)
function simpleCheck(obj, limit, flag, msg){
	
	if(flag==-1){
		if(obj.value.length < limit){
			alert(msg);
			return true;
		}else{
			return false;
		}
	}else if(flag==1){
		if(obj.value.length > limit){
			alert(msg);
			return true;
		}else{
			return false;
		}
	}else if(flag==0){
		if(obj.value.length == limit){
			alert(msg);
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}
}

// 19. selectOption( obj, val )
function selectOption( obj, val ){
    for(i=0;i<obj.length;i++){
        if(obj.option[i].value == val){
            obj.option[i].selected = true;
            return;
        }
    }
}


// 20. checkEnter( evt )
function checkEnter(evt) {

    evt = (evt) ? evt : event;
    var charCode  = evt.keyCode;

    if (charCode == 13 || charCode == 3) {
        return true;
    } else {
        return false;
    }   
} 
