
var U = {

    // ------------------------------------------------------------------------------------
    // -------------------------------------- 쿠키 ----------------------------------------
    // ------------------------------------------------------------------------------------

    cookie : {

        // ------------------------------------------------------------------------------------
        // 쿠키 설정
        // name        : 이름
        // value       : 값
        // expire_type : 만료시간 구분
        // expire_val  : 만료시간 크기
        // ------------------------------------------------------------------------------------
        setCookie : function (name, value, expire_type, expire_val) {

	        var expire_date = new Date();

            switch (expire_type)
            {
                case "m" :
	                expire_date.setMonth(expire_val);
	                break;
                case "d" :
	                expire_date.setDate(expire_val);
	                break;
                case "h" :
	                expire_date.setHours(expire_val);
	                break;
                case "n" :
	                expire_date.setMinutes(expire_val);
	                break;
                case "s" :
	                expire_date.setSeconds(expire_val);
	                break;
	            default :
	                expire_date.setDate(expire_val);
	                break;
            }

	        document.cookie = name + "=" + encodeURIComponent(value) + "; path=/; expires=" + expire_date.toGMTString() + ";";

        },

        // ------------------------------------------------------------------------------------
        // 쿠키값 조회
        // name : 이름
        // ------------------------------------------------------------------------------------
        getCookie : function (name) {

	        var prefix = name + "=";
	        var cookieStartIndex = document.cookie.indexOf(prefix);

	        if (cookieStartIndex == -1)
		        return "";

	        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);

	        if (cookieEndIndex == -1)
		        cookieEndIndex = document.cookie.length;

	        return decodeURIComponent(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));

        },

        // ------------------------------------------------------------------------------------
        // 쿠키 삭제
        // name : 이름
        // ------------------------------------------------------------------------------------
        clearCookie : function (name) {

	        var today = new Date();
	        var expire_date = new Date(today.getDate() - 1);

	        document.cookie = name + "=" + "; path=/; expires=" + expire_date.toGMTString();

        }

    },


    // ------------------------------------------------------------------------------------
    // ------------------------------------ 윈도우 ----------------------------------------
    // ------------------------------------------------------------------------------------

    window : {

        // ------------------------------------------------------------------------------------
        // 윈도우 오픈 (위치 지정 안하면 화면 중앙)
        // url        : 주소
        // win_id     : 윈도우 이름
        // win_width  : 윈도우 가로 크기
        // win_height : 윈도우 세로 크기
        // win_x      : 윈도우 x 좌표
        // win_y      : 윈도우 y 좌표
        // ------------------------------------------------------------------------------------
        open : function (url, win_id, win_width, win_height, win_x, win_y) {

	        var win_opt, o_win;

	        if (win_x == null) win_x = eval((screen.availWidth / 2) - (win_width / 2));
	        if (win_y == null) win_y = eval((screen.availHeight / 2) - (win_height / 2));

	        win_opt = "width=" + win_width + ",height=" + win_height + ",resizable=no,status=no,scrollbars=yes";
	        win_opt += ",top=" + win_y + ",left=" + win_x;

	        o_win = window.open(url, win_id, win_opt);
	        o_win.focus();

        }

    },


    // ------------------------------------------------------------------------------------
    // ------------------------------------ 검증  -----------------------------------------
    // ------------------------------------------------------------------------------------

    validation : {

	    regexp : {
		    required : /[^.*]/,
		    alpha : /^[a-z ._-]+$/i,
		    alphanum : /^[a-z0-9 ._-]+$/i,
		    digit : /^[-+]?[0-9]+$/,
		    nodigit : /^[^0-9]+$/,
		    number : /^[-+]?\d*\.?\d+$/,
		    email : /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,
		    //phone : /^[\d\s ().-]+$/,
		    url : /^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i,
		    id : /^[a-z][a-z0-9]+/i,
		    pw : /[a-z]+[0-9]+/i,
		    phone : /^0(?:\d{1}|\d{2}|\d{3})-(?:\d{3}|\d{4})-\d{4}$/,
		    handphone : /^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$/
		    
		},
        // ------------------------------------------------------------------------------------
        // 정규식으로 검증
        //
        // ctrl : 컨트롤 개체
        // exp  : 정규식
        // msg  : 경고창에 보여질 내용
        // ------------------------------------------------------------------------------------
        regExp : function (ctrl, exp, msg) {

            if (ctrl.value.search(exp) == -1)
            {
		        ctrl.focus();

		        if (msg != null)
					alert(msg);

		        return false;
	        }
	        else
	        {
		        return true;
	        }

        },

        // ------------------------------------------------------------------------------------
        // 빈값 허용하지 않는 입력폼 체크
        //
        // ctrl : 컨트롤 개체 (document.all.Email)
        // msg  : 경고창에 보여질 내용
        // ------------------------------------------------------------------------------------
        notNull : function (ctrl, msg) {

	        return U.validation.regExp(ctrl, U.validation.regexp.required, msg);

        },

        // ------------------------------------------------------------------------------------
        // 전화번호 형식 검사
        //
        // ctrl : 컨트롤 개체
        // msg  : 경고창에 보여질 내용
        // ------------------------------------------------------------------------------------
        phone : function (ctrl, msg) {

	        return U.validation.regExp(ctrl, U.validation.regexp.phone, msg);

        },

        // ------------------------------------------------------------------------------------
        // 핸드폰번호 형식 검사
        //
        // ctrl : 컨트롤 개체
        // msg  : 경고창에 보여질 내용
        // ------------------------------------------------------------------------------------
        handphone : function (ctrl, msg) {

	        return U.validation.regExp(ctrl, U.validation.regexp.handphone, msg);

        },

        // ------------------------------------------------------------------------------------
        // 주민등록번호를 정확히 입력했는지 확인
        //
        // aaa : 주민번호 앞 6 자리
        // bbb : 주민번호 뒤 7 자리
        // ------------------------------------------------------------------------------------
        sid : function (sid1, sid2) {

	        var tmp = 0;
	        var yy = sid1.substring(0, 2);
	        var mm = sid1.substring(2, 4);
	        var dd = sid1.substring(4, 6);
	        var sex = sid2.substring(0, 1);
	        var ccc = sid1 + sid2;
	        var i;

	        if ((ccc.length != 13) || ( mm < 1 || mm > 16 || dd < 1) || (sex != 1 && sex != 2 && sex != 3 && sex != 4)) return false;

	        for (i = 0; i <= 5; i++)
		        tmp = tmp + ((i % 8 + 2) * parseInt(sid1.substring(i, i + 1)));

	        for (i = 6; i <= 11; i++)
		        tmp = tmp + ((i % 8 + 2) * parseInt(sid2.substring(i - 6, i - 5)));

	        tmp = 11 - (tmp % 11);
	        tmp = tmp % 10;

	        if (tmp != sid2.substring(6, 7)) return false;

	        return true;

        }

    },


    // ------------------------------------------------------------------------------------
    // --------------------------------- 이벤트 처리 --------------------------------------
    // ------------------------------------------------------------------------------------

    act : {

        // ------------------------------------------------------------------------------------
        // 엔터키를 눌렀을 경우 해당 함수를 호출
        //
        // fn_name : 함수명 ("window.close()")
        // ------------------------------------------------------------------------------------
        execFn : function (fn_name) {
            if (event.keyCode == 13)
            {
                setTimeout(fn_name, 0);
				event.returnValue = false;
            }
        },

        // ------------------------------------------------------------------------------------
        // 숫자만 입력받기
        // ------------------------------------------------------------------------------------
        onlyNumber : function () {

	        if (!((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 46))
		        event.returnValue = false;

        },

        // ------------------------------------------------------------------------------------
        // 글자 수 제한
        //
        // oCtrl : 대상 컨트롤
        // lim_len : 제한할 수
        // msg : 메시지 ("" - 기본값, null - 표시안함)
        // oEle : 현재 글자 수를 표시할 엘리먼트
        // ------------------------------------------------------------------------------------
		limitChar : function (oCtrl, lim_len, msg, oEle) {

			var str_len = 0;
			var tmp_str = "", tmp_chr = "";

			if (msg == "")
				msg = "최대 영문 " + lim_len + "자,  한글 " + (lim_len / 2) + "까지 입력할 수 있습니다.";

			for (var i = 0; i < oCtrl.value.length; i++)
			{
				tmp_chr = oCtrl.value.charAt(i);

				if (escape(tmp_chr).length > 4)
					str_len += 2;
				else
					str_len += 1;
				
				if (str_len > lim_len)
				{
					if (msg != null)
						alert(msg);
						
					if (escape(tmp_chr).length > 4)
						str_len -= 2;
					else
						str_len -= 1;

					oCtrl.value = tmp_str;
						
					break;
				}
				else
				{
					tmp_str += tmp_chr;
				}
			}

			if (oEle != null)
				oEle.innerText = str_len;
		}

    },


    // ------------------------------------------------------------------------------------
    // ------------------------------------ 문자열 ----------------------------------------
    // ------------------------------------------------------------------------------------

    str : {

        // ------------------------------------------------------------------------------------
        // 글자수 계산
        //
        // str : 내용
        // ------------------------------------------------------------------------------------
        len : function (str) {

	        var str_len = 0;

	        var Nav = navigator.appName;
	        var Ver = navigator.appVersion;

	        var IsExplorer = false;

	        var ch;

	        if ((Nav == 'Microsoft Internet Explorer') && (Ver.charAt(0) >= 4))
		        IsExplorer = true;

	        if (IsExplorer) {
		        for (var i = 0; i < str.length; i++) {
			        ch = str.charAt(i);

			        if ((ch == "\n") || ((ch >= "ㅏ") && (ch <= "히")) || ((ch >="ㄱ") && (ch <="ㅎ")))
				        str_len += 2;
			        else
				        str_len += 1;
		        }
	        }
	        else
		        str_len = str.length;

           return str_len;

        }

    },



    // ------------------------------------------------------------------------------------
    // ------------------------------------ 폼 컨트롤  ------------------------------------
    // ------------------------------------------------------------------------------------

    ctrl : {

        // ------------------------------------------------------------------------------------
        // 텍스트 박스 빈값 체크
        //
        // oINPUT : 텍스트 박스
        // msg    : 메시지
        // ------------------------------------------------------------------------------------
        IsEmpty : function (oINPUT, msg) {

	        if (oINPUT.value.trim() == "")
	        {
				if (msg != "" && msg != null)
				{
					alert(msg);
					oINPUT.focus();
				}
	        
				return true;
	        }
	        else
	        {
				return false;
	        }

        },

        // ------------------------------------------------------------------------------------
        // 리스트에서 체크박스 전체선택 (반전)
        //
        // oAllChkBox : 전체선택 체크박스
        // oChkBox    : 처리될 체크박스
        // ------------------------------------------------------------------------------------
        checkAll : function (oAllChkBox, oChkBox) {

	        var bln_checked;

	        if (oAllChkBox.checked)
		        bln_checked = true;
	        else
		        bln_checked = false;

	        if (eval(oChkBox)) {
		        if (eval(oChkBox.length)) {
			        var chkbox_count = oChkBox.length;

			        for (var i = 0; i < chkbox_count; i++)
				        oChkBox[i].checked = bln_checked;
		        }
		        else
			        oChkBox.checked = bln_checked;
	        }

        },

        // ------------------------------------------------------------------------------------
        // 선택한(체크한) 대상이 하나 이상 있는지 확인
        //
        // oChkBox : 체크박스
        // ------------------------------------------------------------------------------------
        checked : function (oChkBox) {

	        var chkbox_checked;

	        chkbox_checked = false;

	        if (eval(oChkBox)) {
		        if (eval(oChkBox.length)) {
			        var chkbox_count = oChkBox.length;

			        for (var i = 0; i < chkbox_count; i++) {
				        if (oChkBox[i].checked)
					        chkbox_checked = true;
			        }
		        }
		        else {
			        if (oChkBox.checked)
				        chkbox_checked = true;
		        }
	        }

	        return chkbox_checked;

        },

        // ------------------------------------------------------------------------------------
        // 다음 컨트롤로 이동
        //
        // ctrl : 컨트롤 개체 (document.all.Email)
        // ------------------------------------------------------------------------------------
        moveNext : function (ctrl) {

	        var i;
	        var keyCode = event.keyCode ? event.keyCode :
                          event.which   ? event.which   : event.charCode;

	        if( keyCode == 13 ) {
		        for (i = 0; i < ctrl.form.elements.length; i++ ) {
			        if (ctrl == ctrl.form.elements[i])
				        break;
		        }

		        i = (i + 1) % ctrl.form.elements.length;

		        ctrl.form.elements[i].focus();
	        }

        },

        // ------------------------------------------------------------------------------------
        // 라디오버튼에서 해당값 선택 처리
        //
        // oRadio    : Radio 컨트롤 개체
        // str_value : 선택할 값
        // ------------------------------------------------------------------------------------
        checkRadio : function (oRadio, str_value) {

	        for (var i = 0; i < oRadio.length; i++) {
		        if (oRadio[i].value == str_value) {
			        oRadio[i].checked = true;
			        break;
		        }
	        }

        },

        // ------------------------------------------------------------------------------------
        // 콤보박스에서 해당값 선택 처리
        //
        // oSELECT   : SELECT 컨트롤 개체
        // str_value : 선택할 값
        // ------------------------------------------------------------------------------------
        selectOption : function (oSELECT, str_value) {

	        for (var i = 0; i < oSELECT.length; i++) {
		        if (oSELECT[i].value == str_value) {
			        oSELECT[i].selected = true;
			        break;
		        }
	        }

        },

        // ------------------------------------------------------------------------------------
        // SELECT에 OPTION 추가, 제거, 이동하기, 값 조회, 전체선택, 선택해제
        //
        // 1. 추    가 : add(SELECT, OPTION text, OPTION value)
        // 2. 제    거 : remove(SELECT)
        // 3. 모두제거 : removeAll(SELECT)
        // 4. 이    동 : move(원본 SELECT, 대상 SELECT, 중복 허용, 복사 or 이동)
        //
        //               중복 허용
        //                0 : 불가
        //                1 : 선택
        //                2 : 가능
        //
        //               복사 & 이동
        //                0 : 복사
        //                1 : 이동
        //
        // 5. 옵션 text  : getText(SELECT)
        //                 셀렉트 박스의 모든 글 반환
        // 6. 옵션 value : getValue(SELECT)
        //                 셀렉트 박스의 모든 값 반환
        // 7. 전체선택
        // 8. 선택해제
        // ------------------------------------------------------------------------------------

        select : {

            add : function (oSELECT, opt_text, opt_val) {

	            if ((opt_text == "") || (opt_val == "")) return;

	            var opts_len = oSELECT.options.length;

	            for (i = 0; i < opts_len; i++) {
		            if ((oSELECT.options[i].text == opt_text) && (oSELECT.options[i].value == opt_val))
			            return;
	            }

	            oSELECT.options[oSELECT.options.length] = new Option(opt_text, opt_val, false, false);

            },

            remove : function (oSELECT) {

	            if (oSELECT.selectedIndex >= 0)
		            oSELECT.remove(oSELECT.selectedIndex);

            },

            removeAll : function (oSELECT) {

	            var i, opts_len

	            opts_len = oSELECT.options.length;

	            if (opts_len > 0) {
		            for (i = opts_len - 1; i >= 0; i--)
			            oSELECT.remove(i);
	            }

            },

            move : function (oSELECT1, oSELECT2, overlap, remove_yn) {

	            var i, opts_len, same, oText, oValue;

	            if (oSELECT1.selectedIndex >= 0) {
		            opts_len = oSELECT2.options.length;

		            same = false;

		            oText = oSELECT1.options[oSELECT1.selectedIndex].text;
		            oValue = oSELECT1.options[oSELECT1.selectedIndex].value;

		            for (i = 0; i < opts_len; i++) {
			            if ((oSELECT2.options[i].text == oText) && (oSELECT2.options[i].value == oValue))
				            same = true;
		            }

		            switch (overlap) {
			            case 0 :
				            if (!same)
					            add_opt(oSELECT2, oText, oValue);

				            break;
			            case 1 :
				            if (same) {
					            if (!confirm("이미 대상에 포함되어 있습니다. 현재 목록에서 삭제 하시겠습니까?"))
						            remove_yn = 0;
					            else
						            remove_yn = 1;
				            }
				            else
					            add_opt(oSELECT2, oText, oValue);

				            break;
			            case 2 :
				            add_opt(oSELECT2, oText, oValue);

				            break;
		            }

		            if (remove_yn == 1)
			            remove_opt(oSELECT1);
	            }

            },

            getText : function (oSELECT, div) {

	            var i, opts_len, str_opt_txts;

	            opts_len = oSELECT.options.length;
	            str_opt_txts = "";

	            for (i = 0; i < opts_len; i++)
		            str_opt_txts += oSELECT.options[i].text + div;

	            return str_opt_txts.substring(0, str_opt_txts.length - div.length);

            },

            getValue : function (oSELECT, div) {

	            var i, opts_len, str_opt_vals;

	            opts_len = oSELECT.options.length;
	            str_opt_vals = "";

	            for (i = 0; i < opts_len; i++)
		            str_opt_vals += oSELECT.options[i].value + div;

	            return str_opt_vals.substring(0, str_opt_vals.length - div.length);

            },

            selectAll : function (oSELECT) {

	            var opt_len = oSELECT.length;

	            if (opt_len > 0) {
		            for (var i = 0; i < opt_len; i++)
			            oSELECT.options[i].selected = true;
	            }

            },

            deselectAll : function (oSELECT) {

	            var opt_len = oSELECT.length;

	            if (opt_len > 0) {
		            for (var i = 0; i < opt_len; i++)
			            oSELECT.options[i].selected = false;
	            }

            }

        }

    },
	

    // ------------------------------------------------------------------------------------
    // ------------------------------------ FormCheck -------------------------------------
    // ------------------------------------------------------------------------------------

    fc : {

        addError : function (oFormCheck, el, msg, blnRemoveError) {

			if (blnRemoveError || blnRemoveError == null)
				oFormCheck.removeError(el);
			
			el.errors.push(msg);
			oFormCheck.addError(el);

        }

	},


    // ------------------------------------------------------------------------------------
    // ----------------------------------- 페이지 이동 ------------------------------------
    // ------------------------------------------------------------------------------------

    location : {

        moveToLogin : function (win_target, rtn_url, bln_back) {
        
			
			if (rtn_url == "")
				rtn_url = win_target.location.href;
			
			//if (confirm(U.msg.loginConfirm))
				win_target.location.href = "http://www.genexel.com/login.html?rtn_url=" + encodeURIComponent(rtn_url);
			//else if (bln_back || bln_back != null)
			//	self.history.back();
			

        }

	},


    // ------------------------------------------------------------------------------------
    // -------------------------------------- 메시지 --------------------------------------
    // ------------------------------------------------------------------------------------

    msg : {

	    error : "에러가 발생했습니다.",
	    accessDeny : "잘못된 접근입니다.",
	    requireLogin : "로그인후 이용할 수 있습니다.",
	    wait : "처리중입니다. 잠시만 기다려주세요.",
	    loginConfirm : "로그인 후 사용할 수 있습니다.\n로그인하시겠습니까?",
	    
	    realName : {
			code1 : "실명이 확인되었습니다.",
			code2 : "일치하는 데이터가 없습니다.",
			code3 : "일치하는 데이터가 없습니다.",
			code4 : "일치하는 데이터가 없습니다.",
			code5 : "일치하는 데이터가 없습니다.",
			code50 : "정보도용 차단 요청된 주민번호입니다.",
			ELSE : "실명 확인에 실패했습니다."
			/*
			2 - 주민번호는 맞고 이름이 올바르지 않은경우.
			3 - 한신평정보에 입력한 데이타가 없는경우.
			4 - 한신평정보에 입력한 데이타가 없는경우.
			5 - 주민번호 체크 썸이 맞지 않은 경우.
			50 - 정보도용 차단 요청 주민번호.
			ELSE - 실명확인에 실패(오류)
			*/
	    }

	}

}
