String.prototype.bytes = function() {
	var str = this;
	var l = 0;
	var len = str.length;
	for (var i=0; i<len; i++) l += (str.charCodeAt(i) > 128) ? 2 : 1;
	return l;
};

String.prototype.bytes2 = function() {
	var str = this;
	var l = 0;
	var len = str.length;
	for (var i=0; i<len; i++) l += (str.charCodeAt(i) > 128) ? 1 : 1;
	return l;
};

String.prototype.cut = function(leng, tail) {
	var str = this;
	var l = 0;
	var tail = tail ? tail : '';
	var len = str.length;
	for (var i=0; i<len; i++) {
		l += (str.charCodeAt(i) > 128) ? 2 : 1;
		if(l > leng) return str.substring(0,i)+tail;
	}
	return str;
};

String.prototype.cut2 = function(leng, tail) {
	var str = this;
	var l = 0;
	var tail = tail ? tail : '';
	var len = str.length;
	for (var i=0; i<len; i++) {
		l += (str.charCodeAt(i) > 128) ? 1 : 1;
		if(l > leng) return str.substring(0,i)+tail;
	}
	return str;
};


var date_val = new Date();
var datepicker_json = {
	dateFormat: "yy-mm-dd",    /* 날짜 포맷 */ 
	prevText: 'prev',
	nextText: 'next',
	showButtonPanel: true,    /* 버튼 패널 사용 */ 
	changeMonth: true,        /* 월 선택박스 사용 */ 
	changeYear: true,        /* 년 선택박스 사용 */ 
	showOtherMonths: true,    /* 이전/다음 달 일수 보이기 */ 
	selectOtherMonths: true,    /* 이전/다음 달 일 선택하기 */ 
	closeText: '닫기', 
	currentText: '초기화', 
	showMonthAfterYear: true,        /* 년과 달의 위치 바꾸기 */ 
	/* 한글화 */ 
	monthNames : ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'], 
	monthNamesShort : ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'], 
	dayNames : ['일', '월', '화', '수', '목', '금', '토'],
	dayNamesShort : ['일', '월', '화', '수', '목', '금', '토'],
	dayNamesMin : ['일', '월', '화', '수', '목', '금', '토'],
	showAnim: 'slideDown',
	yearRange:  "-100:+0",
	onSelect:function(dateText, inst){
		var this_year = $(this).attr("this_year");
		var this_month = $(this).attr("this_month");
		if(this_year!=null) util.datepicker_this_year_check($(this));
		if(this_month!=null) util.datepicker_this_month_check($(this));
	}
};

// : 20세부터 나오기
var datepicker_json_birth = jQuery.extend(true, {}, datepicker_json);
datepicker_json_birth.yearRange = "1950:"+(date_val.getFullYear()-20);
var year_arr = datepicker_json_birth.yearRange.split(":");
datepicker_json_birth.maxDate = new Date((date_val.getFullYear()-20)+'-'+(date_val.getMonth() + 1)+'-'+date_val.getDate());
var prettyDate = year_arr[1] + '-' + (date_val.getMonth() + 1) + '-' + date_val.getDate();
datepicker_json_birth.defaultDate = prettyDate;


// : 16세부터 나오기
var datepicker_json_birth16 = jQuery.extend(true, {}, datepicker_json);
datepicker_json_birth16.yearRange = "1950:"+(date_val.getFullYear()-16);
var year_arr = datepicker_json_birth16.yearRange.split(":");
var prettyDate = year_arr[1] + '-' + (date_val.getMonth() + 1) + '-' + date_val.getDate();
datepicker_json_birth16.defaultDate = prettyDate;

// : 마감일
var datepicker_json_enddate = jQuery.extend(true, {}, datepicker_json);
datepicker_json_enddate.minDate = date_val;
datepicker_json_enddate.yearRange = date_val.getFullYear()+":"+(date_val.getFullYear()+10);

// : 입주일
var datepicker_json_live_date = jQuery.extend(true, {}, datepicker_json);
datepicker_json_live_date.yearRange = "1950:"+(date_val.getFullYear()+10);


$.fn.setPreview = function(opt){
    "use strict"
    var defaultOpt = {
        inputFile: $(this),
        img: null,
        w: 200,
        h: 200
    };

    $.extend(defaultOpt, opt);
 
    var previewImage = function(){
        if (!defaultOpt.inputFile || !defaultOpt.img) return;
 
        var inputFile = defaultOpt.inputFile.get(0);
        var img       = defaultOpt.img.get(0);
 
        // FileReader
        if (window.FileReader) {
            // image 파일만
            if (!inputFile.files[0].type.match(/image\//)) return;
 
            // preview
            try {
                var reader = new FileReader();
                reader.onload = function(e){
                    img.src = e.target.result;
                    img.style.width  = defaultOpt.w+'px';
                    img.style.height = defaultOpt.h+'px';
                    img.style.display = '';
                }
                reader.readAsDataURL(inputFile.files[0]);
            } catch (e) {
                // exception...
            }
        // img.filters (MSIE)
        } else if (img.filters) {
            inputFile.select();
            inputFile.blur();
            var imgSrc = document.selection.createRange().text;
 
            img.style.width  = defaultOpt.w+'px';
            img.style.height = defaultOpt.h+'px';
            img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enable='true',sizingMethod='scale',src=\""+imgSrc+"\")";            
            img.style.display = '';
        // no support
        } else {
            // Safari5, ...
        }
    };
 
    // onchange
	/*
    $(this).change(function(){
		alert("A");
        previewImage();
    });
	*/
	previewImage();
};

var util = function() {

	this.date = new Date();

	this.is_ie = function() {
		if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1) return false;
		if(navigator.userAgent.toLowerCase().indexOf("msie") != -1) return true;
		if(navigator.userAgent.toLowerCase().indexOf("windows nt") != -1) return true;
		return false;
	}

	this.search_move = function(el, url) {
		var form = el;
		if(url) location.href = url+encodeURIComponent(form.keyword.value);
		else location.href = root+"search/"+encodeURIComponent(form.keyword.value);
		return false;
	}

	this.check_text_put = function(el, c, chk_int) {
		var _length = $(el.form).find("[name='"+el.name+"']:checked").length;
		chk_int = chk_int ? chk_int : 3;
		if(el.checked===true && _length>chk_int) {
			alert("3개까지 체크 가능합니다.");
			el.checked = false;
			return false;
		}
		var arr = [];
		var count = 0;
		$(el.form).find("[name='"+el.name+"']:checked").each(function(){
			arr[count] = trim($(this).closest("label").text());
			count++;
		});
		if(c) $(c).val(arr.join(", "));
	}

	this.checkbox_box_change = function(obj, c, num) {
		var _html = '';
		var _object = obj.find("label");
		var _len = _object.length;
		var _width = (100/num)+'%';
		var _end_start = (Math.ceil(_len/num)-1)*num;
		_object.each(function(i){
			var _bb0 = i>=_end_start ? ' bb0' : '';
			var _input = $(this).find("input").val();
			var _on = $(this).find("input")[0].checked ? ' _on' : '';
			_html += '<div onClick="util.checkbox_box_click(this)" class="'+_bb0+_on+'" style="cursor:pointer;width:'+_width+';" key="'+i+'">'+$(this).text()+'</div>';
		});
		_html += str_repeat('<div class="bb0" style="width:'+_width+';"></div>', util.remain_num(_len, num));
		$(c).html(_html);
	}

	this.checkbox_box_click = function(el) {
		var _key = $(el).attr("key");
		var obj = $(el).parent().parent().find("input[type=checkbox]").eq(_key);
		if(!obj[0].checked) {
			$(el).addClass("_on");
			obj[0].checked = true;
		} else {
			$(el).removeClass("_on");
			obj[0].checked = false;
		}
	}

	this.remain_num = function(len, width) {
		if(len>width) return width - (len%width);
		else return width-len;
	}

	this.put_input = function(el, c, part) {
		var form = el.form;
		var _key = $(el).index(c);
		var put_arr = new Array();
		$(form).find("[name='"+el.name+"']").each(function(i){
			put_arr[i] = $(this).val();
		});

		$(c).val(put_arr.join(part));
	}

	this.form_reset = function(el) {
		$(el).find("input[type=text]").each(function(){
			$(this).val('');
		});
		$(el).find("input[type=checkbox]").each(function(){
			$(this)[0].checked = false;
		});
		$(el).find("input[type=radio]").each(function(){
			$(this)[0].checked = false;
		});
		$(el).find("select").each(function(){
			$(this).val('');
		});

		if($("._checkbox_box")[0]) $("._checkbox_box").find("div").removeClass("_on");
	}

	this.form_tag_needed_check = function(obj, code) {
		var len = obj.length;
		if(len<=0) return false;
		var count = 0;
		do{
			var hname_is = obj[count].getAttribute("hname");
			// : hname값이 있을때에만 작동합니다.
			if(hname_is) {
				switch(code) {
					case "set":
						obj[count].setAttribute("needed", "needed");
						break;
					default:
						obj[count].removeAttribute("needed");
						break;
				}
			}
			count++;
		}while(count<len);
	};


// : submit버튼이 아닐경우 실행하는 함수
	this.submit_regist = function(el, fname, msg) {
		if(confirm(msg)) {
			var form = document.forms[fname];
			var mode = el.getAttribute("mode");
			var check_name = el.getAttribute("check_name");
			var check_name_obj = document.getElementsByName(check_name);
			if(check_name_obj) {
				var len = check_name_obj.length;
				var count = 0;
				do{
					if(!check_name_obj[count].value) {
						alert("수정해야할 값을 입력해주시기 바랍니다.");
						check_name_obj[count].focus();
						return false;
						break;
					}
					count++;
				}while(count<len);
			}
			form.mode.value = mode;
			form.submit();
		}
	}


// : 체크박스를 radio처럼 한개만 선택가능하게 하기
	this.checkbox_onecheck = function(el) {
		$("input[name='"+el.name+"']").each(function(){
			switch(el==$(this)[0]) {
				case true:
					break;
				default:
					$(this)[0].checked = false;
					break;
			}
		});
	}

// : 전체선택, 전체선택해제
	this.checkbox_allcheck = function(el, cname) {
		var check = $(el).attr("check");

		if(!cname) {
			var tailname = $(el).attr('tailname');
			cname = "input[name='"+tailname+"']";
		}

		$(cname).each(function(){
			switch(!!check) {
				case true:
					if(check=='false') {
						$(this)[0].checked = true;
						$(el).attr("check", "true");
					} else {
						$(this)[0].checked = false;
						$(el).attr("check", "false");
					}
					break;
				default:
					if(el.checked===true) {
						$(this)[0].checked = true;
						$(el).attr("check", "true");
					} else {
						$(this)[0].checked = false;
						$(el).attr("check", "false");
					}
					break;
			}
		});
	}

	this.checkbox_num = function(el, cname) {
		return $(cname+":checked").length;
	}
	

/*#################################################################
// : 체크박스 - 전체선택기능, 선택된 체크박스 갯수도 뽑아온다. [ 체크박스 전체선택 ]
// : 체크박스로 전체선택, 선택한 갯수구하는함수
#################################################################*/
/*
	this.checkbox_allcheck = function (el, setName, msg, changeMsg) {

		var id = el.getAttribute('id');
		var tailname = el.getAttribute('tailname');

		var chk_all = (id) ? document.getElementsByName(id) : "";
		var chk_check = el.getAttribute("check");
		var chk = document.getElementsByName(tailname);
		var chk_num = 0;
		var setName_value = new Array();

		var true_attri = el.getAttribute("true");
		var false_attri = el.getAttribute("false");
		true_attri = true_attri ? true_attri : '전체선택';
		false_attri = false_attri ? false_attri : '전체취소';

		if(chk.length<=0) {
			var msgs = msg ? msg : '정보가 존재하지 않습니다.';
			alert(msgs);
			return false;
		}

		var len = chk.length;
		for(var i=0; i<len; i++) {
			if(chk_check) {
				chk_check=='false' ? el.setAttribute("check","true") : el.setAttribute("check","false");
				chk[i].checked = (el.getAttribute("check")=='true') ? true : false;
				el.alt = el.getAttribute("check")=='true' ? "전체취소" : "전체선택";
				el.src = el.getAttribute("check")=='true' ? false_attri : true_attri;
			} else if(!!id) {
				chk[i].checked = (el.checked==true) ? true : false;
			}
			chk_num = (chk[i].checked==true) ? ++chk_num : chk_num ;
			if(setName && chk[i].checked===true) setName_value[i] = chk[i].getAttribute(setName);
		}

		var len = chk_all.length;
		for(var i=0; i<len; i++) {
			chk_all[i].checked = (el.checked===true) ? true : false;
		}

		if(changeMsg) el.innerHTML = el.innerHTML==changeMsg[0] ? changeMsg[1] : changeMsg[0];

		if(setName) return [chk_num, setName_value];
		else return chk_num;
	};
	*/

/*#################################################################
//#	선택삭제등... 선택해서 어떤 모종의 작업을 하기 위해서 사용함
//#	[el : this, name :form이름, word:확인/취소문구, type:갯수알아보기위한것, func:함수넣기 ]
//#	func값이 있으면 action을 실행하지 않습니다.
#################################################################*/
	this.checkbox_alldelete = function (el, name, word, type, func, msg) {
		if(demo_check) return alert("데모버전은 삭제할 수 없습니다.");
		var fname = (name) ? name : el.form.getAttribute('name');
		var tailname = el.getAttribute('tailname');
		var mode = el.getAttribute('mode');
		var url = el.getAttribute('url');
		var form = document.forms[fname];

		if(el.getAttribute("etc_value")) form.etc_value.value = el.getAttribute("etc_value");

		/*선택된 갯수 알아오기*/
		var num = util.checkbox_num(el, "input[name='"+tailname+"']");
		if(num<=0) {
			alert("최소한 한개 이상은 선택하셔야합니다.");
			return false;
		} else {
			if(confirm(word)) {
				if(func) {
					eval(func);
				} else {
					form.mode.value = mode;
					if(url) form.action = url;
					form.submit();
				}
			}
		}
		return true;
	};
	this.ajax_checkbox_alldelete = function (el, name, word, type, func, msg) {
		if(demo_check) return alert("데모버전은 삭제할 수 없습니다.");
		var fname = (name) ? name : el.form.getAttribute('name');
		var tailname = el.getAttribute('tailname');
		var mode = el.getAttribute('mode');
		var url = el.getAttribute('url');
		var form = document.forms[fname];

		if(el.getAttribute("etc_value")) form.etc_value.value = el.getAttribute("etc_value");

		/*선택된 갯수 알아오기*/
		var num = util.checkbox_num(el, "input[name='"+tailname+"']");
		if(num<=0) {
			alert("최소한 한개 이상은 선택하셔야합니다.");
			return false;
		} else {
			if(confirm(word)) {
				if(func) {
					eval(func);
				} else {
					var prev_mode = form.mode;
					var prev_action = form.action;
					form.mode.value = mode;

					if(url) form.action = url;
					util.ajax_submit(form);
					form.mode.value = prev_mode;
					form.action = prev_action;
				}
			}
		}
		return true;
	};


/* 날짜검색 기간클릭시 값 자동으로 놓기 */
	this.search_date_input_click = function(date, name, num) {
		var obj = document.getElementsByName(name);
		var len = obj.length;
		var count = 0;
		do{
			switch(count) {
				case 0:
					obj[count].value = (date) ? date : "";
					break;
				default:
					var month = this.date.getMonth()+1>=10 ? this.date.getMonth()+1 : '0'+(this.date.getMonth()+1);
					var day = this.date.getDate()>=10 ? this.date.getDate() : '0'+(this.date.getDate());
					obj[count].value = (date) ? this.date.getFullYear()+'-'+month+'-'+day : "";
					break;
			}
			count++;
		}while(count<len);
	};


/*
즐겨찾기
출처 - http://blog.naver.com/PostView.nhn?blogId=ido5273&logNo=130073947342
*/
	this.bookmark = function(title, url) {
		if(window.sidebar) { // : 파폭
			window.sidebar.addPanel(title, url, "");
		} else if(window.opera && window.print) { // : 오페라
			var obj = document.createElement("a");
			obj.setAttribute("href", url);
			obj.setAttribute("title", title);
			obj.setAttribute("rel", "sidebar");
			obj.click();
		} else if(navigator.userAgent.match(/Chrome/)){
			alert("즐겨찾기에 추가하시려면 CTRL+D 키를 눌러주세요");
		} else {
			window.external.AddFavorite(parent.location.href, document.title);
		}
	};


	this.get_imgtag = function(img, size, attr) {
		if(img) return '<img src="'+img+'" width="'+size[0]+'" height="'+size[1]+'" '+attr+' />';
		else return '<span style="display:inline-block;width:'+size[0]+'px;height:'+size[1]+'px;line-height:'+size[1]+'px;background-color:#f5f5f5;text-align:center;" '+attr+'></span>';
	}


	this.width_100per = function(id, max_width) {
		if(!max_width) max_width = 300;
		else max_width = parseInt(max_width);
		var dd = typeof id=='object' ? id : document.getElementById(id);
		var resize_func = function() {
			var imgObj = new Image();
			var get_imgObj = dd.getElementsByTagName("img");
			var len = get_imgObj.length;
			$(dd).find("img").each(function(){
				var _width = $(this).width();
				if($(this).attr("width")) _width = $(this).attr("width");

				if(_width>0 && _width!='100%' && (parseInt(_width)>max_width || parseInt(_width)<=0)) {
					$(this).css({'max-width':max_width+'px'});
				}
			});

			var get_iframeObj = dd.getElementsByTagName("iframe");
			var len = get_iframeObj.length;
			for(var i=0; i<len; i++) {
				var width = $(get_iframeObj).attr("width");
				var height = $(get_iframeObj).attr("height");

				var he_per = height/width;

				if(width>0 && width!='100%' && (parseInt(width)>max_width || parseInt(width)<=0)) {
					$(get_iframeObj[i]).css("max-width", max_width+'px');
					$(get_iframeObj[i]).css("max-height", parseInt(max_width*he_per)+'px');
				}
			}
		}
		setTimeout(function(){
			resize_func();
			$(dd).css({"visibility":"visible"});
		},100);


		$(dd).find("table").each(function(){
			var width = $(this).attr('width');
			var width_style = $(this).css('width');

			// : 가로사이즈가 300을 넘어서면 자동 100%로 변환하자.
			var change_width1 = false;
			var change_width2 = false;
			if(width!='100%' && parseInt(width)>max_width) change_width1 = true;
			if(width_style!='100%' && parseInt(width_style)>max_width) change_width2 = true;
			if(change_width1===true) $(this).attr('width', '100%');
			if(change_width2===true) {
				$(this).css('width', '100%');
			}
		});
	}


	/* 삭제함수 */
	this.delete_func = function(el, msg) {
		if(demo_check) return alert("데모버전은 삭제할 수 없습니다.");
		var msg = msg ? msg : '삭제하시겠습니까?';
		// : 삭제함수
		if(confirm(msg)) {
			var no = el.getAttribute("no");
			var url = el.getAttribute("url");
			var mode = el.getAttribute("mode");
			var get_in = el.getAttribute("get_in");
			location.href = url+'?mode='+mode+'&chk[]='+no+"&"+get_in;
		}
	}

	/* 삭제함수 */
	this.delete_func2 = function(el, msg) {
		if(demo_check) return alert("데모버전은 삭제할 수 없습니다.");
		var msg = msg ? msg : '삭제하시겠습니까?';
		// : 삭제함수
		if(confirm(msg)) {
			var no = el.getAttribute("no");
			var url = el.getAttribute("url");
			var mode = el.getAttribute("mode");
			var get_in = el.getAttribute("get_in");
			$.get(url, 'mode='+mode+'&chk[]='+no+"&"+get_in, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.move) location.href = data.move;
			});
		}
	}

	/* 삭제함수 */
	this.delete_func3 = function(el, msg) {
		var mode = el.getAttribute("mode");
		if(demo_check && mode.indexOf("delete")>=0) return alert("데모버전은 삭제할 수 없습니다.");
		var msg = msg ? msg : '삭제하시겠습니까?';
		// : 삭제함수
		if(confirm(msg)) {
			var no = el.getAttribute("no");
			var url = el.getAttribute("url");
			var get_in = el.getAttribute("get_in");
			get_in = get_in ? get_in : "";
			$.post(url, 'mode='+mode+'&chk[]='+no+"&"+get_in, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.js) eval(data.js);
				if(data.move) location.href = data.move;
			});
		}
	}

	/*ajax get*/
	this.ajax_get = function(el) {
		var para = $(el).attr("para");
		var mode = $(el).attr("mode");
		var url = $(el).attr("url");
		var no = $(el).attr("no");
		if(in_array(el.type, ['checkbox', 'radio'])) var chk = el.checked===true ? '&chk=Y' : '&chk=N';
		$.get(url, para+"&mode="+mode+"&no="+no+chk, function(){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.js) eval(data.js);
			if(data.move) location.href = data.move;
		});
	}

	/*ajax post*/
	this.ajax_post = function(el) {
		var chk = '';
		var para = $(el).attr("para");
		var mode = $(el).attr("mode");
		var url = $(el).attr("url");
		var no = $(el).attr("no");
		if(in_array(el.type, ['checkbox', 'radio'])) chk = el.checked===true ? '&chk=Y' : '&chk=N';

		para = para ? para : '';
		no = no ? no : '';

		$.post(url, para+"&mode="+mode+"&no="+no+chk, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.js) eval(data.js);
			if(data.move) location.href = data.move;
		});
	}

	/*박스 클릭시 바로 근처에 나타나게*/
	this.divBox_site = function(divId, left, top, el, e) {
		var divObj = (typeof divId=='object') ? divId : document.getElementById(divId);
		var width = 0;
		var height = 0;
		var view_type = "";
		try{

			var lo = $(el).offset();

			divObj.style.left = (lo.left+left)+'px';
			divObj.style.top = (lo.top+top)+'px';

			if(divObj.style.display=="none") divObj.style.display = "block";
		}catch(e){
			alert(e.message);
		}
	};

	this.tag_view = function(c, view) {
		var _tag_arr = {'td':'table-cell', 'tr':'table-row', 'table':'table', 'span':'inline'};
		var _tag = $(c)[0].tagName.toLowerCase();
		var _display = $(c).css("display");
		var _display_txt;

		if(_tag_arr[_tag]) _display_txt = _tag_arr[_tag];
		else _display_txt = 'block';

		if(view) {
			var _display = view=='none' ? 'none' : _display_txt;
			$(c).css({"display":_display});
		} else {
			var _display = _display=='none' ? _display_txt : 'none';
			$(c).css('display', _display);
		}
	}

	this.tr_view = function(el) {
		var _index = $(el).closest("tr").index();
		var _display = $(el).closest("table").find("tr").eq(_index+1).css("display");
		_display = _display=='none' ? 'table-row' : 'none';
		$(el).closest("table").find("tr").eq(_index+1).css({"display":_display});
	}

	this.div_c_view = function(el, c1, c2) {
		var _obj = $(el).closest(c1).find(c2);
		var _display = _obj.css("display");
		_display = _display=='none' ? 'block' : 'none';
		_obj.css({"display":_display});
	}

	// : c - class, arr - block시킬 값.
	this.tag_view1 = function(el, c, arr) {
		if(in_array(el.value, arr)) this.tag_view(c, 'block');
		else this.tag_view(c, 'none');
	}

	/* 박스 닫기 */
	this.div_close = function(id) {
		document.getElementById(id).style.display = 'none';
	}

	/* 박스 닫기 */
	this.tr_close = function(num, c) {
		var _tag = $(c).eq(num)[0].tagName.toLowerCase();
		var _display = _tag=='tr' ? 'table-row' : 'block';
		var display = $(c).eq(num).css("display")=='none' ? _display : 'none';
		$(c).eq(num).css("display", display);
		return display;
	}

	this.m_open_close = function(num, c) {
		var r = util.tr_close(num, c);
		var _txt = r=='none' ? '열기 <i class="fa fa-angle-down" aria-hidden="true"></i>' : '닫기 <i class="fa fa-angle-up" aria-hidden="true"></i>';
		$("._setting_box").find("._btn").html(_txt);
	}

	/* 박스 닫기 */
	this.td_close = function(num, c) {
		var display = $(c).eq(num).css("display")=='none' ? 'table-cell' : 'none';
		$(c).eq(num).css("display", display);
	}


	this.window_open = function(url, code) {
		code = code ? code : '';
		window.open(url, code, "width=750,height=540,status=yes,scrollbars=yes");
	}

	this.window_open2 = function(url, status, code) {
		code = code ? code : '';
		status = status ? status : "width=750,height=540,status=yes,scrollbars=yes";
		window.open(url, code, status);
	}

	this.window_open_basic = function(url) {
		if(url) window.open(url);
	}


	/*page:페이지숫자, count:몇개, group:페이징수, total:전체갯수*/
	/*var page_json = {page:page, count:10, group:10, total:total};*/
	this.print_paging = function(json) {
		var url = json.url ? json.url : location.href;
		var url_result = url.indexOf('?')!=-1 ? url : url+'?';
		var page_int = parseInt(json.page/json.group);
		var remain_count = json.total - ((page_int+1)*json.count*json.group);
		var page_inn = '';
		var page_color = '';
		var paging = document.createElement("div");
		paging.style.marginTop = "10px";
		paging.className = "print_paging ta_center";
		if(json.count<(page_int+1)*json.count) page_inn += '<a href="'+url+'&page='+(json.page-10)+'"><span>이전</span></a>';
		for(var i=1; i<=json.group; i++) {
			var page_put = (page_int*json.count)+i;
			page_color = json.page==page_put ? 'on' : '';
			page_inn += '<a href="'+url+'&page='+page_put+'"><span class="'+page_color+'">'+page_put+'</span></a>';
		}
		if(remain_count>0) page_inn += '<a href="'+url+'&page='+(json.page+10)+'"><span>다음</span></a>';
		paging.innerHTML = page_inn;
		return paging;
	}


	this.ajax_paging = function(el, url, mode, page) {
		var _para = location.href.split("?");
		var _para_txt = _para[1] ? _para[1] : '';
		$(el).parent().find("a").removeClass("on");
		$(el).addClass("on");
		$.post(url, _para_txt+"&mode="+mode+"&page="+page, function(data){
			data = $.parseJSON(data);
			if(data.js) eval(data.js);
		});
	}

	// : 레이어 가운데로 이동
	this.initLayerPosition = function(id, width, height, border, bcolor, loca){
		if(!id) return false;

		if(!loca) loca = 'middle';
		$(".center_div").each(function(){
			$(this).css("display", "none");
			if(loca=='not') $(this).css("top", "10px");
		});
		bcolor = bcolor ? bcolor : '#485270';
		border = border>0 ? border : 0;

		var element_layer = typeof id=='object' ? $(id)[0] : $("#"+id)[0];
		element_layer.style.display = "block";
		if(String(width).indexOf("%")==-1) {
			width = width>0 ? width : $(element_layer)[0].offsetWidth;
			width = String(width);
		}
		borderWidth = border;

		// 위에서 선언한 값들을 실제 element에 넣는다.
		element_layer.style.width = width.indexOf("%")>=0 ? width : width + 'px';
		element_layer.style.border = borderWidth + 'px solid';
		element_layer.style.borderColor = bcolor;

		height = height>0 ? height : element_layer.offsetHeight;

		element_layer.style.maxHeight = height + 'px';
		// 실행되는 순간의 화면 너비와 높이 값을 가져와서 중앙에 뜰 수 있도록 위치를 계산한다.

		element_layer.style.left = (((window.innerWidth || document.documentElement.clientWidth) - width)/2 - borderWidth) + 'px';
		if(loca=='middle')
			element_layer.style.top = (((window.innerHeight || document.documentElement.clientHeight) - height)/2 - borderWidth) + 'px';
		
	};
	this.initLayerPosition_close = function(id) {
		var element_layer = typeof id=='object' ? $(id)[0] : $("#"+id)[0];
		element_layer.style.display = "none";
	};


// : 가로는 가운데정렬, 세로는 position:absolute
	this.this_pos_set = function(el, id, width, height, borderWidth) {
		var _offset = $(el).offset();
		var _height = $(id).height();
		$(id).css({"display":"block", "position":"absolute", "width":width+'px', "height":height+'px'});
		var left = (((window.innerWidth || document.documentElement.clientWidth) - width)/2 - borderWidth) + 'px';
		$(id).css({"top":_offset.top-(_height/2)+'px', "left":left});
	}

	// : 가운데 열기 - 주변 어둡게 하기
	this.near_pos_set = function(el, c) {

		$(".photo_find_box_put").html('');

		if($(c).css("display")=='none') util.bg_color('open', c);

		var pos = $(el).offset();
		var _width = $(c).width();
		var _height = $(c).height();
		var _width_2 = _width/2;
		var _height_2 = _height/2;

		var obj = $(c).wrapAll("<div/>").parent();
		obj.addClass("over_dark_blind");

		obj.find(c).css({"top":"50%", "left":"50%", "margin-left":"-"+_width_2+'px', "margin-top":"-"+_height_2+'px'});
		obj.find(c).addClass("over_dark_blind_center");
	}

	this.near_basic_obj = '';
	this.near_pos_click = function(el, c, code, num) {
		var form = $(c).find("form")[0];
		form.num.value = num;

		var code_txt = {'main_photo':'메인사진', 'logo':'로고'};

		switch(code) {
			case 'main_photo':
			case 'logo':
				form.mode.value = "div_photo_regist";
				form.num.value = 'main_photo';
				form._end_put_class.value = "$('.re_photo_box_add').find('.photo')";
				$(c).find(".title_").html(code_txt[code]+'등록');
				break;

			default:
				form.mode.value = "ajax_photo_upload";
				$(c).find(".title_").html('사진등록');
				break;
		}
		this.near_basic_obj = $(el).closest("."+code+"__").find(".photo");
		util.near_pos_set(el, c);
		var imgObj = this.near_basic_obj.find("img");
		var img = imgObj.clone(true).wrapAll("<div/>").parent();
		$(".photo_find_box_put").html(img.html());
		$(".photo_find_box_put").find("img").attr({"id":"photo_temp"});
		$(".photo_find_box_put").find("img").css({"width":imgObj.css("width"), "height":imgObj.css("height")});
	}

	// : 주변이 어두운 가운데가 열려진 것 닫기
	this.div_pos_none = function(c) {
		if(!c) return false;

		util.bg_color('close', c);
		$(c).parent().removeClass("over_dark_blind");

		var _len = $(c).find("input[type=file]").length;
		if(_len>0) {
			$(c).find("input[type=file]").each(function(){
				var _copy = $(this).parent().html();
				$(this).parent().html(_copy);
			});
		}

		$(c).css({
			"position":"absolute",
			"top":"-9999px"
		});
	}


	// : 주변 환경 어둡게 하기
	this.bg_color = function(type, c) {
		$(c).toggleClass("emphasized");
		switch(type) {
			case 'open':
				$(c).css('display','block');
				break;
			default:
				$(c).css('display','none');
				break;
		}
	}

	// : 클릭방지, 클릭방지해제 - onclick은 어떻게... [ 필요없음 ]
	this.form_disabled = function(c, code) {
		switch(code) {
			case 'Y':
				$(document).on('click', function(e){
					return false;
				});
				$(c).on('click', function(e){
					event.stopImmediatePropagation();
				});
				break;
			default:
				$(document).off('click');
				break;
		}
	}


	// : 카테고리 검색
	this.category_find = function(el, id, code) {
		$.post(root+"module/regist.php", "mode=category_find&code="+code+"&no="+el.value, function(data) {
			data = $.parseJSON(data);
			$(id).html(data.tag);
		});
	}


	// : 파일사이즈
	this.file_size = function(el) {
		var iSize = 0;
		iSize = ($(el)[0].files[0].size);
		return iSize;
	}


	this.file_size_check = function() {
	}



	// : 비밀번호
	this.passwd_submit = function(el) {
		var para = $(el).serialize();
		if(validate(el)) {
			$.post(root+"module/regist.php", para, function(data){
				data = $.parseJSON(data);
				if(data.move) location.href = data.move;
				if(data.msg) alert(data.msg);
			});
			return true;
		}
		return false;
	}


/*#################################################################
//# 글자수 카운트 [ textarea에서 글자수 세는것입니다. ]
#################################################################*/
	this.msg_head_len = 0;
	this.cal_pre = function(f,el, max, msg) {
		var basic_len = util.msg_head_len;
		basic_len = basic_len>0 ? basic_len : 0; // : 첫 글자수입니다. 머릿말에 글자가 있는경우 글자수를 미리 더할려고 사용하는 기능
		max = max ? max : 99999;
		var obj_name = f ? f : 'textarea_length_span';
		var doc = $("#"+obj_name);
		var size_check = el.value;
		var length_value = size_check.bytes() + basic_len;
		switch(length_value>max) {
			case true:
				//alert(msg);
				el.value = size_check.cut(max-basic_len);
				break;
			default:
				if(doc[0]) doc.html(length_value);
				break;
		}
	};


	/*
	div위치 -> obj
	fixed시킬때 class값 추가 -> c
	*/
	this.fixed_pos = function(id, c, json) {
		if(!json) json = {};
		json.pos1 = json.pos1 ? json.pos1 : 0;
		json.pos2 = json.pos2 ? json.pos2 : 0;
		var obj = $(id);
		var menu_offset = obj.offset();
		var _height = obj.outerHeight(true);
		var menu_pos = menu_offset.top;

		var made_var = 'util.'+(id+'_height = '+_height).substr(1);
		eval(made_var);
		$(window).scroll(function() {
			if(($(this).scrollTop()>=(menu_pos-json.pos2)) && obj.attr("class").indexOf(c)==-1) {
				obj.addClass(c);
				$(id+"."+c).css({'top':json.pos1+'px'});
			} else if($(this).scrollTop()<(menu_pos-json.pos2)) {
				obj.removeClass(c);
				obj.css({'top':'0px'});
			}
		});
	}

	/*
	c : 스크롤될 태그를 감싼 클래스명, css : 스타일시트, mt : 높이위치 조절
	이소스를 실행할때 c클래스 속에 rolling_child클래스를 감싸줘야합니다.
	*/
	this.rolling_obj = {};
	this.rolling_fixed_func = function(c, css, mt) {
		mt = mt>0 ? mt : 0;
		var cloneMenu = $(c).find(".rolling_child").clone(true);
		$(c).append('<div class="_rolling_fixed" style="'+css+'">'+cloneMenu.html()+'</div>');
		util.rolling_fixed_func_scroll(c, mt);
		$(window).scroll(function(){
			util.rolling_fixed_func_scroll(c, mt);
		});
	}
	this.rolling_fixed_func_scroll = function(c, mt) {
		var this_top = $(document).scrollTop()+mt;
		var lo_menu = $(c).find(".rolling_child").offset();

		if(this_top>lo_menu.top) {
			if(util.rolling_obj[c]===false) $(c).find("._rolling_fixed").css({"display":"block"});
			util.rolling_obj[c] = true;
		} else {
			if(util.rolling_obj[c]===true) $(c).find("._rolling_fixed").css({"display":"none"});
			util.rolling_obj[c] = false;
		}
	}


	/* 이미지클릭해도 체크되게 하기 */
	this.icon_click = function(id) {
		document.getElementById(id).click();
	};

	this.spectrum_func = function(el){
		$(el).spectrum({
			preferredFormat: "name",
			allowEmpty:true,
			showInput: true,
			showInitial: true,
			showPalette: true,
			cancelText: "닫기",
			chooseText: "선택",
			palette: [["red", "rgba(0, 255, 0, .5)", "rgb(0, 0, 255)"]]
		});
	};

	this.spectrum_put = function(el) {
		$(el).spectrum({
			color:el.value,
			preferredFormat: "name",
			allowEmpty:true,
			showInput: true,
			showInitial: true,
			showPalette: true,
			cancelText: "닫기",
			chooseText: "선택",
			palette: [["red", "rgba(0, 255, 0, .5)", "rgb(0, 0, 255)"]]
		});
	}


	this.useTab = function(el){
		tabCharacter = '\t'
		//tabCharacter = '    '
		if(event.keyCode == 9){

			startPosition = el.selectionStart;
			endPosition   = el.selectionEnd;

			// 2. textarea의 현재 내용의 적절한 위치에 탭 문자를 삽입한다.
			el.value = el.value.substring(0, startPosition)
						 + tabCharacter
						 + el.value.substring(endPosition, el.value.length);

			// 3. 커서를 탭 문자 이후로 옮겨 놓는다.
			el.selectionStart = startPosition+1;
			el.selectionEnd   = startPosition+1;
			return false;
		}
	};



	/* tr위치 이동합니다. */
	this.rank_control = function(tr, code) {
		switch(code) {
			case "up":
				tr.prev().before(tr); // 현재 tr 의 이전 tr 앞에 선택한 tr 넣기
				break;
			case "down":
				tr.next().after(tr); // 현재 tr 의 다음 tr 뒤에 선택한 tr 넣기
				break;
		}
	}


	/*제일 하단에 마우스를 위치시키면 실행하기*/
	this.scroll_func = function(obj, num) {
		$(window).scroll(function(){ 
			if(($(window).scrollTop()+num) < $(document).height() - $(window).height()) { 
				$(obj).show(500);
			} else {
				$(obj).hide(500);
			}
		});
	}


	this.ajax_submit = function(el, noneObj) {
		var form = el;
		if(validate(form)) {
			$(form).ajaxSubmit({
				//보내기전 validation check가 필요할경우
				beforeSubmit: function (data, frm, opt) {
					//alert("전송전!!");
					return true;
				},
				//submit이후의 처리
				success: function(data, statusText) {
					data = $.parseJSON(data);
					if(data.msg) alert(data.msg);
					if(data.js) eval(data.js);
					if(data.move) location.href = data.move;
					if(noneObj) noneObj.css('display', 'none');
					return false;
				},
				//ajax error
				error: function(data,status,error){
					alert("에러발생!!");
					return false;
				}
			});
		}
		return false;
	}


	this.ajax_submit2 = function(el, noneObj) {
		var form = el;
		$(form).ajaxSubmit({
			//보내기전 validation check가 필요할경우
			beforeSubmit: function (data, frm, opt) {
				//alert("전송전!!");
				return true;
			},
			//submit이후의 처리
			success: function(data, statusText) {
				//alert(data);
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.js) eval(data.js);
				if(data.move) location.href = data.move;
				if(noneObj) noneObj.css('display', 'none');
				return false;
			},
			//ajax error
			error: function(data,status,error){
				alert("에러발생!!");
				return false;
			}
		});
		return false;
	}


	this.ajax_button_submit = function(el, fname, msg) {
		var form = document.forms[fname];
		var mode = $(el).attr("mode");
		var url = $(el).attr("url");
		var prev_mode = form.mode.value;
		var prev_action = form.action;
		var action_url = url ? url : form.action;
		form.mode.value = mode;
		form.action = action_url;
		if(confirm(msg)) {
			$(form).ajaxSubmit({
				//보내기전 validation check가 필요할경우
				beforeSubmit: function (data, frm, opt) {
					//alert("전송전!!");
					return true;
				},
				//submit이후의 처리
				success: function(data, statusText) {
					data = $.parseJSON(data);
					if(data.msg) alert(data.msg);
					if(data.js) eval(data.js);
					if(data.move) location.href = data.move;
					return false;
				},
				//ajax error
				error: function(data){
					alert("에러발생!!");
					return false;
				}
			});
		}
		form.action = prev_action;
		form.mode.value = prev_mode;
		return false;
	}


	// : max : 사진등록 최대개수 - 등록된이미지수+업로드할 수 를 넘어서면 경고문구 띄워준다.
	this.photo_num_check = function(el, max){
		var img_len = $(".My_photo").find(".img").length;
		var file_len = el.files.length;

		if(max<(img_len+file_len)) {
			alert("파일은 최대 "+(max-img_len)+"개 까지 등록 가능합니다.");
			$(el).parents(".file_upload_tag").html($(el).parents(".file_upload_tag").html());
			return false;
		}
		return true;
	};
	// : 사진등록
	this.photo_regist = function(el, max, msg) {
		if(!this.photo_num_check(el, max)) return false;
		_msg = msg ? msg : "사진을 등록하시겠습니까?\n사진저장을 눌러야 사진등록이 완료됩니다.";
		if(confirm(_msg)) {
			var form = el.form;
			var prev_mode = form.mode.value;
			var prev_action = form.action;
			form.mode.value = "ajax_photo_upload";
			form.action = root+"module/regist.php";

			$(form).ajaxSubmit({
				//보내기전 validation check가 필요할경우
				beforeSubmit: function (data, frm, opt) {
					//alert("전송전!!");
					return true;
				},
				//submit이후의 처리
				success: function(data, statusText) {
					//alert(data);
					data = $.parseJSON(data);
					if(data.msg) alert(data.msg);
					if($("._not_img")[0]) $("._not_img").remove();
					var _li_len = $(".My_photo").find("._photo_list").find("li").length;
					if(_li_len>0 && $(".My_photo").find("._photo_list").find("li").eq(0).attr("class").indexOf("none")>=0) 
						$(".My_photo").find("._photo_list").html('');
					$(".My_photo").find("._photo_list").append(data.img_child);
					$(el).parents(".file_upload_tag").html($(el).parents(".file_upload_tag").html());
					util.photo_sort_func();
					if(data.move) location.href = data.move;
				},
				//ajax error
				error: function(data){
					alert("에러발생!!");
					return false;
				}
			});

			form.action = prev_action;
			form.mode.value = prev_mode;
		} else {
			$(el).parents(".file_upload_tag").html($(el).parents(".file_upload_tag").html());
		}
		return false;
	}
	// : 사용여부체크
	this.photo_use_check = function(el) {
		var check_txt = el.checked===true ? 'Y' : 'N';
		$(el).closest("li").find("input[name='img_view[]']").val(check_txt);
	}
	// : 마우스 move 기능
	this.photo_sort_func = function() {
		$( ".My_photo ._photo_list" ).sortable({
			revert: true
		});
	}
	// : 태그삭제
	this.img_tag_delete = function(el, c, body) {

		if(confirm("사진을 삭제하시겠습니까?\n저장을 눌러야 삭제가 완료됩니다.")) {
			$(el).closest(c).remove();
		}

		if($(body).find(c).length<=0) {
			$("._photo_list").html('<li class="none">사진을 등록해주시기 바랍니다.</li>');
		}
	}


// : 사진삭제
	this.mem_photo_delete = function(el) {
		var gkey = $(el).attr("key") ? $(el).attr("key") : '';
		var gkind = $(el).attr("kind") ? $(el).attr("kind") : '';
		var gkind2 = $(el).attr("kind2") ? $(el).attr("kind2") : '';
		var _gpara = $(el).attr("para") ? $(el).attr("para") : '';
		var gno = $(el).attr("no");
		if(confirm("사진을 삭제하시겠습니까?\n확인을 누르시면 등록된 사진이 삭제됩니다.")) {
			$.post(root+"module/regist.php", "mode=mem_photo_delete&key="+gkey+"&kind="+gkind+"&kind2="+gkind2+"&no="+gno+"&"+_gpara, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.move) location.href = data.move;
			});
		}
	}

	this.put_image = function(c, k, val) {
		if(!$(c).eq(k).find("img")[0]) $(c).eq(k).html('<img src="'+val+'" />');
		else $(c).eq(k).find("img").prop("src", val);
	}
	this.readURL_img = new Array();
	this.readURL_key = 0;
	this.readURL_reset = function(c, put_c, k) {
		if($(put_c).eq(k).find("img")[0]) {
			var _img = $(put_c).eq(k).find("img").attr("src");
			$(c).html('<img src="'+_img+'" id="photo_temp" />');
		} else {
			$(c).html('');
		}
	}
	this.readURL = function(input, id, size, c) {

		if(!size) {
			var size_val = $(input).attr('img_size');
			size = size_val.split(",");
		}

		c = c ? c : ".photo_regist_img";

		if(!$(c).find("img")[0]) {
			$(c).html('<img src="a" id="photo_temp" />');
		}

		var opt = {
			img: $(id),
			w: size[0],
			h: size[1]
		};

		$(input).setPreview(opt);
	}


	this.clone_paste_small = function(el, c, len) {
		switch(len) {
			case "del":
				if(confirm("삭제하시겠습니까?"))
					$(el).parents(".del_div").remove();
				break;
			default:
				var obj_len = $("."+c).length;
				var gkey_arr = c.split("_regist_tag");
				switch(len<=obj_len) {
					case true:
						alert(len+"개까지 추가가 가능합니다.");
						break;
					default:
						var areaObj = $(el).parents("td").find("."+c).eq(0).clone(true).wrapAll("<div/>").parent();
						if(areaObj.find("."+c)[0]) areaObj.find("."+c).addClass("del_div");
						var html_in = areaObj.html().replace(new RegExp("'"+c+"', "+len,'gi'), "'"+c+"', 'del'");
						html_in = html_in.replace(new RegExp('name="'+gkey_arr[0]+'1\\[\\]', "g"), 'name="'+gkey_arr[0]+(obj_len+1)+'\[\]');
						html_in = html_in.replace("추가", "삭제");
						$(el).parents("td").eq(0).append(html_in);
						break;
				}
				
				break;
		}
	}


	this.clone_tr = function(el, c, code, tail_msg) {
		tail_msg = tail_msg ? "\n"+tail_msg : '';
		switch(code) {
			case "del":
				var tr_len = $(c).find("tr").length;
				if(tr_len<=1) {
					alert("1개가 남은상태에서는 삭제할 수 없습니다.");
					return;
				}
				if(confirm("삭제하시겠습니까?"+tail_msg)) {
					$(el).closest("tr").remove();
				}
				break;

			default:
				var obj = $(c).find("tr").eq(0).clone(true);
				$(obj).find("input").each(function(){
					$(this).val('');
				});
				obj.find("[remove-type]").remove();
				$(c).append(obj);
				break;
		}
	}

	this.readOnly_check = function(el, arr) {
		var len = arr.length;
		for(var i=0; i<len; i++) {
			var obj = $(el).parents("form").find("input[name='"+arr[i]+"']");
			var needed_is = obj.attr("needed_is");
			var datepicker_inp = $(obj).attr("datepicker_inp");
			switch(el.checked) {
				case true:
					obj.removeAttr("needed");
					obj.attr({"readOnly":true});
					obj.css({"background-color":"#dfdfdf"});
					obj.val('');
					if(datepicker_inp) {
						$(obj).datepicker("destroy");
					}
					break;
				default:
					if(needed_is) obj.attr({"needed":true});
					obj.removeAttr("readOnly");
					obj.css({"background-color":"#fff"});
					if(datepicker_inp) {
						this.datepicker_paste(obj);
					}
					break;
			}
		}
	}


// : removeClass로 삭제된 datepicker살리기 위한 함수
	this.datepicker_paste = function(obj) {
		$( obj ).datepicker(datepicker_json).keyup(function(e) {
			if(e.keyCode == 8 || e.keyCode == 46) {
				$.datepicker._clearDate(this);
			}
		});
	}

	this.datepicker_this_year_check = function(el) {
		var chk = el.attr("class");
		if(chk.indexOf("datepicker_inp2")>=0) {
			var start = el.parent().find(".datepicker_inp2").eq(0);
			var end = el.parent().find(".datepicker_inp2").eq(1);
		} else {
			var start = el.parent().find(".datepicker_inp").eq(0);
			var end = el.parent().find(".datepicker_inp").eq(1);
		}

		var start_arr = start.val().split("-");
		var end_arr = end.val().split("-");
		if(start_arr[0]!=end_arr[0]) {
			if(start.val() && end.val()) alert("시작날짜의 년도와 일치해야합니다.");
			end.val(start_arr[0]+'-12-31');
		}
		if(start.val()>end.val()) {
			alert("시작날짜가 더 높으면 안됩니다.");
			start.val(start_arr[0]+'-01-01');
		}
	}

	this.datepicker_this_month_check = function(el) {
		var chk = el.attr("class");
		if(chk.indexOf("datepicker_inp2")>=0) {
			var start = el.parent().find(".datepicker_inp2").eq(0);
			var end = el.parent().find(".datepicker_inp2").eq(1);
		} else {
			var start = el.parent().find(".datepicker_inp").eq(0);
			var end = el.parent().find(".datepicker_inp").eq(1);
		}

		var start_arr = start.val().split("-");
		var end_arr = end.val().split("-");
		if(start.val() && end.val()) {
			if(start_arr[0]!=end_arr[0]) {
				if(start.val() && end.val()) alert("시작날짜의 년도와 일치해야합니다.");
				$(el).val('');
				return false;
			}
			if(start_arr[1]!=end_arr[1]) {
				if(start.val() && end.val()) alert("시작날짜의 월이 일치해야합니다.");
				$(el).val('');
				return false;
			}
			if(start.val()>end.val()) {
				alert("시작날짜가 더 높으면 안됩니다.");
				start.val('');
				return false;
			}
		}
	}


	this.area_select_setting = function(obj, key, val) {
		/*var areaobj = eval(key);
		if(areaobj[0]=='세종전체') areaobj = eval('area_dong_71');
		var tag = '<option value="">'+obj.find("option").eq(0).text()+'</option>';
		for(var i=0; i<areaobj.length; i++) {
			if(i==0 && obj.attr('class') && obj.attr('class').indexOf("all_area")==-1) continue;
			var selected = val==areaobj[i] ? 'selected' : '';
			tag += '<option value="'+areaobj[i]+'" '+selected+'>'+areaobj[i]+'</option>';
		}
		obj.html(tag);*/

		var areaobj = eval(key);
		var area_GU = new Array();
		if(areaobj[0]=='세종전체') areaobj = eval('area_dong_71');
		var tag = '<option value="">'+obj.find("option").eq(0).text()+'</option>';
		for(var i=0; i<areaobj.length; i++) {
			var area_arr = areaobj[i].split(" ");
			if(area_arr.length>=2) {
				if(in_array(area_arr[0], area_GU)) continue;
				else if(!in_array(area_arr[0], area_GU)) area_GU[area_GU.length] = area_arr[0];
				areaobj[i] = area_arr[0];
			}
			if(i==0 && obj.attr('class') && obj.attr('class').indexOf("all_area")==-1) continue;

			var selected = val==areaobj[i] ? 'selected' : '';
			tag += '<option value="'+areaobj[i]+'" '+selected+'>'+areaobj[i]+'</option>';
		}
		obj.html(tag);
	}



	this.tooltip_func = function() {
		$(".tooltip_read").tooltip();
	}

	this.memo_el;
	this.memo_open = function(el, pno) {
		util.memo_el = el;
		var box_obj = $("#memo_regist_div");
		var offset = $(el).offset();
		var kind = $(el).attr("kind");
		var kind2 = $(el).attr("kind2");
		var form = document.forms['fmemo'];
		if(pno) $(form).find("input[name='pno']").val(pno);
		if(kind) $(form).find("input[name='kind']").val(kind);
		if(kind2) $(form).find("input[name='kind2']").val(kind2);
		$.post(root+"module/regist.php", "mode=memo_open&pno="+pno+"&kind="+kind+"&kind2="+kind2, function(data) {
			data = $.parseJSON(data);
			if(data && data.memo) $(form).find("textarea").val(data.memo);
			else $(form).find("textarea").val('');

			if(mobile_is) {
				util.near_pos_set(el, '#memo_regist_div');
			} else {
				var top_px = mobile_is ? offset.top-73 : (offset.top);
				var left_px = mobile_is ? offset.left : (offset.left-parseInt(box_obj.css('width'))-10);
				if(mobile_is) left_px = left_px-210;
				if(left_px<0) left_px = 0; 
				box_obj.css({'top':top_px, 'left':left_px+'px', 'display':'block'});
			}

			if(data && data.no) $(form).find("input[name='no']").val(data.no);
		});

		if(!mobile_is) util.bold_memo_txt();
	}
	this.memo_close = function() {
		if(mobile_is) {
			util.div_pos_none('#memo_regist_div');
		} else {
			$('#memo_regist_div').css('top','-999999px');
			$(util.memo_el).css({'font-weight':'normal', "color":"#000"});
		}
		return true;
	}
	this.bold_memo_txt = function() {
		$(".td_memo_txt").each(function(){
			$(this).css({'font-weight':'normal', "color":"#000"});
		});
	}


	this.photo_delete = function(el) {
		if(confirm("사진을 삭제하시겠습니까?\n확인을 누르시면 등록된 사진이 삭제됩니다.")) {
			var kind = $(el).attr("kind");
			var kind2 = $(el).attr("kind2");
			var no = $(el).attr("no");
			var etc = $(el).attr("etc");
			$.post(root+"module/regist.php", "mode=photo_delete&kind="+kind+"&kind2="+kind2+"&no="+no+"&etc="+etc, function(data){
				//alert(data);
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				$(el).parents("._regist_photo_span").css("display", "none");
			});
		}
	}

	this.get_mem_func = function(el) {
		var kind = $(el).attr("kind");
		var kind2= $(el).attr("kind2");
		var no = $(el).attr("no");
		$.post(root+"regist.php", "mode=get_member_info&kind="+kind+"&kind2="+kind2+"&no="+no, function() {
		});
	}

	this.load_info_move = function(el) {
		var url = $(el).attr("url");
		if(confirm($(el).find("option:selected").text()+" 정보를 불러오시겠습니까?")) {
			location.href = url+"?rno="+el.value;
		}
	}


	this.td_con_view = function(el) {
		var cs = $(el).attr("class");
		if($(el).attr('class').indexOf("div_line")>=0) $(el).removeClass("div_line");
		else $(el).addClass("div_line");
	}

	this.td_con_close = function(el) {
		$(el).parent().find("div").eq(0).addClass("div_line");
		$(el).remove();
	}

	/* : 쿠키 저장하기*/
	this.setCookie = function( name, value, expiredays )
	{
		var todayDate = new Date();
		todayDate.setDate(todayDate.getDate() + expiredays);
		document.cookie = name + '=' + escape( value ) + '; path=/; expires=' + todayDate.toGMTString() + ';'
	};
	/* : 닫기버튼*/
	this.cookie_noneWin = function(el, name, value)
	{
		this.setCookie(name, value , 1);
		$(el).css('display', 'none');
	};
	/* : 닫기버튼*/
	this.noneWin = function(el)
	{
		$(el).css('display', 'none');
	};


	this.move_page = function(url) {
		if(url) location.href = root+url;
	};

	this.top_move_page = function(url) {
		if(url) top.location.href = url;
	};


	this.sns_move = function(code, w, h) {
		var leftPosition, topPosition, u, t;

		leftPosition = (window.screen.width / 2) - ((w / 2) + 10);
		topPosition = (window.screen.height / 2) - ((h / 2) + 50);

		u = location.href;
		t = document.title;

		var status = "status=no,height=" + h + ",width=" + w + ",resizable=no,left=" + leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY=" + topPosition + ",toolbar=no,menubar=no,scrollbars=no,location=no,directories=no";
		$.get(root+"module/regist.php", "mode=sns_mode&sns="+code+"&title="+encodeURIComponent(t)+"&longurl="+encodeURIComponent(u), function(data) {
			data = $.parseJSON(data);
			if(data.move) window.open(decodeURIComponent(data.move), "sns_open", status);
		});
	};


	this.jump_func = function(kind, kind2, no) {
		if(confirm("점프하시겠습니까?")) {
			$.post(root+"module/regist.php", "mode=jum_use_func&kind="+kind+"&kind2="+kind2+"&no="+no, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.move) location.href = data.move;
			});
		}
	}


	/*태그로 이동*/
	this.move_tag = function(tag, pos) {
		if(typeof tag=='string') var offset = tag.offset();
		else var offset = $(tag).offset();

		$('html, body').animate({scrollTop : offset.top+pos}, 10);
	}


	this.span_block_check = function(el) {
		$("._photo_span").css("display", "none");
		$("._photo_span._"+el.value).css("display", "inline");
	}

	// : 등록시 로고등록이 선택이면 file태그 needed, 나머지는 needed 없애기
	this.photo_needed_check = function(el) {
		var _file = $(el).closest("tr").find("input[type='file']");
		switch(el.value) {
			case "this":
				_file.attr({"needed":"needed"});
				break;
			default:
				_file.removeAttr("needed");
				break;
		}
	}

	/* : 깜박임 효과 [ 넷츠케이프나 파폭에서는 blink태그로 사용가능함. 근데 여기만 됨; 그래서 자스로 돌린것임. ]*/
	this.doBlink = function() {
		if($('.blink_id').css('visibility')=='hidden') $('.blink_id').css('visibility','visible');
		else $('.blink_id').css('visibility','hidden');
		//jQuery('.blink_id').fadeOut('slow').fadeIn('slow');
	};

	/*textarea클릭시 해당 단어가 맞으면 초기화시키기*/
	this.textarea_clean = function(el) {
		var txt = $(el).attr("_basic");
		var _onkeyup = $(el).attr("onkeyup");
		if(el.value==txt) {
			el.value = "";
			if(_onkeyup) eval(_onkeyup.replace(/this/gi, 'el'));
		}
	}

	this.url_copy = function(str) {
		if( this.is_ie() ) {
			window.clipboardData.setData("Text", str);
			alert("복사되었습니다.");
			return;
		}
		prompt("Ctrl+C를 눌러 복사하세요.", str);
	}

	this.message_info_put = function(kind2, no, name) {
		var form = document.forms['fmessage'];
		form.kind2.value = kind2;
		form.no.value = no;
		$(form).find("._put_name").html(name);
	}

	this.read_confirm = function(txt, para) {
		setTimeout(function(){
			if(confirm(txt)) {
				$.post(root+"module/regist.php", "mode=info_read_count_check&"+para, function(data){
					data = $.parseJSON(data);
					if(data.msg) alert(data.msg);
					if(data.move) location.href = data.move;
				});
			}
		}, 100);
	}

	this.scroll_hidden_menu_json = {}
	this.scroll_hidden_menu_click_json = {}
	this.scroll_hidden_menu = function(json) {
		var _menu = "";
		var _class = json.slide;
		var _width = parseInt(json.width);
		var _height = parseInt(json.height);
		var _side = parseInt(json.side);
		this.scroll_hidden_menu_json[_class] = json;
		var _menu_css = "float:right; background-color:#fff; width:"+_width+"px; text-align:center; height:"+(_height+5)+"px; line-height:"+_height+"px; border-left:1px solid red; cursor:pointer;";
		var c_body = $(_class).clone(true);
		if(c_body.find("._menu")[0]) c_body.find("._menu").remove();
		c_body.find("ul").eq(0).css({"width":"10000px", "padding":"0 "+_side+"px"});
		c_body.find("li").css({"float":"left", "height":(_height+5)+'px', "line-height":_height+'px', "padding-right":_side+"px"});
		$(_class).css({"overflow":"hidden", "position":"relative", "height":_height+"px", "border-bottom":"1px solid #000", "margin-bottom":"10px"});
		
		$(_class).html('<div class="_menu" style="'+_menu_css+'" onClick="util.scroll_hidden_menu_click(this, \''+_class+'\')">열기</div><div class="_in" style="overflow-x:scroll;">'+c_body.html()+'</div>');
	}

	this.scroll_hidden_menu_click = function(el, c) {
		var _json = this.scroll_hidden_menu_json[c];
		var _on = this.scroll_hidden_menu_click_json[c];
		this.scroll_hidden_menu_click_json[c] = _on ? false : true;
		if(this.scroll_hidden_menu_click_json[c]===true) {
			//$(c).find("._menu")
			$(c).css("overflow","");
			$(c).find("div._in").css({"overflow-x":"", "width":(window_size-50)+"px"});
			$(c).find("ul").css("width","");
			$(c).css("height","");
			$(c).find("li").css({"float":"", "height":"2em", "line-height":"2em"});
			$(c).find("._menu").css({"float":"", "position":"absolute", "right":"5px", "top":"5px", "border":"1px solid red", "height":"", "line-height":""});
			$(c).find("._menu").html('닫기');
		} else {
			util.scroll_hidden_menu(this.scroll_hidden_menu_json[c]);
		}
	}

	this.textarea_resize = function(obj) {
		var minHeight = obj.style.minHeight;
		obj.style.height = "1px";

		if(minHeight>obj.scrollHeight) obj.style.height = minHeight+"px";
		else obj.style.height = (20+obj.scrollHeight)+"px";
	};

	this.font_resize_c = '';
	this.font_resize = function(c) {
		this.font_resize_c = c;
		this.initLayerPosition($(".font_resize")[0], 220, 200, 0, '#fff');
		this.bg_color('open', $(".font_resize")[0]);
	};
	this.font_resize2 = function(el) {
		$("."+this.font_resize_c).css({"font-size":el.value});
	};

	this.byteCheck = function(el){
		var codeByte = 0;
		for (var idx = 0; idx < el.val().length; idx++) {
			var oneChar = escape(el.val().charAt(idx));
			if ( oneChar.length == 1 ) {
				codeByte ++;
			} else if (oneChar.indexOf("%u") != -1) {
				codeByte += 2;
			} else if (oneChar.indexOf("%") != -1) {
				codeByte ++;
			}
		}
		return codeByte;
	};

	this.str_cut = function(el, max, tail) {
		var l = 0;
		var tail = tail ? tail : '';
		var len = el.val().length;
		for (var i=0; i<len; i++) {
			l += (el.val().charCodeAt(i) > 128) ? 2 : 1;
			if(l > max) return el.val().substring(0,i)+tail;
		}
		return el.val();
	};

	this.get_phone_arr = function(val) {
		var _middle = 0;
		var _phone = val.replace(/-/gi, '');
		var _arr = new Array();
		switch(_phone.substr(0,2)) {
			case '02':
				_middle = (_phone.length>=10) ? 4 : 3
				_arr[0] = '02';
				if(_phone.substr(2, _middle)) _arr[1] = _phone.substr(2, _middle);
				if(_phone.substr(2+_middle, 4)) _arr[2] = _phone.substr(2+_middle, 4);
				break;

			default:
				switch(_phone.substr(0,4)) {
					case '1544':
					case '1688':
						if(_phone.substr(0,4)) _arr[0] = _phone.substr(0,4);
						if(_phone.substr(4,4)) _arr[1] = _phone.substr(4,4);
						break;

					default:
						_middle = (_phone.length>=11) ? 4 : 3
						if(_phone.substr(0,3)) _arr[0] = _phone.substr(0,3);
						if(_phone.substr(3,_middle)) _arr[1] = _phone.substr(3,_middle);
						if(_phone.substr(3+_middle, 4)) _arr[2] = _phone.substr(3+_middle, 4);
						break;
				}
				break;
		}
		return _arr;
	}

	this.input_change_json = {};
	this.input_change = function(el, code) {
		var _txt = '';
		switch(code) {
			// : 사업자등록번호
			case "company_number":
				var _prev = el.value.replace(/-/gi, '');
				if(_prev.length<=3)
					_txt = _prev.substr(0,3);
				else if(_prev.length>3 && _prev.length<=5)
					_txt = _prev.substr(0,3)+'-'+_prev.substr(3,2);
				else
					_txt = _prev.substr(0,3)+'-'+_prev.substr(3,2)+'-'+_prev.substr(5,5);
				break;
			// : 중개업소번호
			case "realty_number":
				var _prev = el.value.replace(/-/gi, '');
				if(_prev.length<=5)
					_txt = _prev.substr(0,5);
				else if(_prev.length>5 && _prev.length<=9)
					_txt = _prev.substr(0,5)+'-'+_prev.substr(5,4);
				else
					_txt = _prev.substr(0,5)+'-'+_prev.substr(5,4)+'-'+_prev.substr(9,5);
				break;
			// : 연락처
			case "phone":
			case "hphone":
				var _prev = el.value.replace(/-/gi, '');
				var _arr = util.get_phone_arr(_prev);
				_txt = _arr.join("-");
				el.value = _txt;
				break;
		}
		util.input_change_json[el.name] = _txt;
		el.value = _txt;
	}

	this.obj_table = function(obj) {
		var _tbl = '<table border="1">';
		for(x in obj) {
			_tbl += '<tr><td>'+x+'</td><td>'+obj[x]+'</td></tr>';
		}
		_tbl += '</table>';
		$("#assa").html(_tbl);
	}

	this.pyeong_meters_calc = function(num, code) {
		code = code ? code : 'meters';
		switch(code) {
			case 'meters':
				return sprintf("%0.1f", parseFloat(num*pyeong_int));
				break;

			default:
				return Math.round(num/pyeong_int);
				break;
		}
	}

	this.pyeong_meters_input = function() {
		$("input._extent_input").each(function(i){
			$(this).keyup(function(){
				$("span._meters").eq(i).html(util.pyeong_meters_calc($(this).val()));
			});
		});
	}

	this.open_click = function(el, code) {
		$.post(root+"module/regist.php", "mode=open_click&kind2="+code+"&no="+el.value, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
		});
	}

	this.auth_click = function(el, code) {
		$.post(root+"module/regist.php", "mode=auth_click&kind2="+code+"&no="+el.value, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
		});
	}

	this.message_box_view = function(el, id, width, height, border, loca) {
		var form = $('#'+id).find("form")[0];
		var _kind = $(el).attr("kind");
		var _kind2 = $(el).attr("kind2");
		var _no = $(el).attr("no");
		var _type = $(el).attr("_type");
		var _meno = $(el).attr("meno");
		$.post(root+"module/regist.php", "mode=message_box_view&kind="+_kind+"&kind2="+_kind2+"&no="+_no+"&meno="+_meno+"&type="+_type, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.move) location.href = data.move;
			if(!data.msg) {
				form.kind.value = _kind;
				form.kind2.value = _kind2;
				form.no.value = _no;
				form.type.value = _type;
				form.meno.value = _meno;
				$('#'+id).find("._put_name").html(data.put_name);
				util.near_pos_set(el, '#'+id);
				form.content.focus();
			}
		});
	}

	this.alert_box_view = function(el, id, width, height, border, loca) {
		var _kind = $(el).attr("kind");
		var _kind2 = $(el).attr("kind2");
		var _no = $(el).attr("no");
		$.post(root+"module/regist.php", "mode=alert_box_view&kind="+_kind+"&kind2="+_kind2+"&no="+_no, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.move) location.href = data.move;
			if(!data.msg) {
				util.near_pos_set(el, '#'+id);
			}
		});
	}


	this.sms_box_view = function(el, id, width, height, border, loca) {
		var form = $('#'+id).find("form")[0];
		var _kind = $(el).attr("kind");
		var _kind2 = $(el).attr("kind2");
		var _no = $(el).attr("no");
		$.post(root+"module/regist.php", "mode=sms_box_view&kind="+_kind+"&kind2="+_kind2+"&no="+_no, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.move) location.href = data.move;
			if(!data.msg) {
				form.kind.value = _kind;
				form.kind2.value = _kind2;
				form.no.value = _no;
				util.near_pos_set(el, '#'+id);
				form.content.focus();
			}
		});
	}

	this.sms_input_box_view = function(el, id, width, height, border, func) {
		var _kind = $(el).attr("kind");
		var _kind2 = $(el).attr("kind2");
		var _no = $(el).attr("no");
		var _rdate = $(el).attr("rdate");
		var form = document.forms['fsms'];
		form.kind.value = _kind;
		$.post(root+"module/regist.php", "mode=sms_input_box_view&kind="+_kind+"&kind2="+_kind2+"&rdate="+_rdate+"&no="+_no, function(data){
			data = $.parseJSON(data);
			if(data.js_msg) alert(data.js_msg);
			if(data.move) location.href = data.move;

			if(func) eval(func);
			$(form).find("._select_content").css({"display":(data._select_content ? 'block' : 'none')});
			$(form).find("._you").html(data.hphone);
			if(!data.js_msg) util.initLayerPosition(id, width, height, border);
			form.no.value = data.pno;
			form.sms_no.value = _no;
			form.sms_rdate.value = _rdate;
			form.kind2.value = data._kind2;
		});
	}

	this.service_form_setting_click = function(kind, kind2, kind2_part, service) {
		$.post(root+"module/regist.php", "mode=service_form_setting_click&kind="+kind+"&kind2="+kind2+"&kind2_part="+kind2_part+"&service="+service, function(data){
			data = $.parseJSON(data);
			if(data.js) eval(data.js);
		});
	}

	this._dupl_array = {};
	this._dupl_result_array = {};
	this.dupl_select_check = function(el, c) {
		var _alert_is = false;
		try{
			if($(".dupl_check").length<=0) return true;
			$(".dupl_check").each(function(i){
			var _dupl = $(this).attr("dupl");
			var _key = $(this).attr("key");
			if(!util._dupl_array[_key]) util._dupl_array[_key] = new Array();
			if(!util._dupl_result_array[_key]) util._dupl_result_array[_key] = new Array();
			if(_dupl && _key) {
				switch(_dupl) {
					case "select":
						var _len = $(this).find(_dupl).length;
						util._dupl_array[_key][i] = new Array();
						util._dupl_result_array[_key][i] = new Array();
						$(this).find(_dupl).each(function(j){
							util._dupl_array[_key][i][j] = $(this).find(":selected").text();
							if(j%_len==_len-1 && j==_len-1 && !_alert_is) {
								if(in_array(implode("##", util._dupl_array[_key][i]), util._dupl_result_array[_key])) {
									alert(_key+"의 '"+implode(" ", util._dupl_array[_key][i])+"' 정보는 중복된 정보입니다.");
									_alert_is = true;
									$(this)[0].focus();
									return false;
								}
								if(j%_len==_len-1) util._dupl_result_array[_key][i] = implode("##", util._dupl_array[_key][i]);
							}
						});
						break;
				}
			}
		});

		}catch(e){
			alert(e.message);
		}

		if(_alert_is) return false;
		else return true;
	}

	/*post_put으로 여러가지 작동하기*/
	this.ajax_area_get = function(el, c, num) {
		var _para  = $(document.forms['farea']).serialize();
		var _sido = $(el).attr("SIDO");
		var _gugun = $(el).attr("GUGUN");

		var select_area = [];
		var _len = $(".area_div").find("ul._con").find("li._part").length;
		$.get(root+"module/regist.php", _para+"&mode=ajax_area_get&num="+num+"&txt="+encodeURIComponent($(el).text())+"&SIDO="+_sido+"&GUGUN="+_gugun+"&depth="+_len, function(data){
			$(el).parent().parent().find("._item").removeClass("_on");
			$(el).parent().addClass("_on");
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			else if(data.js) eval(data.js);
		});
	}


	this.file_css_change = function(c) {
		var _txt_count = 0;
		$(c).each(function(i){
			var parent_obj = $(this);
			var _txt = $(this).find("input[type=file]").attr("_txt");
			var _txt2 = $(this).find("input[type=file]").attr("_txt2");
			if(!_txt) _txt_count++;
			_txt = _txt ? _txt : '사진'+_txt_count;
			_txt2 = _txt2 ? _txt2 : '선택된 파일 없음';
			$(this).prepend('<div class="_file_child"><div class="_btn">파일선택</div><div class="_txt">사진1&nbsp; -</div><div class="_value">'+_txt2+'</div></div>');
			$(this).addClass("_netk_file_css");
			$(this).find("div._txt").html(_txt+" &nbsp; -");
			if($(this).find("input[type=file]")[0]) {
				$(this).find("input[type=file]").change(function(){
					switch(!$(this).val()) {
						case true:
							parent_obj.find("._file_child").find("._value").removeClass("_is");
							parent_obj.find("._file_child").find("._value").html('선택된 파일 없음');
							break;

						default:
							parent_obj.find("._file_child").find("._value").addClass("_is");
							parent_obj.find("._file_child").find("._value").html($(this).val());
							break;
					}
				});
			}
		});
	};

	// : 엔터키
	this.enterkey = function(el, func) {
		$(el).one('keypress', function(e){
			if(e.keyCode == 13)
				if(func) eval(func);
		});
		return;
	}

	// : 체크하면 editor에 붙여주기
	this.put_editor = function(el, name) {
		var obj = $(el.form).find("[name='"+name+"']");
		var _no = parseInt(el.value);
		if(!_no) {
			if(el.checked) $(el.form).find("[name='"+el.name+"']").prop("checked", "checked");
			else $(el.form).find("[name='"+el.name+"']").removeAttr("checked");
		}
		$.post(root+"module/regist.php", "mode=get_category_content&no="+el.value, function(data) {
			data = $.parseJSON(data);
			var _send = {'key':data.key, 'content':data.content};
			netk_Daum_editor.get_editor_key(el, obj[0], _send);
		});
	}

	// : 리스트에서 정렬, 개수 선택시 페이지이동
	this.get_select_move = function(el, code) {
		var _lo = location.href.split("?");
		_lo[1] = _lo[1] ? _lo[1] : '';
		location.href = _lo[0]+"?"+_lo[1]+"&"+code+"="+el.value;
	}

	this.json_sort = function(json, prop, asc) {
		var r = json;
		var new_r = new Array();
		var count = 0;

		if(typeof json=='object') {
			for(x in json) {
				new_r[count] = json[x];
				count++;
			}
		}

		new_r = new_r.sort(function(a, b) {
			if (asc)
				return (a[prop] > b[prop]) ? 1 : ((a[prop] < b[prop]) ? -1 : 0);
			else
				return (b[prop] > a[prop]) ? 1 : ((b[prop] < a[prop]) ? -1 : 0);
		});
	
		return new_r;
	}


	this.school_click = function(el) {
		var obj = $("[name='"+el.name+"']").eq(1);
		$.post(root+"module/regist.php", "mode=get_school_state&no="+el.value, function(data){
			data = $.parseJSON(data);
			if(data.html) obj.html('<option value="">선택</option>'+data.html);
		});
	}


	this.school_select_display = function() {
		var school_val = $(".school__").val();
		school_val = school_val>0 ? school_val : 0;

		if(school_val<3) {
			$(".school_detail_tr").css({"display":"none"});
			$(".school_table tbody tr").css({"display":"none"});
		} else {
			$(".school_detail_tr").css({"display":"table-row"});
		}

		// : tbody안의 tr
		$(".school_table tbody tr").each(function(i){
			var school_chk = (school_val-3)>=i ? true : false;
			var obj = $("[name='school_arr[school_detail][]']").eq(i);
			obj.prop("checked", false);

			// : 학교정보와 위치가 맞으면 table-row
			if((school_val-3)>=i) { // if((school_val-3)==i || $(this).css('display')=='table-row') {
				$(this).css({"display":"table-row"});
				obj.prop("checked", true);
			} else {
				$(this).css({"display":"none"});
			}

			// : checkbox display여부
			switch(school_chk) {
				case true:
					obj.parent().css({"display":"inline"});
					break;

				default:
					obj.parent().css({"display":"none"});
					break;
			}
		});
	}

	this.school_chk_click = function(el) {
		var school_val = $(".school__").val();
		school_val = school_val>0 ? school_val : 0;

		// : tr위치
		var obj = $(".school_table tbody tr").eq($(el).val()-3);

		// : 자기자신
		if(school_val==$(el).val()) {
			$(el).prop("checked", true);

		// : 기타
		} else {
			var display = $(el)[0].checked ? 'table-row' : 'none';
			alert(display);
			obj.css({"display":display});
		}
	}


	this.attach_download = function(kind, kind2, no, code) {
		$.post(root+"module/regist.php", "mode=attach_file_is&kind="+kind+"&kind2="+kind2+"&no="+no+"&code="+code, function(data){
			data = $.parseJSON(data);
			if(data.msg) alert(data.msg);
			if(data.move) location.href = data.move;
		});
	}

	// : 중복 get값 제거
	this.dupl_get_remove = function(_para) {
		if(!_para) return false;

		var sharp = _para.indexOf("#");
		_para = _para.substr(0, sharp)

		var _para_arr = _para.split("&");
		var _len = _para_arr.length;
		var _para_return = new Array();
		var _para_re = {};

		var count = 0;
		for(var i=0; i<_len; i++) {
			if(!_para_arr[i]) continue;
			var _part = _para_arr[i].split("=");
			_para_re[_part[0]] = _part[0]+"="+_part[1];
		}

		var count = 0;
		for(x in _para_re) {
			_para_return[count] = _para_re[x];
			count++;
		}
		return _para_return.join("&");
	}

	this.move_url = function(el, url, anchor) {
		anchor = anchor ? anchor : '';
		var _arr = location.href.split("?");
		var url_txt = url+'?';
		if(_arr[1]) url_txt += this.dupl_get_remove(_arr[1]);
		location.href = url_txt+'&'+el.name+'='+el.value+anchor;
	}

	this.reload_form = function(el) {
		if(typeof el=='object') el.form.reset();
		else document.forms[el].reset();
	}

	this.textarea_resize = function() {
		autosize(document.querySelectorAll('textarea.autosize'));
	}



	this.multi_sorting = function() {
		$(function() {
			$(".multi_upload_put").sortable({
				revert: true
			});
			$("#draggable").draggable({
				connectToSortable: ".multi_upload_put",
				helper: "clone",
				revert: "invalid"
			});
			$(".multi_upload_put, .img_").disableSelection();
		});
	};
	this.multi_delete = function(el, c) {
		var obj = $(c).find("[name='photo_delete[]']:checked");
		if(obj.length<=0) {
			alert("삭제할 사진을 선택해주시기 바랍니다.");
			return;
		}

		if(confirm("사진을 삭제하시겠습니까?")) {
			$(c).find("[name='photo_delete[]']:checked").each(function(){
				$(this).closest(".img_").remove();
			});
		}
	}
	this.multi_upload = function(el, c, num) {
		var num = num ? num : 15;
		var _length = $(c).find(".img_").length;
		var _file_length = el.files.length;
		if(num<_length+_file_length) {
			alert(num+"개까지 업로드 가능합니다.");
			return;
		}
		var form = el.form;
		var _prev_action = form.action;
		var _prev_mode = form.mode.value;
		var _kind = $(el).attr("kind");
		var _kind2 = $(el).attr("kind2");
		var _file_type = $(el).attr("file_type");
		form.action = root+"module/regist.php";
		form.mode.value = "multi_upload_photo";

		if($(form).find("[name='multi_upload_input_name']")[0]) $(form).find("[name='multi_upload_input_name']").val(el.name.replace(/\[\]/, ''));
		else $(form).append('<input type="hidden" name="multi_upload_input_name" value="'+el.name.replace(/\[\]/, '')+'" />');

		if($(form).find("[name='multi_upload_file_type']")[0]) $(form).find("[name='multi_upload_file_type']").val(_file_type);
		else $(form).append('<input type="hidden" name="multi_upload_file_type" value="'+_file_type+'" />');

		if($(form).find("[name='kind']")[0]) $(form).find("[name='kind']").val(_kind);
		else $(form).append('<input type="hidden" name="kind" value="'+_kind+'" />');

		if($(form).find("[name='kind2']")[0]) $(form).find("[name='kind2']").val(_kind2);
		else $(form).append('<input type="hidden" name="kind2" value="'+_kind2+'" />');

		$(form).ajaxSubmit({
			//보내기전 validation check가 필요할경우
			beforeSubmit: function (data, frm, opt) {
				//alert("전송전!!");
				return true;
			},
			//submit이후의 처리
			success: function(data, statusText) {
				alert(data);
				data = $.parseJSON(data);
				alert(data.js);
				if(data.msg) alert(data.msg);
				if(data.js) eval(data.js);
				if(data.move) location.href = data.move;
				form.action = _prev_action;
				form.mode.value = _prev_mode;
				if($(".none_img_")[0]) $(".none_img_").css({"display":"none"});
				return false;
			},
			//ajax error
			error: function(data,status,error){
				alert("에러발생!!");
				return false;
			}
		});
		form.action = _prev_action;
		form.mode.value = _prev_mode;
		return false;
	}

	this.copyToClipboard = function(val, al) {
		var t = document.createElement("textarea");
		document.body.appendChild(t);
		t.value = val;
		t.select();
		document.execCommand('copy');
		document.body.removeChild(t);
		if(al) alert(al);
	}







































////////////////  구 자바스크립트 //////////////////////
// : jquery ajax사용하기
// : src주수명, 
	this.ajax_func = function(type, dataType, src, json_val, func) {
		//location.href = src+'?'+json_val;
		dataType = dataType ? dataType : 'json';
		$.ajax({
			url: src ,
			type: type,
			data: json_val,
			dataType: dataType,
			async: true,
			cache: false,
			success: function(data, textStatus) {
				eval(func);
			},
			error : function(data, textStatus, error){ 
				alert(data.responseText);
				alert(error);
				return;
			}
		}) ;
	};


	/* form값 정리 - ajax post로 보낼때 사용 */
	this.form_parameters = function(fname) {
		var form = document.forms[fname];
		var len = form.length;
		var count = 0;
		var parameters = '';
		do{
			var el = form[count];
			switch(el.type) {
				case "radio":
					if(el.checked==true) parameters += '&'+el.name+'='+encodeURIComponent(el.value);
					break;
				case "checkbox":
					if(el.checked==true) parameters += '&'+el.name+'='+encodeURIComponent(el.value);
					break;
				default:
					parameters += '&'+el.name+'='+encodeURIComponent(el.value);
					break;
			}
			count++;
		}while(count<len);
		return parameters;
	};
///////////////////////////////////////////////////////
}

var util = new util();



// : 사이드뷰
$(document).ready(function(){

	util.pyeong_meters_input();
	setInterval("util.doBlink()",500);

	// : 날짜
	$( ".datepicker_inp" ).datepicker(datepicker_json).keyup(function(e) {
		if(e.keyCode == 8 || e.keyCode == 46) {
			$.datepicker._clearDate(this);
		}
	});

	$( ".datepicker_inp_birth" ).datepicker(datepicker_json_birth).keyup(function(e) {
		if(e.keyCode == 8 || e.keyCode == 46) {
			$.datepicker._clearDate(this);
		}
	});

	$( ".datepicker_inp_birth16" ).datepicker(datepicker_json_birth16).keyup(function(e) {
		if(e.keyCode == 8 || e.keyCode == 46) {
			$.datepicker._clearDate(this);
		}
	});

	$( ".datepicker_inp_enddate" ).datepicker(datepicker_json_enddate).keyup(function(e) {
		if(e.keyCode == 8 || e.keyCode == 46) {
			$.datepicker._clearDate(this);
		}
	});

	$( ".datepicker_inp_live_date" ).datepicker(datepicker_json_live_date).keyup(function(e) {
		if(e.keyCode == 8 || e.keyCode == 46) {
			$.datepicker._clearDate(this);
		}
	});

	$.datepicker._gotoToday = function(id) {
		$(id).datepicker("setDate", '').datepicker('hide').blur();
	};

	$.datepicker._generateMonthYearHeader_original = $.datepicker._generateMonthYearHeader;
	$.datepicker._generateMonthYearHeader = function(inst, dm, dy, mnd, mxd, s, mn, mns) {
		var header = $($.datepicker._generateMonthYearHeader_original(inst, dm, dy, mnd, mxd, s, mn, mns)),
		years = header.find('.ui-datepicker-year');
		// reverse the years
		years.html(Array.prototype.reverse.apply(years.children()));
		// return our new html
		return $('<div />').append(header).html();
	}

	// : 날짜선택 버튼형
	$(".btn_datepicker").click(function() {
		var c = $(this).attr("get");
		$(c).datepicker("show");
	});

	// : drag
	$(".draggable").each(function(){
		$(this).draggable();
	});

	// : 지역selected
	$(".area_second_select").each(function(i){
		var get_name = $(this).attr("name");
		var si_key = $(this).attr("si_key");
		var sel = $(this).attr("sel");
		var obj = $(this).closest("form").find("select[name='"+get_name+"']");
		if(!obj.eq(1)[0]) obj = $(this).closest("div").find("select[name='"+get_name+"']");

		if(obj.eq(1)[0]==$(this)[0] && obj.length>=2 && si_key) {
			util.area_select_setting(obj.eq(1), 'area_gu_'+si_key, sel);
		}

		if(obj.eq(2)[0]==$(this)[0] && obj.length>=3) {
			si_key = obj.eq(1).attr("si_key");
			var gu_key = obj.eq(1).find("option").index(obj.eq(1).find(":selected"));
			util.area_select_setting(obj.eq(2), 'area_dong_'+si_key+gu_key, sel);
		}
	});

	// : 일반 카테고리 자동 selected
	$(".auto_category").each(function(i){
		$(".auto_category").eq(i).find("select").eq(0).each(function(j){
			var _sel = $(this).attr("sel");
			var _val = $(this).attr("val");
			netk_category.category_ajax($(this)[0], _sel, 'auto_category', _val);
		});
	});

	// : 게시판 관련
	$(".name_side_view.board").each(function(){
		$(this).click(function(){
			var cname = $(this).attr('class');
			var no = $(this).attr("no");
			var bo_table = $(this).attr("bo_table");
			var click_obj = $(this);
			$.post(root+"module/regist.php", "mode=name_side_view&code="+cname+"&bo_table="+bo_table+"&no="+no, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.move) location.href = data.move;
				if(data.tag) {
					var obj = $('.name_side_view_div0');
					if(!obj[0]) {
						$("body").append('<div class="name_side_view_div0">'+data.tag+'</div>');
					} else {
						obj.html(data.tag);
					}

					var offset = $(click_obj).offset();
					$('#name_side_view_div1').css({top:offset.top+25, left:offset.left+20});
				}
			});
		});
	});

	// : checkbox
	$("._checkbox").each(function(){
		$(this).click(function(){
			var checked = $(this).find("img").attr('src').indexOf('ic_check_on')>=0 ? false : true;
			var multicheck = $(this).attr('multicheck');
			var check_img = {};
			switch(!multicheck) {
				case true:
					var check = $(this).attr('check');
					check_img[check] = $(this).find("img");
					break;
				default:
					var check_arr = multicheck.split(',');
					var len = check_arr.length;
					check_img[multicheck] = $(this).find("img");
					$("._checkbox").each(function(){
						var check = $(this).attr('check');
						if(in_array(check, check_arr)) {
							check_img[check] = $(this).find("img");
						}
					});
					break;
			}

			for(x in check_img) {
				switch(checked) {
					case true:
						check_img[x].attr('src', root+'images/ic_check_on.gif');
						var obj = '<input type="hidden" name="'+x+'" class="auto_checkbox" value="Y" checked />';
						check_img[x].parent().append(obj);
						break;
					default:
						check_img[x].attr('src', root+'images/ic_check.gif');
						check_img[x].parent().find("input[name='"+x+"']").remove();
						break;
				}
			}
		});
	});



	$("input[type=file]").on("change",function(){
		return false;

		var file = this.files[0].name;
		var dflt = $(this).attr("placeholder");
		if($(this).val()!=""){
			$(this).next().text(file);
		} else {
			$(this).next().text(dflt);
		}
	});


	if($(".interest_click__").length>0) {
		$(".interest_click__").click(function(){
			var _kind = $(this).attr("kind");
			var _kind2 = $(this).attr("kind2");
			var _no = $(this).attr("no");
			$.post(root+"module/regist.php", "mode=interest_regist&no="+_no+"&kind="+_kind+"&kind2="+_kind2, function(data){
				data = $.parseJSON(data);
				if(data.msg) alert(data.msg);
				if(data.move) location.href = data.move;
			});
		});
	}

	$(".btn_date__").click(function(){
		var _form = $(this).closest("form")[0];
		var _date = $(this).attr("date");
		if(!_date) {
			$(_form).find("[name='date[]']").val('');
		} else {
			$(_form).find("[name='date[]']").eq(0).val(date("Y-m-d", strtotime("-"+_date)));
			$(_form).find("[name='date[]']").eq(1).val(date("Y-m-d"));
		}
	});


	if($('input[type=checkbox]').length>0) {
		$('input[type=checkbox]').dragCheck();
	}
	// : 드레그로 체크된 정보는 배경색을 입힙니다.
	/*
	$('.dragcheck__').change(function() {
		if($(this).is(":checked")) {
			$(this).closest('tr').css("background-color","#E4E9F6");
		}else {
			$(this).closest('tr').css("background-color","");
		}
	});
	*/
});



$(document).load(function(){
	util.textarea_resize();
});