/**
 * @author Jan Jun Young (gmgjy@lycos.co.kr)
 * include file : prototype.js
 * charset : euc-kr
 * 마지막 수정일 (2008. 6. 14)
 */

//Ajax로딩 화면 표시 (사용안할시 주석처리)
/*
var myGlobalHandlers = {
	onCreate: function(){
		Element.show('systemWorking');
		$('systemWorking').style.top=Event.pointerY(event);
		$('systemWorking').style.left=Event.pointerX(event);
	},

	onComplete: function() {
		if (Ajax.activeRequestCount == 0){
			Element.hide('systemWorking');
		}
	}
};
Ajax.Responders.register(myGlobalHandlers);
MSG = "<img src='http://211.115.213.155/wingstudy_cms/img/loading.gif' />";
document.write("<div id='systemWorking' style='position:absolute;display:none;z-index:999'>"+MSG+"</div>");
*/

var SC	=  new Object();
/****************************************************************************/
// url로 param을 전달하여 결과 페이지를 ELementId에 나탄낸다.
/****************************************************************************/
//Input : URL, 파라메터, 변경시킬 DIV태그id, 전송타입, eval실행 여부
SC.Ajax	= function(url, param, ElementId, $reqType, $evalScripts)
{
	if (!$reqType || $reqType == "")		{ $reqType	= 'GET';}
	if (!$evalScripts || $evalScripts == "")	{ $evalScripts	= false;}

	var myAjax	= new Ajax.Updater(
			{success: ElementId}, 				//성공시 화면 변경
			url, 						//URL
			{
				method : $reqType.toUpperCase(), 	//전송방식  기본값 POST
				parameters : param, 			//파라메터
				onFailure : reportError,		//실페시 에러 출력
				evalScripts: $evalScripts
			});
}
//에러발생시
function reportError()
{
	alert('에러발생. 잠시후 다시 시도하여 주세요.');
}


//url 의 내용을 $frequency 간격마다 ElementId업데이트 해서 보여주기
SC.PeriodicalUpdater = function(url, ElementId, $frequency, $decay, $reqType)
{
	if (!$frequency || $frequency == "")	{ $frequency	= 3.0; }
	if (!$decay || $decay =="")		{ $decay 	= 1; }				//reqType미지정시 기본값 POST
	if (!$reqType || $reqType == "")	{ $reqType 	= 'post';}

	var myAjax	= new Ajax.PeriodicalUpdater(
			ElementId,
			url,
			{
				method: 'post',
				frequency: $frequency,
				decay: $decay
			}
			);
}


//responseText로 받아오기
/*
SC.getText	= function(url, param, $reponseType, $reqType)
{
	var reponseType	= ($reponseType) ? $reponseType : "TEXT";
	var reqType	= ($reqType) ? $reqType : "POST";
	var req	= Ajax.getTransport();
	req.open(reqType, url, true);
	req.onreadystatechange = function(){
		if (req.readyState == 4)
		{
			if (req.status == 200)
			{
				if (reponseType.toUpperCase() == "TEXT") {
					return req.responseText;
				} else {
					return req.responseXML;
				}

			}
		}
	}
	if (reqType.toUpperCase() == "POST") {
		req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		req.send(param);
	}
}
*/
/***************************************세부적 폼값 체크***************************************************
*
* chk 값이 y 일경우 무조건 체크, n 일경우 값이 있으면 체크
------------------------------------------------------------------------
* @objform    : 폼이름(this 혹은 document.formname)
------------------------------------------------------------------------
* 사용법 예제 (영어,숫자만 4~12글자로 받는다)
<table border="1">
<form name="member_form" method="post" action="" onsubmit="return JY.checkForm(this)">
<tr>
    <td>비밀번호</td>
    <td><input type="password" name="passwd" chk="y" msg="비밀번호를" kind="eng+num" len="4-12">
    	<input type='submit'>
    	</td>
</tr>
</form>
</table>
****************************************************************************************/
SC.checkForm = function(objform)
{
	var obj		= objform;
	var count	= obj.length;
	var chk		= '';
	var msg		= '';
	var kind	= '';
	var from	= '';
	var item	= '';
	var len		= '';
	var ex_len	= '';
	var len_chk	= '';
	var len_text	= '';
	var min		= '';
	var max		= '';
	var result	= '';
	var first	= '';
	var ret_chk	= false;

	for (var x = 0; x < count; x++)
	{
		item = obj.elements[x];
		if (item.name)
		{
		    if (item.getAttribute('chk'))
		    {
		    	chk	= item.getAttribute('chk');	//value 있을시 검사n   있거나 없거나 검사y
		        msg	= item.getAttribute('msg');	//alert메세지 앞부분 한글
		        kind	= item.getAttribute('kind');	//value에 허용조건 (num,eng,kor)
		        from	= item.getAttribute('from');	//value값 일치시킬 name값
		        len	= item.getAttribute('len');	//textbox value 허용 범위

		        if (chk == 'y' || chk == 'Y')	{ first = "item.value == '' || ("; }
		        else				{ first = "item.value && ("; }

		        if (len)
		        {
		            ex_len	= len.split('-');
		            min		= ex_len[0];
		            max		= ex_len[1];

		            if (min == max)	//길이가 정해져있다면 해당글자 표시
		            {
		                len_chk 	= " || item.value.length != "+min;
		                len_text	= " ["+min+" 글자]";
		            }
		            else
		            {			//범위가 정해져있다면 범위표시  (n ~ n)
		                len_chk		= " || item.value.length < "+min+" || item.value.length > "+max;
		                len_text 	= " ["+min+" ~ "+max+" 글자]";
		            }
		        }

		        //검사 항목
		        switch (kind)
		        {
		        	//숫자로만
				case 'num':
					result  = "var num_pattern = /(^[0-9]+$)/gi;";
					result += "if ("+first+"!num_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 숫자로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//영어로만
				case 'eng':
					result  = "var eng_pattern = /(^[a-zA-Z]+$)/gi;";
					result += "if ("+first+"!eng_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 영어로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
				break;
				//한글로만
				case 'kor':
					result  = "var kor_pattern = /(^[ㄱ-힣]+$)/gi;";
					result += "if ("+first+"!kor_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 한글로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//from='필드'  와 일치검사시
				case 'like':
					result  = "var obj_from = document.getElementsByName('"+from+"')[0];";
					result += "if (obj_from.value && (obj_from.value !== item.value"+len_chk+")) {";
					result += "alert('"+msg+" 일치 하지 않습니다."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//영어 한글
				case 'kor+eng':
				case 'eng+kor':
					result  = "var eng_kor_num_pattern = /(^[a-zA-Zㄱ-힣]+$)/gi;";
					result += "if ("+first+"!eng_kor_num_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 영문 및 한글로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//영어 한글 숫자
				case 'num+eng+kor':
				case 'kor+num+eng':
				case 'eng+num+kor':
				case 'num+kor+eng':
				case 'kor+eng+num':
				case 'eng+kor+num':
					result  = "var eng_kor_num_pattern = /(^[a-zA-Z0-9ㄱ-힣]+$)/gi;";
					result += "if ("+first+"!eng_kor_num_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 영문,한글 및 숫자로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//영어 숫자
				case 'num+eng':
				case 'eng+num':
					result  = "var eng_num_pattern = /(^[a-zA-Z0-9]+$)/gi;";
					result += "if ("+first+"!eng_num_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 숫자 및 영어로만 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//이메일
				case 'email':
					result  = "var email_pattern = /(^[a-zA-Z0-9]+@[a-zA-Z0-9]+[a-zA-Z0-9-]+[a-zA-Z0-9]+\.[a-zA-Z]+[.a-zA-Z]+$)/gi;";
					result += "if ("+first+"!email_pattern.test(item.value)"+len_chk+")) {";
					result += "alert('"+msg+" 정확히 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;
				//주민등록번호(사용법 : 주민번호 뒷부분 필드에 kind='jumin_number' from='앞부분필드' chk='y' msg='아무거나')
				case 'jumin':
				case 'jumin_number':
					var jumin_number_chk	= false;
					var obj_from		= document.getElementsByName(from)[0];
					if (chk == 'y' || chk == 'Y')
					{
						jumin_number_chk = true;
					}
					else
					{
						if (obj_from.value || item.value) jumin_number_chk = true;
					}

					if (jumin_number_chk == true)
					{
						result  = "var jumin_number_check = juminNumberChk('"+obj_from.value+"-"+item.value+"');";
						result += "if (jumin_number_check == false) {";
						result += "alert('"+msg+" 정확히 입력하세요."+len_text+"');";
						result += "item.focus();";
						result += "ret_chk = true;";
						result += "}";
						eval(result);
						if (ret_chk == true) return false;
					}
					break;

				default:
					result  = "if ("+first+"item.value.trim() == ''"+len_chk+")) {";
					result += "alert('"+msg+" 입력하세요."+len_text+"');";
					result += "item.focus();";
					result += "ret_chk = true;";
					result += "}";
					eval(result);
					if (ret_chk == true) return false;
					break;

		        }//switch 종료
		    }
		}
		chk		= '';
		msg		= '';
		kind		= '';
		from		= '';
		item		= '';
		len		= '';
		ex_len		= '';
		len_chk		= '';
		len_text	= '';
		min		= '';
		max		= '';
		result		= '';
		first		= '';
		ret_chk		= false;
	}//for 종료

	function juminNumberChk(jumin_number)
	{
		jumin_number	= jumin_number.replace('-', '');
		if (jumin_number.length > 13) return false;
		var last	= jumin_number.substring(13, 12);
		var arr		= new Array(2,3,4,5,6,7,8,9,2,3,4,5);
		var val		= 0;

		for (var i = 0; i < 12; i++)
		{
	   	 	val += arr[i] * jumin_number.substring(i, i+1);
		}

		val	= val%11;
		if (11 - val == last)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

       return true;
}



String.prototype.trim = function(){
	return this.replace(/^\s+|\s+$/g,'');
}
String.prototype.rtrim = function(){
	return this.replace(/\s+$/g,'');
}
String.prototype.ltrim = function(){
	return this.replace(/^\s+/g,'');
}



//간단 text필드 폼검사
function checkForm(form)
{
	var e = form.elements;

	for (k = 0; k < e.length; k++)
	{
		var checkAttr	= e[k].getAttribute('required');
		if (checkAttr == null)	{ continue; }
		if (e[k].value != '')	{ continue; }
		alert(checkAttr + '을(를) 입력하세요');
		if (e[k].type != 'hidden')	{ e[k].focus(); }
		else				{ e[(k - 1)].focus(); }
		return false;
	}
}

//
function numCheck(s)
{
	var acceptCode	= new Array(8, 13, 46, 9, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 37, 38, 39, 40);
	var ck		= true;

	for (i = 0; i < acceptCode.length; i++)
	{
		if (event.keyCode == acceptCode[i])	{ ck = false; break; }
	}

	if (ck)		{ event.returnValue = false; return false; }
}


//url 복사하기
function ClipBoard(url)
{
	window.clipboardData.setData('Text',url);
	window.alert("주소가 복사되었습니다.");
}


//인쇄하기
var initBody;
function beforePrint()
{
	initBody = document.body.innerHTML;
	document.body.innerHTML = document.getElementById('main').innerHTML;
}
function afterPrint()
{
	document.body.innerHTML = initBody;
}
function printArea()
{
	window.print();
}
window.onbeforeprint = beforePrint;	//인쇄직적에 body백업
window.onafterprint = afterPrint;	//인쇄후 다시 되돌림


/**
  * 쿠키값 추출
  * @param cookieName 쿠키명
  */
function getCookie( cookieName )
{
	var search = cookieName + "=";
	var cookie = document.cookie;

// 현재 쿠키가 존재할 경우
	if ( cookie.length > 0 )
	{
		// 해당 쿠키명이 존재하는지 검색한 후 존재하면 위치를 리턴.
		startIndex = cookie.indexOf( cookieName );

		// 만약 존재한다면
		if ( startIndex != -1 )
		{
			// 값을 얻어내기 위해 시작 인덱스 조절
			startIndex += cookieName.length;
			// 값을 얻어내기 위해 종료 인덱스 추출
			endIndex = cookie.indexOf( ";", startIndex );
			// 만약 종료 인덱스를 못찾게 되면 쿠키 전체길이로 설정
			if ( endIndex == -1) endIndex = cookie.length;
			// 쿠키값을 추출하여 리턴
			return unescape( cookie.substring( startIndex + 1, endIndex ) );
		}
		else
		{
			// 쿠키 내에 해당 쿠키가 존재하지 않을 경우
			return false;
		}
	}
	else
	{
		// 쿠키 자체가 없을 경우
		return false;
	}
}



 /**
  * 쿠키 설정
  * @param cookieName 쿠키명
  * @param cookieValue 쿠키값
  * @param expireDay 쿠키 유효날짜
  */

function setCookie( name, value, expiredays )
{
	var todayDate = new Date();
	todayDate.setDate( todayDate.getDate() + expiredays );
	document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}



 /**
  * 쿠키 삭제
  * @param cookieName 삭제할 쿠키명
  */
 function deleteCookie( cookieName )
 {
	var expireDate = new Date();
	//어제 날짜를 쿠키 소멸 날짜로 설정한다.
	expireDate.setDate( expireDate.getDate() - 1 );
	document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString() + "; path=/";
 }


 /**
  * 전체 쿠키 출력
  */
function viewCookie()
{
	var ckval;
	if ( document.cookie.length > 0 )
		ckval	= document.cookie;
	else
		ckval	= "저장된 쿠키가 없습니다.";
	alert(ckval);
}

/****************************************************************************************
//objform의 objary셀렉트박스의 값을 txtbox텍스트 박스로 입력
<select onchange=selectEmail(폼(this.form), 셀렉트박스(this), 텍스트박스id)>
****************************************************************************************/
function selectEmail(objform, objary, txtbox)
{  					//셀렉트 박스 선택후 이벤트
	var form	= objform;
	var opts	= objary.options;
	var sIndex	= objary.selectedIndex; 		//선택한option
	if (opts[sIndex].value!="s" && opts[sIndex].value!="w")
	{  							//메일선택, 직접입력을 제외한 나머지 selectedIndex값 textbox로 이동
		$(txtbox).value		= opts[sIndex].text;
		$(txtbox).readOnly	= true;  		//주소 직접입력할수 없음
	}
	else if (opts[sIndex].value=="w")
	{   							//직접입력인 경우는 readOnly해제, focus이동후 직접입력
		$(txtbox).value		= "";
		$(txtbox).readOnly	= false;   		//주소 직접입력 가능
		$(txtbox).focus();
	}
}


// {{{ mktime
function mktime() {
    // Get Unix timestamp for a date
    //
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_mktime/
    // +       version: 804.1914
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: baris ozdil
    // +      input by: gabriel paderni
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FGFEmperor
    // *     example 1: mktime( 14, 10, 2, 2, 1, 2008 );
    // *     returns 1: 1201871402

    var no, ma = 0, mb = 0, i = 0, d = new Date(), argv = arguments, argc = argv.length;
    d.setHours(0,0,0); d.setDate(1); d.setMonth(1); d.setYear(1972);

    var dateManip = {
        0: function(tt){ return d.setHours(tt); },
        1: function(tt){ return d.setMinutes(tt); },
        2: function(tt){ set = d.setSeconds(tt); mb = d.getDate() - 1; return set; },
        3: function(tt){ set = d.setMonth(parseInt(tt)-1); ma = d.getFullYear() - 1972; return set; },
        4: function(tt){ return d.setDate(tt+mb); },
        5: function(tt){ return d.setYear(tt+ma); }
    };

    for( i = 0; i < argc; i++ )
    {
        no = parseInt(argv[i]);
        if(no && isNaN(no))
        {
            return false;
        }
        else if(no)
        {
            // arg is number, let's manipulate date object
            if(!dateManip[i](no)){
                // failed
                return false;
            }
        }
    }

    return Math.floor(d.getTime()/1000);
}// }}}

// {{{ date
function date ( format, timestamp ) {
    // Format a local time/date
    //
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_date/
    // +       version: 804.1712
    // +   original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
    // +      parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: MeEtc (http://yass.meetcweb.com)
    // +   improved by: Brad Touesnard
    // +   improved by: Tim Wiel
    // *     example 1: date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400);
    // *     returns 1: '09:09:40 m is month'
    // *     example 2: date('F j, Y, g:i a', 1062462400);
    // *     returns 2: 'September 2, 2003, 2:26 am'

    var a, jsdate=((timestamp) ? new Date(timestamp*1000) : new Date());
    var pad = function(n, c){
        if( (n = n + "").length < c ) {
            return new Array(++c - n.length).join("0") + n;
        } else {
            return n;
        }
    };
    var txt_weekdays = ["Sunday","Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"];
    var txt_ordin = {1:"st",2:"nd",3:"rd",21:"st",22:"nd",23:"rd",31:"st"};
    var txt_months =  ["", "January", "February", "March", "April",
        "May", "June", "July", "August", "September", "October", "November",
        "December"];

    var f = {
        // Day
            d: function(){
                return pad(f.j(), 2);
            },
            D: function(){
                t = f.l(); return t.substr(0,3);
            },
            j: function(){
                return jsdate.getDate();
            },
            l: function(){
                return txt_weekdays[f.w()];
            },
            N: function(){
                return f.w() + 1;
            },
            S: function(){
                return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th';
            },
            w: function(){
                return jsdate.getDay();
            },
            z: function(){
                return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0;
            },

        // Week
            W: function(){
                var a = f.z(), b = 364 + f.L() - a;
                var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;

                if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
                    return 1;
                } else{

                    if(a <= 2 && nd >= 4 && a >= (6 - nd)){
                        nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
                        return date("W", Math.round(nd2.getTime()/1000));
                    } else{
                        return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
                    }
                }
            },

        // Month
            F: function(){
                return txt_months[f.n()];
            },
            m: function(){
                return pad(f.n(), 2);
            },
            M: function(){
                t = f.F(); return t.substr(0,3);
            },
            n: function(){
                return jsdate.getMonth() + 1;
            },
            t: function(){
                var n;
                if( (n = jsdate.getMonth() + 1) == 2 ){
                    return 28 + f.L();
                } else{
                    if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
                        return 31;
                    } else{
                        return 30;
                    }
                }
            },

        // Year
            L: function(){
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0;
            },
            //o not supported yet
            Y: function(){
                return jsdate.getFullYear();
            },
            y: function(){
                return (jsdate.getFullYear() + "").slice(2);
            },

        // Time
            a: function(){
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function(){
                return f.a().toUpperCase();
            },
            B: function(){
                // peter paul koch:
                var off = (jsdate.getTimezoneOffset() + 60)*60;
                var theSeconds = (jsdate.getHours() * 3600) +
                                 (jsdate.getMinutes() * 60) +
                                  jsdate.getSeconds() + off;
                var beat = Math.floor(theSeconds/86.4);
                if (beat > 1000) beat -= 1000;
                if (beat < 0) beat += 1000;
                if ((String(beat)).length == 1) beat = "00"+beat;
                if ((String(beat)).length == 2) beat = "0"+beat;
                return beat;
            },
            g: function(){
                return jsdate.getHours() % 12 || 12;
            },
            G: function(){
                return jsdate.getHours();
            },
            h: function(){
                return pad(f.g(), 2);
            },
            H: function(){
                return pad(jsdate.getHours(), 2);
            },
            i: function(){
                return pad(jsdate.getMinutes(), 2);
            },
            s: function(){
                return pad(jsdate.getSeconds(), 2);
            },
            //u not supported yet

        // Timezone
            //e not supported yet
            //I not supported yet
            O: function(){
               var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
               if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
               return t;
            },
            P: function(){
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },
            //T not supported yet
            //Z not supported yet

        // Full Date/Time
            c: function(){
                return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P();
            },
            //r not supported yet
            U: function(){
                return Math.round(jsdate.getTime()/1000);
            }
    };

    return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){
        if( t!=s ){
            // escaped
            ret = s;
        } else if( f[s] ){
            // a date function exists
            ret = f[s]();
        } else{
            // nothing special
            ret = s;
        }

        return ret;
    });
}// }}}


String.prototype.nl2br = function(){
	var t = this.replace(/\r\n/g,'\n');
	t = t.replace(/\r/g,'\n');
	t = t.replace(/\n/g,'<br />\n');
	return t;
}
function nl2br(str)
{
	return str.nl2br();
}




