if (typeof(COMMON_JS) == 'undefined') { // 한번만 실행
    var COMMON_JS = true;

    // 쿠키 입력
    function set_cookie(name, value, expirehours, domain) 
    {
        var today = new Date();
        today.setTime(today.getTime() + (60*60*1000*expirehours));
        document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
        if (domain) {
            document.cookie += "domain=" + domain + ";";
        }
    }

    // 쿠키 얻음
    function get_cookie(name) 
    {
        var find_sw = false;
        var start, end;
        var i = 0;

        for (i=0; i<= document.cookie.length; i++)
        {
            start = i;
            end = start + name.length;

            if(document.cookie.substring(start, end) == name) 
            {
                find_sw = true
                break
            }
        }

        if (find_sw == true) 
        {
            start = end + 1;
            end = document.cookie.indexOf(";", start);

            if(end < start)
                end = document.cookie.length;

            return document.cookie.substring(start, end);
        }
        return "";
    }

    // 쿠키 지움
    function delete_cookie(name) 
    {
        var today = new Date();

        today.setTime(today.getTime() - 1);
        var value = get_cookie(name);
        if(value != "")
            document.cookie = name + "=" + value + "; path=/; expires=" + today.toGMTString();
    }

	function Go(url)
	{
		location.href = url;
	}


/*
	function GetAbsolutePos(obj)
	{
		var position = new Object;
		position.x = 0;
		position.y = 0;

		if( obj ) {
		 position.x = obj.offsetLeft;
		 position.y = obj.offsetTop;

		 if( obj.offsetParent ) {
		  var parentpos = getAbsolutePos(obj.offsetParent);
		  position.x += parentpos.x;
		  position.y += parentpos.y;
		 }

		}
		return position;
	}
	*/

    // 브라우저에서 오브젝트의 왼쪽 좌표
    function pos_left(obj)
    {
        var parentObj = null;
        var clientObj = obj;
        //var left = obj.offsetLeft + document.body.clientLeft;
        var left = obj.offsetLeft;

        while((parentObj=clientObj.offsetParent) != null)
        {
            left = left + parentObj.offsetLeft;
            clientObj = parentObj;
        }

        return left;
    }

	/*
    function pos_right(obj)
    {
		var left = pos_left(obj);
		var right += left+obj.clientWidth; 
        return right;
    }
	*/

    // 브라우저에서 오브젝트의 상단 좌표
    function pos_top(obj)
    {
        var parentObj = null;
        var clientObj = obj;
        //var top = obj.offsetTop + document.body.clientTop;
        var top = obj.offsetTop;

        while((parentObj=clientObj.offsetParent) != null)
        {
            top = top + parentObj.offsetTop;
            clientObj = parentObj;
        }

        return top;
    }

	/*
	function pos_bottom(obj)
	{
		var top = pos_top(obj);
		var bottom = top+obj.clientHeight;
	}
	*/

	// 브라우저에 따른 이벤트 추가..
	// 지금은 그누보드 common.js에 추가 했지만..
	// 나중에 공통으로 뺀다.
	// 소스 참고: http://junho85.tistory.com/tag/JavaScript
	function AddEvent(obj, type, fn)  
	{  
	  if (obj.addEventListener)  
		  obj.addEventListener(type, fn, false);  
	  else if (obj.attachEvent)  
	  {  
		  obj["e"+type+fn] = fn;  
		  obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }  
		  obj.attachEvent("on"+type, obj[type+fn]);  
	  }  
	}  
}



var gmail;
if(!gmail) gmail = {};
if(!gmail.kevinpark1981) gmail.kevinpark1981 = {};
if(gmail.kevinpark1981.util) throw new Error("gmail.kevinpark1981.util 가 이미 정의 되어 있습니다.");

gmail.kevinpark1981.util = {

	// get object
	$:function(id) { return document.getElementById(id); },

	// 브라우저에 따른 이벤트 추가..
	// 소스 참고: http://junho85.tistory.com/tag/JavaScript
	AddEvent:function(obj, type, fn)  
	{  
		if(type=="dom:loaded")
		{
			if (document.addEventListener) 
				document.addEventListener("DOMContentLoaded", fn, false);
			else 
			{
				document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
				document.getElementById("__onDOMContentLoaded").onreadystatechange = function() {
					if (this.readyState == "complete") {
						this.onreadystatechange = null;
						fn();
					}
				};
			}
		}
		else
		{
			if (obj.addEventListener)  
				obj.addEventListener(type, fn, false);  
			else if (obj.attachEvent)  
			{  
				obj["e"+type+fn] = fn;  
				obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }  
				obj.attachEvent("on"+type, obj[type+fn]);  
			}  
		}
	},
	// 공백제거
	trim:function(s)
	{
		s += ''; // 숫자라도 문자열로 변환
		return s.replace(/^\s*|\s*$/g, '');
	},
	// 입력한 것이 숫자인지 판단.
	isNumber:function(s)
	{
		s = com.magicboard.util.trim(s); // 좌우 공백 제거
		if (s == '' || isNaN(s)) return false;
		return true;
	},

	// PHP date함수와 동일제작
	date:function( format, timestamp ) {
		var a, jsdate=(
			(typeof(timestamp) == 'undefined') ? new Date() : // Not provided
			(typeof(timestamp) == 'number') ? new Date(timestamp*1000) : // UNIX timestamp
			new Date(timestamp) // Javascript 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(){
				var 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: function(){
				if (f.n() === 12 && f.W() === 1) {
					return jsdate.getFullYear()+1;
				}
				if (f.n() === 1 && f.W() >= 52) {
					return jsdate.getFullYear()-1;
				}
				return jsdate.getFullYear();
			},
			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: function(){
				return pad(jsdate.getMilliseconds()*1000, 6);
			},

			// Timezone
			//e not supported yet
			I: function(){
				var DST = (new Date(jsdate.getFullYear(),6,1,0,0,0));
				DST = DST.getHours()-DST.getUTCHours();
				var ref = jsdate.getHours()-jsdate.getUTCHours();
				return ref != DST ? 1 : 0;
			},
			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: function(){
				var t = -jsdate.getTimezoneOffset()*60;
				return t;
			},

			// Full Date/Time
			c: function(){
				return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P();
			},
			r: function(){
				return f.D()+', '+f.d()+' '+f.M()+' '+f.Y()+' '+f.H()+':'+f.i()+':'+f.s()+' '+f.O();
			},
			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;
		});
	},

	// 날짜의 유효성 체크 유효성 체크에 통과하면 날짜를 반환한다.
	checkDate:function(year, month, day)
	{
		// 년도 검사
		if( !( 1800 <= year && year <= 4000 ) ) return '';

		//달 검사
		if( !( 0 < month &&  month < 13  ) ) return '';

		// 해당 년도 월의 마지막 날
		var tempDate = new Date(year, month, 0);
		var endDay = tempDate.getDate();

		//일 검사
		if( !( 0 < day && day <= endDay ) ) return '';

		return year+"-"+month+"-"+day;
	},

	// 잠깐 딜레이를 줄때 사용 millisecs
	delay:function(gap)
	{
		var then,now;
		then=new Date().getTime();
		now=then;
		while((now-then)<gap)
		{
			now=new Date().getTime();
		}
	},

	// URL 이동
	goUrl:function(url) { location.href = url; },

	// 이벤트 객에체서 키값 반환
	getKeyCode:function(e)
	{
		var evt = e || window.event;
		return evt.charCode || evt.keyCode;
	},

	// 입력받은 키가 숫자인지 체크
	isNumberKey:function(e)
	{
		var code = this.getKeyCode(e);
		if((code>=48 && code<=57) || (code>=96 && code<=105)) return true;
		return false;
	},

	// 입력받은 엔터인지 체크
	isEnterKey:function(e)
	{
		var code = this.getKeyCode(e);
		if(code==13) return true;
		return false;
	}
};

var com;
if(!com) com = {};
if(!com.qnote) com.qnote = {};
if(com.qnote.util) throw new Error("com.qnote.util가 이미 정의 되어 있습니다.");

com.qnote.util = {
	checkAjaxResult:function(result)
	{
		if(result.indexOf('error')!=-1)
		{
			var arr = result.split(':');
			var code = arr[1];
			var addmsg = '';
			var modestr = '';
			switch(code)
			{
				case 'add_day': modestr="추가"; break;
				case 'edit_day': modestr="수정"; break;
				case 'delete_day': modestr="삭제"; break;
				case 'BC': modestr="입력"; break;
			}
			switch(arr[2])
			{
				case 'today': addmsg="당일 거래만 "+modestr+" 가능합니다."; break; 
				case '1day': addmsg="하루전일 거래 까지만 "+modestr+" 가능합니다."; break; 
				case '2day': addmsg="이틀전 거래 까지만 "+modestr+" 가능합니다."; break; 
				case '3day': addmsg="삼일전 거래 까지만 "+modestr+" 가능합니다."; break; 
				case 'detail': addmsg=arr[3]+"이후 거래만 "+modestr+" 가능합니다."; break; 
				case 'BC': addmsg="마감일을 해지하고 다시하세요."; break; 
			}
			alert("마감일 설정으로 "+modestr+"할 수 없습니다.\n"+addmsg);
			return false;
		}
		return true;
	}
};

/* 
	내장 객체 prototype 선언
*/

// 숫자만 반환함
String.prototype.getNumber = function()
{
	return this.replace(/\D/g,"");
}

// 숫자에 컴마를 넣어준다.
String.prototype.instComma = function() 
{
	var s=this.getNumber();
	var l=s.length-3;
	while(l>0) {
		s=s.substr(0,l)+","+s.substr(l);
		l-=3;
	}
	return s;
}

// pc, pd검사 : 차변, 대변 폼인지 검사하기
String.prototype.isCD = function() 
{
	if(	this.indexOf('pc') != -1 || 
		this.indexOf('pd') != -1 || 
		this.indexOf('tc') != -1 || 
		this.indexOf('td') != -1) return true;
	else return false;
}
/*
IE 때문에 포기
if (!window.Event) var Event = function(){ };

//if(!Event) var Event = window.event;
// 이벤트 객에체서 키값 반환
Event.prototype.getKeyCode = function()
{
	return this.charCode || this.keyCode;
}
// 입력받은 키가 숫자인지 체크
Event.prototype.isNumberKey = function()
{
	var code = this.getKeyCode();
	if((code>=48 && code<=57) || (code>=96 && code<=105)) return true;
	return false;
}
// 입력받은 엔터인지 체크
Event.prototype.isEnterKey = function()
{
	var code = this.getKeyCode();
	if(code==13) return true;
	return false;
}
*/

// getElementById 쉽게 사용하기
//window.$ = com.magicboard.util.$;
//////////////////////////////////////////////

function GoUrl(url)
{
    location.href = url;
}

/* js 파일 내부에서 쉽게 다른 js파일을 인크루드 */
function include(filename)
{
	var head = document.getElementsByTagName('head')[0];
	
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script)
}

function del(url)
{
    if(confirm("정말로 삭제 하시겠습니까?\n삭제된 데이터는 복구할 수 없습니다."))
    {
        location.href = url;
    }
}

function $$(id)
{
    return document.getElementById(id);
}


/* 공백제거 */
function trim(s)
{
    s += ''; // 숫자라도 문자열로 변환
    return s.replace(/^\s*|\s*$/g, '');
}

/* 입력한 것이 숫자인지 판단.  */
function isNumber(s)
{
    s = trim(s); // 좌우 공백 제거
    if (s == '' || isNaN(s)) return false;
    return true;
}


function printSetup()
{
	var a = document.all.item('noprint');
	if (a!=null) {
		if (a.length!=null) {
			for (var i=0; i<a.length; i++) {
				a(i).style.display = window.event.type == 'beforeprint' ? 'none' :'';
			}
		} else {
			a.style.display = window.event.type == 'beforeprint' ? 'none' :'';
		}
	}
} 
function printArea(){window.print();}
window.onbeforeprint = function(e){
	var event = e || window.event;
	var noprint = document.getElementById('noprint');
	noprint.style.display = event.type=='beforeprint'?'none':'';
};
window.onafterprint = function(e){
	var event = e || window.event;
	var noprint = document.getElementById('noprint');
	noprint.style.display = event.type=='beforeprint'?'none':'';
};

function ShowEditMemo()
{
	document.getElementById("mb_memo").style.display = "none";
	document.getElementById("edit_mb_memo").style.display = "block";
}


