var special     = "~`!@#$%^&*()-_=+{}[]|\\\"':;?/>.<,";
var vlNumber    = "0123456789";
var koreanByte  = 3;

var thisYear    = "";
var thisMonth   = "";
var thisDate    = "";
var thisDay     = "";

/*
 * Æ¯¼ö ¹®ÀÚ Ã¼Å©
 *
 * obj      : Ã¼Å©ÇÒ Object
 * expt     : Æ¯¼ö ¹®ÀÚ Ã¼Å©¿¡¼­ Á¦¿ÜÇÏ°í ½ÍÀº ¹®ÀÚ
 * addCmt   : alert¹® ¾Õ¿¡ Ãß°¡ÇÏ°í ½ÍÀº ¹®±¸
 *
 * onKeyUp ¿¡ »ç¿ëÇØµµ µÇ°í µû·Î return °ªÀ» ¹Þ´Â °É·Î Ã³¸®ÇØµµ ¹«¹æÇÔ.
 * return °ªÀ» ¹Þ´Â °æ¿ì Æ¯¼ö ¹®ÀÚ°¡ ÀÖÀ¸¸é false °ªÀ» ³Ñ±è.
 */
function checkSpecialChar(obj, expt, addCmt) {
    expt    = (expt == undefined) ? "" : expt.trimAll();
    addCmt  = (addCmt == undefined) ? "" : addCmt;
    addCmt  = (expt != "") ? addCmt + "'" + expt + "'¸¦(À») Á¦¿ÜÇÑ " : addCmt;

    var newSpecial  = "";

    if(expt != ""){  //Á¦¿ÜµÇ´Â ¹®ÀÚ°¡ ÀÖ´Â °æ¿ì
        for(var i=0;i<special.length;i++){
            if(expt.indexOf(special.charAt(i)) == -1){
                newSpecial += special.substring(i, i+1);
            }
        }
    }
    else{
        newSpecial = special;
    }

    for(var i=0;i<obj.value.length;i++) {
        if(newSpecial.indexOf(obj.value.charAt(i)) != -1){
            alert(addCmt + "Æ¯¼ö¹®ÀÚ´Â ÀÔ·ÂÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.");
            //obj.value = obj.value.substring(0, i);
            obj.value = removePosition(obj, i);
            obj.focus();
            return false;
            break;
        }
    }

    return true;
}


/*
 * ¼ýÀÚ Ã¼Å©
 *
 * obj      : Ã¼Å©ÇÒ Object
 * expt     : ¼ýÀÚ ¸»°í Ã¼Å©ÇÏ°í ½ÍÀº ¹®ÀÚ Ãß°¡. ºó °ªÀÌ ³Ñ¾î¿À¸é ¼ýÀÚ°¡ ¾Æ´Ñ °ªÀÌ ÀÖ´Â °æ¿ì °æ°í¹®±¸ ¶ä.
 * addCmt   : alert¹® ¾Õ¿¡ Ãß°¡ÇÏ°í ½ÍÀº ¹®±¸
 *
 * onKeyUp ¿¡ »ç¿ëÇØµµ µÇ°í µû·Î return °ªÀ» ¹Þ´Â °É·Î Ã³¸®ÇØµµ ¹«¹æÇÔ.
 * return °ªÀ» ¹Þ´Â °æ¿ì ¼ýÀÚ°¡ ¾Æ´Ñ ±ÛÀÚ°¡ ¼¯¿© ÀÖÀ¸¸é false °ªÀ» ³Ñ±è.
 */
function validateNumber(obj, expt, addCmt) {
    obj.style.imeMode = "disabled";  //¼ýÀÚ¸¸ ÀÔ·ÂÇÏ´Â °æ¿ì ÇÑ±Û ÀÔ·ÂÀÌ µÇÁö ¾Ê°Ô ¸·´Â´Ù.

    expt    = (expt == undefined) ? "" : expt.trimAll();
    addCmt  = (addCmt == undefined) ? "" : addCmt;

    var newVlNumber = vlNumber;
    var addExpt     = "";

    if(expt != ""){
        newVlNumber += expt;

        addExpt = "°ú(¿Í) '" + expt + "'";
    }

    for(var i=0;i<obj.value.length;i++){
        if(newVlNumber.indexOf(obj.value.charAt(i)) == -1){
            alert(addCmt + "¼ýÀÚ" + addExpt + "¸¸ ÀÔ·ÂÀÌ °¡´ÉÇÕ´Ï´Ù");
            //obj.value = obj.value.substring(0, i);
            obj.value = removePosition(obj, i);
            obj.focus();
            return false;
            break;
        }
    }

    return true;
}


/*
 * String¿¡¼­ Æ¯Á¤ À§Ä¡ÀÇ ¹®ÀÚ¸¦ »©°í »õ·Î »ý¼º
 * @return String
 */
function removePosition(obj, removePos){
    var newString = "";

    for(var x=0;x<obj.value.length;x++){
        if(x != removePos){
            newString += obj.value.substring(x, x+1);
        }
    }

    return newString;
}

/*
 * String¿¡¼­ Æ¯Á¤ ¹®ÀÚ¸¦ »©°í »õ·Î »ý¼º
 * @return String
 */
function removeString(obj, removeStr){
    var newString = "";

    for(var x=0;x<obj.value.length;x++){
        if(removeStr.indexOf(obj.value.charAt(i)) == -1){
            newString += obj.value.substring(x, x+1);
        }
    }

    return newString;
}


/*
 * String ¹®ÀÚ ÀÚ¸£±â
 * @return : String
 */
String.prototype.cut = function(len) {
    var str = this;
    var l = 0;

    for (var i=0; i<str.length; i++) {
        l += (str.charCodeAt(i) > 127) ? koreanByte : 1;

        if (l > len) return str.substring(0, i);
    }

    return str;
}


/*
 * StringÀÇ ¸ðµç °ø¹é Áö¿ì±â
 * @return : String
 */
String.prototype.trimAll = function(){
    return this.replace(/ /g, "");
}


/*
 * StringÀÇ ÁÂ¿ì °ø¹é Áö¿ì±â
 * @return : String
 */
String.prototype.trim = function(){
    // Use a regular expression to replace leading and trailing
    // spaces with the empty string
    return this.replace(/(^\s*)|(\s*$)/g, "");
}


/*
 * StringÀÇ ÁÂ °ø¹é Á¦°Å
 * @return : String
 */
String.prototype.ltrim = function() {
    return this.replace(/(^\s*)/, "");
}


/*
 * StringÀÇ ¿ì °ø¹é Á¦°Å
 * @return : String
 */
String.prototype.rtrim = function() {
    return this.replace(/(\s*$)/, "");
}


/*
 * String ÃÑ ¹ÙÀÌÆ® ¼ö ±¸ÇÏ±â
 * @return : String
 */
String.prototype.bytes = function() {
    var str = this;
    var l = 0;

    //for (var i=0;i<str.length;i++) l += (str.charCodeAt(i) > 127) ? koreanByte : 1;
    for (var i=0;i<str.length;i++) l += (str.charCodeAt(i) > 127) ? koreanByte : 1;

    return l;
}


/*
 * ÆÄÀÏ È®ÀåÀÚ¸¸ °¡Á®¿À±â
 * @return : String
 */
String.prototype.ext = function() {
    return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);
}

/*
 * ±ÛÀÚ ÃÖ¼Ò ÃÖ´ë ÀÔ·Â ¼ö Ã¼Å©ÇÏ°í alert Ã¢ ¶ç¿ì±â
 * @return : String
 */
function checkByte(obj, minLen, maxLen, addCmt){
    maxLen  = (maxLen == undefined) ? "" : maxLen.trimAll();
    minLen  = (minLen == undefined) ? "" : minLen.trimAll();
    addCmt  = (addCmt == undefined) ? "" : addCmt;

    //if(maxLen == "") { return true; }

    //alert(obj.value.bytes());

    if(minLen != "" && obj.value.trim().bytes() < minLen){
        alert(addCmt +" ÃÖ¼Ò ÀÔ·Â ±ÛÀÚ´Â " + minLen + "byte ÀÔ´Ï´Ù.");
        obj.value = obj.value.trim();
        obj.focus();
        return false;
    }

    if(maxLen != "" && obj.value.trim().bytes() > maxLen){
        alert(addCmt +" ÃÖ´ë ÀÔ·Â ±ÛÀÚ´Â " + maxLen + "byte ÀÔ´Ï´Ù.");
        obj.value = obj.value.cut(maxLen);
        obj.focus();
        return false;
    }

    return true;
}


/*
 * ¼Ò¼öÁ¡ ÀÌÇÏ ÀÚ¸® ¼ö Ã¼Å©
 *
 * obj          : Ã¼Å©ÇÒ Object
 * maxPlaces    : ¼Ò¼öÁ¡ ÀÌÇÏ Á¦ÇÑ ÀÚ¸® ¼ö
 * addCmt       : alert¹® ¾Õ¿¡ Ãß°¡ÇÏ°í ½ÍÀº ¹®±¸
 *
 */
function checkDecimal(obj, maxPlaces, addCmt){
    addCmt  = (addCmt == undefined) ? "" : addCmt;

    var realVal = obj.value.trimAll();
    var crrNumber = realVal.substring(0, realVal.lastIndexOf(".")).length;
    var crrPlaces = realVal.substring(realVal.lastIndexOf(".")+1).length;


    if(realVal.indexOf(".") > -1 && crrNumber < 1){
        alert("Á¤¼ö ºÎºÐ(¼Ò¼öÁ¡ ¾Õ)ÀÇ °ªÀ» ÀÔ·ÂÇÏ¼¼¿ä.");
        obj.value = realVal.substring(0, realVal.length - 1);
        obj.focus();
        return false;
    }

    if(realVal.indexOf(".") > -1 && crrPlaces > maxPlaces){
        alert(addCmt + "¼Ò¼öÁ¡ " + maxPlaces + "ÀÚ¸® ±îÁö¸¸ ÀÔ·Â°¡´ÉÇÕ´Ï´Ù..");
        obj.value = realVal.substring(0, realVal.length - 1);
        obj.focus();
        return false;
    }

    return true;
}

function makeSelectYear(obj, selectYear){
    var maxDate = new Number(thisYear) + 10;
    var minDate = 1940;
    var sltLength = maxDate - minDate + 2;

    obj.length = sltLength;

    obj.options[0].text = "³âµµ";
    obj.options[0].value = "";

    var j = 1;

    for(var i=minDate;i<maxDate+1;i++){
        obj.options[j].text = i;
        obj.options[j].value = i;

        if(selectYear == i){
            obj.selectedIndex = j;
        }

        j++;
    }
}

function makeSelectMonth(obj, selectMonth){
    var maxDate = 12;
    var minDate = 1;
    var sltLength = maxDate - minDate + 2;

    obj.length = sltLength;

    obj.options[0].text = "¿ù";
    obj.options[0].value = "";

    var j = 1;

    for(var i=minDate;i<maxDate+1;i++){
        obj.options[j].text = i;

        if(i < 10){
            obj.options[j].value = "0" + i;
        }
        else{
            obj.options[j].value = i;
        }

        if(selectMonth == i){
            obj.selectedIndex = j;
        }

        j++;
    }
}

function makeSelectDate(obj, selectDate){
    var maxDate = 31;
    var minDate = 1;
    var sltLength = maxDate - minDate + 2;

    obj.length = sltLength;

    obj.options[0].text = "ÀÏ";
    obj.options[0].value = "";

    var j = 1;

    for(var i=minDate;i<maxDate+1;i++){
        obj.options[j].text = i;

        if(i < 10){
            obj.options[j].value = "0" + i;
        }
        else{
            obj.options[j].value = i;
        }

        if(selectDate == i){
            obj.selectedIndex = j;
        }

        j++;
    }
}

function makeSelectPriod(objYear, selYear, objMonth, selMonth){
    makeSelectYear(objYear, selYear);
    makeSelectMonth(objMonth, selMonth);
}

function getThisYear(){
    var toDate = new Date();
    return toDate.getYear();
}

function getThisMonth(){
    var toDate = new Date();
    return toDate.getMonth()+1;
}

function getThisDay(){
    var toDate = new Date();
    return toDate.getDate();
}



//¸ðµç ÇÊµåÀÇ Ã¼Å© ¼ø¼­ : Æ¯¼ö¹®ÀÚ -> ÇØ´ç ÇÊµåÀÇ Æ¯¼º¿¡ ¸Â´Â Ã¼Å© -> ÀÚ¸´¼ö Ã¼Å©
function chkPhoneNumer(obj, expt, minLen, maxLen, addCmt){
    if(validateNumber(obj, expt, addCmt)
        && checkByte(obj, minLen, maxLen, addCmt))
    {
        return true;
    }
    else{
        return false;
    }
}

function chkNormalText(obj, expt, minLen, maxLen, addCmt){
    if(checkSpecialChar(obj, expt, addCmt)
        && checkByte(obj, minLen, maxLen, addCmt))
    {
        return true;
    }
    else{
        return false;
    }
}

function chkNumber(obj, expt, minLen, maxLen, maxPlaces, addCmt){
    if(validateNumber(obj, expt, addCmt)
        && checkDecimal(obj, maxPlaces, addCmt)
        && checkByte(obj, minLen, maxLen, addCmt))
    {
        return true;
    }
    else{
        return false;
    }
}

function chkNumber(obj, expt, minLen, maxLen, addCmt){
    if(validateNumber(obj, expt, addCmt)
        && checkByte(obj, minLen, maxLen, addCmt))
    {
        return true;
    }
    else{
        return false;
    }
}

function resizeTextarea(obj, maxBytes, chkBytes){
    var textHeight;

    koreanByte = chkBytes;

    if(obj.value.bytes() > maxBytes){
        textHeight = (obj.value.bytes() / maxBytes) * 19;
        obj.style.height = textHeight;
    }
}

/*
 *  ÀÏÁ¤ÇÑ ÀÔ·Â ¸¶Áö¸·¿¡ ´ÙÀ½ °´Ã¼·Î Ä¿¼­ ÀÌµ¿.
 */
function autoNextFocus(obj, len, nextObj){
    if(obj.value.length == len){
        nextObj.focus();
    }
}