/*******************************************************************************
   1. ÆÄ    ÀÏ    ¸í : domevent.js
   2. ¾÷¹« ½Ã½ºÅÛ ¸í : °øÅë
   3. ¿ø  µµ  ¿ì  ¸í : ½Ã½ºÅÛ °øÅë ½Ç½Ã°£ ÀÔ·Â °Ë»ç Át¼ö
   4. ¼³          ¸í : ½Ã½ºÅÛ °øÅë ½Ç½Ã°£ ÀÔ·Â °Ë»ç ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼öÀÌ´Ù.
   5. ÀÛ    ¼º    ÀÚ : °­¼º¿í(2009/02/18)
--------------------------------------------------------------------------------
   6. ÀÌ          ·Â :
      °­¼º¿í(2009/02/18) - ÃÖÃÊ ÀÛ¼º

/* Àü¿ª º¯¼ö */
var gsButtonNames = new Array();

/* »ó¼ö */
var TYPE_NONE = 0;
var TYPE_WON = 1;
var TYPE_YEAR = 2;
var TYPE_YEARMONTH = 3;
var TYPE_DATE = 4;
var TYPE_TIME = 5;
var TYPE_JUMIN = 6;
var TYPE_BIZNO = 7;
var TYPE_ORGNO = 8;
var TYPE_ZIPCODE = 10;
var TYPE_NUMCODE = 11;
var TYPE_ENGCODE = 12;

var TYPE_KOR = 20;
var TYPE_ENG = 21;
var TYPE_NUM = 22;
var TYPE_KORENG = 23;
var TYPE_KORNUM = 24;
var TYPE_ENGNUM = 25;

var TYPE_EMAIL = 30;
var TYPE_URL = 31;
var TYPE_TEL = 32;

function DOM_unformat() {
    var oTags = document.getElementsByTagName("input");

    for (i = 0; i < oTags.length; i++) {
        if (oTags[i].type == "text")
            oTags[i].value = oTags[i].value.replace(/(\,|\-)/g, "");
    }
}

function DOM_format() {
	switch (this.elementType) {
		case TYPE_WON :
			var sWon = this.value.replace(/(^(0)*|,)/g, "");

			var sOut = "";
			var i;
			var j = 0;
			var nLen = sWon.length;

			for (i = 0; i < nLen; i++) {
				if (i != 0 && (i % 3 == nLen % 3)) {
					sOut += ",";
                }

				if (i < sWon.length) {
                    sOut += sWon.charAt(i);
                }
			}

			this.value = sOut;
			break;

		case TYPE_YEAR		:
			this.value = DOM_formatMask(this.value, "9999");
			break;

		case TYPE_YEARMONTH :
			this.value = DOM_formatMask(this.value, "9999-99");
			break;

		case TYPE_DATE		:
			this.value = DOM_formatMask(this.value, "9999-99-99");
			break;

        case TYPE_TIME		:
			this.value = DOM_formatMask(this.value, "99:99");
			break;


		case TYPE_JUMIN		:
			this.value = DOM_formatMask(this.value, "999999-9999999");
			break;

		case TYPE_BIZNO		:
			this.value = DOM_formatMask(this.value, "999-999-9999");
			break;

		case TYPE_ORGNO		:
			this.value = DOM_formatMask(this.value, "99-999999");
			break;

		case TYPE_ZIPCODE	:
			this.value = DOM_formatMask(this.value, "999-999");
			break;
	}
}


function DOM_formatMask(str, mask) {
	var sStr = str.replace(/(\$|\^|\*|\(|\)|\+|\.|\?|\\|\{|\}|\||\[|\]|-|:)/g,"");
	var sOut = "";
	var i;
	var j = 0;
	var nLen = sStr.length + 1 ;

	for (i = 0; i < sStr.length; i++) {
		sOut += sStr.charAt(i);
		j++;

		if (j < mask.length && mask.charAt(j) != "9") {
			sOut += mask.charAt(j++);
        }
	 }

	 return sOut;
}

function DOM_onKeyPress() {
    var sKey = String.fromCharCode(event.keyCode);
	var sFilter;

	switch (this.elementType) {
		case TYPE_WON		:
    		sFilter = "[0-9.-]";
            break;

		case TYPE_YEAR		:
		case TYPE_YEARMONTH :
		case TYPE_DATE		:
		case TYPE_TIME		:
		case TYPE_JUMIN		:
		case TYPE_BIZNO		:
		case TYPE_ORGNO		:

		case TYPE_ZIPCODE	:
    		sFilter = "[0-9]";
            break;

        case TYPE_NUMCODE   :
            sFilter = "[0-9]";
            break;

        case TYPE_ENGCODE   :
            sFilter = "[_0-9A-Za-z]";
            break;

        case TYPE_KOR       :
            sFilter = "[^0-9A-Za-z ]";
            break;

        case TYPE_ENG       :
            sFilter = "[A-Za-z ]";
            break;

        case TYPE_NUM       :
            sFilter = "[0-9.-]";
            break;

        case TYPE_KORENG    :
            sFilter = "[^0-9 ]";
            break;

        case TYPE_KORNUM    :
            sFilter = "[^A-Za-z ]";
            break;

        case TYPE_ENGNUM    :
            sFilter = "[_0-9A-Za-z ]";
            break;

        case TYPE_EMAIL     :
            sFilter = "[0-9a-z@.]";
            break;

        case TYPE_URL       :
            sFilter = "[0-9a-z:/.]";
            break;

        case TYPE_TEL       :
            sFilter = "[0-9-)]";
            break;
	}

    if (sFilter) {
		var re = new RegExp(sFilter);

		if (!re.test(sKey)) {
			event.returnValue = false;
        }
	}

    if (this.getAttribute("filter")) {
		var re = new RegExp(this.getAttribute("filter"));

		if (!re.test(sKey)) {
			window.event.returnValue = false;
        }
    }

    if (this.elementType == TYPE_WON || this.elementType == TYPE_NUM) {
        if (sKey == "." && this.value.indexOf(".") != -1) {
        	window.event.returnValue = false;
        }
    }

    if (this.getAttribute("keypress")) {
        var fn  = eval(this.getAttribute("keypress"));
    }
}

function DOM_onKeyUp() {
    var nKeyCode = window.event.keyCode;

    if (nKeyCode == 9 || (nKeyCode >= 33 && nKeyCode <= 40) || nKeyCode == 45 || nKeyCode == 46)
        return;

    switch (this.elementType) {
		case TYPE_WON		:
            insertSeperatorByWon(this, ",");
            break;

		case TYPE_YEAR		:
            break;

		case TYPE_YEARMONTH :
            insertSeperatorByYearMonth(this, "-");
            break;

		case TYPE_DATE		:
            insertSeperatorByDate(this, "-");
            break;

		case TYPE_TIME		:
            insertSeperatorByTime(this, ":");
            break;

		case TYPE_JUMIN		:
            insertSeperatorByJumin(this, "-");
            break;

		case TYPE_BIZNO		:
            insertSeperatorByBizno(this, "-");
            break;

		case TYPE_ORGNO		:
            insertSeperatorByOrgno(this, "-");
            break;

		case TYPE_ZIPCODE	:
            insertSeperatorByZipcode(this, "-");
            break;

        case TYPE_NUMCODE   :
        case TYPE_ENGCODE   :
        case TYPE_KOR       :
        case TYPE_ENG       :
        case TYPE_NUM       :
        case TYPE_KORENG    :
        case TYPE_KORNUM    :
        case TYPE_ENGNUM    :
        case TYPE_EMAIL     :
        case TYPE_URL       :
        case TYPE_TEL       :
            break;
	}

    if (this.getAttribute("keyup")) {
        var fn  = eval(this.getAttribute("keyup"));
    }
}

function DOM_onKeyDown() {
    if (this.getAttribute("keydown")) {
        var fn  = eval(this.getAttribute("keydown"));
    }
}

function DOM_onFocus() {
	if (this.select) {
		this.select();
    }

    if (this.getAttribute("focus")) {
        var fn  = eval(this.getAttribute("focus"));
    }
}

/*
function DOM_onBlur() {
    if (window.event.keyCode == 9) {
        return;
    }

    var title = this.getAttribute("title")?this.getAttribute("title"):"ÀÔ·ÂÀÚ·á";
    var name = this.name;

    if (this.getAttribute("range")) {
        var range = this.getAttribute("range").split("-");

        if (range.length == 2) {
            var str = trim(this.value);

            if (strlen(str) != 0 && !(strlen(str) >= range[0] && strlen(str) <= range[1])) {
                if (range[0] == range[1])
                    window.alert(title + "Àº(´Â) " + range[0] +"ÀÚ·Î ÀÔ·ÂÇÏ¼¼¿ä.");
                else
                    window.alert(title + "Àº(´Â) ÃÖ¼Ò " + range[0] +"ÀÚ, ÃÖ´ë " + range[1] + "ÀÚ·Î ÀÔ·ÂÇÏ¼¼¿ä.");

                this.value = str;
                this.focus();

                return;
            }

            this.value = str;

        }
    }

	switch (this.elementType) {
		case TYPE_YEAR		:
            var str = this.value;

            if (str != "") {
                if (str != "" && !(parseInt(str) >= 1900 && parseInt(str) <= 2100)) {
                    window.alert("[" + str + "]Àº(´Â) À¯È¿ÇÑ " + title + "ÀÌ(°¡) ¾Æ´Õ´Ï´Ù.");

                    this.value = str;
                    return;
                }

                this.value = str;
            }

            break;

        case TYPE_YEARMONTH	:
            var sep = "-";
            var str = this.value;

            if (str != "") {
                var arr = new Array();

                arr = str.split(sep);

                if (arr.length != 2) {
                    window.alert(title + "Àº(´Â) [" + sep + "]·Î ±¸ºÐÇØ¾ß ÇÕ´Ï´Ù.");
                    this.value = str;
                    return;
                }

                if (!ValidYear(arr[0]) || !ValidMonth(arr[1])) {
                    window.alert("[" + str + "]Àº(´Â) À¯È¿ÇÑ " + title + "ÀÌ(°¡) ¾Æ´Õ´Ï´Ù.");
                    this.value = str;

                    return;
                }

                if (arr[1].length == 1) {

                    arr[1] = "0" + arr[1];
                }

                this.value = arr[0] + sep + arr[1];
            }

            break;

		case TYPE_DATE		:
            var sep = "-";
            var str = this.value;

            if (str != "") {
                var arr = new Array();
                arr = str.split(sep);

                if (arr.length != 3) {
                    window.alert(title + "Àº(´Â) [" + sep + "]·Î ±¸ºÐÇØ¾ß ÇÕ´Ï´Ù.");
                    this.value = str;
                    return;
                }

                if (!ValidDate(arr[0], arr[1], arr[2])) {
                    window.alert("[" + str + "]Àº(´Â) À¯È¿ÇÑ " + title + "ÀÌ(°¡) ¾Æ´Õ´Ï´Ù.");
                    this.value = str;
                    return;
                }

                if (arr[1].length == 1) {

                    arr[1] = "0" + arr[1];
                }

                if (arr[2].length == 1) {

                    arr[2] = "0" + arr[2];
                }

                this.value = arr[0] + sep + arr[1] + sep + arr[2];
            }

            break;

		case TYPE_TIME		:
            var sep = ":";
            var str = this.value;

            if (str != "") {
                var arr = new Array();

                arr = str.split(sep);

                if (arr.length != 2) {
                    window.alert(title + "Àº(´Â) [" + sep + "]·Î ±¸ºÐÇØ¾ß ÇÕ´Ï´Ù.");
                    this.value = str;
                    return;
                }

                if (!ValidHour(arr[0]) || !ValidMinute(arr[1])) {
                    window.alert("[" + str + "]Àº(´Â) À¯È¿ÇÑ " + title + "ÀÌ(°¡) ¾Æ´Õ´Ï´Ù.");
                    this.value = str;

                    return;
                }

                if (arr[1].length == 1) {

                    arr[1] = "0" + arr[1];
                }

                this.value = arr[0] + sep + arr[1];
            }

            break;

		case TYPE_JUMIN		:
            var sep = "-";
            var str = this.value;

            if (str != "") {
                var arr = new Array();
                arr = str.split(sep);

                if (arr.length != 2) {
                    window.alert(title + "Àº(´Â) [" + sep + "]·Î ±¸ºÐÇØ¾ß ÇÕ´Ï´Ù.");
                    this.value = str;
                    return;
                }

                if (!ValidSize(arr[0], 6, 6)) {
                    window.alert(title + "ÀÇ ¾ÕÀÚ¸®´Â " + 6 + "ÀÚ·Î ÀÔ·ÂÇÏ¼¼¿ä.");
                    this.value = str;
                    return;
                }

                if (!ValidSize(arr[1], 7, 7)) {
                    window.alert(title + "ÀÇ µÞÀÚ¸®´Â " + 7 + "ÀÚ·Î ÀÔ·ÂÇÏ¼¼¿ä.");
                    this.value = str;
                    return;
                }

                var year = (parseInt(arr[0].substring(0, 2)) < 5)?"20":"19";

                if (!ValidDate(year + arr[0].substring(0, 2), arr[0].substring(2, 4), arr[0].substring(4, 6))) {
                    window.alert(title + "ÀÇ »ý³â¿ùÀÏÀÌ Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù.");
                    this.value = str;
                    return;
                }

                var hap = 0;
                for (var i = 0; i < 6; i++) {
                    var temp = arr[0].charAt(i) *(i+2);
                    hap += temp;
                }

                if (!(arr[0] == "000000" && arr[1] == "0000000")) {
                    var n1 = arr[1].charAt(0);
                    var n2 = arr[1].charAt(1);
                    var n3 = arr[1].charAt(2);
                    var n4 = arr[1].charAt(3);
                    var n5 = arr[1].charAt(4);
                    var n6 = arr[1].charAt(5);
                    var n7 = arr[1].charAt(6);

                    hap += n1*8+n2*9+n3*2+n4*3+n5*4+n6*5;
                    hap %= 11;
                    hap = 11 - hap;
                    hap %= 10;

                    if (hap != n7) {
                        window.alert(title + "ÀÌ(°¡) À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. È®ÀÎ ÈÄ ´Ù½Ã ÀÔ·ÂÇÏ¼¼¿ä.");
                        this.value = str;
                        return;
                    }
                }

                this.value = str;
            }

            break;


		case TYPE_NONE		:
            break;
	}


    if (this.getAttribute("blur")) {
        var fn  = eval(this.getAttribute("blur"));
    }
}
*/

function DOMEventListener() {
    var oTags = document.getElementsByTagName("input");

    for (var i = 0, j = 0; i < oTags.length; i++) {
        //window.alert(oTags[i].name);
        switch (oTags[i].type) {
            case "password"	:
            case "text"		:
                if (oTags[i].getAttribute("won") != null) {
                    oTags[i].elementType = TYPE_WON;
                    oTags[i].style.textAlign = "right";
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("year") != null) {
                    oTags[i].elementType = TYPE_YEAR;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("yearmonth") != null) {
                    oTags[i].elementType = TYPE_YEARMONTH;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("date") != null) {
                    oTags[i].elementType = TYPE_DATE;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("time") != null) {
                    oTags[i].elementType = TYPE_TIME;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("jumin") != null) {
                    oTags[i].elementType = TYPE_JUMIN;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("bizno") != null) {
                    oTags[i].elementType = TYPE_BIZNO;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("orgno") != null) {
                    oTags[i].elementType = TYPE_ORGNO;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("zipcode") != null) {
                    oTags[i].elementType = TYPE_ZIPCODE;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("kor") != null) {
                    oTags[i].elementType = TYPE_KOR;
                    oTags[i].style.imeMode = "active";
                } else if (oTags[i].getAttribute("eng") != null) {
                    oTags[i].elementType = TYPE_ENG;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("num") != null) {
                    oTags[i].elementType = TYPE_NUM;
                    oTags[i].style.textAlign = "right";
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("numcode") != null) {
                    oTags[i].elementType = TYPE_NUMCODE;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("engcode") != null) {
                    oTags[i].elementType = TYPE_ENGCODE;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("koreng") != null) {
                    oTags[i].elementType = TYPE_KORENG;
                    oTags[i].style.imeMode = "active";
                } else if (oTags[i].getAttribute("kornum") != null) {
                    oTags[i].elementType = TYPE_KORNUM;
                    oTags[i].style.imeMode = "active";
                } else if (oTags[i].getAttribute("engnum") != null) {
                    oTags[i].elementType = TYPE_ENGNUM;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("email") != null) {
                    oTags[i].elementType = TYPE_EMAIL;
                    oTags[i].style.imeMode = "disabled";
                } else if (oTags[i].getAttribute("url") != null) {
                    oTags[i].elementType = TYPE_URL;
                    oTags[i].style.imeMode = "inactive";
                } else if (oTags[i].getAttribute("tel") != null) {
                    oTags[i].elementType = TYPE_TEL;
                    oTags[i].style.imeMode = "disabled";
                }
                else {
                    oTags[i].elementType = TYPE_NONE;
                    oTags[i].style.imeMode = "active";
                }

                oTags[i].onkeypress = DOM_onKeyPress;
                oTags[i].onkeyup = DOM_onKeyUp;
                oTags[i].onkeydown = DOM_onKeyDown;
                oTags[i].format = DOM_format;

                oTags[i].onfocus = DOM_onFocus;
                /*
                oTags[i].onblur = DOM_onBlur;
                */

                break;

            case "button"   :
                if (oTags[i].id) {
                    gsButtonNames[gsButtonNames.length] = oTags[i].id;
                } else if (oTags[i].name) {
                    gsButtonNames[gsButtonNames.length] = oTags[i].name;
                }

                break;

            default:
                break;
        }
    }
}



