/**
 *	공통 자바스크립트
 *
 *	@author	양선웅
 *	@since	2006-06-08
 */
 //Flash
function flash(c,d,e) {
 var flash_tag = "";
 flash_tag = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
 flash_tag +='codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" ';
 flash_tag +='width="'+c+'" height="'+d+'" >';
 flash_tag +='<param name="wmode" value="transparent">'; 

 //이부분은 플래쉬 배경을 투명으로 설정하는 부분으로 필요없다면 삭제해도 무방함
 flash_tag +='<param name="base" value=".">'; //param
 
 flash_tag +='<param name="wmode" value="opaque">';
 flash_tag +='<param name="movie" value="'+e+'">'; 
 flash_tag +='<param name="quality" value="high">';
 flash_tag +='<embed src="'+e+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" base = "." wmode="transparent"';
 flash_tag +='type="application/x-shockwave-flash"  WIDTH="'+c+'" HEIGHT="'+d+'"></embed></object>'
 document.write(flash_tag);
}

function navi(val){
	switch (val)
	{
		case "mlink_0":
			location.href="/sports/main.asp";
			break;
		case "mlink_1":
			location.href="/sports/main.asp";
			break;
		case "mlink_1_1":
			location.href="/sports/sub01_b.asp";
			break;
		case "mlink_1_2":
			location.href="/sports/sub02.asp";
			break;
		case "mlink_1_3":
			location.href="/sports/only_sports.asp";
			break;
		case "mlink_1_4":
			location.href="/sports/sports_news.asp";
			break;
		case "mlink_1_5":
			location.href="/sports/sub04.asp";
			break;
		case "mlink_1_6":
			location.href="/sports/sub04_1.asp";
			break;
		case "mlink_1_7":
			location.href="/sports/sports_board.asp?menu_code=108411831184";
			break;
		case "mlink_1_8":
			alert(val);
			break;
		case "mlink_2":
			location.href="/drama/main.asp";
			break;
		case "mlink_2_1":
			location.href="/drama/new_drama.asp?menu_code=11541156";
			break;
		case "mlink_2_2":
			location.href="/drama/new_drama.asp?menu_code=11541157";
			break;
		case "mlink_2_3":
			location.href="/drama/strategy.asp";		
			break;
		case "mlink_2_4":
			location.href="/drama/enter.asp";		
			break;
		case "mlink_2_5":
			location.href="/drama/only_drama.asp";
			break;
		case "mlink_2_6":
			location.href="/drama/drama_news.asp";
			break;
		case "mlink_2_7":
			location.href="/drama/drama_board.asp?menu_code=108411831192";		
			break;
		case "mlink_2_8":
			alert(val);
			break;
		case "mlink_3":
			location.href="/joy/main.asp";		
			break;
		case "mlink_3_1":
			location.href="/joy/joy_special.asp?menu_code=10240002";		
			break;
		case "mlink_3_2":
			location.href="/joy/world_best.asp";		
			break;
		case "mlink_3_3":
			location.href="/joy/only_joy.asp";
			break;
		case "mlink_3_4":
			alert(val);
			break;
		case "mlink_3_5":
			alert(val);
			break;
		case "mlink_3_6":
			location.href="/drama/drama_board.asp?menu_code=108411071130";
			break;			
		case "mlink_4":
			location.href="/prime/main.asp";
			break;			
		case "mlink_4_1":
			location.href="/prime/culture.asp";
			break;			
		case "mlink_4_2":
			location.href="/prime/history.asp";			
			break;		
		case "mlink_4_3":
			location.href="/prime/people.asp";					
			break;		
		case "mlink_4_4":
			location.href="/prime/information.asp";			
			break;		
		case "mlink_4_5":
			location.href="/prime/only_prime.asp";
			break;		
		case "mlink_4_6":
			location.href="/prime/prime_board.asp?menu_code=108411831193";
			break;		
		case "mlink_5":
			location.href="/only/main.asp";
			break;		
		case "mlink_5_1":
			location.href="/sports/only_sports.asp";
			break;		
		case "mlink_5_2":
			location.href="/drama/only_drama.asp";
			break;		
		case "mlink_5_3":
			location.href="/joy/only_joy.asp";
			break;		
		case "mlink_5_4":
			location.href="/prime/only_prime.asp";
			break;		
		case "mlink_5_5":
			location.href="/only/adguide1.asp";
			break;		
		case "mlink_5_6":
			location.href="/only/media.asp";
			break;		
		case "mlink_5_7":
			location.href="/only/sub05.asp";
			break;		
		case "mlink_6":
			alert(val);
			break;		
		case "mlink_6_1":
			alert(val);
			break;	
		case "mlink_6_2":
			alert(val);
			break;	
		case "mlink_6_3":
			alert(val);
			break;	
		case "mlink_6_4":
			alert(val);
			break;	
		case "mlink_6_5":
			alert(val);
			break;	
	}
}

function login(){
	location.href="/member/login.asp";	
}

function join(){
	location.href="/member/agree.asp";
}

/**
 *	금액 필드에 사용하는 금액 표시 함수
 * @param Object form.text
 * @usage onkeyup="moneyUpdate(this)"
 */
function moneyUpdate(el) {
	var pattern = /([1-9]{1}[0-9]*$)+/;
	if (el.value.isNull()) return;
	var str = el.value.trim().split(",").join("")
	if (pattern.test(str) || el.value == "0") {
		var retVal="", s1="";
		if (str.length <= 3) {
			el.value = str;
			return;
		}
		for (var i=str.length -1; i >=0 ; i-- ) s1 += str.charAt(i);
		for (var i=s1.length -1; i >=0 ; i-- ) {
			retVal += s1.charAt(i);
			if(i % 3 == 0 && i != 0) retVal += ",";
		}
		el.value = retVal;
	}else{
		el.value = "";
	}
}

/**
 *	금액 필드에 사용하는 금액 표시 함수2
 * @param String 
 * @return String
 * @usage onkeyup="moneyUpdate2('1000')"
 */
function moneyUpdate2(el) {
	var pattern = /([1-9]{1}[0-9]*$)+/;
	if (el.isNull()) return;
	var str = el.trim().split(",").join("")
	if (pattern.test(str)) {
		var retVal="", s1="";
		if (str.length <= 3) {
			el = str;
			return;
		}
		for (var i=str.length -1; i >=0 ; i-- ) s1 += str.charAt(i);
		for (var i=s1.length -1; i >=0 ; i-- ) {
			retVal += s1.charAt(i);
			if(i % 3 == 0 && i != 0) retVal += ",";
		}
		el = retVal;
	}else{
		el = "0";
	}
	return el;
}

/**
 *	Error Page Interface
 * @param int	 line
 * @param event e
 * @param string user_msg
 */
function goErrorPage(line, e, msg) {
	var errorPage = "/Errors/scriptError.asp";
	var reqUrl = location.href + location.search;
	var strForm = "<form name=\"frmErrorPage\" method=\"post\" action=\""+errorPage+"\">";
	strForm += "<input type=\"hidden\" name=\"line\" value=\""+line+"\" />";
	strForm += "<input type=\"hidden\" name=\"err_num\" value=\""+(e.number & 0xFFFF)+"\" />";
	strForm += "<input type=\"hidden\" name=\"err_name\" value=\""+e.name+"\" />";
	strForm += "<input type=\"hidden\" name=\"err_msg\" value=\" "+e.message+" \" />";
	strForm += "<input type=\"hidden\" name=\"user_msg\" value=\" "+msg+" \" />";
	strForm += "<input type=\"hidden\" name=\"reqUrl\" value=\""+reqUrl+"\" />";
	strForm += "</form>	";
	document.write(strForm);
	frmErrorPage.submit();
}


/*  Function Equivalent to URLEncoder.encode(String, "UTF-8")
    Copyright (C) 2002 Cresc Corp.
    Version: 1.0
*/
function encodeURL(str){
	if (!str) return "";
    var s0, i, s, u;
    s0 = "";                // encoded str
    for (i = 0; i < str.length; i++){   // scan the source
        s = str.charAt(i);
        u = str.charCodeAt(i);          // get unicode of the char
        if (s == " "){s0 += "+";}       // SP should be converted to "+"
        else {
            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){     // check for escape
                s0 = s0 + s;           // don't escape
            }
            else {                      // escape
                if ((u >= 0x0) && (u <= 0x7f)){     // single byte format
                    s = "0"+u.toString(16);
                    s0 += "%"+ s.substr(s.length-2);
                }
                else if (u > 0x1fffff){     // quaternary byte format (extended)
                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else if (u > 0x7ff){        // triple byte format
                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else {                      // double byte format
                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
            }
        }
    }
    return s0;
}

/**
 *	XML의
 *
 *
 */
// cdata의 데이터를 가져오는 함수 노드타입 4번//
function getNodeText(node) {
	var sText = "";

	if (!node.hasChildNodes()) return sText;

	node = node.childNodes;

	if (!node) return sText;
	for ( var i=0 ; i < node.length ; i++ ) {
		if (node[i].nodeType == 4) {
			sText = node[i].data;
		}
	}
	return sText;
}


/*
    String name, value
    Date expires
    String path, domain
    Boolean secure

    optional: expires,path,domain,secure
*/
function setCookie(name,value,expires,path,domain,secure) {
//	if (!path) path = "/";
    document.cookie =   name + '=' + escape(value)         + ';'
        + ((expires) ? ' expires=' + expires.toGMTString() + ';' : '')
        + ((path)    ? ' path='    + path                  + ';' : '')
        + ((domain)  ? ' domain='  + domain                + ';' : '')
        + ((secure)  ? ' secure'                           + ';' : '');
}

// Returns a string or false
function getCookie(name) {
    var srch = name + '=';
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(srch);
        if (offset != -1) {
            offset += srch.length;
            end = document.cookie.indexOf(';', offset);
            if (end == -1) end = document.cookie.length;
            return unescape(document.cookie.substring(offset, end));
        } else return false;
    } else return false;
}

// optional: path,domain
function delCookie(name,path,domain) {
    if (Q_getCookie(name))
        document.cookie = name                 + '=;'
            + ' expires=Thu, 01-Jan-70 00:00:01 GMT;'
            + ((path)   ? ' path='    + path    + ';' : '')
            + ((domain) ? ' domain='  + domain  + ';' : '');
}

/**
 *	문자열에서 특정문자를 다른 문자로 바꿉니다.
 *
 *	@param string val 문자열
 *	@param string str 특정문자
 *	@param string str2 바꿀문자
 *	@return string
 */
function replace(val, str, str2) {
	if (typeof (val) == 'undefined'
		|| typeof (str) == 'undefined'
		|| typeof (str2) == 'undefined' ) {
		window.status = "function replace(s0,s1,s2) 인수가 넘어 오지 않았습니다!";
		return false;
	}
	if (val.length < 1 || val.length < str.length) return false;

	var newStr = "";
	var rr = Array();
	for (var i=0 ; i < val.length - str.length + 1 ; i++ ) {
		if (str == val.substring(i, i + str.length)) {
			rr[rr.length] = i;
		}
	}
	if (rr.length > 0) {
		var old = 0;
		for (var i=0; i < rr.length ; i++ ) {
			if (rr[i] != old) {
				newStr += val.substring(old,rr[i]);
				old = rr[i] + str.length;
			}
			newStr += str2;
			if (i == rr.length -1) {
				newStr += val.substring(rr[i] + str.length,val.length);
			}
		}
		return newStr;
	}else
		return val;
}

/**
 *	이벤트 핸들러 등록
 *	@useage addEvent(window,'load',func_preload);
 */
function addEvent(obj, evType, fn, useCapture){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Handler could not be attached");
	}
}

/**
 *	이벤트 핸들러 삭제
 *	@useage removeEvent(window,'load',func_preload);
 */
function removeEvent(obj, evType, fn, useCapture){
	if (obj.removeEventListener){
		obj.removeEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.detachEvent){
		var r = obj.detachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Handler could not be removed");
	}
}


/**
 *	인수로 넘긴 분리자로 구분하여 돌려준다.
 *	@param	String separator 생략가능
 *	@return String Date
 *	@EX > YYYY-MM-DD
 *	@ IE,FF 에서 확인됨
 */
Date.prototype.toCalendar = function(separator) {
	if (typeof(separator) == 'undefined' || separator == "") separator = "-";
	var tmp = new Array(3);
	tmp[0] = this.getFullYear(); //
	tmp[1] = this.getMonth() + 1;
	tmp[2] = this.getDate();
	if (tmp[1] < 10) tmp[1] = "0" + tmp[1];
	if (tmp[2] < 10) tmp[2] = "0" + tmp[2];
	return tmp.join(separator);
}

/**
 *	문자열에서 빈문자를 제거하고 돌려준다.(첫,마지막문자에 스페이스와 \n\r\t 등)
 *	@return String
 *	@ IE,FF 에서 확인됨
 */
String.prototype.trim = function(str) {
	str = this != window ? this : str;
	return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

/**
 *	문자열에서 원하는 길이(byte형식)를 돌려줍니다.
 *	@return int length
 *	@ IE,FF 에서 확인됨
 */
String.prototype.bytes = function(str) {
	str = this != window ? this : str; len = 0;
	for(var i=0; i < str.length; i++) {
		len += (str.charCodeAt(i) > 128) ? 2 : 1
	}
	return len;
}

/**
 *	문자열에서 원하는 길이(byte형식)만큼 잘라내어 돌려준다.
 *	@param Int (byte의 길이)
 *	@return String
 *	@ IE,FF 에서 확인됨
 */
String.prototype.cut = function(len,str) {
	str = this != window ? this : str;
	var l = 0;
	for (var i=0; i<str.length; i++) {
			l += (str.charCodeAt(i) > 128) ? 2 : 1;
			if (l > len) return str.substring(0,i);
	}
	return str;
}

/**
 *	널값인지 확인
 *	@return boolean
 *	@ IE,FF 에서 확인됨
 */
String.prototype.isNull = function(str) {
	str = this != window ? this : str;
	return (str.trim().length == 0) ? true : false ;
}

/**
 *	숫자형식인지 확인
 *	@return boolean
 *	@ IE,FF 에서 확인됨
 */
String.prototype.isNumeric = function(str) {
	str = this != window ? this : str;
	return (!str.isNull() && !isNaN(str)) ? true : false ;
}

/**
 *	문자열이 인수로 넘어온 문자가 같은지 비교한다.
 *	@param str
 *	@return boolean
 *	@ IE,FF 에서 확인됨
 */
String.prototype.isEqual = function(str, orgStr) {
	orgStr = this != window ? this : orgStr;
	return (orgStr == str) ? true : false ;
}

/**
 *	문자열이 날짜형식과 일치하는지 비교한다. 2006-01-01
 *	@param str
 *	@return boolean
 *	@ IE,FF 에서 확인됨
 */
String.prototype.isDate = function(str) {
	str = this != window ? this : str;
	var pattern = /^([1]{1}[9]{1}[0-9]{2}|[2]{1}[0]{1}[0-9]{2})-?([0]{1}[1-9]{1}|[1]{1}[0-2]{1})-?([0]{1}[1-9]{1}|[3]{1}[0-1]{1}|[12]{1}[0-9]{1})$/
	return (pattern.test(str)) ? true : false ;
}

/**
 *	정진우(nikaej@cloud9.co.kr)
 *	문자열에서 오른쪽 문자 추출하기.
 *	@param len : 오른쪽에서 가져올 문자 수.
 *	@return String
 *	@ IE,FF 에서 확인됨
 *	ex) iChr = "000".concat(1).right(3);		<= 이런식으로 앞에 0을 붙일 때도 사용할 수 있음.(001,002,...)
 */
String.prototype.right = function(len) {
	if (typeof (len) == 'undefined') {
		window.status = "인수가 넘어 오지 않았습니다!";
		return false;
	}
	if (this.length < len){
		window.status = "지정한 인수가 문자열보다 작아야 합니다!";
		return false;
	}
	str = this.substring((this.length-len),this.length);
	return str;
}


/**
 *	XMLHttpRequest 연결을 만든다.
 *	@return XMLHttpRequest
 * 	@주의 연결 실패시 Null
 */
function makeXMLHttpRequest() {
	var conn = false;

	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		conn = new XMLHttpRequest();
		if (conn.overrideMimeType) {
			conn.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			conn = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				conn = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	return conn;
}

/**
 *	특정 URL의 XML을 받아 옵니다.
 *	@param url
 *	@return xml Object
 *	@주의 리턴값을 반드시 체크할 것 null 이면 오류임
 */
function getUrlToXml(url) {
	return getXmlFromUrl(url,"GET");
}

function uni2ascii(s) {
    var r = '';
    for(var i=0; i < s.length; i++) {
        if (s.charCodeAt(i) > 128) {
            r += '&#'+s.charCodeAt(i)+';';
        } else {
            r += s.substr(i,1);
        }
    }
    return r;
}

/**
 *	특정 URL의 XML을 받아 옵니다.
 *	@param url
 *	@param method
 *	@param params url 인수형태 예> name=111&kk=xxx
 *	@return xml Object
 *	@주의 리턴값을 반드시 체크할 것 null 이면 오류임
 */
function getXmlFromUrl(url,method,params,charset) {
	var conn = makeXMLHttpRequest();
	var result = null;
	if (typeof(method) == 'undefined' || method.toUpperCase() != "POST") method = "GET";
	if (typeof(charset) == 'undefined') charset = "UTF-8";

	try {
		conn.open( method , url, false );
		conn.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded; charset="+charset );
		if (typeof(params) == 'undefined' || params == "")
			conn.send(null);
		else {
			conn.send(params);
		}

		if (conn.readyState == 4) {
			switch(conn.status) {
				case 200 :
					result = conn.responseXML.documentElement;
					break;
				case 403 :
					window.status = "403 Forbidden";
					break;
				case 404 :
					window.status = "404 Not Found";
					break;
				default :
					window.status = "400 Fault Request";
			}
		}else{
			window.status = "Fault Header";
		}

	} catch (e) {
		window.status = "Nested catch caught " + e;
	} finally {
		return result;
	}
}

/**
 *	동적  url로 부터[POST] 결과를  리턴 받습니다. 결과 셋은 xml 형태여야 합니다.
 *	@param url
 *	@param params 넘길 인수 url형태
 *	@return 결과값
 *	@주의 : 요청하는 곳에서는 반드시 결과를 xml 형태 <main><result>결과값</result></main>로 넘겨야 합니다.
 *	@주의 리턴값을 반드시 체크할 것 null 이면 오류임
 */
function getResultFromUrl(url,params) {
	var xmlDoc = getXmlFromUrl(url, "POST", params);
	if (xmlDoc == null) return null;

	var node = xmlDoc.childNodes;
	for (var i=0; i < node.length ; i++ ) {
		if (node[i].nodeType == 1) {
			return node[i].childNodes[0].data;
		}
	}
	return null;
}


/**
 *	해당하는 URL에 요청을 하여,, 결과 값을 알려 줍니다.
 *	@param	String URL
 *	@return	Status
 */
function getStatusFromUrl(url) {
	var conn = makeXMLHttpRequest();
	var result = null;
	try {
		conn.open( "GET" , url, false );
		conn.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded; charset=UTF-8");
		conn.send(null);
		result = conn.status;
	} catch (e) {
		window.status = "Nested catch caught " + e;
	} finally {
		return result;
	}
}

/**
 *	공용/ 이메일 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidEmail(str){ //이메일 검사
	return (sysIsValidPattern(str.trim(),/^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/)) ? true : false;
}

/**
 *	공용/ 전화번호 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidPhone(str) {
	return (sysIsValidPattern(str.trim(),/^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/)) ? true : false;
}

/**
 *	공용/ 이동전화 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidMobile(str) {
	return (sysIsValidPattern(str.trim(),/^([0]{1}[1]{1}[167890]{1})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/)) ? true : false;
}

/**
 *	공용/ 알파벳 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidAlpha(str) {
	return (sysIsValidPattern(str.trim(),/^[a-zA-Z]+$/)) ? true : false;
}

/**
 *	공용/ 알파벳 소문자 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidAlphaSmall(str) {
	return (sysIsValidPattern(str.trim(),/^[a-z]+$/)) ? true : false;
}

/**
 *	공용/ 알파벳 대문자 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidAlphaLarge(str) {
	return (sysIsValidPattern(str.trim(),/^[A-Z]+$/)) ? true : false;
}

/**
 *	공용/ 알파벳과 숫자 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidAlphaNum(str) {
	return (sysIsValidPattern(str.trim(),/^[a-zA-Z0-9]+$/)) ? true : false;
}

/**
 *	작성자 : 정진우(nikaej@cloud9.co.kr)
 *	공용/ 알파벳 소문자와 숫자 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidAlphaSmallNum(str) {
	return (sysIsValidPattern(str.trim(),/^[a-z0-9]+$/)) ? true : false;
}

/**
 *	공용/ 한글 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidHangul(str) {
	return (sysIsValidPattern(str.trim(),/[가-힝]/)) ? true : false;
}

/**
 *	공용/ 숫자 형식에 맞는지 검사
 *	@param	String str
 *	@return	boolean
 */
function comIsValidNumeric(str) {
	return (sysIsValidPattern(str.trim(),/[0-9]/)) ? true : false;
}

/**
 *	시스템/ 패턴테스트 결과를 리턴
 *	@param	String str
 *	@param	String pattern
 *	@return	boolean
 */
function sysIsValidPattern(str,pattern) {
	return (pattern.test(str)) ? true : false;
}

/**
 *	공용/ 숫자형식이고, 제한자리 범위일 경우 참을 리턴
 *	@param	String str
 *	@param	int limit
 *	@return	boolean
 */
function comIsValidNumLimit(str,limit) {
	return (str.isNumeric() && str.length <= limit) ? true : false;
}


/**
 *	공용/ 에러를 발생시키고, 경고창을 뛰우며, 해당필드에 포커를 준다.
 *	@param el [폼의 엘리먼트]
 *	@param msg [에러의 메시지]
 *	@return false [항상 false를 리턴한다]
 */
function formError(el,msg){
	alert(msg);
	try {
		el.focus();
	} catch (e) {}
	return false;
}

function raiseError(el,msg){
	return formError(el,msg);
}

/**
 *	공용/ 자동포커스, 폼을 인수로 받을수 있다
 *	@param [form]
 */
function setAutoFocus(f) {
	var el = null;
	if (typeof(f) == 'undefined') {
		if (document.forms.length < 1) return;
		else f = document.forms[0];
	}
	for (var i = 0 ; i < f.elements.length ; i++ ) {
		el = f.elements[i];
		if (el.type == "text" || el.type == "textarea" || el.type == "password") {
			try{
				el.focus();
				break;
			}catch(e) {
				continue;
			}
		}
	}
}


/**
 *	공용/ 필드에 정의한 maxbyte 항목을 체크 한다.
 *	db에서 정의한 필드길이를 제한할때 사용함
 *
 *	@param	[form]
 *	@param	boolean
 */
function checkMaxByte(f) {
	alert(f);
	var el = null;
	var retVal = true;
	if (typeof(f) == 'undefined') {
		if (document.forms.length < 1) return;
		else f = document.forms[0];
	}
	for (var i = 0 ; i < f.elements.length ; i++ ) {
		el = f.elements[i];
		if (el.getAttribute("maxByte") != null) {
			if (el.value.bytes() > el.getAttribute("maxByte")) {
				msg = "\n입력된 데이터의 길이가 최대길이 값을 초과 하였습니다.     \n\n입력데이터를 확인해 주세요!"; // \n\n최대길이 : "+el.getAttribute("maxByte")+" bytes\n\n입력길이 : "+el.value.bytes() +" bytes\n\n";
				/*
				if (el.type != "password") {
					msg += "["+cutString(el.value,50)+"]\n";
				}
				*/
				alert(msg);
				retVal = false;
				try{
					el.focus();
				}catch(e) {}
				break;
			}
		}
	}
	return retVal;
}


function cutString(str,len,dem) {
	if (typeof(dem) == 'undefined')	dem = "...";
	if(str.bytes() > len){
		return str.cut(len) + dem;
	}else{
		return str;
	}
}

/**
 * 	반올림 함수 num 자리 까지 표현 이후에서 반올림
 *	@param	float|double|int val
 *	@param	int num
 *	@return float|int
 */
function round3(val,num) {
	var retval;
	var dm = 1;
	for (var i=0;i < Math.abs(num) ;i++ ) dm *= 10;
	if (num < 0) retval = (parseInt(parseFloat(val) / dm + 0.5) * dm);
	else retval = (parseInt(parseFloat(val) * dm + 0.5) / dm);
	return retval;
}

/**
 * 	화면의 가운데로 새창을 열어줍니다.
 *	@param	String url
 *	@param	String window_name
 *	@param	int width
 *	@param	int height
 *	@param	String scroll 'yes':'no'
 *	@return window
 */
function popWindow(url,name,width,height,scroll) {
	var x = (screen.width - width) / 2 - 4;
	var y = (screen.height - height) / 2 - 16;
	var win = window.open(url,name,"left="+x+",top="+y+",width="+width+",height="+height+",scrollbars="+scroll);
	if (win) {
		win.focus();
		return win;
	}
}

/**
 * 	iframe 의 높이를 재 조정한다
 *	@param	iframe
 */
function iframeAutoResize(iframe) {
	if (typeof(iframe) == 'undefined' || typeof(iframe) != 'Object') return;
	iframe.setExpression('height',iframe.contentWindow.document.body.scrollHeight);
}

/**
 * 	체크상자의 모든 값을 선택(true)하거나, 해제(false) 합니다.
 *	@param	form
 *	@param	fieldname
 *	@param	boolean
 */
function checkboxSelectAll(f,fieldName,bool){
	if(typeof(f.elements[fieldName]) == 'undefined') return false;
	if(typeof(f.elements[fieldName].length) == 'undefined'){
		if(bool)f.elements[fieldName].checked = true;
		else f.elements[fieldName].checked = false;
	}else{
		for(var i=0;i<f.elements[fieldName].length;i++){
			if(bool)f.elements[fieldName][i].checked = true;
			else f.elements[fieldName][i].checked = false;
		}
	}
}

/**
 * 	체크상자의 전체선택(true) 후 하위항목을 해제(false)할 경우 전체선택(checkbox)를 해제(false)함
 *	@param	form
 *	@param	fieldname  전체선택버튼(checkbox)
 */
function checkboxSelectAllCancel(f, fieldName){
	if(typeof(f.elements[fieldName]) == 'undefined') return false;
	f.elements[fieldName].checked = false;
}

/**
 * 	체크상자 혹은 라디오버튼 그룹의 선택여부(갯수)를 리턴합니다.
 *	@param	form
 *	@param	fieldname
 *	@return int
 */
function checkboxSelectedCount(f,fieldName){
	if(typeof(f.elements[fieldName]) == 'undefined') return 0;
	if(typeof(f.elements[fieldName].length) == 'undefined') {
		if(f.elements[fieldName].checked) return 1;
		else return 0;
	}else{
		var cnt = 0;
		for(var i=0;i<f.elements[fieldName].length;i++) {
			if(f.elements[fieldName][i].checked)
				cnt++;
		}
		return cnt;
	}
}

/**
 * 	체크상자 혹은 라디오 버튼의 선택되어진 모든 값을 컴마로 구분하여 문자열로 돌려줍니다.
 *	@param	form
 *	@param	fieldName
 *	@param	fieldGubun
 *	@return String
 */
function checkboxSelectedValue(f,fieldName,fieldGubun){
	if(typeof(f.elements[fieldName]) == 'undefined') return;
	if(typeof(fieldGubun) == 'undefined') fieldGubun = ",";
	if(typeof(f.elements[fieldName].length) == 'undefined') {
		if(f.elements[fieldName].checked) return f.elements[fieldName].value;
		else return;
	}else{
		var checkedCount = 0;
		var tmp = "";
		for(var i=0;i<f.elements[fieldName].length;i++) {
			if(f.elements[fieldName][i].checked) {
				if (checkedCount != 0) tmp += fieldGubun;
				tmp += f.elements[fieldName][i].value;
				checkedCount ++;
			}
		}
		return tmp;
	}
}

/**
 * 	셀렉트 박스의 모든 옵션을 제거한다
 *	@param	selectbox
 */
function selectRemoveAll(el) {
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") return;
	for( i = el.length ; i >= 0 ; i-- ) el.options[i] = null;
}


/**
 *	공용/ 폼에 자동으로 값을 세팅 합니다.
 *
 *	@param 	form [폼]
 *	@param 	data [데이터는 자바스크립트의 배열로 키:값의 형태여야 합니다!]
 *	@see   	ebslang.com.uril/AutoFormScript.java 파일과 함께 사용합니다.
 *  @주의 :  	데이터에 들어가는 값중 textarea에 들어가고, 라인브레이크(엔터 값은) \n으로 초기화 해야 한다.
 */
function autoFormInput(form, data) {
	if (typeof(form) == 'undefined') return;
	var el,nm,i,j,x;
	for (i=0;i < form.elements.length;i++) {
		el = form.elements[i];
		nm = el.name;
		if (data[nm] != undefined) {
			switch (el.tagName) {
				case "SELECT" :
					if (data[nm]) {
						var tmp = data[nm].split(",");
						if (form.elements[nm].length > 1 && tmp.length > 1) {
							for (j=0; j<el.length; j++) {
								if (el == form.elements[nm][j] && typeof(tmp[j]) != 'undefined') {
									for (x=0;x<el.options.length;x++) {
										if (el.options[x].value == tmp[j]) {
											el.selectedIndex = x; break;
										}
									}
								}
							}
						}else{
							for (j=0;j<el.options.length;j++) {
								if (el.options[j].value == data[nm]) {
									el.selectedIndex = j; break;
								}
							}
						}
					}
					break;
				default :
					switch (el.type) {
						case "checkbox" :
							var xtmp = data[nm].split(",");
							for (x=0;x<xtmp.length;x++) {
								if (el.value == xtmp[x].trim()) el.checked = true;
							}
							break;
						case "radio" :
							if (el.value == data[nm]) el.checked = true;
							break;
						case "file" :
							break;
						default :
							el.value = data[nm];
							break;
					}
					break;
			}
		}
	}
}


/**
 *	SELECT TYPE 의 키값을 구분자로 넘겨 줍니다.
 *	@param	el	SELECT Type element
 *	@param	separator	String
 */
function selectGetStringKeys (el,separator) {
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectGetStringKeys(el[,separator])\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	if (typeof(separator) == 'undefined') separator = ",";
	var retVal = "";
	for (var i=0; i < el.length ; i++) {
		if (retVal != "") retVal += separator;
		retVal += el.options[i].value;
	}
	return retVal;
}


/**
 *	SELECT TYPE의 옵션의 위치를 이동시킵니다.
 *	@param	el	SELECT Type element
 *	@param	flag	String [top,bottom,up,down]
 */
function selectMoveItem(el,flag){
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectMoveItem(el,flag)\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	if (typeof(flag) == 'undefined' || !(flag.toLowerCase() == "top" || flag.toLowerCase() == "bottom" || flag.toLowerCase() == "up" || flag.toLowerCase() == "down")) {
		alert("\n[ERROR] selectMoveItem(el,flag)\n\nRequire flag! Or flag not in[top,bottom,up,down]!");
		return;
	}
	if(el.selectedIndex == -1){
		alert("이동을 원하는 항목을 선택해주세요!");
		return;
	}
	if (flag == "down") {
		if(el.selectedIndex == el.length-1) return;
		selectMoveStep(el,el.selectedIndex+1);
	}else if(flag == "up") {
		if(el.selectedIndex == 0) return;
		selectMoveStep(el,el.selectedIndex-1);
	}else if(flag == "top") {
		selectMoveTop(el);
	}else if(flag == "bottom") {
		selectMoveBottom(el);
	}
}

/**
 *	SELECT TYPE의 옵션의 위치를 최상위로 이동시킵니다.
 *	@param	el	SELECT Type element
 *	@see	selectMoveItem()
 */
function selectMoveTop(el){
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectMoveTop(el)\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	var option = new Option(el.options[el.selectedIndex].text,el.options[el.selectedIndex].value,false,true);
	el.options[el.selectedIndex] = null;
	for(i = el.length-1;i>=0;i--){
		var tmp = new Option(el.options[i].text,el.options[i].value);
		el.options[i+1] = tmp;
	}
	el.options[0] = option;
}

/**
 *	SELECT TYPE의 옵션의 위치를 최하위로 이동시킵니다.
 *	@param	el	SELECT Type element
 *	@see	selectMoveItem()
 */
function selectMoveBottom(el){
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectMoveBottom(el)\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	var option = new Option(el.options[el.selectedIndex].text,el.options[el.selectedIndex].value,false,true);
	el.options[el.selectedIndex] = null;
	el.options[el.length] = option;
}

/**
 *	SELECT TYPE의 옵션의 위치를 지정한 위치로 이동시킵니다.
 *	@param	el	SELECT Type element
 *	@param	to	int index
 *	@see	selectMoveItem()
 */
function selectMoveStep(el,to){
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectMoveStep(el)\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	if (typeof(to) == 'undefined' || isNaN(to)) {
		alert("\n[ERROR] selectMoveStep(el,to)\n\nRequire to! to not numeric");
		return;
	}
	if (el.length -1 < to ) return;
	var i = el.selectedIndex;
	var option = new Option(el.options[i].text,el.options[i].value,false,true);
	var option2 = new Option(el.options[to].text,el.options[to].value);
	el.options[to] = option;
	el.options[i] = option2;
}

/**
 *	SELECT에 옵션을 추가하는데 상단에 추가를 합니다.
 *	@param	el	SELECT Type element
 *	@param	val	value
 *	@param	text
 *	@param	sel	boolean : 선택여부
 */
function selectAddTop(el,val,text,sel) {
	if (typeof(el) == 'undefined' || el.tagName != "SELECT") {
		alert("\n[ERROR] selectAddTop(el)\n\nRequire el! Or el wasn't SELECT Type!");
		return;
	}
	if (typeof(val) == 'undefined') val = "";
	if (typeof(text) == 'undefined') text = "";
	if (typeof(sel) == 'undefined' || !(sel == true || sel == false)) sel = false;
	el.options[el.length] = new Option(text,val);
	el.selectedIndex = el.options.length - 1;
	selectMoveTop(el);
	if (sel == false) el.selectedIndex = null;
}


/**
 *	Hashtable Class
 *	자바스크립트 해시테이블
 */
function Hashtable() {
	this.length = 0;
	this.keys = new Array();
	this.values = new Array();

	this.add = function (key,value) {
		if (typeof(key) == 'undefined' && typeof(value) == 'undefined') return this.error("missing key,value reference 'HashTalbe.add(key,value)'");
		else if (typeof(value) == 'undefined') {
			value = key;
			key = this.length;
		}
		var index = this.isKey(key);
		if (index != -1) {
			this.values[index] = value;
		}else{
			this.keys[this.length] = key;
			this.values[this.length] = value;
			this.length += 1;
		}
	}
	this.remove = function (key) {
		if (typeof(key) == 'undefined') return this.error("missing key reference 'HashTalbe.remove(key)'");
		var index = this.isKey(key);
		if (index == -1) return;
		else{
			this.keys.remove(index);
			this.values.remove(index);
			this.length--;
		}
	}
	this.removeAll = function () {
		this.length = 0;
		this.keys.length = 0;
		this.values.length = 0;
	}
	this.isEmpty = function () {
		if (this.length == 0) return true;
		else return false;
	}

	/**
	 *	요청한 키값이 존재하는지 여부와 키의 인덱스를 리턴 합니다.
	 *	@param	key
	 *	@return index
	 *	@주의 : 키값이 존재하지 않으면, -1 을 리턴 합니다.
	 */
	this.isKey = function (key) {
		var retVal = -1;
		if (typeof(key) == 'undefined') return this.error("missing key reference 'HashTalbe.isKey(key)'");
		if (this.length == 0) return retVal;
		for (var i=0; i < this.length ;i++ ) {
			if (this.keys[i] == key) {
				retVal = i;
				break;
			}
		}
		return retVal;
	}

	/**
	 *	요청한 키에대한 값을 리턴 합니다.
	 *	@param	key
	 *	@return value
	 *	@주의 : 존재하지 않는 키를 요청하면, undefined를 리턴 합니다.
	 */
	this.get = function (key) {
		if (typeof(key) == 'undefined') return this.error("missing key reference 'HashTalbe.get(key)'");
		if (this.length == 0) return;
		var index = this.isKey(key);
		if (index == -1) return;
		else return this.values[index];
	}
	this.size = function () {
		return this.length;
	}
	this.getKeys = function () {
		return this.keys;
	}
	this.getValues = function () {
		return this.values;
	}
	this.toString = function () {
		var retVal = "";
		for(var i=0;i<this.length;i++) {
			if (i != 0) retVal +=" ,";
			retVal += this.keys[i] + "=" + this.values[i];
		}
		return "Neooz Javascript Hashtable V2006-06-09 : {"+retVal+"}";
	}
	this.copyFrom = function (org) {
		if (typeof(org) == 'undefined' || org.constructor != "Hashtable")
			return this.error("org is not Hashtable!! reference 'HashTalbe.copyFrom(org)'");

		for(var i=0;i<org.length;i++) {
			this.add(org.keys[i],org.values[i]);
		}
	}
	this.constructor = "Hashtable";
	this.fromSelect = function (el) {
		if (typeof(el) == 'undefined' || typeof(el.tagName) == 'undefined' || el.tagName != "SELECT")
			return this.error("el is not SELECT field!! reference 'HashTalbe.fromSelect(el)'");

		for (var i=0; i<el.options.length ;i++) {
			if (el.options[i].value != "") {
				this.add(el.options[i].value,el.options[i].text);
			}
		}
	}
	this.toSelect = function (el, val) {
		if (typeof(el) == 'undefined' || typeof(el.tagName) == 'undefined' || el.tagName != "SELECT")
			return this.error("el is not SELECT field!! reference 'HashTalbe.toSelect(el)'");

		while (el.length = 0) el.options[0] = null;
		for (var i=0; i< this.length ;i++) {
			var option = new Option(this.values[i],this.keys[i]);
			el.options[i] = option;
			if (typeof(val) != 'undefined' && val != null) {
				if (this.keys[i] == (val+"")) el.selectedIndex = i;
			}
		}
	}
	this.error = function (msg) {
		if (typeof(msg) == 'undefined') return;
		alert("\nERROR : "+msg+"\n");
		return;
	}
}


/******************************************************************************
 * prototype 모음
 *****************************************************************************/

//-----------------------------------------------------------------------------
// 문자 앞 뒤 공백을 제거 한다.
//-----------------------------------------------------------------------------
String.prototype.trim = function() { 
    return this.replace(/(^\s*)|(\s*$)/g, ""); 
}

//-----------------------------------------------------------------------------
// 내용이 있는지 없는지 확인하다.
//
// @return : true(내용 있음) | false(내용 없음)
//-----------------------------------------------------------------------------
String.prototype.notNull = function() {
	return (this == null || this.trim() == "") ? false : true; 
}

//-----------------------------------------------------------------------------
// 파일 확장자 반환
//
// @return : String
//-----------------------------------------------------------------------------
String.prototype.getExt = function() {
	var ext = this.substring(this.lastIndexOf(".") + 1, this.length);
	return ext;
}

//-----------------------------------------------------------------------------
// String에 따라서 받침이 있으면 은|이|을 을
//                 받침이 없으면 는|가|를 등을 리턴 한다.
// str.josa("을/를") : 구분자는 항상 "/"로
//
//
// @return : 은/는, 이/가 ...
//-----------------------------------------------------------------------------
String.prototype.josa = function(nm) {
	var nm1 = nm.trim().substring(0, nm.trim().indexOf("/"));
	var nm2 = nm.trim().substring(nm.trim().indexOf("/") + 1, nm.trim().length);
	var a = this.substring(this.length - 1, this.length).charCodeAt();
	a = a - 44032;
	var jongsung = a % 28;
	return (jongsung) ? nm1 : nm2;
}

//-----------------------------------------------------------------------------
// 숫자만 체크
//
// @return : true(맞는 형식) | false(잘못된 형식)
//-----------------------------------------------------------------------------
String.prototype.num = function() {
	return (this.trim().match(/^[0-9]+$/)) ? true : false;
}

//-----------------------------------------------------------------------------
// 영어만 체크
//
// @return : true(맞는 형식) | false(잘못된 형식)
//-----------------------------------------------------------------------------
String.prototype.eng = function() {
	return (this.trim().match(/^[a-zA-Z]+$/)) ? true : false;
}

//-----------------------------------------------------------------------------
// 영어와 숫자만 체크
//
// @return : true(맞는 형식) | false(잘못된 형식)
//-----------------------------------------------------------------------------
String.prototype.engnum = function() {
	return (this.trim().match(/^[0-9a-zA-Z]+$/)) ? true : false;
}

//-----------------------------------------------------------------------------
// 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작
//
// @return : true(맞는 형식) | false(잘못된 형식)
//-----------------------------------------------------------------------------
String.prototype.userid = function() {
	return (this.trim().match(/[a-zA-z]{1}[0-9a-zA-Z]+$/)) ? true : false;
}

//-----------------------------------------------------------------------------
// String length 반환
//
// @return : int
//-----------------------------------------------------------------------------
String.prototype.getLength = function() {
	return this.length;
}

//-----------------------------------------------------------------------------
// String length 반환 한글 2글자 영어 1글자
//
// @return : int
//-----------------------------------------------------------------------------
String.prototype.getByteLength = function() {
	var tmplen = 0;
	for (var i = 0; i < this.length; i++) {
		if (this.charCodeAt(i) > 127)
			tmplen += 2;
		else
			tmplen++;
	}
	return tmplen;
}

/******************************************************************************
 * Form에 관련된 메서드
 * 
 * 1. text, textarea
 *    required : 값이 없으면 경고
 *    num : 값에 숫자만 가능
 *    eng : 값에 영어만 가능
 *    han : 값에 한글만 가능
 *    numeng : 값에 숫자와 영어만 가능
 *    min=value : 최소 value자 이상
 *    max=value : 최대 value자 이하
 *    len=value : 정확하게 value자만 가능
 *    len=start~end : start자에서 end자까지 가능
 *    userid : 영어 숫자만 가능하고 첫문자는 영어로
 *    phone=value : value가 ""면 이 필드만 아니면 value가 같은 phone에 관련된 모든 필드 조사
 *    mobile=value : value가 ""면 이 필드만 아니면 value가 같은 mobile에 관련된 모든 필드 조사
 *    email=value : value가 ""면 이 필드만 아니면 value가 같은 email에 관련된 모든 필드 조사
 *    jumin=value : value가 ""면 이 필드만 아니면 value가 같은 jumin에 관련된 모든 필드 조사
 *    biznum=value : value가 ""면 이 필드만 아니면 value가 같은 biznum에 관련된 모든 필드 조사
 * 2. select
 *    required : 값이 없으면 경고
 * 3. radio
 *    required : 아무것도 선택되지 않으면 경고
 * 4. checkbox
 *    required : 아무것도 선택되지 않으면 경고
 *    min=value : 최소 value개 이상 가능
 *    max=value : 최대 value개 이하 가능
 *    len=value : 정확하게 value개 가능
 *    len=start~end : start개에서 end개 까지 가능
 * 5. file
 *    required :  아무것도 선택되지 않으면 경고
 *    allow=value : 확장자가 value 인 파일만 업로드 가능 (allow="gif jpg jpeg png")
 *    deny=value : 확장자가 value 인 파일은 업로드 불가능
 *****************************************************************************/
//-----------------------------------------------------------------------------
// FormUtil Class 생성
//-----------------------------------------------------------------------------
FormUtil = function(obj) {
	this.obj = obj;
}

//-----------------------------------------------------------------------------
// 폼 유효성 체크
//
// @return : true | false
//-----------------------------------------------------------------------------
FormUtil.prototype.success = function() {
	for(var i = 0; i < this.obj.elements.length; i++) {
		var f = this.obj[i];

		var fname = (f.getAttribute("FNAME") == null) ? f.name.toUpperCase() : fname = f.getAttribute("FNAME");

		// checkbox
		if(f.type == "checkbox") {
			if(!this.checkbox(f, fname)) {
				return false;
			}
		}
		// radio
		else if(f.type == "radio") {
			if(!this.radio(f, fname)) {
				return false;
			}
		}
		else { // text, textarea, password, select
			// <input required>
			if(f.getAttribute("REQUIRED") != null) {
				var ftype = f.type;
				var msg = " 입력 하세요";
				if(ftype.indexOf("select") >= 0 || ftype == "file") {
					msg = " 선택하세요";
				}

				if(!f.value.notNull()) {
					if (f.getAttribute("CHECKNO")!=null){
						alert(fname);
					}else{
						alert(fname + fname.josa("을/를") + msg);
						if(f.type!="hidden"){
							f.focus();
						}
					}
					return false;
				}
			}		

			// <input num>
			if(f.getAttribute("NUM") != null && f.value != "") {
				if(!f.value.num()) {
					alert(fname + fname.josa("은/는") + " 숫자로만 구성되어야 합니다.");
					f.value = "";
					f.focus();
					return false;
				}	
			}
			// <input eng>
			if(f.getAttribute("ENG") != null && f.value != "") {
				if(!f.value.eng()) {
					alert(fname + fname.josa("은/는") + " 영어로만 구성되어야 합니다.");
					f.value = "";
					f.focus();
					return false;
				}	
			}
			// <input numeng>
			if(f.getAttribute("NUMENG") != null && f.value != "") {
				if(!f.value.numeng()) {
					alert(fname + fname.josa("은/는") + " 숫자와 영어로만 구성되어야 합니다.");
					f.value = "";
					f.focus();
					return false;
				}	
			}
			// <input han>
			if(f.getAttribute("HAN") != null && f.value != "") {
				if(!f.value.kor()) {
					alert(fname + fname.josa("은/는") + " 한글로만 구성되어야 합니다.");
					f.value = "";
					f.focus();
					return false;
				}	
			}
			// <input userid>
			if(f.getAttribute("USERID") != null && f.value != "") {
				if(!f.value.userid()) {
					alert(fname + fname.josa("은/는") + " 숫자와 영어로만 구성되어야 하며\n\n첫문자는 반드시 영어로 시작해야 합니다.");
					f.value = "";
					f.focus();
					return false;
				}	
			}
			// <input type="file" deny="value">
			if(f.getAttribute("DENY") != null && f.type == "file" && f.value != "") {
				var ext = f.value.getExt().toLowerCase();
				var ext2 = f.getAttribute("DENY").toLowerCase();
				if(ext2.indexOf(ext) >= 0) {
					alert("확장자가 " + f.getAttribute("DENY").toUpperCase() + " 인 파일은 업로드 하실 수 없습니다.");
					return false;
				}
			}
			// <input type="file" deny="value">
			if(f.getAttribute("ALLOW") != null && f.type == "file" && f.value != "") {
				var ext = f.value.getExt().toLowerCase();
				var ext2 = f.getAttribute("ALLOW").toLowerCase();
				if(ext2.indexOf(ext) < 0) {
					alert("확장자가 " + f.getAttribute("ALLOW").toUpperCase() + " 인 파일만 업로드 가능 합니다.");
					return false;
				}
			}
			// <input max="10">
//			if(f.getAttribute("MAX") != null) {
//				return fc_chk_byte(f,f.getAttribute("MAX"));
//			}
			// <input prefix="5"> 구분자는 ,로 제한갯수확인
//			if(f.getAttribute("PREFIX") != null) {
//				alert("d");
//				return fc_chk_prefix(f,f.getAttribute("PREFIX"));
//			}
			// <input min="10">
			if(f.getAttribute("MIN") != null) {
				var tmpLen = f.value.getLength();
				if(tmpLen < parseInt(f.getAttribute("MIN"))) {
					alert(fname + fname.josa("은/는") + " " + f.getAttribute("MIN") + "자 이상으로 입력 하세요.");
					f.focus();
					return false;
				}
			}
			// <input len="10">
			if(f.getAttribute("LEN") != null) {
				var tmpLen = f.value.getLength();
				var val = f.getAttribute("LEN");
				if(val.indexOf(val.noNum()) > 0) {
					var num1 = val.substring(0, val.indexOf(val.noNum()));
					var num2 = val.substring(val.lastIndexOf(val.noNum()) + 1, val.length);
					if(tmpLen < parseInt(num1) || tmpLen > parseInt(num2)) {
						alert(fname + fname.josa("은/는") + " " + num1 + "자 이상 " + num2 + "자 이하로 입력하세요");
						f.focus();
						return false;
					}
				}
				else {
					if(tmpLen != parseInt(val)) {
						alert(fname + fname.josa("은/는") + " " + val + "자리 입니다.");
						f.focus();
						return false;
					}
				}
			}
		}
	}

	return true;
}

/**************************************
	입력글자 제한
**************************************/

/*
' ------------------------------------------------------------------
' Function : fc_chk_byte(aro_name)
' Description : 입력한 글자수를 체크
' Argument : Object Name(글자수를 제한할 컨트롤)
' Return : 
' ------------------------------------------------------------------
*/
function fc_chk_byte(f,max)
{
	var fname = (f.getAttribute("FNAME") == null) ? f.name.toUpperCase() : fname = f.getAttribute("FNAME");
	var ls_str = f.value;
	var li_str_len = ls_str.length;
	var li_max = max;
	var i = 0;
	var li_byte = 0;
	var li_len = 0;
	var ls_one_char = "";
	var ls_str2 = "";

	for(i=0; i< li_str_len; i++)
	{
		ls_one_char = ls_str.charAt(i);
		if (escape(ls_one_char).length > 4)
			li_byte += 2;
		else
			li_byte++;
		if(li_byte <= li_max)
			li_len = i + 1;
	}

	// 전체길이를 초과하면
	if(li_byte > li_max)
	{
		alert(fname + fname.josa("은/는") + "국문 " + li_max/2 + "자, 영문 "  + li_max +  "자 이상을 입력할수 없습니다.");
		return false;
	}
	return true;
}

/*
' ------------------------------------------------------------------
' Function : fc_chk_byte(aro_name)
' Description : 입력한 글자수를 체크
' Argument : Object Name(글자수를 제한할 컨트롤)
' Return : 
' ------------------------------------------------------------------
*/
function fc_chk_prefix(f,max)
{
	var fname = (f.getAttribute("FNAME") == null) ? f.name.toUpperCase() : fname = f.getAttribute("FNAME");

	if(f.value.indexOf(",") > 0)
	{
		arrPrefix = f.value.split(",");
	}
	else
	{
		return true;
	}
	
	if (arrPrefix.length>5)
	{
		alert(fname + fname.josa("은/는") + max + "개 이상을 입력할수 없습니다.");
		return false;		
	}
	return true;
}

//-----------------------------------------------------------------------------
// Checkbox 일때 유효성 체크
//
// @return : true | false
//-----------------------------------------------------------------------------
FormUtil.prototype.checkbox = function(f, fname) {
	var chkObj = eval("this.obj." + f.name);
	// 체크박스를 선택하여야 할 때
	var c = 0;
	var len = chkObj.length;
	if(len) {
		for(var j = 0; j < len; j++) {
			if(chkObj[j].checked) c++;
		}
	}
	else {
		if(chkObj.checked) c = 1;
	}
	
	if(f.getAttribute("REQUIRED") != null) {
		if(c == 0) {
			alert(fname + fname.josa("을/를") + " 선택하여 주세요");
			return false;
		}
	}
	if(f.getAttribute("MAX") != null) {
		var val = f.getAttribute("MAX");
		if(c > parseInt(val)) {
			alert(fname + fname.josa("은/는") + " 최대 " + val + "개 이하로 선택 하셔야 합니다.");
			return false;
		}
	}
	if(f.getAttribute("MIN") != null) {
		var val = f.getAttribute("MIN");
		if(c < parseInt(val)) {
			alert(fname + fname.josa("은/는") + " 최소 " + val + "개 이상 선택 하셔야 합니다.");
			return false;
		}
	}
	if(f.getAttribute("LEN") != null) {
		var val = f.getAttribute("LEN");
		if(val.indexOf(val.noNum()) > 0) {
			var num1 = val.substring(0, val.indexOf(val.noNum()));
			var num2 = val.substring(val.lastIndexOf(val.noNum()) + 1, val.length);
			if(c < parseInt(num1) || c > parseInt(num2)) {
				alert(fname + fname.josa("은/는") + " " + num1 + "개 이상 " + num2 + "개 이하로 선택 하셔야 합니다.");
				return false;
			}
		}
		else {
			if(c != parseInt(val)) {
				alert(fname + fname.josa("은/는") + " " + val + "개 선택 하셔야 합니다.");
				f.focus();
				return false;
			}
		}
	}	
	return true;
}

//-----------------------------------------------------------------------------
// Radio 유효성 체크
//
// @return : true | false
//-----------------------------------------------------------------------------
FormUtil.prototype.radio = function(f, fname) {
	var chkObj = eval("this.obj." + f.name);
	if(f.getAttribute("REQUIRED") != null) {
		var c = 0;
		var len = chkObj.length;
		if(len) {
			for(var j = 0; j < len; j++) {
				if(chkObj[j].checked) c++;
			}
		}
		else {
			if(chkObj.checked) c = 1;
		}

		if(c == 0) {
			alert(fname + fname.josa("을/를") + " 선택하여 주세요");
			return false;
		}
	}
	return true;
}

//-----------------------------------------------------------------------------
// 체크되어 있는 갯수를 리턴해 준다.
//
// @return : int
//-----------------------------------------------------------------------------
FormUtil.prototype.checked = function(btn) {
	var len = btn.length;
	var c = 0;
	if(len) {
		for(var j = 0; j < len; j++) {
			if(btn[j].checked) c++;
		}
	}
	else {
		if(btn.checked) c = 1;
	}
	return c;
}


function setSizeFrame(frameHeight) {
	$("#bbsList").attr("height",frameHeight);
}


function getOnlyListXslt(xmlUrl, xslUrl)
{	
	xml=loadXMLDoc(xmlUrl);
	xsl=loadXMLDoc(xslUrl);
	if (typeof XSLTProcessor != "undefined") {
		var xsl_proc = new XSLTProcessor ();
		xsl_proc.importStylesheet (xsl);
		$("#ajaxList").html("");
		var node = xsl_proc.transformToFragment (xml, document);
		document.getElementById("ajaxList").appendChild (node);
	}
	else if (typeof xml.transformNode != "undefined") {
		data=xml.transformNode(xsl);
		$("#onlyList").html(data);
	}
	else {
		document.getElementById("onlyList").innerHTML = "XSLT not supported in browser.";
	}
}


function loadXMLDoc(fname)
{
	var xmlDoc;
	if (window.ActiveXObject)
	{
	  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	}
	else if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc=document.implementation.createDocument("","",null);
	}
	else
	{
		alert('Your browser cannot handle this script');
	}
	xmlDoc.async=false;
	xmlDoc.load(fname);
	return(xmlDoc);
}


function toggleMenu(currMenu) {	
	//setCookie("smenu", currMenu, 1);
	var isclicked = false;
	if (document.all) {		
		if(typeof(document.all.menu.length) == "undefined")
		{
			if (document.all.menu.style.display=="none")
			{
				document.all.menu.style.display = "block"
			}
			else
			{
				document.all.menu.style.display = "none"
			}
		}
		for (i = 0; i < document.all.menu.length; i++ ){
			if (i == currMenu){
				document.all.menu[i].style.display = "block"
			}else {
				document.all.menu[i].style.display = "none"
			}
		}
	}
	else {
		return false
	}
}
// Tab Content

function initTabMenu(tabContainerID) {
	var tabContainer = document.getElementById(tabContainerID);
	var tabAnchor = tabContainer.getElementsByTagName("a");
	var i = 0;

	for(i=0; i<tabAnchor.length; i++) {
		if (tabAnchor.item(i).className == "tab")
			thismenu = tabAnchor.item(i);
		else
			continue;

		thismenu.container = tabContainer;
		thismenu.targetEl = document.getElementById(tabAnchor.item(i).href.split("#")[1]);
		thismenu.targetEl.style.display = "none";
		thismenu.imgEl = thismenu.getElementsByTagName("img").item(0);
		thismenu.onclick = function tabMenuClick() {
			currentmenu = this.container.current;
			if (currentmenu == this)
				return false;

			if (currentmenu) {
				currentmenu.targetEl.style.display = "none";
				if (currentmenu.imgEl) {
					currentmenu.imgEl.src = currentmenu.imgEl.src.replace("_on.gif", ".gif");
				} else {
					currentmenu.className = currentmenu.className.replace(" on", "");
				}
			}
			this.targetEl.style.display = "";
			if (this.imgEl) {
				this.imgEl.src = this.imgEl.src.replace(".gif", "_on.gif");
			} else {
				this.className += " on";
			}
			this.container.current = this;

			return false;
		};

		if (!thismenu.container.first)
			thismenu.container.first = thismenu;
	}
	if (tabContainer.first)
		tabContainer.first.onclick();
}

//show, hide 레이어
function showLayer(LayerNM) {
	document.getElementById(LayerNM).style.display='block';
}
function hideLayer(LayerNM) {
	document.getElementById(LayerNM).style.display='none';
}

//호출할때(탭이름,탭갯수,현재탭)
function tab(tab_name,max,tab_num) {
	for( i = 1; i <= max; i++){
		if (i == tab_num) { document.getElementById(tab_name+i).style.display = 'block'; }
		else { document.getElementById(tab_name+i).style.display = 'none'; }
	}
}

// rollover
function menuOver(imgEl) {
	imgEl.src = imgEl.src.replace(".gif", "_on.gif");
	imgEl.src = imgEl.src.replace(".png", "_on.png");
	imgEl.src = imgEl.src.replace(".jpg", "_on.jpg");
}
function menuOut(imgEl) {
	imgEl.src = imgEl.src.replace("_on.gif", ".gif");
	imgEl.src = imgEl.src.replace("_on.png", ".png");
	imgEl.src = imgEl.src.replace("_on.jpg", ".jpg");
}

// 퀵메뉴
function initMoving(target, position, topLimit, btmLimit) {
	if (!target)
		return false;

	var obj = target;
	obj.initTop = position;
	obj.topLimit = topLimit;
	obj.bottomLimit = document.documentElement.scrollHeight - btmLimit;

	obj.style.position = "absolute";
	obj.top = obj.initTop;
	obj.left = obj.initLeft;

	if (typeof(window.pageYOffset) == "number") {
		obj.getTop = function() {
			return window.pageYOffset;
		}
	} else if (typeof(document.documentElement.scrollTop) == "number") {
		obj.getTop = function() {
			return document.documentElement.scrollTop;
		}
	} else {
		obj.getTop = function() {
			return 0;
		}
	}

	if (self.innerHeight) {
		obj.getHeight = function() {
			return self.innerHeight;
		}
	} else if(document.documentElement.clientHeight) {
		obj.getHeight = function() {
			return document.documentElement.clientHeight;
		}
	} else {
		obj.getHeight = function() {
			return 500;
		}
	}

	obj.move = setInterval(function() {
		if (obj.initTop > 0) {
			pos = obj.getTop() + obj.initTop;
		} else {
			pos = obj.getTop() + obj.getHeight() + obj.initTop;
			//pos = obj.getTop() + obj.getHeight() / 2 - 15;
		}

		if (pos > obj.bottomLimit)
			pos = obj.bottomLimit;
		if (pos < obj.topLimit)
			pos = obj.topLimit;

		interval = obj.top - pos;
		obj.top = obj.top - interval / 3;
		obj.style.top = obj.top + "px";
	}, 30)
}
//달력 레이어

function DisplayLayer(strDisplayType,p1,p2,p3,date,event) {
 var objLayer = document.getElementById('schedule');
 var objFrame = document.getElementsByName('schedule')[0];
if (p1){
	p1 = "● 영화안내 : "+p1+"<br\><br\>";
}
if (p2){
	p2 = "● 공연안내 : "+p2+"<br\><br\>";
}
if (p3){
	p3 = "● 전시/행사안내 : "+p3;
}
 strDisplayType = strDisplayType.toLowerCase();

 if(strDisplayType == 'display') {

  if(objLayer.style.display != 'block') {
   objLayer.style.display = 'block';
   objLayer.innerHTML = "<table summary=\"프로그램 일정\" border=\"1\" width=\"100%\" bgcolor=\"#FFFFFF\" cellspacing=\"0\" cellpadding=\"2\" bordercolor=\"#e0e0e0\" style=\"border-collapse:collapse;\" id=\"ta\">"+
						"<colgroup>"+
						"<col/>"+
						"</colgroup>"+
						"<thead>"+
						"<tr bgcolor=\"#eeeeee\">"+
						"<th style=\"padding-left:10px;padding-top:10px;padding-bottom:10px;padding-right:10px;\">"+date+"의 프로그램 일정</th>"+
						"</tr>"+
						"<tr>"+
						"<td style=\"padding-left:10px;padding-top:10px;padding-bottom:10px;\">"+p1+p2+p3+
						"</td>"+
						"</tr>"+
						"</thead>"+
						"</table>";
  }

  objLayer.style.left = (event.clientX + 10)+'px';
  objLayer.style.top = (event.clientY + 10)+'px';
 } else if(strDisplayType == 'hide') {
  objLayer.style.display = 'none';
   objLayer.innerHTML = "";
 } else {
  //Empty.
 }
}

function bannerChange(num,obj){
	
	if (obj == "ori"){
		document.getElementById('main_banner0').style.display = "block";
	}
	if (obj == "min"){
		document.getElementById('main_banner'+(num+3)).style.display = "none";
		document.getElementById('main_banner'+num).style.display = "block";
	}
	if (obj == "max"){
		document.getElementById('main_banner'+(num-3)).style.display = "none";
		document.getElementById('main_banner'+num).style.display = "block";
	}
}


function ChangeImg(img,isrc){
	document.getElementById(img).src = isrc;
}



