/***********************************************************************************************
 *  Project         : KOF - NGEDU
 *  File Name       : common.js
 *  Description     : 공통으로 사용하는 js
 *  Arguement       : 
 *  Written Date    : 2008-10-28        Written By  : mediopia
 *  Modified Date   :                   Modified By : 
 **********************************************************************************************/

 /**
     * trim
     *
     * @param   text
     * @return  string
     */
    function trim(text) {
        if (typeof(text)=="undefined" || text == "" ) {
            return  text;
        }
        
        var len = text.length;
        var st = 0;

        while ((st < len) && (text.charAt(st) <= ' ')) {
            st++;
        }

        while ((st < len) && (text.charAt(len - 1) <= ' ')) {
            len--;
        }

        return  ((st > 0) || (len < text.length)) ? text.substring(st, len) : text;
    }
	/**
     * 문자열의 byte length를 얻는다.
     *
     * @param   str 문자열
     * @return  byte length
     * @author  marie
     */
    function jsByteLength(str) {
    
        var intByteLength = 0;
	    var chrData = null;
	    for(var i=0; i<str.length; i++) {
	        chrData = escape(str.charAt(i));
	        if(chrData.length == 1) {
	            intByteLength ++;
	        } else if (chrData.indexOf("%u") != -1) {
	            intByteLength += 2;
	        } else if (chrData.indexOf("%") != -1) {
	            intByteLength += chrData.length/3;
	        }
	    }
	    
	    return parseInt(intByteLength / 2);
    }
   /**
     * 오직 영문자로만 이루어져 있는지 체크 한다.
     *
     * @param   num
     * @return  boolean
     */
	function isAlpha(str){
        for (var i = 0; i < str.length; i++) {
           chk = str.charCodeAt(i)
           if((chk >= 97 && chk <= 122) || (chk >= 65 && chk <= 90)){}
		   else{
			   return false;
		   }

        }
        return  true;
	}
    /**
     * 오직 영문자와 숫자로만 이루어져 있는지 체크 한다.
     *
     * @param   num
     * @return  boolean
     */
	function isAlphaNumeric(str){
        for (var i = 0; i < str.length; i++) {
           chk = str.charCodeAt(i)
           if((chk >= 97 && chk <= 122) || (chk >= 65 && chk <= 90) || (chk >= 48 && chk <= 57)){}
		   else{
			   return false;
		   }

        }
        return  true;
	}

	 /**
     * 오직 숫자로만 이루어져 있는지 체크 한다.
     *
     * @param   num
     * @return  boolean
     */
    function isNumber(num) {
        re = /^[0-9]*[0-9]$/;
        if (re.test(num)) {
            return  true;
        }
        return  false;
    }
	 /**
     * 정수 체크
     *
     * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
     * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
     * 3. 마지막은 숫자로 끝나야 한다 : [0-9]$
     *
     * @param   num
     * @return  boolean
     */
    function isInteger(num) {
        re = /^[\+-]?[0-9]*[0-9]$/;

        if (re.test(num)) {
            return  true;
        }

        return  false;
    }
	 /**
     * 유리수 체크
     *
     * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
     * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
     * 3. 소수점을 넣을 수 있다 : [.]?
     * 4. 소수점 이하 자리에 0에서 9까지 숫자가 올 수 있다 : [0-9]*
     * 5. 마지막은 숫자로 끝나야 한다 : [0-9]$
     *
     * @param   num
     * @return  boolean
     */
    function isFloat(num) {
        re = /^[\+-]?[0-9]*[.]?[0-9]*[0-9]$/;

        if (re.test(num)) {
            return  true;
        }

        return  false;
    }
	 /**
     * 이메일 체크
     *
     * @param   email
     * @return  boolean
     */
    function isEmail(email) {
        re = /[^@]+@[A-Za-z0-9_-]+[.]+[A-Za-z]+/;

        if (re.test(email)) {
            return  true;
        }

        return  false;
    }

	/**
     * 날짜 체크
     *
     * @param   date
     * @return  boolean
     */
    function isDate(date) {
        if (date == null || date.length != 8) {
            return  false;
        }

        if (!isNumber(date)) {
            return  false;
        }

        var year = eval(date.substring(0, 4));
        var month = eval(date.substring(4, 6));
        var day = eval(date.substring(6, 8));

		if(year == "0000") {
			return false;
		}

        if (month > 12 || month == "00") {
            return  false;
        }

        var totalDays;

        switch (eval(month)){

            case 1 :
                totalDays = 31;
                break;
            case 2 :
                if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
                    totalDays = 29;
                else
                    totalDays = 28;
                break;
            case 3 :
                totalDays = 31;
                break;
            case 4 :
                totalDays = 30;
                break;
            case 5 :
                totalDays = 31;
                break;
            case 6 :
                totalDays = 30;
                break;
            case 7 :
                totalDays = 31;
                break;
            case 8 :
                totalDays = 31;
                break;
            case 9 :
                totalDays = 30;
                break;
            case 10 :
                totalDays = 31;
                break;
            case 11 :
                totalDays = 30;
                break;
            case 12 :
                totalDays = 31;
                break;
        }

        if (day > totalDays) {
            return  false;
        }

        if (day == "00") {
            return  false;
        }

        return  true;
    }
	/**
     * 숫자에서 comma를 없앤다.
     *
     * @param   str
     */
    function deleteCommaStr(str) {
        var temp = '';

        for (var i = 0; i < str.length; i++) {
            if (str.charAt(i) == ',') {
                continue;
            } else {
                temp += str.charAt(i);
            }
        }

        return  temp;
    }

    /**
     * 데이터 유효성을 체크한다.
     *
     * @param   form
     */
    function validate(form) {
        var obj;
        var dispName;
        var dataType;
        var minValue;
        var maxValue;
        var len;
        var lenCheck;
        var lenMCheck;
        var isValid;
        var value;

        for (i = 0; i < form.elements.length; i++) {
            obj = form.elements[i];
                       
        if(obj.name != ""){ //이름이 있는 경우만 체크함.
            	obj.value = trim(obj.value);
         	
            dispName 		= obj.getAttribute("dispName");
            dataType 		= obj.getAttribute("dataType");
            minValue 		= obj.getAttribute("minValue");
            maxValue 		= obj.getAttribute("maxValue");
            len      		= obj.getAttribute("len");
            lenCheck 		= obj.getAttribute("lenCheck");
            lenMCheck 		= obj.getAttribute("lenMCheck");

            value = obj.value;
            
            if (dispName == null) {
                dispName = obj.name;
            }

            // 필수 입력 항목 체크
            if (obj.getAttribute("notNull") != null) {
                isValid = false;

                if (obj.type == "radio" || obj.type == "checkbox") {
                    if (form.elements(obj.name).length) {
                        for (j = 0; j < form.elements(obj.name).length; j++) {
                            if (form.elements(obj.name)[j].checked) {
                                isValid = true;
                                break;
                            }
                        }
                    } else {
                        if (obj.checked) {
                            isValid = true;
                        }
                    }
                } else {
                    if (value != "") {
                        isValid = true;
                    } else {
                        if (obj.getAttribute("comma") != null) {
                            obj.value = 0;
                            isValid = true;
                        }
                    }
                }

                if (!isValid) {
					if (obj.type == "radio" || obj.type == "checkbox" || obj.type == "select-one") 
						alert(dispName + "을(를) 선택하십시오.");
					else
						alert(dispName + "을(를) 입력하십시오.");
                    obj.focus();
                    if (window.event) {
                        window.event.returnValue = false;
                    }
                    return  false;
                }
            }
             



            // 데이터 길이 체크
            if (len != null) {
                if (value.length != eval(len)) {
                    alert(dispName + "은(는) " + len + "자리를 입력해야 합니다.");
                    obj.focus();
                    if (window.event) {
                        window.event.returnValue = false;
                    }
                    return  false;
                }
            }
            
           if(lenCheck != null )
            {
            	
              if( jsByteLength(value) > eval(lenCheck) )
                {
                  alert(dispName + "은(는) " + lenCheck + " 자리를 넘을수 없습니다 현재 글자수("+jsByteLength(value)+")");
                  obj.value = value;
                  obj.focus();
                  if(window.event)
                    {
                       window.event.returnValue = false;
                    }
                
                    return false;
                }
               
            }            
            
            // 최소 입력자리수 체크
            if(lenMCheck != null) {
            	if(value.length < eval(lenMCheck)) {
            		alert(dispName + "은(는) " + lenMCheck + " 자리수 이상 입력하셔야 합니다.");
            		obj.focus();
            		if(window.event)
            			window.event.returnValue = false;
            		
            		return false;
            	}
            }

            if (obj.type == "text") {
                // 데이터 타입 체크
                if (dataType == null) { // 2002.01.30 추가
                    if (obj.readOnly == false && jsByteLength(value) > obj.maxLength) {
                        alert(dispName + " 길이가 " + obj.maxLength + " 을(를) 넘습니다.");
                        obj.focus();
                        if (window.event) {
                            window.event.returnValue = false;
                        }

                        return  false;
                    }
                } else if ((value != "") && (dataType != null)) {
                    isValid = true;
                    checkValue = false;

                    if (dataType == "date") {
                        value = deleteDateFormatStr(value);
                        isValid = isDate(value);
                        checkValue = true;
                    } else if (dataType == "email") {
                        isValid = isEmail(value);
                    } else if (dataType == "float") {
                        value = deleteCommaStr(value);
                        isValid = isFloat(value);
                        checkValue = true;
                    } else if (dataType == "integer") {
                        value = deleteCommaStr(value);
                        isValid = isInteger(value);
                        checkValue = true;
                    } else if (dataType == "number") {
                        value = deleteCommaStr(value);
                        isValid = isNumber(value);
                        checkValue = true;
                    } else if (dataType == "double") {
                        value = deleteCommaStr(value);
                        isValid = isNumber(value);
                        checkValue = true;
                    }else if (dataType == "alpha") {
                        value = deleteCommaStr(value);
                        isValid = isAlpha(value);
                        checkValue = true;
                    }else if (dataType == "alphaNumeric") {
                        value = deleteCommaStr(value);
                        isValid = isAlphaNumeric(value);
                        checkValue = true;
                    }



                    if (!isValid) {
                        alert(dispName + " 형식이 올바르지 않습니다.");
                        if (dataType == "float" || dataType == "integer" || dataType == "number" || dataType == "double") {
                            obj.value = "0";
                        }else{
							obj.value = "";
						}
                        obj.focus();
                        if (window.event) {
                            window.event.returnValue = false;
                        }
                        return  false;
                    }

                    if (checkValue) {
                        if (minValue != null) {
                            if (eval(minValue) > eval(value)) {
                                alert(dispName + " 값은 최소값(" + minValue + ") 이상입니다.");
                                obj.focus();
                                if (window.event) {
                                    window.event.returnValue = false;
                                }
                                return  false;
                            }
                        }

                        if (isValid && (maxValue != null)) {
                            if (eval(maxValue) < eval(value)) {
                                alert(dispName + " 값이 최대값(" + maxValue + ")을 초과합니다.");
                                obj.focus();
                                if (window.event) {
                                    window.event.returnValue = false;
                                }
                                return  false;
                            }
                        }
                    }
                }
            }
         }
      }
        return  true;
    }
    
    
    //select 박스 선택
    function setOptionSelected(optionObject,obtionValue){
		for (i=0;i<optionObject.length;i++ ) {
		    if ( optionObject[i].value == obtionValue ) {
		       optionObject[i].selected = true;
		       break;
		    }
		} 	
	}
	
	//check 박스 선택
    function setCheckSelected(optionObject,obtionValue){
		for (i=0;i<optionObject.length;i++ ) {
		    if ( optionObject[i].value == obtionValue ) {
		       optionObject[i].checked = true;
		       break;
		    }
		} 	
	}
