/*******************************************************************************
   1. ÆÄ    ÀÏ    ¸í : common.js
   2. ¾÷¹« ½Ã½ºÅÛ ¸í : °øÅë
   3. ¿ø  µµ  ¿ì  ¸í : ½Ã½ºÅÛ °øÅë ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼ö
   4. ¼³          ¸í : ½Ã½ºÅÛ °øÅë ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼öÀÌ´Ù.
   5. ÀÛ    ¼º    ÀÚ : °­¼º¿í(2009/02/18)
--------------------------------------------------------------------------------
   6. ÀÌ          ·Â :
      °­¼º¿í(2009/02/18) - ÃÖÃÊ ÀÛ¼º
*******************************************************************************/

/**
 * A-01. ÀÔ·Â °´Ã¼¿¡ ¼ÓÇÑ ¸ðµç ¼Ó¼º°ú ÇÔ¼ö¸¦ º¸¿©ÁØ´Ù.
 *
 * @param obj   °´Ã¼ ID
 * @return
 */
function showProps(obj) {
	var element = this.getObject(obj);
	var msg = "°´Ã¼ÀÇ ¼Ó¼º\n\n";
	var i = 0;

	if (obj) {
		for (prop in obj) {
			i++;
			msg += i + ". " + prop+'=' + obj[prop] + "\n";

			if (i % 10 ==0) {
				alert (msg);
				msg = "";
			}
		}

		if (msg) {
			alert (msg);
        }
	}
}

function getObject(obj) {
	if (!isObject(obj)) {
		return false;
    }

	if (typeof window.document.all[obj] == "object") {
		return window.document.all[obj];
    } else {
		return null;
    }
}

/**
 * A-02. ÀÔ·Â °´Ã¼°¡ ½ÇÁ¦·Î ÆäÀÌÁö»ó¿¡ Á¸ÀçÇÏ´Â HTML°´Ã¼ÀÎÁö¸¦ °Ë»çÇÑ´Ù.
 *
 * @param obj   °´Ã¼
 * @return
 */
function isObject(obj) {
	if (typeof obj != "object") {
		window.alert("°´Ã¼°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. °´Ã¼ÀÇ Ã¶ÀÚ¸¦ È®ÀÎÇÏ¼¼¿ä.");

		return false;
	}

	return true;
}

/**
 * A-03. ÀÔ·Â °´Ã¼°¡ Array ÇüÅÂÀÎÁö °Ë»çÇÑ´Ù.
 *
 * @param obj   °´Ã¼
 * @return
 */
function isArray(obj) {
	if ((typeof obj != "object") || (typeof obj[0] != "object")) {
		return false;
	}

	return true;
}

/**
 * B-01. ÀÔ·Â ¹®ÀÚ¿­ÀÇ ¾ÕµÚ °ø¹é(white space)À» Á¦°ÅÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function trim(str) {
	var n = str.length;

	var i;

	for (i = 0; i < n; i++) {
		if (str.charAt(i) != " ") {
			break;
		}
	}

	var j;

    for (j = n - 1; j >= 0; j--) {
		if (str.charAt(j) != " ") {
			break;
		}
	}

	if (i > j) {
		return "";
	} else {
		return str.substring(i, j + 1);
	}
}

/**
 * B-02. ÀÔ·Â ¹®ÀÚ¿­ÀÇ ¾Õ¿¡¼­ °ø¹é(white space)À» Á¦°ÅÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function ltrim(str) {
	var n = str.length;

	var i;

	for (i = 0; i < n; i++) {
		if (str.charAt(i) != " ") {
			break;
		}
	}

    return str.substring(i);
}

/**
 * B-03. ÀÔ·Â ¹®ÀÚ¿­ÀÇ µÚ¿¡¼­ °ø¹é(white space)À» Á¦°ÅÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function rtrim(str) {
	var n = str.length;

	var j;

	for (j = n - 1; j >= 0; j--) {
		if (str.charAt(j) != " ") {
			break;
		}
	}

	return str.substring(0, j + 1);
}

/**
 * B-04. ÀÔ·Â °´Ã¼ÀÇ ¹ÙÀÌÆ®´ÜÀ§ÀÇ ±æÀÌ¸¦ ±¸ÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function strlen(str) {
	var j = 0;

	for (var i = 0; i < str.length; i++) {
		if (escape(str.charAt(i)).length == 6) {
			j++;
        }

		j++;
	}

	return j;
}

/**
 * B-05. ¹®ÀÚ¿­ÀÇ °ø¹é(white space)À» Á¦°ÅÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function removeSpace(str) {
	return removeString(" ");
}

/**
 * B-06. ¹®ÀÚ¿­À» µÚ¿¡¼­ºÎÅÍ 3ÀÚ¸®¾¿ ,(comma)·Î  ²÷´Â´Ù.
 *
 * @param str	¹®ÀÚ¿­
 * @return
 */
function insertComma(str) {
	str = removeComma(str);

	var strIdx = str.indexOf(".");

	if (strIdx == -1) {
		return insertCharacterByBack(str, ",", 3);
	} else {
		var str1 = str.substring(0, strIdx);
		var str2 = str.substring(strIdx);

		return insertCharacterByBack(str1, ",", 3) + str2;
	}
}

/**
 * B-07. ','(Comma)¸¦ »èÁ¦ÇÑ´Ù.
 *
 * @param str   ¹®ÀÚ¿­
 * @return
 */
function removeComma(str) {
	return removeString(str, ",");
}

/**
 * B-08. ¹®ÀÚ¿­À» ±³Ã¼ÇÑ´Ù.
 *
 * @param str	¹®ÀÚ¿­
 * @param src   Ã£À» ¹®ÀÚ¿­
 * @param tar   ¹Ù²Ü ¹®ÀÚ¿­
 * @return
 */
function replace(str,  src,  tar) {
    if (str == null) {
        return "";
    }

    if (src==null || src=="") {
        return str;
    }

    var i = 0;
    var j = 0;

    var outVal = "";

    while (j > -1) {
        j = str.indexOf(src, i);

        if (j > -1) {
            outVal += str.substring(i, j);
            outVal += tar;
            i = j + src.length;
        }
    }

    outVal += str.substring(i, str.length);

    return outVal;
}

/**
 * C-01. ÁöÁ¤ÇÑ ÀÚ¸®¼öÀÇ ³­¼ö¸¦ ¹ß»ý½ÃÅ²´Ù.
 *
 * @param size	³­¼ö Å©±â
 * @return
 */
function getRandom(size) {
	var random;

    while ((random = Math.random() * Math.pow(10, size) - 1) < Math.pow(10, size - 1)) {
		;
    }

	return parseInt(random);
}

/**
 * C-02. ÀÔ·Â ¹®ÀÚ¿­ÀÇ ÁöÁ¤¹®ÀÚ¸¦ Á¦°ÅÇÑ´Ù.
 *
 * @param str	¹®ÀÚ¿­
 * @return
 */
function removeString(str, src) {
	var outVal = "";

	for (var i = 0; i < str.length; i++) {
		if (str.charAt(i) == src) {
			continue;
		} else {
			outVal += str.charAt(i);
		}
	}

	return outVal;
}

/**
 * C-03. ¼Ò¼öÁ¡À» Æ÷ÇÔÇÑ ¼ýÀÚ¸¦ ¼Ò¼öÁ¡À» Á¦°ÅÇÑ Á¤¼ö·Î º¯È¯ÇÑ´Ù.
 *
 * @param str	¹®ÀÚ¿­
 * @return
 */
function toInteger(str) {
	if (str.indexOf(".") == -1) {
		return str;
    } else {
		return str.substring(0,  str.indexOf("."));
    }
}

/**
 * C-04. ¼Ò¼öÁ¡À» Æ÷ÇÔÇÏÁö ¾ÊÀº ¼ýÀÚ¸¦ ¼Ò¼öÁ¡À» Æ÷ÇÔÇÑ ½Ç¼ö·Î º¯È¯ÇÑ´Ù.
 *
 * @param str	¹®ÀÚ¿­
 * @return
 */
function toReal(str) {
	var strIdx = str.indexOf(".")

	if (strIdx == -1) {
		return str + ".0";
    } else if (strIdx == str.length - 1) {
		return str + "0";
    } else {
		return str;
    }
}

/**
 * D-01. ÀÚ¹Ù½ºÅ©¸³Æ® Date °´Ã¼¸¦ Time ¹®ÀÚ¿­·Î º¯È¯ÇÑ´Ù.
 *
 * @param date	Date °´Ã¼
 * @return
 */
function toTimeString(date) {
  var year  = date.getFullYear();
  var month = date.getMonth() + 1; // 1¿ù=0, 12¿ù=11
  var day   = date.getDate();
  var hour  = date.getHours();
  var min   = date.getMinutes();
  var sec   = date.getSeconds();

  if (("" + month).length == 1) {
      month = "0" + month;
  }

  if (("" + day).length == 1) {
      day = "0" + day;
  }

  if (("" + hour).length == 1) {
      hour = "0" + hour;
  }

  if (("" + min).length == 1) {
      min = "0" + min;
  }

  if (("" + sec).length == 1) {
      sec = "0" + sec;
  }

  return "" + year + month + day + hour + min + sec;
}

/**
 * D-02. ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­À» ÀÚ¹Ù½ºÅ©¸³Æ® Date °´Ã¼·Î º¯È¯ÇÑ´Ù.
 *
 * @param time  ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @return
 */
function toTimeObject(str) {
  var year  = str.substr(0, 4);
  var month = str.substr(4, 2) - 1; // 1¿ù = 0, ..., 12¿ù = 11
  var day   = str.substr(6, 2);
  var hour  = str.substr(8, 2);
  var min   = str.substr(10, 2);

  return new Date(year, month, day, hour, min);
}

/**
 * D-03. ÇöÀç ½Ã°¢À» Time Çü½ÄÀ¸·Î ¸®ÅÏÇÑ´Ù.
 *
 * @return
 */
function getCurrentTime() {
  return toTimeString(new Date());
}

/**
 * D-04. ÇöÀç Ò´À» YYYYÇü½ÄÀ¸·Î ¸®ÅÏ
 *
 * @return
 */
function getYear() {
  return getCurrentTime().substr(0, 4);
}

/**
 * D-05. ÇöÀç êÅÀ» MMÇü½ÄÀ¸·Î ¸®ÅÏ
 *
 * @return
 */
function getMonth() {
  return getCurrentTime().substr(4, 2);
}

/**
 * D-06. ÇöÀç ìíÀ» DDÇü½ÄÀ¸·Î ¸®ÅÏ
 *
 * @return
 */
function getDay() {
  return getCurrentTime().substr(6, 2);
}

/**
 * D-07. ¿À´Ã³¯Â¥¿¡ ÇØ´çÇÏ´Â ¿äÀÏÀ» ±¸ÇÑ´Ù.
 *
 * @return
 */
function getDayOfWeek() {
  var now = new Date();

  var day = now.getDay();
  var week = new Array("ÀÏ", "¿ù", "È­", "¼ö", "¸ñ", "±Ý", "Åä");

  return week[day];
}

/**
 * D-08. ÁÖ¾îÁø Time °ú y³â m¿ù dÀÏ h½Ã Â÷ÀÌ³ª´Â TimeÀ» ±¸ÇÑ´Ù.
 *
 * @param time  Time °´Ã¼
 * @param y     year³â Â÷ÀÌ
 * @param m		month¿ù Â÷ÀÌ
 * @param d		dayÀÏ Â÷ÀÌ
 * @param h		hour½Ã Â÷ÀÌ
 * @return
 */
function shiftTime(time, year, month, day, hour) {
  var date = toTimeObject(time);

  date.setFullYear(date.getFullYear() + year);
  date.setMonth(date.getMonth() + month);
  date.setDate(date.getDate() + day);
  date.setHours(date.getHours() + day);

  return toTimeString(date);
}

/**
 * D-9. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÀü¿¬À» ±¸ÇÑ´Ù.
 *
 * @param year  ¿¬
 * @return
 */
function getYearBefore(year) {
	return shiftTime(getCurrentTime(), -year, 0, 0, 0);
}

/**
 * D-10. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÀü¿ùÀ» ±¸ÇÑ´Ù.
 *
 * @param month ¿ù
 * @return
 */
function getMonthBefore(month) {
	return shiftTime(getCurrentTime(), 0, -month, 0, 0);
}

/**
 * D-11. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÀüÀÏ¸¦ ±¸ÇÑ´Ù.
 *
 * @param day   ÀÏ
 * @return
 */
function getDayBefore(day) {
	return shiftTime(getCurrentTime(), 0, 0, -day, 0);
}

/**
 * D-12. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÀü½Ã¸¦ ±¸ÇÑ´Ù.
 *
 * @param hour  ½Ã
 * @return
 */
function getHourBefore(hour) {
	return shiftTime(getCurrentTime(), 0, 0, 0, -hour);
}

/**
 * D-13. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÈÄ¿¬À» ±¸ÇÑ´Ù.
 *
 * @param year  ¿¬
 * @return
 */
function getYearAfter(year) {
	return shiftTime(getCurrentTime(), year, 0, 0, 0);
}

/**
 * D-14. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÈÄ¿ùÀ» ±¸ÇÑ´Ù.
 *
 * @param month ¿ù
 * @return
 */
function getMonthAfter(month) {
	return shiftTime(getCurrentTime(), 0, month, 0, 0);
}

/**
 * D-15. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÈÄÀÏ¸¦ ±¸ÇÑ´Ù.
 *
 * @param day   ÀÏ
 * @return
 */
function getDayAfter(day) {
	return shiftTime(getCurrentTime(), 0, 0, day, 0);
}

/**
 * D-16. ÇöÀç·ÎºÎÅÍ ÁöÁ¤ÇÑ ¸¸Å­ÀÇ ÀÌÈÄ½Ã¸¦ ±¸ÇÑ´Ù.
 *
 * @param hour  ½Ã°£
 * @return
 */
function getHourAfter(hour) {
	return shiftTime(getCurrentTime(), 0, 0, 0, hour);
}

/**
 * D-17. µÎ ½Ã°£ÀÌ ¸î °³¿ù Â÷ÀÌÀÎÁö ±¸ÇÑ´Ù.
 *
 * @param time1 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @param time2 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @return
 */
function getMonthInterval(time1, time2) {
  var date1 = toTimeObject(time1);
  var date2 = toTimeObject(time2);

  var year = date2.getFullYear() - date1.getFullYear();
  var month = date2.getMonth() - date1.getMonth();
  var day = date2.getDate() - date1.getDate();

  return year * 12 + month + ((day >= 0)?0:-1);
}

/**
 * D-18. µÎ ½Ã°£ÀÌ ¸îÀÏ Â÷ÀÌÀÎÁö ±¸ÇÑ´Ù.
 *
 * @param time1 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @param time2 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @return
 */
function getDayInterval(time1, time2) {
  var date1 = toTimeObject(time1);
  var date2 = toTimeObject(time2);
  var day   = 1000 * 3600 * 24;

  return parseInt((date2 - date1) / day, 10);
}

/**
 * D-19. µÎ ½Ã°£ÀÌ ¸î½Ã°£ Â÷ÀÌÀÎÁö ±¸ÇÑ´Ù.
 *
 * @param time1 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @param time2 ¿¬¿ùÀÏ½ÃºÐÃÊ ¹®ÀÚ¿­
 * @return
 */
function getHourInterval(time1, time2) {
  var date1 = toTimeObject(time1);
  var date2 = toTimeObject(time2);
  var hour  = 1000 * 3600;

  return parseInt((date2 - date1) / hour, 10);
}

/**
* D-20. À±³â¿©ºÎ¸¦ ³ªÅ¸³½´Ù.
**/
function isLeapYear(year) {
    if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))) {
        return true;
    } else {
        return false;
    }
}

/**
 * D-21. YYYY-MM-DD Çü½ÄÀÌ ¸Â´ÂÁö °Ë»çÇÑ´Ù.
 *
 * @param
 * @return
 */
function isValidDate(str) {
	if (str.length != 10) {
        return false;
    }

    var src = replace(str, '-', '');
    var year = src.substring(0, 4);
    var month = src.substring(4, 6);
    var day = src.substring(6, 8);

	if (!ValidDate(year, month, day)) {
		return false;
	}

	return true;
}

/**
 * X-01. ÄíÅ°°ªÀ» ÁöÁ¤ÇÑ´Ù.
 *
 * @param name      ÄíÅ°¸í
 * @param value     ÄíÅ°°ª
 * @param expireday ¸¸·áÀÏ
 * @return
 */
function setCookie(name, value, expireday) {
    var today = new Date();
    var nextDate = today.getDate() + (expireday  - 1)
    today.setDate(nextDate);
    var newDate = new Date(today.getYear(), today.getMonth(), today.getDate(), 23, 59, 59);
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + newDate.toGMTString() + ";";
}

/**
 * X-02. ÄíÅ°°ªÀ» °¡Á®¿Â´Ù.
 *
 * @param name  ÄíÅ°¸í
 * @return
 */
function getCookie(name) {
	var nameOfCookie = name + "=";
	var x = 0;

	while (x <= document.cookie.length) {
		var y = (x+nameOfCookie.length);

		if (document.cookie.substring(x, y) == nameOfCookie) {
			if ((endOfCookie=document.cookie.indexOf(";", y)) == -1) {
				endOfCookie = document.cookie.length;
            }

			return unescape(document.cookie.substring(y, endOfCookie));
		}

		x = document.cookie.indexOf(" ", x) + 1;

        if (x == 0) {
			break;
        }
	}

	return "";
}

/**
 * X-03. ÁöÁ¤ÇÑ ÄíÅ°ÀÌ¸§ÀÇ ÄíÅ°¸¦ »èÁ¦ÇÑ´Ù.
 *
 * @param name  ÄíÅ° ÀÌ¸§
 * @return
 */
function removeCookie(name) {
	var expireDay = new Date();
	expireDay.setTime(expireDay.getTime() - 1);
	var value = getCookie(name);

	document.cookie = name + "=" + value + "; expires=" + expireDay.toGMTString();
}

/**
 * Y-01. »õÃ¢À» ÁöÁ¤ÇÑ ¿É¼ÇÀ¸·Î ¶ç¿î´Ù.
 *
 * @param url	    Ã¢ÀÇ URL
 * @param name      Ã¢ÀÇ ÀÌ¸§
 * @param width		Ã¢ÀÇ ³ÐÀÌ
 * @param height	Ã¢ÀÇ ³ôÀÌ
 * @param num       Ã¢ÀÇ ¹øÈ£(0 ~ Ã¢ÀÇ°¹¼ö - 1)
 * @return			Ã¢ÀÇ °´Ã¼
 */
function openWindow(url, name, width, height, num) {
    var X = 0;
    var Y = 0;


    if (typeof num == "undefined") {
        X = (window.screen.width - width) / 2;
        Y = (window.screen.height - height) / 2;
    } else {
        X = num * 10;
        Y = 20 + num * 10;
    }

    var win = window.open(url, name, "height=" + height + ",width=" + width + ", left=" + X + ", top=" + Y + ", screenX=" + X + ", screenY=" + Y + ", resizable=yes, scrollbars=no, status=no");
	win.focus();

	return win;
}

/**
 * Y-02. ¸ð´ÞÃ¢À» ÁöÁ¤ÇÑ ¿É¼ÇÀ¸·Î ¶ç¿î´Ù.
 *
 * @param url		Ã¢ÀÇ URL
 * @param url		Ã¢ÀÇ ÀÌ¸§
 * @param width		Ã¢ÀÇ ³ÐÀÌ
 * @param height	Ã¢ÀÇ ³ôÀÌ
 * @param scroll	½ºÅ©·Ñ ¿©ºÎ(yes/no)
 * @param resize	Å©±âÁ¶Àý ¿©ºÎ(yes/no)
 * @return			Ã¢ÀÇ °´Ã¼
 */
function openModalWindow(url, arguments, width, height) {
    var X = 0;
    var Y = 0;

    X = (window.screen.width - parseInt(width, 10) + 6) / 2;
    Y = (window.screen.height - parseInt(height, 10)) /2;

    return window.showModalDialog(url, arguments, "dialogWidth:" + (parseInt(width, 10) + 6) + "px; dialogHeight:" + height + "px; dialogLeft:" + X + "px; dialogTop:" + Y + "px; center:yes; help:no; resizable:yes; scroll:no; status:no");
}

/**
 * Z-01. ÀÌº¥Æ®¸¦ ÃÊ±âÈ­ ÇÑ´Ù.
 */
function enableEnterKey() {
	function onkeypress(e) {
        if (window.event.srcElement.type != "textarea" && window.event.srcElement.type != "button") { // ÅØ½ºÆ® ÀÔ·Â¹Ú½º ÀÌ¿ÜÀÇ ÀÔ·Â¿¡ ´ëÇÏ¿©
            if (window.event.keyCode == 13) { // 13 : Enter
                if (typeof __submit == "function") {
                    __submit();
                }
            }

        }
	}

    document.onkeypress = onkeypress;
}

/**
 * Z-02. ¿À¸¥ÂÊ ¹öÆ° »ç¿ëÇÏÁö ¸øÇÏµµ·Ï ÇÑ´Ù.
 */
function disableRightButton() {
    if (window.Event) {
        document.captureEvents(Event.MOUSEUP);
    }

    function noContextMenu() {
        event.cancelBubble = true;
        event.returnValue = false;

        return false;
    }

    function noRightButton(e) {
        if (window.Event) {
            if (e.which == 2 || e.which == 3) {
                return false;
            }
        } else {
            if (event.button == 2 || event.button == 3) {
                event.cancelBubble = true
                event.returnValue = false;

                return false;
            }
        }
    }

	document.oncontextmenu = noContextMenu;
	document.onmousedown =   noRightButton;
}

/**
 * Z-03. ÀÌº¥Æ®¸¦ ÃÊ±âÈ­ ÇÑ´Ù.
 */
function disableBackSpace() {
	function onKeyDown(e) {
        if (window.event.srcElement.readOnly
                || (window.event.srcElement.type != "text" && window.event.srcElement.type != "textarea" && window.event.srcElement.type != "password")) { // ÅØ½ºÆ® ÀÔ·Â¹Ú½º ÀÌ¿ÜÀÇ ÀÔ·Â¿¡ ´ëÇÏ¿©
            if (window.event.keyCode == 8) { // 8 : BackSpace
                event.returnValue = false;
            }
        }
	}

    document.onkeydown = onKeyDown;
}


/**
 * Z-04. ¸®½º³Ê¸¦ µî·ÏÇÑ´Ù.
 */
function addListener(sDOMElement, sEvent, oEventHandler) {
    Event.observe(sDOMElement, sEvent, oEventHandler);
}



