﻿
var Common_Date_IsNotvalidStartDate = "시작 날짜가 바르지 않습니다";
var Common_Date_IsNotvalidEndDate = "끝 날짜가 바르지 않습니다";
var Common_Date_IsNotvalidPeriod = "기간 설정이 잘못되어 있습니다";


String.prototype.number = function()
{
    var newStr = "";
	for (i=0; i< this.length; i++)
		newStr = this.replace(/(\/|\$|\^|\*|\,|\(|\)|\+|\?|\\|\{|\}|\||\[|\]|:)/g,"");
    return newStr;
}

String.prototype.toFixed = function(length)
{
	return parseFloat(this).toFixed(length)
}

// 해당 문자열의 특정 값을 다른값으로 대치할 수 있다.
// 사용법: replaceAll(바꿀문자, 바뀔문자)
String.prototype.replaceAll = function (strChar, strChange)
{
	var strTmp = "";
	for(i=0; i< this.length; i++){
		if(this.charAt(i) != strChar){
			strTmp = strTmp + this.charAt(i);
		}else{
			strTmp = strTmp + strChange;
		}
	}
	return strTmp;
}
// [바이트단위처리]해당 문자열의 시작위치와 종료위치까지의 바이트를 끊어온다
// 사용법: byteString(시작위치,길이)
String.prototype.byteLength = function ()
{	len = this.length;
	for (i=0; i<this.length; i++){
		x = this.substr(i,1).charCodeAt(0);
		if (x > 127) {
			len++;
		}
	}
	return len;
}

// [바이트단위처리]해당 문자열의 시작위치와 종료위치까지의 바이트를 끊어온다
// 사용법: byteString(시작위치,길이)
//         "12,345,00".byteSubString(4, 3) 이면 345
String.prototype.byteSubString = function (s, length)
{	
	var num = 0;
	var num2 = 0;
	var sub_num = 0;
	var result  = "";
	
	if(s != 0 && s != 1){
		for(var i=0;i < this.length; i++)
		{
			num = num + this.substring(i, i+1).byteLength();
			
			sub_num = sub_num + 1;
			if(num == s)
			{
				break;
			}
		}
	}else{
		sub_num = s;
	}
	
	for(var j=1; j < length + 1;j++)
	{
		num2 = this.substring(sub_num, sub_num + j).byteLength();
		if(num2 == length)
		{
			result = this.substring(sub_num, sub_num + j);
			break;
		}
	}
	
	return result;
}

// [바이트단위처리]해당 문자열의 바이트를 제외한 데이터를 리턴한다.
// 사용법: "한글1234".byteSpare(3) 이면 4567을 리턴
//         "한글1234".byteSpare(5) 이면 234을 리턴
String.prototype.byteSpare = function (cut_byte)
{
	var temp = 0;
	
	for(var i=1; i<this.length; i++){
		if(this.substring(0,i).byteLength() == cut_byte){
			return this.substring(i, this.length);
		}
	}
}

String.prototype.bytePadLeft = function (chr, length)
{
	var rValue = "";
	var rTemp  = "";
	
	if(this.byteLength() > length)
		return this;
	
	for(var i=0; i < length - this.byteLength(); i++)
		rTemp = rTemp + chr;
	
	rValue = rTemp + this;
	
	return rValue;
}

String.prototype.bytePadRight = function(chr, length)
{
	var rValue = "";
	var rTemp  = "";
	
	if(this.byteLength() > length)
		return this;
	
	for(var i=0; i<length - this.byteLength(); i++)
		rTemp = rTemp + chr;
	
	rValue = this + rTemp;
	
	return rValue;
}

String.prototype.byteInsertAt = function(str, pos)
{
	var front = this.byteSubString(0, pos);
	var back  = this.byteSubString(pos, this.byteLength() - pos);
	return front + str + back;
}

String.prototype.byteRemoveAt = function(s, length)
{
	var front = this.byteSubString(0, s);
	var backLength = (this.byteLength() - length) - front.byteLength();
	var back  = this.byteSubString(s + length, backLength);
	return front + back;
}

String.prototype.byteModify = function(str, s, length)
{
	var newStr = this.byteRemoveAt(s, length);
	newStr = newStr.byteInsertAt(str, s);
	return newStr;
}

String.prototype.number = function()
{
    var newStr = "";
	for (i=0; i< this.length; i++)
		newStr = this.replace(/(\/|\$|\^|\*|\,|\(|\)|\+|\?|\\|\{|\}|\||\[|\]|:)/g,"");
    return newStr;
}

String.prototype.toCurrency = function()
{
	try{
	    var result = "";
		var txtNumber = this.replaceAll(",","");
		if (isNaN(txtNumber) || txtNumber == "") {
			return "0";
		}else {
			var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
			var arrNumber = txtNumber.split('.');
			arrNumber[0] += '.';
			do {
				arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
			} while (rxSplit.test(arrNumber[0]));
			
			if (arrNumber.length > 1) {
				result = arrNumber.join('');
			}else {
				result = arrNumber[0].split('.')[0];
      		}
      		
      		if(result.indexOf(".")>-1)
      		{
      		    var tmpStr = result.split(".");
      		    var tmpint = Number(tmpStr[1]);
      		    if(!isNaN(tmpint))
      		    {
      		        if(tmpint == 0)
      		            result = tmpStr[0];
      		        else
      		            result = tmpStr[0] + "." + tmpStr[1];
      		    }
      		}
   		}
   		
   		return result;
   	}catch(e){
   		alert(e.message);
   	}
}



Utils = function() {
}


////////////////////////////////////////////////////////////////////////////////
// TextBox 컨트롤 관련 
////////////////////////////////////////////////////////////////////////////////
Utils.convertMask = function (obj, type, callFunction)
{
    if (obj.readOnly == true) return;
    var bResult = false;
    switch(type)
    {
        case 1:   // 금액
            obj.value = obj.value.toCurrency();
            bResult = true;
            break;
        case 2:   // 년월일
            bResult = validateDate(obj)
            break;
        default:
            var maxLength = Number(obj.maxLength);
            if(isNaN(maxLength)) break;
            bResult = checkStrlen(obj, maxLength);
            if(!bResult)
            {
                obj.select();
            }
            break;
    }
    
    if (arguments.length > 2 &&
        bResult == true)
    {
        eval(callFunction);
    }
}

Utils.revertMask = function (obj, type)
{
    if (obj.readOnly == true) return;
    switch(type)
    {
        case 1:   // 금액
            obj.value = obj.value.number();
            obj.select();
            break;
        case 2:   // 년월일
            break;
        default:
            break;
    }
}


//*****************************************************************************************
//[선택] 전화, 팩스, 휴대폰번호 유효성 체크
// 인자
// sValue : 전화, 팩스, 휴대폰번호 형태의 문자열
//*****************************************************************************************
Utils.CheckTelNo = function(sValue)
{
	var strRegEx = /0\d{1,3}-\d{3,4}-[0-9]{4}$/;
	var re = new RegExp(strRegEx);
	if (sValue.match(re))
	{
		return true;
	}
	else
	{
		return false;
	}
}

//*****************************************************************************************
// 값이 영문침 숫자인지 확인하는 함수
// 인자
// value : 숫자형태의 문자열
//*****************************************************************************************
Utils.IsEngNum = function(value)
{
	var EnNum_pattern = /[^a-zA-Z0-9]/;
	var IsEngNum=true;
	var Char;

	if (value == "") return false;

	if(EnNum_pattern.test(value))
	{
		IsEngNum = false;
	}

	return IsEngNum;
}

//*****************************************************************************************
// 특수문자중 ()- 만허용
// 인자
// value : 숫자형태의 문자열
//*****************************************************************************************
Utils.IsTelChar = function(value)
{
	var Char_pattern = /[^-()]/;
	var IsChar=true;

	if (value == "") return false;

	if(Char_pattern.test(value))
	{
		IsChar = false;
	}

	return IsChar;
}

//*****************************************************************************************
// 특수문자중 <>' 만허용하지 않음
// 인자
// value : 숫자형태의 문자열
//*****************************************************************************************
Utils.IsChar = function(value)
{
	var Char_pattern = /[<>'&@]/;
	var IsChar=true;

	if (value == "") return false;

	if(Char_pattern.test(value))
	{
		IsChar = false;
	}

	return IsChar;
}

//*****************************************************************************************
// 값이 숫자값인지 확인하는 함수
// 인자
// value : 숫자형태의 문자열
//*****************************************************************************************
Utils.IsNumeric = function(value)
{
	var ValidChars = ".0123456789";
	var IsNumber=true;
	var Char;

	if (value == "") return false;

	for (i = 0; i < value.length && IsNumber == true; i++)
	{
		Char = value.charAt(i);
		if (ValidChars.indexOf(Char) == -1)
		{
			IsNumber = false;
		}
	}

	return IsNumber;
}

//*****************************************************************************************
// 숫자만 허용,Backspace(8),TAB(9),DELETE(46),NUMLOCK(144)

// 인자
// value : event bool
//*****************************************************************************************
Utils.OnlyNumericOnKeypress = function()
{
	var key = event.keyCode;
	if(!(key==8||key==9||key==13||key==46||key==144||(key>=48&&key<=57)||key==110||key==190))
	{
		event.returnValue = false;
	}
}
//*****************************************************************************************
// 숫자만 허용,Backspace(8),TAB(9),DELETE(46),NUMLOCK(144)
// 인자
// element : Text object
//*****************************************************************************************
Utils.OnlyNumericOnchange = function(element)
{
	var text = element.value || '';
	var result = new Sys.StringBuilder();

	for (var i = 0; i < text.length; i++)
	{
		var ch = text.substring(i, i+1);
		if (Utils.IsNumeric(ch))
		{
			result.append(ch);
		}
	}
	if (element.value != result.toString())
	{
		element.value = result.toString();
	}
}

//*****************************************************************************************
// 영문,숫자,허용된 특수문자
// 인자
// element : Text object
// lantype : K(korea), E(english), N(Numeric)
// chartype : T(IsTelChar), C(IsChar)
//*****************************************************************************************
Utils.CharAllowCheck = function(element, lantype, chartype)
{
	var text = element.value || '';
	var result = new Sys.StringBuilder();

	for (var i = 0; i < text.length; i++)
	{
		var ch = text.substring(i, i+1);
		if(lantype=="N" && chartype == "T")//전화번호일경우
		{
			if (Utils.IsNumeric(ch) || Utils.IsTelChar(ch))
			{
				result.append(ch);
			}
		}
		else if(lantype=="K")//한글일경우 특수문자만 체크
		{
			if(Utils.IsChar(ch)) result.append(ch);
		}
		else if(lantype=="E")//영문일경우 숫자와 특수문자 같이 체크
		{
			if (Utils.IsEngNum(ch) || Utils.IsChar(ch))
			{
				result.append(ch);
			}
		}
	}
	if (element.value != result.toString())
	{
		element.value = result.toString();
	}
}

/*************************************************************************
   ex)
   var str = "31,000";
   var res = removeFormat(str, ",");
   
   result : res -> 31000
*************************************************************************/
Utils.removeFormat = function (content, sep) {
  var real = "";
  var contents = content.split(sep);
  
  for(var i = 0; i < contents.length; i++) {
    real += contents[i];
  }
  
  return real;
}

Utils.parseInt10 = function (data){
	return parseInt(data, 10);
}


//*****************************************************************************************
// [선택] 통화표시 FormatCurrency(123456)  123456 => 123,456
// 인자
// strCurrency2 : 금액 숫자값
//*****************************************************************************************
Utils.FormatCurrency = function(strCurrency2)
{
	//return strCurrency2;

	strCurrency2 = strCurrency2.toString().replace(/\$|\,/g,'');
	if(isNaN(strCurrency2))
	strCurrency2 = "0";

	sign = (strCurrency2 == (strCurrency2 = Math.abs(strCurrency2)));
	strCurrency2 = Math.floor(strCurrency2*100+0.50000000001);
	cents = strCurrency2%100;
	strCurrency2 = Math.floor(strCurrency2/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((strCurrency2.length-(1+i))/3); i++)
	strCurrency2 = strCurrency2.substring(0,strCurrency2.length-(4*i+3))+','+

	strCurrency2.substring(strCurrency2.length-(4*i+3));
	//    return (((sign)?'':'-') + strCurrency2 + '.' + cents);
	return (((sign)?'':'-') + strCurrency2);
}

//*****************************************************************************************
//[선택] 주민등록번호 유효성 체크
// 인자
// nValue1 : 주민번호 앞자리
// nValue2 : 주민번호 뒷자리
//*****************************************************************************************
Utils.CheckJuminNum = function(nValue1, nValue2)
{
	var ssn = nValue1 + "-" + nValue2;
	var re = /^\d{6}-[1234]\d{6}$/;
	if (!re.test(ssn)) {
		return false;
	}

	var birthYear = (ssn.charAt(7) <= "2") ? "19" : "20";
	birthYear += ssn.substr(0, 2);
	var birthMonth = ssn.substr(2, 2) - 1;
	var birthDate = ssn.substr(4, 2);
	var birth = new Date(birthYear, birthMonth, birthDate);

	if ( birth.getYear() % 100 != ssn.substr(0, 2)
	|| birth.getMonth() != birthMonth
	|| birth.getDate() != birthDate) {
		return false;
	}

	var buf = new Array(13);
	var tmp;
	for (tmp = 0; tmp < 6; tmp++) {
		buf[tmp] = parseInt(ssn.charAt(tmp));
	}
	for (tmp = 6; tmp < 13; tmp++) {
		buf[tmp] = parseInt(ssn.charAt(tmp + 1));
	}

	var multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
	for (tmp = 0, sum = 0; tmp < 12; tmp++) {
		sum += (buf[tmp] *= multipliers[tmp]);
	}

	if ((11 - (sum % 11)) % 10 != buf[12]) {
		return false;
	}

	return true;
}

//*****************************************************************************************
// [선택] 사업자번호 유효성 검사
// 인자
// vednorCode : 사업자번호 문자열
//*****************************************************************************************
Utils.CheckBizNum = function (vednorCode)
{
	var sum = 0;
	var getlist =new Array(10);
	var chkvalue =new Array("1","3","7","1","3","7","1","3","5");
	for(var i=0; i<10; i++) { getlist[i] = vednorCode.substring(i, i+1); }
	for(var i=0; i<9; i++) { sum += getlist[i]*chkvalue[i]; }
	sum = sum + parseInt((getlist[8]*5)/10);
	sidliy = sum % 10;
	sidchk = 0;
	if(sidliy != 0) { sidchk = 10 - sidliy; }
	else { sidchk = 0; }
	if(sidchk != getlist[9]) { return false; }
	return true;
}


//*****************************************************************************************
//[선택] 문자 길이 체크 영문일 경우에는 1 Byte, 국문일 경우에는 2 Byte로 계산
// 인자
// checkStr : 대상 문자열
//*****************************************************************************************
Utils.GetStringLength = function (checkStr)
{
	var ilength = 0;

	var tmpStr = new String(checkStr);
	var onechar;
	for ( var i = 0; i < tmpStr.length; i++ )
	{
		onechar = tmpStr.charAt(i);
		if (escape(onechar).length > 4)
		{
			ilength += 2;
		}
		else
		{
			ilength += 1;
		}
	}

	return ilength;
}

//*****************************************************************************************
//[선택] NULL -> 0 로 변경
// 인자
// str : 대상 문자열
//*****************************************************************************************
Utils.ReplaceNullToZero = function (str)
{
	if(str == null) return 0;
	if(str.length == 0) return 0;

	return str;
}

//*****************************************************************************************
//[선택] NULL -> "" 로 변경
// 인자
// str : 대상 문자열
//*****************************************************************************************
Utils.ReplaceNullToBlank = function (str)
{
	if(str == null) return "";
	if(str.length == 0) return "";

	return str;
}

//*****************************************************************************************
//[선택] 현재의 날짜를 숫자 8짜리 포맷으로 반환 (예 : 20070515)
//*****************************************************************************************
Utils.GetCurrentDate = function ()
{
	return Utils.ConvertDayToString("", 0, "");
}

//*****************************************************************************************
// 날짜 형식 여부 확인 함수. 입력 날짜는 8자리 형태의 문자열이다
// 인자
// ymd : 8자리 문자열 형태의 날짜
//*****************************************************************************************
Utils.isDate = function (ymd)
{
	var errCode = 0;
	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

	if(ymd.length < 8) errCode = 1;

	var y = ymd.substring(0, 4);
	var m = ymd.substring(4, 6);
	var d = ymd.substring(6, 8);

	if (y % 1000 != 0 && y % 4 == 0) days[1] = 29; // 윤년
	if (d > days[m-1] || d < 1) errCode = 1; // 날짜 체크
	if (m < 1 || m > 12) errCode = 1; // 월 체크
	if (m%1 != 0 || y%1 != 0 || d%1 != 0) errCode = 1; // 정수 체크

	if (errCode == 1)
	return false;
	else
	return true;
}

//*****************************************************************************************
// 두 날짜의 유효성 및 기간 지정 유효성 체크
// 1. 개별 날짜의 유효성 확인
// 2. 시작 날짜와 끝 날짜 순서 확인
// 인자
// sDate : 8자리 문자열 형태의 날짜
// eDate : 8자리 문자열 형태의 날짜
//*****************************************************************************************
Utils.CheckPeriod = function (sDate, eDate)
{
	if (!Utils.isDate(sDate))
	{
		alert(Common_Date_IsNotvalidStartDate);
		return false;
	}
	if (!Utils.isDate(eDate))
	{
		alert(Common_Date_IsNotvalidEndDate);
		return false;
	}

	if (sDate - eDate > 0)
	{
		alert(Common_Date_IsNotvalidPeriod);
		return false;
	}

	return true;
}

//*****************************************************************************************
// [선택] 오늘날짜에 추가일을 더한 포맷 날짜 문자열을 얻는다 (호환성 유지용 메서드)
// 가급적 DateAdd() 메서드를 사용할 것을 권장한다.
// 인자
// gubun : 결과문자열에 사용될 구분자 (예: "/"를 지정할 경우 2007/05/25와 같은 결과를 얻는다)
// nDate : 추가할 날짜 수
// ymd : "yy", "mm", "dd" 중 한가지를 지정하며, 각 지정에 따라 연, 월, 일을 증가시킨다
//*****************************************************************************************
Utils.ConvertDayToString = function(gubun, nDate, ymd)
{
	var dt = (new Date()).ServerDate();

	var y, m, d;
	var formattedDate;

	switch(ymd.toLowerCase()){
		case "yy": {// year
			dt.setFullYear(dt.getFullYear() + nDate);
			break;
		}

		case "mm": {// month
			dt.setMonth(dt.getMonth() + nDate);
			break;
		}
		case "dd": {// day
			dt.setDate(dt.getDate() + nDate);
			break;
		}
	}

	y = dt.getFullYear();
	m = dt.getMonth() + 1;
	d = dt.getDate();

	formattedDate = y + gubun;
	formattedDate += m < 10 ? "0" + m : m;
	formattedDate += gubun;
	formattedDate += d < 10 ? "0" + d : d;

	return formattedDate;
}


Utils.DaytoLocaleString = function (gubun, dt)
{
    var y, m, d;
	var formattedDate;

	y = dt.getFullYear();
	m = dt.getMonth() + 1;
	d = dt.getDate();

	formattedDate = y + gubun;
	formattedDate += m < 10 ? "0" + m : m;
	formattedDate += gubun;
	formattedDate += d < 10 ? "0" + d : d;

	return formattedDate;
}

//*****************************************************************************************
// [선택] 지정날짜에 추가일을 더한 포맷 날짜 문자열을 얻는다
// 인자
// gubun : 결과문자열에 사용될 구분자 (예: "/"를 지정할 경우 2007/05/25와 같은 결과를 얻는다)
// nDate : 추가할 날짜 수
// ymd : "yy", "mm", "dd" 중 한가지를 지정하며, 각 지정에 따라 연, 월, 일을 증가시킨다
// stnDate : 기준 날짜, 지정되지 않을 경우 현재 날짜를 기준으로 한다
//*****************************************************************************************
Utils.DateAdd = function(gubun, nDate, ymd, stnDate)
{
	var dt;
	if(stnDate == null)
	dt = (new Date()).ServerDate();
	else
	{
		stnDate = stnDate.replace(/-/g, '').replace(/\//g, '');
		var tmpDateString = stnDate.substring(0,4) + "/" + stnDate.substring(4,6) + "/" + stnDate.substring(6,8)
		dt = new Date(tmpDateString);
	}
	//var dt = (new Date()).ServerDate();

	nDate = nDate * 1;

	var y, m, d;
	var formattedDate;

	switch(ymd.toLowerCase()){
		case "yy": {// year
			dt.setFullYear(dt.getFullYear() + nDate);
			break;
		}

		case "mm": {// month
			dt.setMonth(dt.getMonth() + nDate);
			break;
		}
		case "dd": {// day
			dt.setDate(dt.getDate() + nDate);
			break;
		}
	}

	y = dt.getFullYear();
	m = dt.getMonth() + 1;
	d = dt.getDate();

	formattedDate = y + gubun;
	formattedDate += m < 10 ? "0" + m : m;
	formattedDate += gubun;
	formattedDate += d < 10 ? "0" + d : d;

	return formattedDate;
}

//*****************************************************************************************
// 날짜의 차이를 계산하여 두 날짜 사이의 간격(단위:day)을 숫자로 반환
// 인자
// date1 : 8글자의 숫자형 날짜 (예 : 20070515 )
// date2 : 8글자의 숫자형 날짜 (예 : 20070525 )
//*****************************************************************************************
Utils.DateDiff = function(date1, date2)
{
	if(date1.length < 8) return -1;
	if(date2.length < 8) return -1;

	date1 = date1.substring(0,4) + "/" + date1.substring(4,6) + "/" + date1.substring(6)
	date2 = date2.substring(0,4) + "/" + date2.substring(4,6) + "/" + date2.substring(6)

	var sDate = new Date(date1);
	var eDate = new Date(date2);

	var timeSpan = (eDate-sDate) / 86400000;
	var daysApart = Math.abs(Math.round(timeSpan));

	return daysApart;
}

//*****************************************************************************************
// 컨트롤을 Disable 시키는 메서드
// 인자
// obj : 대상이 되는 컨트롤
// flag : true / false 값
//*****************************************************************************************
Utils.SetControlDisabledC = function (obj, flag)
{
	if(flag)
	{
		obj.style.backgroundColor =Public.Control.READONLY_COLOR;
	}
	else
	{
		obj.style.backgroundColor = Public.Control.ENABLED_COLOR;
	}

	obj.disabled = flag;
}

//*****************************************************************************************
// 컨트롤을 ReadOnly 시키는 메서드
// 인자
// obj : 대상이 되는 컨트롤
// flag : true / false 값
//*****************************************************************************************
Utils.SetControlReadOnlyC = function (obj, flag)
{
	if(flag)
	{
		obj.style.backgroundColor = Public.Control.READONLY_COLOR;
	}
	else
	{
		obj.style.backgroundColor = Public.Control.ENABLED_COLOR;
	}

	obj.readOnly = flag;
}

//*****************************************************************************************
// 컨트롤들을 Disable 시키는 함수
// 인자
// controlIDs : 대상이 되는 컨트롤 아이디들의 Array
// bFlag : true / false 값
//*****************************************************************************************
Utils.MakeControlsDisable = function(controlIDs, bFlag)
{
	if(bFlag == null) bFlag = true;
	var ctl;
	for(var i = 0; i < controlIDs.length; i++)
	{
		ctl = document.getElementById(controlIDs[i]);
		if(ctl)
		{
			ctl.disabled = bFlag;

			if(bFlag)
			{
				ctl.style.backgroundColor = Public.Control.READONLY_COLOR;
			}
			else
			{
				ctl.style.backgroundColor = Public.Control.ENABLED_COLOR;
			}
		}
	}
}

//*****************************************************************************************
// 컨트롤들을 ReadOnly 시키는 함수
// 인자
// controlIDs : 대상이 되는 컨트롤 아이디들의 Array
// bFlag : true / false 값
//*****************************************************************************************
Utils.MakeControlsReadOnly = function(controlIDs, bFlag)
{
	if(bFlag == null) bFlag = true;
	var ctl;
	for(var i = 0; i < controlIDs.length; i++)
	{
		ctl = document.getElementById(controlIDs[i]);
		if(ctl)
		{
			ctl.readOnly = bFlag;

			if(bFlag)
			{
				ctl.style.backgroundColor = Public.Control.READONLY_COLOR;
			}
			else
			{
				ctl.style.backgroundColor = Public.Control.ENABLED_COLOR;
			}
		}
	}
}

//*****************************************************************************************
// 컨트롤들을 display:none 시키는 함수
// 인자
// controlIDs : 대상이 되는 컨트롤 아이디들의 Array
// bFlag : true / false 값
//*****************************************************************************************
Utils.MakeControlsInvisible = function(controlIDs, bFlag)
{
	if(bFlag == null) bFlag = true;
	var ctl;
	for(var i = 0; i < controlIDs.length; i++)
	{
		ctl = document.getElementById(controlIDs[i]);
		if(ctl)
		{
			if(bFlag)
			{
				ctl.style.display = "none";
			}
			else
			{
				ctl.style.display = "";
			}
		}
	}
}

//*****************************************************************************************
// 키를 이용하여 해당하는 url 파라미터 값을 가져온다.
// 새로 추가할 function
// 임시로 명명됨, 공통으로 들어가야함
// 인자
// doclocation : document.location 객체
// strKey : 가져올 파라미터의 키
//*****************************************************************************************
Utils.GetParameterValueByKey = function(doclocation, strKey)
{
	var params = doclocation.search;

	if(params.length == 0) return;

	var arrtemp;

	params = params.substring(1, params.length);

	if(params.indexOf('&') == -1)
	{
		arrtemp = params.split('=');

		if(arrtemp[0] == strKey)
		return arrtemp[1];
	}
	else
	{
		var arrparams = params.split('&');

		for(var i=0; i<arrparams.length; i++)
		{
			arrtemp = arrparams[i].split('=');

			if(arrtemp[0] == strKey)
			return arrtemp[1];
		}
	}
}


//*****************************************************************************************
// 문자열 체크 - 한글, 알파벳, 숫자, 공백, 허용하고자 하는 특수 기호등의 조합
// 인자
// text        : 확인할 문자열
// symbol      : 허락할 문자
// allowKorean : 한글허용여부
// allowAlpha  : 영문허용여부
// allowNum    : 숫자허용여부
// allowSpace  : 공백허용여부
//*****************************************************************************************
Utils.HasInvalidSymbol = function(text, symbol, allowKorean, allowAlpha, allowNum, allowSpace)
{
	if (text == "") return false;

	var pattern;
	pattern = '/[^';

	if (allowKorean == true) pattern += "ㄱ-힣";
	if (allowAlpha == true) pattern += "a-zA-Z";
	if (allowNum == true) pattern += "0-9";
	if (allowSpace == true) pattern += " ";

	if (symbol.length > 0)
	{
		var temp = "";
		for (var i = 0; i < symbol.length; i++) temp += symbol.substring(i,i+1).replace(/(.)/, '\\$1');
		pattern += temp;
	}

	pattern += "]/g";

	pattern = eval(pattern);
	return pattern.test(text);
}


//*****************************************************************************************
// 좌우 공백 제거
// 인자
// str : 대상 문자열
//*****************************************************************************************
Utils.Trim = function(str)
{
	if(str == null) return "";

	str = str.toString();

	return str.replace(/^\s*|\s*$/g, '');
}

//*****************************************************************************************
// [선택] 브라우져 하단의 Status Bar에 메시지 출력
// 인자
// str : 출력할 메시지 문자열
//*****************************************************************************************
Utils.WriteState = function (str)
{
	window.status = str;
}

//*****************************************************************************************
// 서버의 특정 페이지를 호출하여 서버 시간을 가져오는 메서드
//*****************************************************************************************
Utils.GetServerTime = function()
{
	var url = "http://gsm.gmarket.co.kr/gsm_new/util/getServerTime.asp";
	var data = Public.HttpRequestSync(url);

	return data;
}

//*****************************************************************************************
// 임시로 추가된 쿠키값을 가져오는 기능
// 인자
// name : 서브쿠키의 이름
//*****************************************************************************************
/*Utils.GetCookie2 = function(name)
{
var strCookie = document.cookie;
var gsmCookie = "";

var allCookies = strCookie.split(';');  // cookies are separated by semicolons
for (i=0;i < allCookies.length ; i++)
{
if (Utils.Left(Utils.Trim(allCookies[i]), 4) == "GSM=")
{
gsmCookie = allCookies[i];
}
}

gsmCookie = gsmCookie.replace("GSM=", "");
allGsmCookies = gsmCookie.split('&');  // cookies are separated by semicolons

for (i=0;i < allGsmCookies.length ; i++)
{
cookieArray = allGsmCookies[i].split('='); // a name/value pair (a crumb) is separated by an equal sign

if (name == Utils.Trim(cookieArray[0]))
return unescape(cookieArray[1]);
}

return null;
}*/



//*****************************************************************************************
// 임시로 추가된 쿠키값을 가져오는 기능
// ASP.NET cs에서 생성된 쿠키를 가져온다.
// 인자
// name : 서브쿠키의 이름
//*****************************************************************************************
/*Utils.GetCookie = function(name)
{
var strCookie = document.cookie;

var allCookies = strCookie.split(';');  // cookies are separated by semicolons
for (i=0;i < allCookies.length ; i++)
{
var arrtemp = Utils.Trim(allCookies[i]).split('=');
//if(arrtemp[0] == "CUST_NO")
//{
//  return unescape(Utils.Decode(arrtemp[1]));
//}
//else if(arrtemp[0] == name)
//{
//  return unescape(arrtemp[1]);
//}
if(arrtemp[0] == name)
{
return unescape(arrtemp[1]);
}
}

return null;
}*/

//*****************************************************************************************
// input TEXT 컨트롤의 값이 빌 경우, 0으로 설정하는 onblur 용 메서드
// : AjaxNumericTextBox에서 사용됨
// 인자
// obj : 대상이 되는 TextBox 컨트롤 개체
//*****************************************************************************************
Utils.SetZeroWhenLostFocus = function(obj)
{
	var val = obj.value;
	if(val.length == 0)
	{
		obj.value = 0;
	}
}

//*****************************************************************************************
// VB 대응 Round 함수
// Utils.Round(1234.455, 2); -> 1234.45
// Utils.Round(1234.466, 2); -> 1234.47
// 인자
// valuenum : 대상 숫자 값
// digits   : 반올림할 소수점 이하의 위치값
//*****************************************************************************************
Utils.Round = function(valuenum, digits)
{
	var sourceDouble = valuenum - 1/Math.pow(10, digits + 1);
	return Math.round(sourceDouble*Math.pow(10, digits))/Math.pow(10, digits);
}


//*****************************************************************************************
// 텍스트박스의 입력값을 가져오는 메서드
// 워터마크 텍스트와 동일한 상태라면 빈 문자열을 입력된 텍스트가 있다면 그 텍스트를 가져온다
// 인자
// textBoxID : TextBoxWatermarkBehavior가 붙어있는 컨트롤의 아이디
//*****************************************************************************************
Utils.GetCurrentInputText = function(textBoxID)
{
	var rtnValue = "";
	var text = $get(textBoxID);
	rtnValue = text.value;

	var behaviors = Sys.UI.Behavior.getBehaviors(text);
	if(behaviors.length == 0 ) return rtnValue;

	for(var i = 0; i < behaviors.length; i++)
	{
		//현재 컨트롤에 붙어있는 비헤이비어들 중 TextBoxWatermarkBehavior가 있다면 수행
		if( behaviors[i].get_name() == "TextBoxWatermarkBehavior")
		{
			//만일, 워터마크 텍스트와 실제 입력 텍스트가 동일하다면, ""을 반환한다
			if(text.value == behaviors[i].get_WatermarkText())
			{
				rtnValue = "";
			}
		}
	}

	return rtnValue;
}




//*****************************************************************************************
// 아무것도 안하는 스크립트
// anchor 에서 href="#" 대신 사용한다.
//
//
//*****************************************************************************************
Utils.Dummy = function()
{

}





/*-------------------------------------------------------------
Function Name : CreateExpirDT
Parameter     : parentID (컨트롤이 삽입될 부모컨트롤의 아이디), widTh (컨트롤의 너비)
Description   : 동적으로 유효기간 Select 컨트롤을 생성한다.
기존 코드는 서버에서 컨트롤 생성, 차후에 createElement 객체로 변경가능, 협의필요.
Control       :
Revision His. : util.asp
-------------------------------------------------------------*/
Utils.CreateExpirDT = function(parentID, widTh)
{
	if(parentID.length == 0) return;

	if(widTh.length == 0)
	widTh = "124";

	var strHtml = "";

	strHtml += "<select name='EXPIRE_DT' id='EXPIRE_DT' style='height:20px; width:" + widTh + "px;'>\r\n";
	strHtml += "  <option value='' >선택</option>";
	strHtml += "  <option value='1'>1일</option>";
	strHtml += "  <option value='3'>3일</option>";
	strHtml += "  <option value='5'>5일</option>";
	strHtml += "  <option value='7'>7일</option>";
	strHtml += "  <option value='10'>10일</option>";
	strHtml += "  <option value='20'>20일</option>";
	strHtml += "  <option value='30'>1개월</option>";
	strHtml += "  <option value='60'>2개월</option>";
	strHtml += "  <option value='90' selected>3개월</option>";

	//' Response.Write ("<option value='" & "180" & "'>" &  "6개월" & "</option>")
	//' Response.Write ("<option value='" & "270" & "'>" &  "9개월" & "</option>")
	//' Response.Write ("<option value='" & "365" & "'>" &  "1년" & "</option>")
	//' Response.Write ("<option value='" & "730" & "' selected>" &  "2년" & "</option>")

	strHtml += "</select>\r\n";

	document.getElementById(parentID).innerHTML = strHtml;
}



/*-------------------------------------------------------------
Function Name : CreateGiftShop_theme
Parameter     : parentID (컨트롤이 삽입될 부모컨트롤의 아이디), str (컨트롤의 name 접미사)
Description   : 동적으로 선물가게 관리 테마 Select 컨트롤을 생성한다.
기존 코드는 서버에서 컨트롤 생성, 차후에 createElement 객체로 변경가능, 협의필요.
Control       :
Revision His. : util.asp
-------------------------------------------------------------*/
Utils.CreateGiftShop_theme = function(parentID, str)
{
	if(parentID.length == 0) return;

	var strHtml = "";
	strHtml += "테마별&nbsp;&nbsp;<select name='GIFTSHOP_THEME" + str + "' id='GIFTSHOP_THEME" + str + "'>\r\n";

	var result = Public.CallWebServiceToGetJSON("GoodsService.asmx", "GetGiftshopThemes");

	if( result != null && result.Rows.length > 0 )
	{
		for(var i=0; i<result.Rows.length; i++)
		{
			strHtml += "<option value='" + result.Rows[i].theme_no + "'>" + result.Rows[i].theme_nm + "</option>";
		}
	}

	strHtml += "</select>";

	document.getElementById(parentID).innerHTML = strHtml;

}





/*-------------------------------------------------------------
Function Name : Right
Parameter     : str(문자열), len(str의 오른쪽에서 가져올 문자 수)
Description   : 혹시 필요할까 해서...
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.Right = function(str, len)
{
	str = str.toString();

	if(str == null) return null;
	if(str.length <= len) return str;
	if(len == 0) return "";

	return str.substring(str.length-len, str.length);
}



/*-------------------------------------------------------------
Function Name : Left
Parameter     : str(문자열), len(str의 왼쪽에서 가져올 문자 수)
Description   : 혹시 필요할까 해서...
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.Left = function(str, len)
{
	str = str.toString();

	if(str == null) return null;
	if(str.length <= len) return str;
	if(len == 0) return "";

	return str.substring(0, len);
}



/*-------------------------------------------------------------
Function Name : Mid
Parameter     : str(문자열), sidx(str에서 가져올 문자의 시작위치), len(sidx 위치에서 가져올 문자 수)
Description   : 혹시 필요할까 해서... sidx가 0이 오면 null을 반환, vb함수와 똑같은 기능을 가지도록 한다.
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.Mid = function(str, sidx, len)
{
	str = str.toString();

	if(str == null) return null;
	if(len == 0) return "";
	if(sidx == 0) return null;

	sidx = sidx - 1;

	return str.substring(sidx, sidx + len);
}




/*-------------------------------------------------------------
Function Name : GetElementNamesCheckedValue
Parameter     : strName (control name)
Description   : ElementsByName 컬렉션에서 선택된 값을 가져온다.
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.GetElementNamesCheckedValue = function(strName)
{
	for(var i=0; i<document.getElementsByName(strName).length; i++)
	{
		if(document.getElementsByName(strName)[i].checked == true)
		return document.getElementsByName(strName)[i].value;
	}

	return "";
}



/*-------------------------------------------------------------
Function Name : SetElementNamesCheckedValue
Parameter     : strName (control name)
Description   : ElementsByName 컬렉션에서 해당 값을 선택한다.
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.SetElementNamesCheckedValue = function(strName, strValue)
{
	for(var i=0; i<document.getElementsByName(strName).length; i++)
	{
		if(document.getElementsByName(strName)[i].value == strValue)
		document.getElementsByName(strName)[i].checked = true;
	}
}


/*-------------------------------------------------------------
Function Name : Add_Select_Item
Parameter     :
Description   : select control에 option을 추가한다.
Control       :
Revision His. :
-------------------------------------------------------------*/
Utils.AddSelectItem = function(objSel, strValue, strText)
{
	var newOpt = document.createElement("OPTION");
	newOpt.text = strText;
	newOpt.value = strValue;
	objSel.add(newOpt);
}



/*-------------------------------------------------------------
Function Name : displaywon
Parameter     :
Description   : 통화를 한글로 변환
Control       :
Revision His. : ConvertMoney.js
-------------------------------------------------------------*/
Utils.displaywon = function(t_name,d_name)
{
	var len

	var a_textname

	//a_textname=eval('this.'+t_name);
	a_textname = document.getElementById(t_name);

	len=a_textname.value;

	len=len.replace(/\s/g,"");

	if(isNaN(len) ) {
		alert("숫자만 입력 하세요");
		//this.wontext.value="";
		a_textname.value=reconstr(a_textname.value);
		a_textname.focus();
		return;
	}

	if(len.length>11)
	{
		alert("백억이상으로 입력 할수 없습니다");
		//this.wontext.value="";
		a_textname.focus();
		return;
	}

	var length;
	var displaywon;

	displaywon=convertmoney(len);

	var won;
	//won = eval('this.'+d_name);
	won = document.getElementById(d_name);

	won.innerHTML="<font color=red>"+displaywon+"</font>";

}

/*-------------------------------------------------------------
Function Name : getCoordinates
Parameter     :
Description   : 주소 텍스트로 좌표배열 리턴
Control       :
Revision His. :
-------------------------------------------------------------*/
function getCoordinates(strAddress)
{
	var coordinates = new Array();

	var x, y, sResCode, sCode, sAddress;

	var xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
	xmlDoc.setProperty("ServerHTTPRequest", true);
	xmlDoc.setProperty("SelectionLanguage", "XPath");
	xmlDoc.async = false;

	var sUrl="http://asp.congnamul.com/congsoa/address/match.service?ADDR="+encodeURIComponent(strAddress);

	xmlDoc.load(sUrl);

	if (xmlDoc.parseError.errorCode != 0)
	{
		x = -1;
		y = -1;
	}

	var objNodes = xmlDoc.selectSingleNode("/result");
	if (objNodes != null)
	{
		var objAttributes = objNodes.attributes;

		x        = objAttributes.getNamedItem("x").value
		y        = objAttributes.getNamedItem("y").value
		sRescode = objAttributes.getNamedItem("rescode").value
		sCode    = objAttributes.getNamedItem("code").value
		sAddress = objAttributes.getNamedItem("address").value

		objAttributes = null;
	}
	objNodes = null;
	xmlDoc = null;

	coordinates[0] = x;
	coordinates[1] = y;

	return coordinates;
}

function reconstr(str)
{

	var returnstr;

	returnstr="";

	for(var i=0;i<str.length;i++)
	{
		var temp = str.charAt(i);

		if(!isNaN(temp))
		{
			returnstr=returnstr+temp;
		}
	}


	return returnstr;

}


function convertmoney(str)
{
	var returnstr;
	returnstr="";


	var pre_temp;
	pre_temp="";

	for(var i=0;i<str.length;i++)
	{
		var temp = str.charAt(i);

		pre_temp=str.charAt(i+1);

		if(temp !=" ")
		{
			returnstr=returnstr+convertsu(temp,str.length-i,pre_temp);
		}
	}
	returnstr=returnstr+"원";
	return returnstr;
}


function convertsu(s,su,pre_v)
{
	var checkvalue;

	var prevalue;

	prevalue=pre_v;

	switch(s)
	{
		case "1":
		checkvalue="일";
		break;

		case "2":
		checkvalue="이";
		break;

		case "3":
		checkvalue="삼";
		break;
		case "4":
		checkvalue="사";
		break;
		case "5":
		checkvalue="오";
		break;

		case "6":
		checkvalue="육";
		break;
		case "7":
		checkvalue="칠";
		break;

		case "8":
		checkvalue="팔";
		break;

		case "9":
		checkvalue="구";
		break;
		case "0":
		checkvalue="";
		break;
	}

	if(checkvalue !="" )
	{
		if(su>=6 && prevalue=="0")
		{
			checkvalue=convertmoney3(checkvalue,su);
		}
		else
		{
			checkvalue=convertmoney2(checkvalue,su);
		}
	}

	return checkvalue;
}


function convertmoney2(value,su)
{
	var returnvalue;
	switch(su)
	{
		case 1:
		returnvalue=value;
		break;

		case 2:
		returnvalue=value+"십 ";
		break;

		case 3:
		returnvalue=value+"백 ";
		break;
		case 4:
		returnvalue=value+"천 ";
		break;
		case 5:
		returnvalue=value+"<b>만</b> ";
		break;

		case 6:

		returnvalue=value+"십";
		break;
		case 7:
		returnvalue=value+"백";
		break;

		case 8:
		returnvalue=value+"천";
		break;

		case 9:
		returnvalue=value+"<b>억</b> ";
		break;
		case 10:
		returnvalue=value+"십";
		break;
		case 11:
		returnvalue=value+"백";
		break;


	}

	return returnvalue;
}



function convertmoney3(value,su)
{
	var returnvalue;
	switch(su)
	{
		case 1:
		returnvalue=value;
		break;

		case 2:
		returnvalue=value+"십 ";
		break;

		case 3:
		returnvalue=value+"백 ";
		break;
		case 4:
		returnvalue=value+"천 ";
		break;
		case 5:
		returnvalue=value+" <b>만</b> ";
		break;

		case 6:

		returnvalue=value+"십<b>만</b>";
		break;
		case 7:
		returnvalue=value+"백<b>만</b>";
		break;

		case 8:
		returnvalue=value+"천<b>만</b>";
		break;

		case 9:
		returnvalue=value+"<b>억</b> ";
		break;
		case 10:
		returnvalue=value+"십<b>억</b>";
		break;
		case 11:
		returnvalue=value+"백<b>억</b>";
		break;


	}

	return returnvalue;
}
