// ¿¡·¯¸Þ½ÃÁö Æ÷¸ä Á¤ÀÇ ///
var NO_BLANK = "{name+À»¸¦} ÀÔ·ÂÇØÁÖ¼¼¿ä";
var NOT_VALID = "{name+ÀÌ°¡} ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù";
// var TOO_LONG = "{name}ÀÇ ±æÀÌ°¡ ÃÊ°úµÇ¾ú½À´Ï´Ù (ÃÖ´ë {maxbyte}¹ÙÀÌÆ®)";
var STRING_FR  = 6   
var STRING_TO  = 10  
var old_menu = '';
var old_cell = '';


/// ½ºÆ®¸µ °´Ã¼¿¡ ¸Þ¼Òµå Ãß°¡ ///

String.prototype.trim = function(str) { 
	str = this != window ? this : str; 
	return str.replace(/^\s+/g,'').replace(/\s+$/g,''); 
}

String.prototype.hasFinalConsonant = function(str) {
	str = this != window ? this : str; 
	var strTemp = str.substr(str.length-1);
	return ((strTemp.charCodeAt(0)-16)%28!=0);
}

String.prototype.bytes = function(str) {
	var len=0;
	str = this != window ? this : str;
	for(j=0; j<str.length; j++) {
		var chr = str.charAt(j);
		len += (chr.charCodeAt() > 128) ? 2 : 1
	}
	return len;
}

/// ½ÇÁúÀû ÆûÃ¼Å© ÇÔ¼ö ///


function validate(form) {
	for (i = 0; i < form.elements.length; i++ ) {
		var el = form.elements[i];
		if (el.tagName == "FIELDSET") continue;
		el.value = el.value.trim();

		var minbyte = el.getAttribute("MINBYTE");
		var maxbyte = el.getAttribute("MAXBYTE");
		var option = el.getAttribute("OPTION");
		var match = el.getAttribute("MATCH");
		var glue = el.getAttribute('GLUE');

		if (el.getAttribute("REQUIRED") != null) {	//ÇÊ¼ö »çÇ×¿¡ ´ëÇÑ Ã³¸®		
			if (el.value == null || el.value == "") {
				return doError(el,NO_BLANK);
			}
		}

		if (minbyte != null) { //¹®ÀÚ¿­ ±æÀÌ Ã¼Å©
			if (el.value.bytes() < parseInt(minbyte)) {
				return doError(el,"{name+Àº´Â} ÃÖ¼Ò "+minbyte+"¹ÙÀÌÆ® ÀÌ»ó ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù.");
			}
		}

		if (maxbyte != null && el.value != "") { //¹®ÀÚ¿­ ±æÀÌ Ã¼Å©
			var len = 0;
			if (el.value.bytes() > parseInt(maxbyte)) {
				return doError(el,"{name}ÀÇ ±æÀÌ°¡ ÃÊ°úµÇ¾ú½À´Ï´Ù (ÃÖ´ë "+maxbyte+"¹ÙÀÌÆ®)");
			}
		}

		if (match && (el.value != form.elements[match].value)) return doError(el,"{name+ÀÌ°¡} ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù");  //µÎ°³ÀÇ ¹®ÀÚ¿­ ÀÏÄ¡ Ã¼Å©

		if (option != null) {   /// Æ¯¼ö ÆÐÅÏ °Ë»ç ÇÔ¼ö Æ÷¿öµù ///
			if (el.value != "") {
				if (el.getAttribute('SPAN') != null) {
					var _value = new Array();
					for (span=0; span<el.getAttribute('SPAN');span++ ) {
						_value[span] = form.elements[i+span].value;
					}
					var value = _value.join(glue == null ? '' : glue);
					if (!funcs[option](el,value)) return false;
				} else {
					if (!funcs[option](el)) return false;
				}
			}
		}
	}
	return true;
}

function josa(str,tail) {
	return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
}

function doError(el,type,action) { //¿¡·¯ Ã³¸® ÇÔ¼ö
	var pattern = /{([a-zA-Z0-9_]+)\+?([°¡-Èþ]{2})?}/;
	var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
	pattern.exec(type);
	var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
	alert(type.replace(pattern,eval(RegExp.$1) + tail));
	if (action == "sel") {
		el.select();
	} else if (action == "del")	{
		el.value = "";
	}
	el.focus();
	return false;
}	

/// Æ¯¼ö ÆÐÅÏ °Ë»ç ÇÔ¼ö ¸ÅÇÎ ///
var funcs = new Array();
funcs['email'] = isValidEmail;
funcs['phone'] = isValidPhone;
funcs['userid'] = isValidUserid;
funcs['pass'] = isValidPass;
funcs['hangul'] = hasHangul;
funcs['number'] = isNumeric;
funcs['engonly'] = alphaOnly;
funcs['jumin'] = isValidJumin;
funcs['bizno'] = isValidBizNo;
funcs['domain'] = isValidDomain;


/// ÆÐÅÏ °Ë»ç ÇÔ¼öµé ///
function isValidEmail(el,value) {
	var value = value ? value : el.value;
	var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
	return (pattern.test(value)) ? true : doError(el,NOT_VALID);
}

function isValidUserid(el) {
	var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_]{3,7}$/;
	return (pattern.test(el.value)) ? true : doError(el,"{name+Àº´Â} 4ÀÚÀÌ»ó 8ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÏ°í,\n\n¿µ¹® ¶Ç´Â ¿µ¹®/¼ýÀÚ Á¶ÇÕÀÌ¾î¾ß ÇÕ´Ï´Ù");
}
function isValidPass(el) {
	var pattern = /^[a-zA-Z0-9]{1}[a-zA-Z0-9]{3,7}$/;
	return (pattern.test(el.value)) ? true : doError(el,"{name+Àº´Â} 4ÀÚÀÌ»ó 8ÀÚ ÀÌÇÏÀÌ¾î¾ß ÇÏ°í,\n\n¿µ¹®ÀÌ³ª ¼ýÀÚ ¿µ¹®/¼ýÀÚ Á¶ÇÕÀÌ¾î¾ß ÇÕ´Ï´Ù");
}

function hasHangul(el) {
	var pattern = /^[°¡-Èþ]+$/;
	return (pattern.test(el.value)) ? true : doError(el,"{name+Àº´Â} ¹Ýµå½Ã ÇÑ±Û·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù");
}

function alphaOnly(el) {
	var pattern = /^[a-zA-Z/ ]+$/;
	return (pattern.test(el.value)) ? true : doError(el,"{name+Àº´Â} ¹Ýµå½Ã ¿µ¹®À¸·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù");
}

function isNumeric(el) {
	var pattern = /^[0-9]+$/;
	return (pattern.test(el.value)) ? true : doError(el,"{name+Àº´Â} ¹Ýµå½Ã ¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù");
}

function isValidJumin(el,value) { //ÁÖ¹Î¹øÈ£ Ã¼Å©
    var pattern = /^([0-9]{6})-?([0-9]{7})$/; 
	var num = value ? value : el.value;
    if (!pattern.test(num)) return doError(el,NOT_VALID); 
    num = RegExp.$1 + RegExp.$2;

	var sum = 0;
	var last = num.charCodeAt(12) - 0x30;
	var bases = "234567892345";
	for (var i=0; i<12; i++) {
		if (isNaN(num.substring(i,i+1))) return doError(el,NOT_VALID);
		sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
	}
	var mod = sum % 11;
	return ((11 - mod) % 10 == last) ? true : doError(el,NOT_VALID);
}

function isValidBizNo(el, value) { //»ç¾÷¹øÈ£ Ã¼Å©
    var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/; 
	var num = value ? value : el.value;
    if (!pattern.test(num)) return doError(el,NOT_VALID); 
    num = RegExp.$1 + RegExp.$2 + RegExp.$3;
    var cVal = 0; 
    for (var i=0; i<8; i++) { 
        var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp  == 1 ) ? 3 : 7); 
        cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10; 
    } 
    var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0'; 
    cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2)); 
    return (parseInt(num.substring(9,10)) == 10-(cVal % 10)%10) ? true : doError(el,NOT_VALID); 
}

function isValidPhone(el,value) {//ÀüÈ­¹øÈ£	
	var pattern = /^[0-9]+$/;
	var num = value ? value : el.value;
	if (num == null || num == "") {
		return doError(el,NO_BLANK);
	}
	else {

	return (pattern.test(num)) ? true : doError(el,"{name+Àº´Â} ¹Ýµå½Ã ¼ýÀÚ·Î¸¸ ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù");
	}
}


function isValidDomain(el) { //µµ¸ÞÀÎ Ã¼Å©
	var pattern = /^.+(\.[a-zA-Z]{2,3})$/;
	return (pattern.test(el.value)) ? true : doError(el,NOT_VALID);
}

function isValidDomain(el,value) { //µµ¸ÞÀÎ Ã¼Å©
	var value = value ? value : el.value;
	var pattern = new RegExp("^(http://)?(www\.)?([°¡-Èþa-zA-Z0-9-]+\.[a-zA-Z]{2,3}$)","i");
	if (pattern.test(value)) {
		el.value = RegExp.$3;
		return true;
	} else {
		return doError(el,NOT_VALID);
	}
}

function onlyNumber(){             /* ¼ýÀÚ Ã¼Å© ÇÔ¼ö */

	var e1 = event.srcElement;
	var num ="0123456789";
	event.returnValue = true;

	for (var i=0;i< e1.value.length;i++)
	{
		if(-1 == num.indexOf(e1.value.charAt(i)))
		event.returnValue = false;
	}
	if (!event.returnValue)
	e1.value="";
}

/** 
 * create combobox list
 *
 * @param	oCombo			combo object
 * @param	optionValue		combo data string
 * @since	1.0
 */
 var COMBO_COL_DELIMITER	=	"^";
 var COMBO_SEPARATOR			=	":";

function createCombo (oCombo, optionValue) {
	if (optionValue == null || optionValue == "") {
		optionValue = ":¼±ÅÃ";
	}
	
	var optionElem, aCol;
	var aRow = optionValue.split(COMBO_COL_DELIMITER);
	
	for (var i = 0; i < aRow.length; i++) {
		aCol = aRow[i].split(COMBO_SEPARATOR);
		
		optionElem = document.createElement("OPTION");
		optionElem.value = aCol[0];
		optionElem.text	= aCol[1];

		eval(oCombo).add(optionElem);
	}

	//(selected)
	if (arguments[2] != null)	oCombo.value = arguments[2];
}

/** 
 * add combobox list
 *
 * @param	oCombo		combo object
 * @param	sValue		combo data string
 * @param	sText		combo text string
 * @since	1.0
 */
function addCombo (oCombo, sValue, sText) {
	if (optionValue == null || optionValue == "") return;
		
	var optionElem = document.createElement("OPTION");
	optionElem.value	= sValue;
	optionElem.text		= sText;
	
	eval(oCombo).add(optionElem);
}

/** 
 * delete combobox list
 *
 * @param	oCombo			combo object
 * @since	1.0
 */
function clearCombo (oCombo) {
	var cntOption = eval(oCombo).length;

	for (var i=0; i<cntOption; i++)	{
		eval(oCombo).options.remove(0);
	}
}

/** 
 * replace combobox list
 *
 * @param	oCombo			combo object
 * @param	optionValue		combo data string
 * @since	1.0
 */
function replaceCombo (oCombo, optionValue) {
	if (optionValue == null || optionValue == "") return;
	
	var iLength;
	
	var optionElem, aCol;
	var aRow = optionValue.split(COMBO_COL_DELIMITER);
	
	if (oCombo.length > aRow.length)
		iLength = aRow.length;
	else
		iLength = oCombo.length;
	
	for (var i=0; i<iLength; i++) {
		aCol = aRow[i].split(COMBO_SEPARATOR);
		
		eval(oCombo).options(i).value	= aCol[0];
		eval(oCombo).options(i).text	= aCol[1];
	}
	
	if (oCombo.length > aRow.length) {			// ±âÁ¸ÀÇ Combo data°¡ ¸¹Àº °æ¿ì
		for (var i=iLength; i<oCombo.length;)	{
			eval(oCombo).options.remove(iLength);
		}
	}
	else if (oCombo.length < aRow.length) {	// »õ·Î¿î Combo data°¡ ¸¹Àº °æ¿ì
		for (var i=iLength; i<aRow.length; i++) {
			aCol = aRow[i].split(COMBO_SEPARATOR);
		
			optionElem = document.createElement("OPTION");
			optionElem.value = aCol[0];
			optionElem.text	= aCol[1];

			eval(oCombo).add(optionElem);
		}
	}
}

/** 
 * change combobox list
 *
 * @param	oCombo			combo object
 * @param	optionValue		combo data string
 * @since	1.0
 */
function changeCombo (oCombo, selectValue, aCnt, aArray1, aArray2) {
		var optionValue;

		for (var i = 0; i <= aCnt; i++) {
			if (aArray1[i] == selectValue) {
				optionValue = aArray2[i];
			}
		}

		clearCombo	(oCombo);
		createCombo (oCombo, optionValue);
}

	/**
	 * ³¯Â¥ ´õÇÏ±â
	 *
	 * @param   sDate   Date String (YYYYMMDD)
	 * @param   sOpt    add option ("Y", "M", "D")
	 * @param   iAddValue add value
	 * @return  String
	 * @since   1.0
	 */
	function DateAdd (sDate, sOpt, iAddValue) {
		var sReturn = "";

		switch (sOpt) {
		case "Y":
			var sYear = (convertInt(sDate.substr(0,4)) + iAddValue).toString();
			sReturn = sYear + sDate.substr(4,7);
			break;
		case "M":
			var iMonth = (convertInt(sDate.substr(4,2)) + iAddValue) % 12;
			var iYear;
			if (iMonth == 0) {
				iYear = convertInt((convertInt(sDate.substr(4,2)) + iAddValue) / 12) - 1;
				iMonth = 12;
			}
			else
				iYear = convertInt((convertInt(sDate.substr(4,2)) + iAddValue) / 12);
			sReturn = (convertInt(sDate.substr(0,4)) + iYear).toString() + setLPadding((iMonth).toString(), "0", 2) + sDate.substr(6,2);
			break;
		case "D":
			var date = new Date(convertInt(sDate.substr(0,4)), convertInt(sDate.substr(4,2))-1, convertInt(sDate.substr(6,2)));
			date.setDate(date.getDate() + iAddValue);
			sReturn = date.getYear() + setLPadding((date.getMonth() + 1).toString(), "0", 2) + setLPadding((date.getDate()).toString(), "0", 2);
			break;
		}

		return sReturn;
	}

/**
 * parsetInt()ÀÇ ´ë¿ë ¸Þ¼Òµå, parsetInt()¸Þ¼Òµå¿¡¼­ ¿À·ù°¡ ¹ß»ýÇÏ¿© ÀÛ¼º
 *
 * @param   iValue
 * @return  convert value (NumericÀÌ ¾Æ´Ñ °æ¿ì 0)
 * @since   1.0
 */
function convertInt (iValue) {
  if (isNumber(iValue.toString()) == false) return 0;

  return parseInt(parseFloat(iValue));
}

/**
 * Returns a Boolean value indicating whether an expression can be evaluated as a number
 * (this includes values like $15,656.00)
 *
 * @param   expression    variant containing a numeric expression or string expression.
 * @return  boolean
 * @since   1.0
 */
function isNumber (expression) {
  expression = expression.toLowerCase();
  var refString = "0123456789.-";

  if (expression.length < 1) return (false);

  for (var i = 0; i < expression.length; i++) {
    var ch = expression.substr(i, 1)
    var a = refString.indexOf(ch, 0)
    if (a == -1) return (false);
  }
  return(true);
}

/**
 * ¹®ÀÚ¿­ ÁÂÃø¿¡ ÁöÁ¤ÇÑ ¹®ÀÚ·Î Ã¤¿ö³Ö±â
 *
 * @param   oOrg      ÄÁÆ®·Ñ ¶Ç´Â ¹®ÀÚ¿­
 * @param   sPaddingChar  Ã¤¿ö³Ö±â ¹®ÀÚ
 * @param   iNum      Ã¤¿ö³Ö±âÇÑ ¹®ÀÚ¿­ ÀÚ¸´¼ö
 * @return  String
 * @since   1.0
 */
function setLPadding (oOrg, sPaddingChar, iNum) {
  if (oOrg == null || sPaddingChar == null || iNum == null) return;

  var sReturn, sOrgStr
  var sPaddingStr = "";

  if (typeof(oOrg) == "object")
    sOrgStr = oOrg.value;
  else if (typeof(oOrg) == "string")
    sOrgStr = oOrg;
  else
    return;

  if (sOrgStr.length == 0) return;

  for (var i=0; i < iNum; i++) {
    sPaddingStr += sPaddingChar;
  }

  sReturn = (sPaddingStr + sOrgStr).substring((sPaddingStr + sOrgStr).length-iNum, (sPaddingStr + sOrgStr).length);

  if (typeof(oOrg) == "object")
    oOrg.value = sReturn;
  else
    return  sReturn;
}


function moveFocus(num, fromForm, toForm){
	var str = fromForm.value.length;
	if(str == num)
	toForm.focus();
} 

function setDay(yearValue, monthValue, objName, chgDay) {
	//var yearValue		=	parseInt(yearObj.value);
	//var monthValue	=	parseInt(monthObj.value);
	var dayValue;
	var opt;

	if (monthValue=="01" || monthValue=="03" || monthValue=="05"  || 
			monthValue=="07" || monthValue=="08" || monthValue=="10" || monthValue=="12")	{
			dayValue	=	31;
	}
	else if (monthValue == "02") {
		if (yearValue % 4 == 0) {
			dayValue	=	29;
		}
		else {
			dayValue	=	28;
		}
	}
	else {
			dayValue	=	30;
	}

	opt = "<option value=''>ÀÏ</option>";

	for (var i=1; i<=dayValue; i++) {
		opt		= opt + "<option ";
		if (i < 10){
			opt = opt + "value='0" + i + "'>" + i + "</option>";
		}else{
			opt = opt + "value='"  + i + "'>" + i + "</option>";
		}
	}

	document.getElementById(chgDay).innerHTML	=	"<select name="+objName+">" + opt + "</select>";
}

var w = "";
function open_win(fname, width, height) {
	if (w!="") w.close();
	w = window.open(fname, '', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=auto,resizable=no,width='+width+',height='+height);
}

/**************/
/***  AJAX  ***/
/**************/

function replaceText(el, text) {
	if (el != null) {
		clearText(el);
		var newNode = document.createTextNode(text);
		el.appendChild(newNode);
	}
}

function clearText(el) {
	if (el != null) {
		if (el.childNodes) {
			for (var i = 0; i < el.childNodes.length; i++) {
				var childNode = el.childNodes[i];
				el.removeChild(childNode);
			}
		}
	}
}

function getText(el) {
	var text = "";
	if (el != null) {
		if (el.childNodes) {
			for (var i = 0; i < el.childNodes.length; i++) {
				var childNode = el.childNodes[i];
				if (childNode.nodeValue != null) {
					text = text + childNode.nodeValue;
				}
			}
		}
	}
	return text;
}

 var request = null;

 function createRequest() {
	 try {
		 request = new XMLHttpRequest();
	 } catch (trymicrosoft) {
		 try {
			 request = new ActiveXObject("Msxml2.XMLHTTP");
		 } catch (othermicrosoft) {
			 try {
				 request = new ActiveXObject("Microsoft.XMLHTTP");
			 } catch (failed) {
				 request = null;
			 }
		 }
	 }

	 if (request == null) {
		 return false;
	 }

	 return true;
 }