PageSourceSearch

https://cdn.digitaltoday.co.kr/script/common.js

js digitaltoday.co.kr collected 2026-10-01 10:12:47 UTC 104,614 bytes, 3,010 lines download raw bytes

1/* 
22018.07.10 JS 통합작업
3
4#########################################################
5* 합쳐지는 파일
6#########################################################
71. /script/bannerpop.js			9개
82. /script/resizePhoto.js		5개
93. /script/floating.banner.js	2개
104. /script/mosaic.js			6개
115. /script/newsAutoCall.js		2개
126. /script/common.js			8개
137. /script/app.js				49개
14
15=> /script/common.js 로 통합
16##########################################################
17*/
18
19/* ****************************************** */
20/* /script/bannerpop.js						  */
21/* ****************************************** */
22
23var adWrite={
24	// php 전달 변수
25	vars:{
26		separator : "|"
27		,editId : null												// 수정할 id
28		,box : '<div class="ad-map" />'					// 생성된 박스
29		,buttons : '<div class="ad-map-btns"><div class="btn-group-vertical"><button type="button" class="btn_com btn_com_0_699 adcmb_button adcmb_modify button secondary tiny" title="수정"><i class="icon-link"></i></button><button type="button" class="btn_com btn_com_35_699 adcmb_button adcmb_delete button tiny nd-gray" title="삭제"><i class="icon-trash-o"></i></button></div></div>'		//생선된 박스의 버튼들
30		,$textBox : null
31		,act : ""												// 사진 업로드하고 이러저하게 자주 act값이 바뀌는데, 그것의 원래 값
32		,iframe : '<iframe src="about:blank" name="adc_up_frame" id="adc_up_frame" width="0" height="0" frameborder="0"></iframe>'	// upload용 iframe
33		,loadData : {}	
34	}
35
36	// 이미지 로딩되면 크기 재어오기
37	// IE만 이미지 로딩된후 이벤트가 먹어져서 크기를 제대로 재어오지 못해서 inline으로 스크립트 작성함
38	,getSizeLoadImage:function(_this)
39	{
40		var _w = _this.width
41			,_h = _this.height;
42		
43		_this.setAttribute("data-display-width", _w);
44		_this.setAttribute("data-display-height", _h);
45
46		// 이미지맵 이벤트
47		adWrite.map($(_this));
48	}
49
50	// 등록시 이벤트들
51	,evtCrtForm:function()
52	{	
53		var parents = this
54			,$type = $("#adc_crt_type_html, #adc_crt_type_file")
55			,$htmlBox = $("#adc_crt_html_box")
56			,$fileBox = $("#adc_crt_attach_file_box")
57			
58			,$popupType = $("#adc_crt_popup_type_layer, #adc_crt_popup_type_window")
59			,$layer = $("#adc_crt_popup_layer_opt_box")
60			,$window = $("#adc_crt_popup_window_opt_box")
61			
62			,$closeIcon = $("#adc_crt_popup_layer_icon")
63			,$iconBox = $("#adc_crt_popup_layer_icon_box")
64
65			,$closeExpire = $("#bottom_close_expire_label")
66			,$closeExpireBox = $("#bottom_close_expire_box")
67
68			,$attachFile = $("#adc_crt_attach_file")
69			,$previewFile = $("#adc_crt_file_image")
70			,$previewBox = $("#adc_crt_image_preview_box")
71			
72			,$max_file_size = $("#file_upload_max_size").val();
73		
74		// 입력부분 담아두기
75		this.vars.$textBox = $("#adc_crt_image_link_box");
76
77		// html, file 입력
78		$type.click(function(){
79			var isChecked = $(this).attr("value");
80
81			$htmlBox[isChecked==="HTML"?"removeClass":"addClass"]("is-hidden");
82			$fileBox[isChecked==="FILE"?"removeClass":"addClass"]("is-hidden");
83		});
84
85		// 미리보기 호출 //
86		$attachFile.change(function(){
87			var form = document.adc_form;
88
89			if (typeof (FileReader) != "undefined") {
90
91				var file = $(this)[0].files[0]
92					,regex = ['jpg', 'jpeg', 'png', 'gif', 'swf']
93					,filesize = file.size
94					,extension = file.name.split('.').pop().toLowerCase();
95
96				if(filesize > $max_file_size){
97					alert('업로드 용량이 초과되었습니다.');
98					$attachFile.val("");
99					return false;
100				}
101				
102				if((regex.indexOf(extension) > -1) === false){
103					alert('jpg, png, gif, swf 확장자만 선택하여 주세요.');
104					$attachFile.val("");
105
106					//입력시만 함정발동 예정
107					$previewBox.addClass("is-hidden");
108					return false;
109				}
110
111				if(extension == "swf"){
112					$previewBox.addClass("is-hidden");
113					return false;
114				}
115			
116				var reader = new FileReader();
117				reader.onload = function (e) {
118					var img = new Image();
119					img.src = e.target.result;
120
121					img.onload = function(){
122						$previewFile.attr({"src":e.target.result,"data-display-width":this.width, "data-display-height":this.height, "data-width":this.width, "data-height":this.height, "alt":(form.title.value)?form.title.value:form.idxno.value});
123						$previewBox.removeClass("is-hidden");
124						
125						// 이미지가 실제사이즈가 보이는 사이즈보다 크면 다시 보이는 사이즈를 넣자
126						if(this.width > $previewFile.width()) {
127							$previewFile.attr({"data-display-width":$previewFile.width(), "data-display-height":$previewFile.height()});	
128						}
129						
130						$('#size_width').val(this.width);
131						$('#size_height').val(this.height);
132		
133						$('#popup_width').val(this.width);
134						$('#popup_height').val(this.height);
135
136						// 이미지맵 이벤트
137						parents.map($previewFile);
138					}
139				}
140
141				reader.readAsDataURL(file);
142				parents.mapDeleteAll();
143			}
144		});
145
146		var $mapRadio = $("#adc_crt_image_link_total, #adc_crt_image_link_part, #adc_crt_image_link_not")
147			,$imgLinkSelect = $(".adcil_btns")
148			,$imgLink = $("#adc_crt_image_link")
149			,$imgLinkFile = $("#adc_crt_image_link_file")
150			,$selectPopup = $("#adc_crt_image_link_popup")		
151			,$btnMapRegist = $("#adc_crt_img_link_btn_regist")
152			,$linkAction = '';
153
154		// 전체 또는 이미지 맵 선택시
155		$mapRadio.click(function(){
156			var $this = $(this)		
157				,type = $this.attr("data-type");
158
159			if(type == 'total' || type == 'map'){
160				
161				if(type == 'map') $('#link_event_tag').hide();
162                else $('#link_event_tag').show();
163
164				$("#adc_crt_image_link_box").removeClass('is-hidden');
165
166				$btnMapRegist[type==="map"?"removeClass":"addClass"]("is-hidden");
167				
168				if(type==="total") parents.mapDeleteAll();									// 전체선택일때, 이전 데이타 모두 지움
169				
170			}else{
171				$("#adc_crt_image_link_box").addClass('is-hidden');
172			}
173		});
174
175		// layer or window 선택
176		$popupType.click(function(){
177			var isChecked = $(this).attr("data-type");
178
179			$layer[isChecked==="layer"?"removeClass":"addClass"]("is-hidden");
180			$window[isChecked==="window"?"removeClass":"addClass"]("is-hidden");
181		});
182		
183		// 닫기 아이콘 클릭시 아이콘 형태 선택 박스 열게
184		$closeIcon.click(function(){
185			var $label_attr_for = $(this).attr('for')
186				,isChecked = $('#'+$label_attr_for).is(":checked");
187
188			$iconBox[isChecked===false?"removeClass":"addClass"]("is-hidden");
189		});
190		
191		// 몇일 동안 열지 않기 입력박스 열기
192		$closeExpire.click(function(){
193			var $label_attr_for = $(this).attr('for')
194				,isChecked = $('#'+$label_attr_for).is(":checked");
195
196			$closeExpireBox[isChecked===false?"removeClass":"addClass"]("is-hidden");
197		});
198
199		// 어떤형태의 링크인지 확인
200		// link, popup, file, close, day_close
201		$imgLinkSelect.click(function(){
202			var $this = $(this)
203				,type = $this.attr("data-type");
204			
205			if(type==="popup" || type==="close" || type==="day_close"){
206				$imgLink.add($imgLinkFile).addClass("is-hidden");
207				$selectPopup[type==="popup"?"removeClass":"addClass"]("is-hidden");
208			}else{
209				$imgLink[type==="link"?"removeClass":"addClass"]("is-hidden");
210				$imgLinkFile[type==="link"?"addClass":"removeClass"]("is-hidden");
211				$selectPopup.addClass("is-hidden");
212			}
213		});
214
215		$btnMapRegist.click(function(){
216
217			// 맵 등록 수정
218			var $popupSelect = $("#adc_crt_image_link_popup_select")
219				,$linkText = $("#adcil_link_text")
220				,$etcFile = $("#adcilf_attach")
221				,$linkTarget = $(".adcil_btns_link option:selected");
222
223			if(!parents.vars.editId){
224				alert('이미지에서 수정할 맵데이타를 선택하여주세요.');
225				return false;
226			}
227
228			// close, day_close 모두 등록 눌러야 저장되게...안그럼 radio클릭만으로 이전 정보 자체를 날려버림
229			var type = $(".adcil_btns:checked").attr('data-type')
230				,url = ""
231				,target = "";
232			
233			if(!type) return false;
234			if(type==="link"){
235				url = $linkText.val();
236				if(!url){
237					alert('링크를 입력하여 주세요.');
238					$linkText.focus();
239					return false;
240				}
241				
242				target = $linkTarget.val();
243			}else if(type==="popup"){
244				url = $popupSelect.val();
245				if(!url){
246					alert('팝업을 선택하여 주세요.')
247					$popupSelect.focus();
248					return false;
249				}
250			}else if(type==="file"){
251				if(!$etcFile.val()){
252					alert('파일을 선택하여 주세요.');
253					$etcFile.focus();
254					return false;
255				}
256				
257				parents.uploadAttachTmpFile();
258				
259				return false;
260			}
261			
262			parents.insertData({
263									type:type
264									,url:url
265									,target:target
266								})
267			return false;
268		});
269	}
270	
271	// 이미지맵의 파일일때 저장 
272	,uploadAttachTmpFile:function()
273	{
274		var parents = this
275			,iframe = this.vars.iframe
276			,form = document.adc_form;
277		
278		$(document.body).append(iframe);
279		
280		form.action = "/bannerpop/upload_act.php";
281		form.target = "adc_up_frame";
282		form.submit();
283	}
284	
285	// 이미지맵의 임시파일저장후 리턴 값
286	,afterUploadAttachTmpFile:function(result)
287	{
288		// 성공이던 아니던 폼은 일단 초기화함
289		this.releaseForm();
290		$("#adc_up_frame").remove();
291
292		var json = $.parseJSON(adWrite.rawurldecode(result))
293			,filename = json[0].filename;
294
295		if(!filename){
296			alert('업로드시 에러가 발생했습니다. 다시 업로드하여 주세요.');
297			return false;
298		}
299
300		this.insertData({type:"file",url:filename,target:"self",json_obj:result});
301	}
302
303	//rawurldecode
304	,rawurldecode:function(str) {
305		return decodeURIComponent((str + '')
306			.replace(/%(?![\da-f]{2})/gi, function() {
307				return '%25';
308			}));
309	}
310
311	// 이미지맵 입력폼 초기화
312	,initInsertForm:function(data)
313	{
314		var parents = this
315			,type = data.type||"link"
316			,$btns = $(".adcil_btns")
317			,$imgLink = $("#adc_crt_image_link")
318			,$imgLinkFile = $("#adc_crt_image_link_file")
319			,$selectPopup = $("#adc_crt_image_link_popup")
320			,$filebox = $("#adcilf_uploaded_file");
321		
322		//$btns.filter("[data-type='"+type+"']").prop("checked", true);
323		$btns.filter("[data-type='"+type+"']").click(); // 커스텀 radio box 라서 이렇게 처리 
324		$filebox.hide();
325		
326		if(type==="popup" || type==="close" || type==="day_close"){
327			$imgLink.add($imgLinkFile).addClass("is-hidden");
328			$selectPopup[type==="popup"?"removeClass":"addClass"]("is-hidden");
329			
330			if(type==="popup") $("#adc_crt_image_link_popup_select").val(data.url);
331			
332		}else{			
333			$imgLink[type==="link"?"removeClass":"addClass"]("is-hidden");
334			$imgLinkFile[type==="link"?"addClass":"removeClass"]("is-hidden");
335			$selectPopup.addClass("is-hidden");
336			
337			if(type==="link"){
338				$(".adcil_btns_link option[value="+(data.target||"blank")+"]").prop("selected", true);
339				$("#adcil_link_text").val(data.url)
340			}else if(type==="file"){
341				var $attach = $("#adcilf_attach")
342					,$delBtn = $("#adcilfuf_btn")
343					,$filename = $("#adcilfuf_file")
344					,$fmode = $filename.attr('data-type');
345				
346				$attach.replaceWith($attach.clone());
347				
348				if(data.url){
349					// 파일삭제
350					$filebox.show();
351					$filename.html(data.url);
352					$delBtn.unbind("click").on("click", function(){
353						if(confirm("서버에서 파일이 바로 제거됩니다.\n그래도 삭제하시겠습니까?")) {
354						var file = data.url
355							,extension = file.split('.').pop().toLowerCase()
356							,filename = file.replace('.'+extension,'');
357
358						$.post(SITE_DOMAIN + "/bannerpop/upload_act.php"
359								,{mode:'dlt', fmode:$fmode, idxno:document.adc_form.idxno.value||"", filename:file}
360								,function(data,rst){
361									if(rst==="success"){
362										if(data.result==="success"){
363											$filename.empty();
364											$filebox.hide();
365											parents.insertData({type:"file", url:"", target:"", json_obj:""}, "no");
366											//alert(decodeURIComponent(data.msg));
367										}else alert(decodeURIComponent(data.msg));
368									}else alert('생성할 수 있는 탭 제한수를 초과하였습니다.');
369								},"json");
370						}
371					});
372				}
373			}
374		}
375	}
376	
377	// 상위폼 초기화
378	,releaseForm:function(form)
379	{
380		if(!form) form = document.adc_form;
381	
382		// 해제
383		form.action = this.vars.act;
384		form.target = "";
385	}
386	
387	// 데이타 얻어오기
388	,getHiddenData:function()
389	{
390		var $id = $("#input_"+this.vars.editId)
391			,val = $id.val().split(this.vars.separator);
392		
393		return {id:$id, val:val};
394	}
395		
396	// input type 에 넣음
397	,insertData:function(data, isInit)
398	{
399		if(!data) data={};
400		if(!this.vars.editId) return false;
401		if(!isInit) isInit = "ok";
402		
403		var $data = this.getHiddenData()
404			,$id = $data.id
405			,val = $data.val;
406		
407		if(val.length<=0) return false;
408
409		val.splice(4, 4, data.type, data.url, data.target, (data.type == 'file' && data.url) ? data.json_obj : '')
410		var value = val.join(this.vars.separator);
411		
412		$id.val(value);
413		
414		if(isInit==="ok") {
415            $("#link_event_tag").val("")
416            this.initInsertForm({type:"link", url:"", target:"self"});
417        }
418		this.vars.editId = null;
419		
420		alert('적용되었습니다.');
421	}
422	
423	// 수정폼
424	,modifyForm:function(id)
425	{
426		if(!id) return false;
427		this.vars.editId = id;
428		
429		var $data = this.getHiddenData()
430			,val = $data.val
431			,type = val[4]||"link"
432			,url = val[5]||""
433			,target = val[6]||"self";
434
435		//이미지맵의 파일인지, 전체링크의 파일인지 구분짓기 위함
436		$("#adcilfuf_file").attr('data-type', 'M' + (Number(this.vars.editId.replace(/[^0-9]/g,'')) + 1));
437
438		this.initInsertForm({type:type, url:url, target:target});
439		this.mapBlinkArea();
440	}
441	
442	// 이미지 맵 잡기 위해 임시 저장
443	,afterUploadTmpFile:function(json)
444	{
445		var form = document.adc_form
446			,result = json.result||"error"
447			,data = json.data||""
448			,width = json.width||""
449			,height = json.height||""
450			,mime = json.mime||"";
451		
452		// 해제
453		this.releaseForm(form);
454		
455		if(result === "error"){
456			alert(data);
457			return false;
458		}
459		
460		// 나중에 폼 name으로 바꿀것!!!
461		//$("#adc_crt_popup_size_width").val(width);
462		//$("#adc_crt_popup_size_height").val(height);
463		if(form.popup_width) form.popup_width.value = width;
464		if(form.popup_height) form.popup_height.value = height;
465		
466		// 창 보이고, 이미지 미리보기 - 표시되는 사이즈 재오기
467		$("#adc_crt_image_preview_box").show();
468		$("#adc_crt_file_image").attr({"src":"data:"+mime+";base64,"+data, "data-width":width, "data-height":height});
469		
470		// 새로 올린것이니, 로딩된후 모든 이전에 저장된 맵 정보 날림
471		// 이전 데이타 삭제
472		this.mapDeleteAll();
473	}
474	
475
476	// 비율대로 좌표 계산하기
477	,mapCalcPositionRatio:function(val, ratio)
478	{
479		if(ratio === 1) return val;
480		
481		return Math.round(val * ratio);
482	}
483	
484	// 비율대로 좌표 계산하기-축소
485	,mapScalePositionRatio:function(val, ratio)
486	{
487		if(ratio === 1) return val;
488		
489		return Math.round(val / ratio);
490	}
491	
492	/**
493	 * input type="hidden" 생성
494	 * id : string
495	 * pos : object - 실제 위치
496	 * kind : string -  링크,파일 등
497	 * url : string - 링크, javascript function
498	 * target : string - 현재창,새창,부모창
499	 */
500	,mapHidden:function($form, id, pos, kind, url, target)
501	{
502		var inputId = "input_"+id
503			,val = [pos.x1, pos.y1, pos.x2, pos.y2, kind, url, target].join(this.vars.separator)
504			,input = '<input type="hidden" name="link_url[]" id="'+inputId+'" class="adc_crt_image_map_data" value="'+val+'" />';
505		
506		$form.append(input);
507	}
508	
509	// 생성된 맵 삭제
510	,mapDelete:function(id)
511	{
512		var bId = "btn_"+id
513			,inputId = "input_"+id;
514		
515		$("#"+id+",#"+bId+",#"+inputId).remove();
516		this.initInsertForm({type:"link", url:"", target:"self"});
517		alert('삭제되었습니다.');
518	}
519	
520	// 생성된 맴 전체 삭제
521	,mapDeleteAll:function()
522	{
523		$(".adc_crt_image_map_data, .ad-map, .ad-map-btns").remove();
524	}
525	
526	// 입력부분 깜빡임
527	,mapBlinkArea:function()
528	{
529		var parents = this;
530		parents.vars.$textBox.addClass("ad-map-bg");
531		setTimeout(function(){
532			parents.vars.$textBox.removeClass("ad-map-bg")
533		},500);
534	}
535
536	// 이미지 맵 잡기
537	,map:function(target)
538	{		
539		var parents = this
540			,$img = !!target.jquery ? target : $(target)
541			,width = Number($img.attr("data-width"))||0							// 실제 사이즈
542			,height = Number($img.attr("data-height"))||0
543			,dWidth = Number($img.attr("data-display-width"))||0				// 표시 사이즈
544			,dHeight = Number($img.attr("data-display-height"))||0
545			,ratio = width>dWidth ? Number((width/dWidth).toFixed(1)) : 1		// 실제 사이즈가 표시된 사이즈보다 클경우 비율 맞추기 위해
546			,box = parents.vars.box
547			,buttons = parents.vars.buttons
548			,$imgmapRadio = $("#adc_crt_image_link_part")
549			,$imgmapBtnRegist = $("#adc_crt_img_link_btn_regist")
550			,$form = $("#adc_form");
551
552					
553		return {
554			exe:function()
555			{
556				this.canvas().loadData().addEvent();
557			}
558		
559			// 덧붙이기
560			,canvas:function()
561			{
562				$img.next("#adc_crt_edit_canvas").remove().end().after('<div id="adc_crt_edit_canvas" class="ad-canvas" style="left:'+$img.position().left+'px;width:'+dWidth+'px;height:'+dHeight+'px"></div>');
563				return this;
564			}
565			
566			// 로드된 맵 데이타에 따라 그리기
567			,loadData:function()
568			{
569				var _parent = this
570					,$input = $(".adc_crt_image_map_data")
571					,$canvas = $("#adc_crt_edit_canvas");
572				
573				// 전체선택이라면
574				if($input.length<=0){
575					parents.initInsertForm(parents.vars.loadData);					
576					return this;
577				}
578				
579				if($input.length>0) $('#link_event_tag').hide();
580				
581				// 이미지 맵 설정으로 수정
582				$imgmapRadio.not(":checked").prop("checked", true);
583				$imgmapBtnRegist.show();
584				
585				$.each($input, function(i,ele){
586					var $ele = $(ele)
587						,id = ele.id.replace("input_","")
588						,val = $ele.val().split(parents.vars.separator)||[]
589						,x1 = val[0]||0
590						,y1 = val[1]||0
591						,x2 = val[2]||0
592						,y2 = val[3]||0
593						,type = val[4]||"link"
594						,url = val[5]||""
595						,target = val[6]||"self";
596					
597					_parent.display($canvas, id, {x1:x1, y1:y1, x2:x2, y2:y2});					
598				});
599				
600				return this;
601			}
602			
603			// 영역 그림
604			,display:function($canvas, id, data)
605			{
606				if(!data) data={};
607				
608				var $box = $(parents.vars.box)
609					,$buttons = $(parents.vars.buttons)
610					,offsetGap = $canvas.position().left||0			// 절대 좌표이기에 캔바스보다 작은 이미지일경우 gap만큼 더해서 표시해줌
611					,bId = "btn_"+id
612					,x1 = (Number(parents.mapScalePositionRatio(data.x1, ratio))+offsetGap)||0
613					,y1 = parents.mapScalePositionRatio(data.y1, ratio)||0
614					,x2 = (Number(parents.mapScalePositionRatio(data.x2, ratio))+offsetGap)||0
615					,y2 = parents.mapScalePositionRatio(data.y2, ratio)||0
616					,width = Math.abs(x1-x2)
617					,height = Math.abs(y1-y2);
618			
619				// 버튼 만들기
620				$buttons.css({"top":y1+"px", "left":x2+"px"}).attr({"id":bId})
621				.find(".adcmb_button").click(function(){
622					var $this = $(this)
623						,isModify = $this.is(".adcmb_modify");
624					
625					if(isModify===true){
626						parents.modifyForm(id);
627					}else{
628						parents.mapDelete(id);
629					}
630				});
631				
632				// box 만들기
633				$box.css({"top":y1+"px", "left":x1+"px", "width":width, "height":height}).attr({"id":id});
634				
635				$canvas.after($box);
636				$box.after($buttons);
637								
638				return this;
639			}
640						
641			// event
642			,addEvent:function()
643			{
644				var _this = this
645					,position = {x:0, y:0}
646					,$box = null
647					,start = false;
648				
649				$(document.body).off("mousedown mousemove mouseup touchstart touchmove touchend","#adc_crt_edit_canvas")
650				.on({
651						"mousedown touchstart":function(event)
652						{
653							start = true;
654							
655							var $this = $(this)
656								,evt = parents.getEventObject(window.event || event)
657								,$evtTarget = $(evt.target||evt.srcElement)
658								,offsetGap = $evtTarget.position().left									// 상대위치기 때문에 값 left 값을 더해줘야 함
659								,x = Math.round(evt.offsetX||(evt.pageX-$evtTarget.offset().left))
660								,y = Math.round(evt.offsetY||(evt.pageY-$evtTarget.offset().top))
661								,id = "acem_"+new Date().getTime();
662							
663							position.x = x;
664							position.y = y;
665							
666							$box = $(box).css({"top":y, "left":x+offsetGap}).attr({"id":id})
667							$this.after($box);
668							
669							//evt.cancelBubble = true;
670							//evt.stopPropagation();
671							//evt.preventDefault();
672						}
673					
674						,"mousemove touchmove":function(event)
675						{							
676							if(start === true){
677								var evt = parents.getEventObject(window.event || event)
678									,$evtTarget = $(evt.target||evt.srcElement)
679									,offsetGap = $evtTarget.position().left									// 상대위치기 때문에 값 left 값을 더해줘야 함
680									,x = Math.round(evt.offsetX||(evt.pageX-$evtTarget.offset().left))
681									,y = Math.round(evt.offsetY||(evt.pageY-$evtTarget.offset().top))
682									//,width = Math.abs(x-position.x)-5
683									//,height = Math.abs(y-position.y)-5
684									,width = Math.abs(x-position.x)
685									,height = Math.abs(y-position.y)
686									,css = {};
687								
688								css = {"width":width, "height":height};
689								
690								if(position.x>x && position.y>y){				// 좌상
691									css.left = position.x-width+offsetGap;
692									css.top = position.y-height;
693								}else if(position.x>x && position.y<y){			// 좌하
694									css.left = position.x-width+offsetGap;						
695								}else if(position.x<x && position.y>y){			// 우상	
696									css.top = position.y-height;
697								}
698								
699								$box.css(css);
700							}
701						}
702						
703						,"mouseup touchend":function(event)
704						{							
705							start = false;
706							
707							// $box기준으로 x1,y1,x2,y2 가져옴
708							var width = $box.width()
709								,height = $box.height();
710							
711							if(width<20 && height<20){
712								$box.remove();
713								return false;
714							}
715							
716							var	$buttons = $(buttons)
717								,evt = parents.getEventObject(window.event || event)
718								,$evtTarget = $(evt.target||evt.srcElement)
719								,offsetGap = $evtTarget.position().left									// 상대위치기 때문에 값 left 값을 빼줘야지 진짜 맵이 됨
720								,pos = $box.css(["top","left"])
721								,x1 = parents.castIntFromCss(pos.left)
722								,y1 = parents.castIntFromCss(pos.top)
723								,id = $box.attr("id")
724								,bId = "btn_"+id
725								,inputId = "input_"+id
726								,info = { x1 : x1, y1 : y1, x2 : x1 + width, y2 : y1 + height }
727								,real = { x1 : parents.mapCalcPositionRatio(info.x1, ratio)-offsetGap, y1 : parents.mapCalcPositionRatio(info.y1, ratio), x2 : parents.mapCalcPositionRatio(info.x2, ratio)-offsetGap, y2 : parents.mapCalcPositionRatio(info.y2, ratio)};
728							
729							// 수정 삭제 이벤트
730							$buttons.css({"top":info.y1, "left":info.x2}).attr({"id":bId})
731							.find(".adcmb_button").click(function(){
732								var $this = $(this)
733									,isModify = $this.is(".adcmb_modify");
734
735								if(isModify===true){
736									parents.modifyForm(id);
737								}else{
738									parents.mapDelete(id);
739								}
740							});
741							
742							$box.after($buttons);
743							parents.mapHidden($form, id, real, "", "", "");
744							parents.initInsertForm({type:"link", url:"", target:"self"});									// 폼 초기화
745							parents.vars.editId = id;
746							
747							// 이미지맵으로 체크
748							$imgmapRadio.not(":checked").click().prop("checked", true);
749							$imgmapBtnRegist.show();
750							
751							parents.mapBlinkArea();																			// 글쓰기 폼 이펙트
752							
753							//util.toast(lang.adcRequireLink);
754						}
755					},"#adc_crt_edit_canvas");
756				
757				return this;
758			}
759			
760		}.exe();
761	}
762
763	// jquery 이벤트 등록 사용시, 이벤트 알아내기
764	,getEventObject:function(e)
765	{
766		var evt = window.event||e;
767			evt = evt.targetTouches?evt.targetTouches[0]:evt;  	// jquery touch event
768		return evt;
769	}
770	
771	// css px제거후 숫자형으로
772	,castIntFromCss:function(v)
773	{
774		return Number(v.replace("px",""));
775	}
776	
777	// list에서 버튼 이벤트
778	,evtClickedButtons:function()
779	{	
780		// edit
781		var edit_info = $('#admin-ad-list')
782		,edit_section = edit_info.attr("data-edit-section")	
783		,edit_area = edit_info.attr("data-edit-area")	
784		,edit_step = edit_info.attr("data-edit-step")	
785		,edit_idxno = edit_info.attr("data-edit-idxno")
786		,edit_mode = edit_info.attr("data-edit-mode")
787		,org_banner_kind = edit_info.attr("data-edit-org-banner-kind")
788		,banner_kind = edit_info.attr("data-edit-banner-kind")
789		,page = edit_info.attr("data-page")
790		//,tmp_banner_idxno = edit_info.attr("data-edit-tmp-banner-idxno")
791		,sc_area = edit_info.attr("data-search-scarea")
792		,sc_word = encodeURIComponent(edit_info.attr("data-search-scword"))
793
794		$(".ad-tile-toolkit, .content-inert").on("click", "button"
795		, function(){
796			var $this = $(this)
797				,type = $this.attr("data-btn-type")
798				,$parent = $this.closest(".adccfg_list_items")
799				,bannerIdxno = $parent.attr("data-banner-idxno")
800				,banner_type = $parent.attr("data-banner-type")
801				,linkInfo = $parent.attr("data-link-info")
802				,title = $.trim($parent.find(".acli_title").text())
803				,state = $.trim($parent.find(".ad-tile-state").text())
804				,Imgbp_Tag = $.trim($parent.find(".Imgbp_Tag").html());
805
806			switch(type){
807				case "add":
808					if(banner_type == 'popup') {
809						var data = {'mode':edit_mode,'section':edit_section,'popup_title':encodeURIComponent(title),'popup_idxno':bannerIdxno}
810						adWrite.addEditPopupContents(data);
811					}else{
812						var data = {mode:edit_mode,'idxno':edit_idxno,'area':edit_area,'section':edit_section,'step':edit_step,'banner_title':encodeURIComponent(title),'banner_idxno':bannerIdxno,'kind':banner_kind,'edit_msg':'선택한 배너로 교체하시겠습니까?'};
813						adWrite.addEditContents(data);
814					}
815					break;
816				case "down":
817					location.href = '/bannerpop/attach_down.php?idxno='+bannerId
817xno+'&mode=O';
818					break;
819				case "linkInfo":					// 업로드된 파일 링크 복사					
820					var source = '/bannerpop/uploads/image/'+linkInfo;
821					adWrite.copyExe(source);
822					break;
823				case "sourceCopy":					// 소스복사
824				/*if(state == '무제한') {
825					if(!Imgbp_Tag) return false;
826					var _html = '<!--'+title+'-->'
827							  + Imgbp_Tag
828							  + '<!--//'+title+'-->';	
829				}else{*/
830					var _time = new Date().getTime()
831						,_html = '<!--'+title+'-->'
832							   + '<script type="text/javascript">var ___BANNER = "ban_'+_time+'";</script>'
833							   + '<script type="text/javascript" charset="utf-8" src="/bannerpop/uploads/js/'+bannerIdxno+'.js?'+_time+'" id="ban_'+_time+'"></script>'
834							   + '<!--//'+title+'-->';
835				//}
836					
837					adWrite.copyExe(_html);
838				break;
839				case "preview":
840					if(!window.___popup) return false;
841					
842					var p = ___popup[bannerIdxno];
843
844					if(!p) return false;
845					if(!window.___currentTime) window.___currentTime = Math.floor(new Date().getTime()/1000);// 시간이 설정되지 않았다면 js 시간으로 설정함
846					
847					// 관리자만...										
848					$(".layer_box").remove();				// 다른게 열려있다면 삭제
849					bannerpop.vars.popup.view = "manager";
850					bannerpop.float(p);
851					break;
852				case "mdf":
853					var $ahref = '/bannerpop/';
854					$ahref += edit_section ? 'edit.html' : 'write.html';
855					$ahref += '?type='+banner_type+'&mode=modify&idxno='+bannerIdxno+'&page='+page;
856					if(edit_section) $ahref += '&edit_section=' + edit_section;
857					if(edit_area) $ahref += '&edit_area=' + edit_area;
858					if(edit_step) $ahref += '&edit_step=' + edit_step;
859					if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
860					if(edit_mode) $ahref += '&edit_mode=' + edit_mode;
861					//if(tmp_banner_idxno) $ahref += '&tmp_banner_idxno=' + tmp_banner_idxno;
862					if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
863					if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
864					if(sc_area) $ahref += '&sc_area=' + sc_area;
865					if(sc_word) $ahref += '&sc_word=' + sc_word;
866					location.href = $ahref;
867					break;
868				case "del":
869					if(window.confirm('삭제할까요?')) {	
870						var $ahref = '/bannerpop/delete_act.php?type='+banner_type+'&idxno='+bannerIdxno+'&page='+page;
871						if(edit_section) $ahref += '&edit_section=' + edit_section;
872						if(edit_area) $ahref += '&edit_area=' + edit_area;
873						if(edit_step) $ahref += '&edit_step=' + edit_step;
874						if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
875						if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
876						if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
877						if(sc_area) $ahref += '&sc_area=' + sc_area;
878						if(sc_word) $ahref += '&sc_word=' + sc_word;
879						location.href = $ahref;
880					}
881					break;
882				case "mdf_activity":
883					var $ahref = '/bannerpop/';
884					$ahref += edit_section ? 'edit.html' : 'write_activity.html';
885					$ahref += '?type='+banner_type+'&mode=modify&activity_idxno='+bannerIdxno+'&page='+page;
886					if(edit_section) $ahref += '&edit_section=' + edit_section;
887					if(edit_area) $ahref += '&edit_area=' + edit_area;
888					if(edit_step) $ahref += '&edit_step=' + edit_step;
889					if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
890					if(edit_mode) $ahref += '&edit_mode=' + edit_mode;
891					if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
892					if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
893					//if(tmp_banner_idxno) $ahref += '&tmp_banner_idxno=' + tmp_banner_idxno;
894					if(sc_area) $ahref += '&sc_area=' + sc_area;
895					if(sc_word) $ahref += '&sc_word=' + sc_word;
896					location.href = $ahref;
897					break;
898				case "del_activity":
899					if(window.confirm('삭제할까요?')) {	
900						var $ahref = '/bannerpop/delete_activity_act.php?type='+banner_type+'&activity_idxno='+bannerIdxno+'&page='+page;
901						if(edit_section) $ahref += '&edit_section=' + edit_section;
902						if(edit_area) $ahref += '&edit_area=' + edit_area;
903						if(edit_step) $ahref += '&edit_step=' + edit_step;
904						if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
905						if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
906						if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
907						if(sc_area) $ahref += '&sc_area=' + sc_area;
908						if(sc_word) $ahref += '&sc_word=' + sc_word;
909						location.href = $ahref;
910					}
911					break;				
912				case "sourceCopy_activity":					// 소스복사
913					var _time = new Date().getTime()
914					,_html = '<!--'+title+'-->'
915						   + '<script type="text/javascript">var ___BANNER = "ban_'+_time+'";</script>'
916						   + '<script type="text/javascript" charset="utf-8" src="/bannerpop/uploads/js_activity/'+bannerIdxno+'.js?'+_time+'" id="ban_'+_time+'"></script>'
917						   + '<!--//'+title+'-->';
918					
919					adWrite.copyExe(_html);
920					break;
921                case "mdf_multi":
922                    var $ahref = '/bannerpop/';
923                    $ahref += edit_section ? 'edit.html' : 'write_activity_multi.html';
924                    $ahref += '?type='+banner_type+'&mode=modify&multi_idxno='+bannerIdxno+'&page='+page;
925                    if(edit_section) $ahref += '&edit_section=' + edit_section;
926                    if(edit_area) $ahref += '&edit_area=' + edit_area;
927                    if(edit_step) $ahref += '&edit_step=' + edit_step;
928                    if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
929                    if(edit_mode) $ahref += '&edit_mode=' + edit_mode;
930                    if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
931                    if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
932                    //if(tmp_banner_idxno) $ahref += '&tmp_banner_idxno=' + tmp_banner_idxno;
933                    if(sc_area) $ahref += '&sc_area=' + sc_area;
934                    if(sc_word) $ahref += '&sc_word=' + sc_word;
935                    location.href = $ahref;
936                    break;
937                case "del_multi":
938                    if(window.confirm('삭제할까요?')) {
939                        var $ahref = '/bannerpop/delete_activity_multi_act.php?type='+banner_type+'&multi_idxno='+bannerIdxno+'&page='+page;
940                        if(edit_section) $ahref += '&edit_section=' + edit_section;
941                        if(edit_area) $ahref += '&edit_area=' + edit_area;
942                        if(edit_step) $ahref += '&edit_step=' + edit_step;
943                        if(edit_idxno) $ahref += '&edit_idxno=' + edit_idxno;
944                        if(org_banner_kind) $ahref += '&org_banner_kind=' + org_banner_kind;
945                        if(banner_kind) $ahref += '&banner_kind=' + banner_kind;
946                        if(sc_area) $ahref += '&sc_area=' + sc_area;
947                        if(sc_word) $ahref += '&sc_word=' + sc_word;
948                        location.href = $ahref;
949                    }
950                    break;                
951                case "sourceCopy_multi":
952                    var _time = new Date().getTime()
953                    ,_html = '<!--'+title+'-->'
954                           + '<script type="text/javascript">var ___BANNER = "ban_'+_time+'";</script>'
955                           + '<script type="text/javascript" charset="utf-8" src="/bannerpop/uploads/js_multi/'+bannerIdxno+'.js?'+_time+'" id="ban_'+_time+'"></script>'
956                           + '<!--//'+title+'-->';
957                    adWrite.copyExe(_html);
958                    break;
959			}
960
961			return false;
962		});
963	}
964
965	//수정시 섹션판 컨텐츠 삽입
966	,addEditContents:function(data)
967	{			
968		//var flag = false;
969		var flag = true;
970
971		/*if(data.mode == 'modify') {
972			if(data.tmp_banner_idxno != data.banner_idxno) {
973				if(confirm(data.edit_msg)) flag = true;
974				else flag = false;
975			}else flag = true;
976		}else flag = true;*/
977
978		if(flag) { 			
979			data = JSON.stringify(data);
980			$.ajax({
981				url:"/edit/adminReservationBannerWrite.php"
982				,type:'post'
983				,dataType:'json'
984				,contentType:'application/x-www-form-urlencoded; charset=utf-8'
985				,data:{post_data:data}
986				,success:function(json, result) {
987					if(result == 'success') {
988						if(json.response == 'ok') { 
989							window.parent.location.reload();
990						}else{
991							alert(json.msg);
992							return false;
993						}
994					}else return false;
995				}
996			});
997		}else{
998			return false;
999		}
1000	}
1001
1002	//수정시 섹션판 컨텐츠 삽입
1003	,addEditPopupContents:function(data)
1004	{					
1005		data = JSON.stringify(data);
1006		$.ajax({
1007			url:"/edit/adminReservationPopupWrite.php"
1008			,type:'post'
1009			,dataType:'json'
1010			,contentType:'application/x-www-form-urlencoded; charset=utf-8'
1011			,data:{post_data:data}
1012			,success:function(json, result) {
1013				if(result == 'success') {
1014					if(json.response == 'ok') {
1015						//window.parent.location.reload();
1016						parent.$('#edit-modal').find('.close-button').trigger('click');
1017						adWrite.addPopupContentsList(json);
1018					}else{
1019						alert(json.msg);
1020						return false;
1021					}
1022				}else return false;
1023			}
1024		});
1025	}
1026
1027	,addPopupContentsList:function(json) {
1028		var html = '';
1029		if(json.rows.length>0) {
1030			for(var i = 0; i < json.rows.length; i++) {
1031				var index = i+1;
1032				html += '<!-- 팝업 //-->';
1033				html += '<div class="option-popup-item">';
1034				html += '	<input type="radio" name="editPopup" id="editPopup' + index + '" class="popup_element_ckecked" title="' + adWrite.rawurldecode(json.rows[i].popup_title) + '" data-idxno="' + json.rows[i].idxno + '" data-step="' + json.rows[i].step + '" value="' + json.rows[i].popup_idxno + '" />';
1035				html += '	<label for="editPopup' + index + '">';
1036				if(json.rows[i].popup_image && json.rows[i].extension != 'swf') {
1037					html += '<img src="/bannerpop/uploads/image/' + json.rows[i].popup_image + '" alt="' + adWrite.rawurldecode(json.rows[i].popup_title) + '" />';
1038				}else{
1039					if(json.rows[i].extension == 'swf') html += 'SWF';
1040					else html += 'HTML';
1041				}
1042				html += '		<div class="option-popup-item-title">' + adWrite.rawurldecode(json.rows[i].popup_title) + '</div>';
1043				html += '	</label>';
1044				html += '</div>';
1045				html += '<!--// 팝업 -->';
1046			}
1047		}
1048
1049		parent.$('.option-popup-group').html(html);
1050	}
1051
1052	//전체선택ㆍ해제
1053	,allChk:function()
1054	{	
1055		var $allChk = $('#allCheck');
1056		$allChk.click(function(){
1057			if($(this).is(':checked') == true) {
1058				$('.elembox').prop('checked',true);
1059			}else{
1060				$('.elembox').prop('checked',false);
1061			}
1062		});
1063	}
1064
1065	/**
1066	 * 클립보드 복사 
1067	 * source : 복사할 정보
1068	 */
1069	,copyExe:function(source)
1070	{
1071		if(window.clipboardData){			// ie
1072			window.clipboardData.setData('Text',source);
1073			alert("복사되었습니다. 원하는 곳에 붙여넣기하여 주세요.");
1074		}else{								// etc
1075			//var $tmpDiv=$('<div class="blind">'+source.replace(/</g,"&lt;").replace(/>/g,"&gt;")+'</div>').appendTo("body")
1076			// blind가 display:none 속성 때문에 제거
1077			var $tmpDiv=$('<div>'+source.replace(/</g,"&lt;").replace(/>/g,"&gt;")+'</div>').appendTo("body")
1078				,range=document.createRange()
1079				,selection=null;
1080
1081			range.selectNodeContents($tmpDiv.get(0));
1082			selection=window.getSelection();
1083			selection.removeAllRanges();
1084			selection.addRange(range);
1085			
1086			if(document.execCommand("copy", false, null)) alert("복사되었습니다. 원하는 곳에 붙여넣기하여 주세요.");
1087			else window.prompt('키보드의 ctrl+C 또는 마우스 오른쪽의 복사하기를 이용해주세요.', source);
1088
1089			$tmpDiv.remove();
1090		}
1091	}
1092
1093	/**
1094	 * 기능성 배너 추가/순서변경/삭제/
1095	 */
1096	 ,evtClickActivityAdd:function() {
1097		//sessionStorage.removeItem("last_idx");
1098		var activity_idxno=window.parent.$('#all-banner-list').closest('div').attr('data-activity-idxno')||'';
1099		$('#activity-add-btn').click(function() {
1100			var $this=$(this);
1101				//,$viewHref=$('#activity-view-btn').attr('href')
1102				//,$last_idx=(activity_idxno)?activity_idxno:sessionStorage.getItem('last_idx');
1103			
1104			if($('.banner_element_ckecked').is(':checked') == false) {
1105				alert('배너를 선택해주세요.');
1106				//if(!$last_idx) $('#activity-view-btn').addClass('is-hidden');
1107				return false;
1108			}else{
1109				var $checked=$(".banner_element_ckecked:checked")
1110					,arr = new Array();
1111				if($checked.length>0) {
1112					$.each($checked, function(idx, v) {
1113						arr.push(v.value);
1114					});
1115
1116					var data = {mode:activity_idxno?'modify':'input', activity_idxno:activity_idxno, banner_idxno:arr};
1117					data = JSON.stringify(data);
1118					//console.log(data);
1119					$.ajax({
1120						url:"/bannerpop/activity_act.php"
1121						,type:'post'
1122						,dataType:'json'
1123						,contentType:'application/x-www-form-urlencoded; charset=utf-8'
1124						,data:{post_data:data}
1125						,success:function(json, result) {
1126							if(result == 'success') {
1127								if(json.response == 'ok') {
1128									//alert('추가되었습니다.\n우측에 버튼을 클릭하시면 상세 화면으로 이동합니다.');
1129									/*if(!activity_idxno) {
1130										sessionStorage.setItem('last_idx', json.last_insert_id);
1131										$('#activity-view-btn').attr('href', $viewHref + '&activity_idxno='+json.last_insert_id);
1132									}
1133									$('#activity-view-btn').removeClass('is-hidden');*/
1134									window.parent.location.reload();
1135								}else{
1136									//alert(json.msg);
1137									return false;
1138								}
1139							}else return false;
1140						},
1141     error:function(request,status,error){
1142        alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
1143       }
1144					});
1145				}
1146			}
1147		});
1148
1149		$('#banner-activity-box').sortable({
1150			axis: '',
1151			update: function() {
1152				//console.log($(this));
1153			}
1154		});
1155
1156		$('.trash').click(function() {
1157			if($('.banner-activity-list').length <= 1) {
1158				alert('마지막 배너는 삭제 할 수 없습니다.');
1159				return false;
1160			}
1161
1162			var $this=$(this)
1163			,$parent = $this.closest('.banner-activity-list');
1164
1165			$parent.fadeOut('fast', function(){
1166				$parent.remove();	
1167			});
1168		});
1169
1170		$('#all-banner-list').on('click', function(e) {
1171
1172			$this = $(this);
1173			href = $this.attr('href');
1174
1175			$("#edit-modal-iframe").attr("src", href);
1176			$('#edit-modal').foundation('open');
1177
1178			return false;
1179		});
1180
1181		$('#edit-modal').on('open.zf.reveal', function(e){
1182			$('#for-loading').show();
1183		});
1184
1185		$('#edit-modal').on('closed.zf.reveal', function(e){
1186			$("#edit-modal-iframe").attr("src", "about:blank").height('0px').closest('#activity-modal').css('height', '0px');
1187		});
1188	 }
1189
1190	 ,valid_activity:function() {
1191		if($('#activity_title').val() == '') {
1192			alert('제목을 입력하세요.');
1193			$('#activity_title').focus();
1194			return false;
1195		}
1196
1197		if($('.banner-activity-list').length<=0) {
1198			alert('배너를 하나 이상 추가하셔야 합니다.');
1199			return false;
1200		}
1201
1202		return true;
1203	 }
1204
1205}; // end adWrite 
1206
1207var bannerpop={
1208	vars:{
1209		popup:{
1210			bodyWidth:0
1211			,bodyLeft:0
1212			,screenWidth:0
1213			,popname:"popup_"
1214			,width:{ window:[],layer:[] }
1215			,height:{ window:[],layer:[] }
1216			,top:{ window:[],layer:[] }
1217			,left:{ window:[],layer:[] }
1218			,order:0						// z-index용 순차적
1219			,view:"normal"					// 일반 : normal or 관리자 : manager
1220		}
1221		,isMobileMode:false
1222	}
1223
1224	/**
1225	 * 배너 효과
1226	 * 태그 작성 예::: bannerpop.banner(".banner_event_box");
1227	 <div class="boder_box banner_event_box" data-type="slide" data-idxno="3" data-speed="0.3">		
1228		<div class="boder_box beb_box">
1229			<ul class="no_type beb_ul">
1230				<li class="beb_li" data-delay="1"><a href=""><img src="http://sample.ndsoftnews.com/template_sian/download.php?idxno=856&file_extension=jpg&filename=Untitled-1.jpg" alt="배너 : 제목" /></a></li>
1231				<li class="beb_li" data-delay="1"><a href=""><img src="http://sample.ndsoftnews.com/template_sian/download.php?idxno=854&file_extension=jpg&filename=250%B0%E6%B3%B2%B5%B5%B9%CE%BD%C5%B9%AE.jpg" alt="배너 : 제목" /></a></li>
1232				<li class="beb_li" data-delay="1"><a href=""><img src="http://sample.ndsoftnews.com/template_sian/download.php?idxno=846&file_extension=jpg&filename=330%C6%F7%C5%E4.jpg" alt="배너 : 제목" /></a></li>
1233				<li class="beb_li" data-delay="1"><a href=""><img src="http://sample.ndsoftnews.com/template_sian/download.php?idxno=848&file_extension=jpg&filename=675_weeklyjournal.jpg" alt="배너 : 제목" /></a></li>
1234				<li class="beb_li" data-delay="5"><iframe width="640" height="360" src="http://www.youtube.com/embed/dykTgBpgbVs?feature=player_detailpage" frameborder="0" allowfullscreen></iframe></li>
1235			</ul>
1236		</div>
1237		<div class="beb_buttons">
1238			<button type="button" class="beb_btns beb_btn_prev">뒤로</button>
1239			<button type="button" class="beb_btns beb_btn_stop">멈춤</button>
1240			<button type="button" class="beb_btns beb_btn_next">앞으로</button>
1241		</div>
1242	 </div>
1243	 */
1244	,effect:function()
1245	{
1246		var savePrefix = "banner_order_";
1247
1248		// 배너 넓이 
1249		function setSizeInfo($this){
1250			var idxno = $this.attr("data-idxno")
1251				 ,$ul = $this.find(".beb_ul")
1252				 ,$li = $ul.find(".beb_li")
1253				 ,boxWidth = $this.innerWidth()||$this.closest("#float_side_box").width()	// 윙 사이드의 배너일경우 재측정
1254				 ,liCount = $li.length||0;
1255			
1256			// 관리자 페이지가 아닐때 실제 노출중인 것만 찾음
1257			//if(ADM_DOMAIN.indexOf(location.host)<0){
1258				$.each($li,function(){
1259					var $this=$(this), len=$this.find(".banner_box").length;
1260					if(!len) $this.remove();
1261				});
1262				$li = $ul.find(".beb_li");
1263				liCount = $li.length||0;
1264			//}
1265
1266			// 부모박스 기준으로 ul 최대 넓이 지정
1267			$ul.width(boxWidth*liCount);
1268
1269			// 배너마다 넓이가 다를수 있으니 부모박스 넓이기준으로함
1270			$li.width(boxWidth);
1271
1272			return {
1273						idxno : idxno
1274						,$ul : $ul
1275						,$li : $li
1276						,boxWidth : boxWidth
1277						,liCount : liCount
1278					};
1279		}
1280
1281		return {
1282			// 순서대로 하나의 배너만 보임 
1283			order:function(){
1284				var _this = this
1285					,$this = $(_this)
1286					,$info = setSizeInfo($this)
1287					,idxno = $info.idxno
1288					,$li =$info.$li
1289					,liCount = $info.liCount-1
1290					,saveKey = savePrefix+idxno
1291					,order = Number(localStorage.getItem(saveKey))||0;
1292
1293				// 랜덤 선택된것만 보임, 버튼 없앰
1294				$li.css("display","list-item").not(":eq("+order+")").css("display","none");
1295
1296				localStorage.setItem(saveKey, (order>=liCount ? 0 : order+1));
1297			}
1298
1299			// random banner
1300			,random:function(){
1301				var _this = this
1302					,$this = $(_this)
1303					,$info = setSizeInfo($this)
1304					,$li =$info.$li
1305					,liCount = $info.liCount
1306					,random = Math.floor(Math.random()*liCount);
1307
1308					// 랜덤 선택된것만 보임, 버튼 없앰
1309				$li.css("display","list-item").not(":eq("+random+")").css("display","none");
1310			}
1311			
1312			// random 배너 선택후 슬라이드
1313			,randomSlide:function(){
1314				bannerpop.effect()['slide'].call(this, true);
1315			}
1316
1317			// slide banner
1318			// rand true or false
1319			,slide:function(rand){
1320				var _this = this
1321					,$this = $(_this)
1322					,$info = setSizeInfo($this)
1323					,$ul = $info.$ul
1324					,$li =$info.$li.css("display","list-item")
1325					,$btnBox = $this.find(".beb_buttons")
1326					,$btnStop = $btnBox.find(".beb_btn_stop")
1327					,$btnCurrent = null						// 현재 선택된 버튼 prev,next,play,stop of buttons
1328					,speed = Number(_this.getAttribute("data-speed"))||.3
1329					,delayInfo = $li.map(function(){ return Number(this.getAttribute("data-delay"))||5; }).get()
1330					,boxWidth =$info.boxWidth
1331					,liCount = $info.liCount
1332					,count = (rand===true?Math.floor(Math.random()*(liCount)):-1)	// 처음부터 +1 하고 시작하기에 -1초기값-random일때는 배너수중 1개
1333					,delay = null													// 멈춰잇는 시간(초)
1334					,left = boxWidth												// 움직이는 간격
1335					,si = null														// setInterval 변수 : animate complete에서 delay로 해결하려 했는데 뭔가 잘 안풀림
1336					,tmpDelay = null												// next, prev 시 delay 없이 넘김
1337					,firstBtnClicked = 0;											// prev,next로 이동하는가 - rotate에서 또한번 +,- 하기에 처음만 실행되어야 함
1338
1339				/**** function //s ****/
1340				/*
1341					다음 배너
1342					@params
1343					 loop : 반복될것인가
1344					 mode : + or -
1345				*/
1346				function rotate(loop, mode){
1347					if(!mode) mode="+";
1348					if(mode==="+") count++;
1349					else  count--;
1350
1351					if(count>=liCount || count<=0) count = 0;					// 지연시간 담은 배열찾기 key
1352					var front = count+1;													// 지연후 움직여야 하는 거리 미리 담아둠
1353					if(count>=(liCount-1)) front = 0;
1354					left = boxWidth*front*-1;
1355					delay = tmpDelay===null?delayInfo[count]:tmpDelay;
1356
1357					si = setTimeout(function(){
1358						$ul.animate({ marginLeft:left }
1359										,speed*1000,
1360										function(){
1361											if(loop===false) $btnCurrent.prop("disabled", false);
1362											tmpDelay = null;
1363										});//.delay(delay*1000);	
1364						if(loop!==false) rotate();
1365					},delay*1000);								
1366				}
1367
1368				// stop
1369				function stop(){
1370					firstBtnClicked++;
1371
1372					//$ul.stop(true, false);
1373					clearTimeout(si);
1374					tmpDelay=null;
1375					$btnStop.addClass("beb_btn_start").text("play");
1376				}
1377
1378				// restart
1379				function start(){
1380					firstBtnClicked = 0;
1381
1382					count--;
1383					if(count<=0) count=0;
1384
1385					tmpDelay=null;
1386					rotate();
1387
1388					$btnStop.removeClass("beb_btn_start").text("멈춤");
1389				}
1390				
1391				// 이전
1392				function prev(){
1393					stop();
1394
1395					if(firstBtnClicked===1) count--;			// 처음만 이미 증가된값을 감소시킴
1396					if(count<=0) count=liCount;
1397
1398					tmpDelay=0;
1399					rotate(false,"-");
1400
1401					$btnCurrent.prop("disabled", true);
1402				}
1403
1404				// 이후
1405				function next(){
1406					stop();
1407
1408					if(firstBtnClicked===1) count--;
1409					if(count>=liCount) count=0;
1410
1411					tmpDelay=0;
1412					rotate(false);
1413
1414					$btnCurrent.prop("disabled", true);
1415				}
1416				/**** function //e ****/
1417
1418				// 처음 배너를 보이지 않는다는 것은 랜덤 배너의 슬라이드라는 것-처음보일배너 설정
1419				if(count>=0 && rand===true){
1420					var _boxWidth = boxWidth*(count>=liCount?liCount-1:count)*-1;
1421					count--;
1422					$ul.css("margin-left",_boxWidth+"px");
1423				}
1424				
1425				// 실행
1426				rotate();						
1427				
1428				// 버튼보임
1429				$btnBox/*.css("display","block")*/.find(".beb_btns").unbind("click")
1430				.click(function(){
1431					var $this = $(this);
1432	
1433					$btnCurrent = $this;
1434					if($this.is(".beb_btn_prev")) prev();
1435					else if($this.is(".beb_btn_next")) next();
1436					else if($this.is(".beb_btn_stop")){
1437						if($this.is(".beb_btn_start")) start();
1438						else stop();
1439					}
1440				});
1441
1442				// mouseover event
1443				$ul.on(bannerpop.vars.isMobileMode?{touchstart:stop,touchend:start}:{mouseenter:stop,mouseleave:start});
1444			}
1445		};
1446	}
1447
1448	// 배너호출
1449	,banner:function(target)
1450	{	
1451		var parents = this
1452			,$target = !!target.jquery?target:$(target);
1453
1454		// mobile or pc mode?
1455		try{ bannerpop.vars.isMobileMode=document.querySelector("#user-wrap").className.indexOf("mobile")>=0||false }catch(e){ }
1456		
1457		//console.log($target);
1458		$.each($target, function(i, ele){
1459			var type = ele.getAttribute("data-type")||"random";
1460			parents.effect()[type].call(this);
1461		});
1462	}
1463
1464	,getCookie:function(name)
1465	{	/*
1466		var cookie = document.cookie;
1467		if(cookie.indexOf(name)<0) return "";
1468		
1469		var regexp = new RegExp("^(.*)"+name+"=(.*?);(.*)$","g");
1470		return cookie.replace(regexp,"$2").replace(/^\s+|\s+$/g,"");
1471		*/
1472		name+="=";
1473	    var ca = document.cookie.split(';');
1474	    for(var i=0; i<ca.length; i++) {
1475	        var c = ca[i];
1476	        while (c.charAt(0)==' ') c = c.substring(1);
1477	        if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
1478	    }
1479	    return "";
1480	}
1481	
1482	,setCookie:function(name, value, days, domain)
1483	{
1484		var expires = "";
1485		if(days){
1486			var date = new Date();
1487			date.setTime(date.getTime()+(days*24*60*60*1000));
1488			expires = "; expires="+date.toGMTString();
1489		}
1490		
1491		/*
1492		var dm=SITE_DOMAIN.replace('http://','');
1493		dm=dm.replace('https://','');
1494		if(!domain) domain="." + dm;
1495		*/
1496
1497		if(!domain) domain='.'+SITE_DOMAIN.replace(/^http(s)?:\/\//i,'').replace(/^(www|cms|slv|cdn|m)\./i,'');
1498		
1499		document.cookie = name+"="+value+expires+"; path=/; " + (domain?"domain="+domain+";":"");
1500	}
1501
1502	// url을 array로
1503	,linkToJson:function(link)
1504	{
1505		if(!link) return false;
1506		
1507		var json = {}
1508			,tmp = link.replace(/^\/\?/,"").split("&");
1509		
1510		if(tmp.length<=0 || !tmp) return false;
1511		for(var i in tmp){
1512			var param = tmp[i].split("=")
1513				,key = param[0]
1514				,value = param[1];
1515			
1516			json[key] = value;
1517		}
1518		return json;
1519	}
1520
1521	// 배너 append
1522	,append:function()
1523	{
1524		var id = ___BANNER
1525			,status = bannerStatus
1526			,time = ___currentTime
1527			,sTime = startTime
1528			,eTime = endTime
1529			,content = decodeURIComponent(bannerContent)
1530			,title = typeof bannerTitle == "undefined" ? "":decodeURIComponent(bannerTitle)
1531			,$target = $("#"+id)
1532			,voteUse = typeof bannerVoteUse == "undefined" ? "N":bannerVoteUse
1533			,explain = '';
1534			//,explain = "\n<br />"+util.timestampToDatetime(sTime).strDateTime.substring(0,16)+"~"+util.timestampToDatetime(eTime).strDateTime.substring(0,16);
1535
1536
1537		if(!id || $target.length<=0 || $target.attr("data-append")=="true") return false; // 객체가 없거나 시작전,이미 추가되었다면 중단
1538		
1539		// 예정,종료 배너
1540		else if(sTime > time || time > eTime || status=="0"){	
1541            var adminPageBool = (location.href.indexOf('/edit/adminSection.html') < 0)? false:true;
1542            if(!adminPageBool) {
1543                if(!($('body').hasClass('ndip_user_body_view') && voteUse == 'Y' && status == "0")) {
1544                    return false;    // 종료 메시지 안띄우기
1545                }
1546            }
1547            var voteAdcClass = "";
1548			var adcMsg=""
1549				,adcClass="";
1550			if(sTime > time && status!="0"){
1551				adcMsg = '노출예정 배너';
1552				adcClass = "banner-later";
1553			}else if(time > eTime || status=="0"){
1554				adcMsg = '종료된 배너';
1555				adcClass = "banner-finish";
1556				if(voteUse == "Y") voteAdcClass = "vote_banner_box_finish";
1557			}
1558			
1559			if(!adminPageBool) $target.attr("data-append","true").after('<div class="ad-finished '+voteAdcClass+'"></div>');    // 선거배너 종료 DIV
1560            else $target.attr("data-append","true").after('<div class="ad-finished"><span class="'+adcClass+'"><i class="icon-clock-o"></i>&nbsp;'+adcMsg+' "'+title+'"</span>'+explain+'</div>');
1560	// 종료 메시지 띄우고 종료
1561			bannerTitle="";//초기화
1562			
1563			return false;
1564		}
1565		
1566		// cdn host 따라가게
1567		var _uri=$target[0].src
1568			,_host=((typeof URL === "function")?new URL(_uri).origin:_uri.match(/^(http.*)\/bannerpop\//)[1]||"");
1569		if(_host) content=content.replace('<img src="/bannerpop/', '<img src="'+(_host.search(/^http(s)?:\/\/cms\./)<0?_host:SITE_DOMAIN)+'/bannerpop/');
1570		
1571		$target.attr("data-append","true").after(content);	// 추가 되었으면 data-append 태그 나김
1572	}
1573
1574	/****** 팝업 띄우기 
1575	var ___popup = [{},...];
1576	
1577	* json 내용 *
1578		idxno - 팝업 idxno 고유번호 
1579		title - 팝업의 제목 
1580		start - 팝업 시작일시
1581		end - 팝업 종료일시 
1582		status - 진행상태 (1=진행, 0=종료)
1583		popup_type - 팝업형태 (layer=레이어, window=윈도우)
1584		popup_size - auto (사용안함)
1585		popup_width - 팝업창크기(가로)
1586		popup_height - 팝업창크기(세로)
1587		position - auto (사용안함)
1588		x_position - 창의 x 위치 
1589		y_position - 창의 y 위치 
1590		apply_page - 적용페이지 (main, section, list, view 값이 입력 되어있음 , php에서 페이지 구분해서 json으로 만들어 줍니다.) 
1591		bottom_close - 하단표시 창닫기 출력여부 (Y=출력, N=출력안함)
1592		bottom_close_expire_ck - **동안 열지않기 (none=사용안함, day=하루동안 열지않기, days=몇일동안 열지않기)
1593		bottom_close_expire - 몇일인지
1594		layer_border - 레이어 팝업인 경우 외곽선 (Y=사용함, N=사용안함)
1595		layer_move - 레이어 팝업인 경우 드래그 가능 (Y=사용함, N=사용안함)
1596		layer_scroll - 레이어 팝업인 경우 스크롤 따라다니기 (Y=사용함, N=사용안함)
1597		layer_close - 레이어 팝업인 경우 닫기 아이콘 (Y=사용함, N=사용안함)
1598		layer_close_icon - 레이어 팝업인 경우 닫기 아이콘 유형 
1599		layer_close_position - 레이어 팝업인 경우 닫기 아이콘 출력 위치 (TL-상/좌, TR-상/우, BL-하/좌, BR-하/우)
1600		window_scroll - 윈도우 팝업인 경우 스크롤 활성화 (Y=사용함, N=사용안함)
1601		content - 출력 HTML 내용
1602	*****/
1603	,float:function(j)
1604	{
1605		// json 값
1606		var current = ___currentTime
1607			,start = Number(j.start)||0
1608			,end = Number(j.end)||(new Date().getTime()+100)	// 종료일이 기입되지 않았다면, 현재보다 100씩더해서 계속 늘림 
1609			,status = j.status||"0";
1610	
1611		if(this.vars.popup.view!="manager" && (status=="0" || current < start || (current > end && end!==0))) return false;												// 종료 or 기간이 아니라면 통과
1612			
1613		var	parents = this
1614			,idxno = j.idxno||"0"
1615			,oriTitle = j.title||""
1616			,title = decodeURIComponent(j.title)||""
1617			,popupType = j.popup_type||"window"
1618			,popupSize = j.popup_size||"auto"
1619			,popupWidth = Number(j.popup_width)||0
1620			,popupHeight = (Number(j.popup_height)||0) + 32
1621			,position = j.position||"auto"
1622			,xPosition = Number(j.x_position)||0
1623			,yPosition = Number(j.y_position)||0
1624			,applyPage = j.apply_page||"main"
1625			,bottomClose = j.bottom_close||"N"
1626			,bottomCloseExpireCk = j.bottom_close_expire_ck||"none"
1627			,bottomCloseExpire	= j.bottom_close_expire||1
1628			,layerBorder = j.layer_border||"N"
1629			,layerMove = j.layer_move||"N"
1630			,layerScroll = j.layer_scroll||"N"
1631			,layerClose = j.layer_close||"N"
1632			,layerCloseIcon = j.layer_close_icon||""
1633			,layerClosePosition = j.layer_close_position||"BR"
1634			,windowScroll = j.window_scroll||"Y"
1635			,content = decodeURIComponent(j.content)||""
1636			,popupUrl = j.popup_url||""// + (parents.vars.popup.view=="manager"?"?edit_mode=preview":"")||""
1637			,top = 0
1638			,left = 0
1639			,popname = parents.vars.popup.popname+idxno
1640			,_type = popupType; 								// default: 각자띄움 - 팝업과 레이어가 위치값을 공유하여 차례로 띄울려면 "window" or 공유하지 않고 각자 띄울려면 popupType;
1641
1642		var type = {		
1643			calcPosition:function(){
1644				// x,y 가 0일때는 auto로 간주
1645				if((xPosition===0 && yPosition===0)/* || position=="auto"*/){
1646					var maxHeight = parents.arrayMaxMin(parents.vars.popup.height[_type],"max")
1647						,maxTop = parents.arrayMaxMin(parents.vars.popup.top[_type],"max")
1648						,initLeft = popupType=="window"?0:parents.vars.popup.bodyLeft
1649						,prevWidth = parents.vars.popup.width[_type][parents.vars.popup.width[_type].length-1]||0
1650						,prevLeft = parents.vars.popup.left[_type][parents.vars.popup.left[_type].length-1]||initLeft;			// 바로 이전 팝업 넓이를 left값으로 정함-window:0, layer:content의 left
1651		
1652					//console.log(popupWidth);
1653					left = prevLeft+prevWidth;
1654					
1655					// 페이지 넓이보다 자리잡은 left값이 크다면 화면상 한단계 내림
1656					if(left>parents.vars.popup[popupType=="window"?"screenWidth":"bodyWidth"]){
1657						top += maxHeight;						
1658						left = initLeft;
1659						
1660						// 다음 단계이니까 초기화 함
1661						parents.vars.popup.width[_type] = [];
1662						parents.vars.popup.height[_type] = [];
1663						parents.vars.popup.top[_type] = [];
1664						parents.vars.popup.left[_type] = [];
1665					}else{
1666						top = (maxTop||0);
1667					}
1668					
1669					// 변화된값 배열에 넣기 위해 조작
1670					xPosition = left;
1671					yPosition = top;
1672					
1673					// 변수에 담음
1674					parents.vars.popup.width[_type].push(popupWidth||0);
1675					parents.vars.popup.height[_type].push(popupHeight||0);
1676					parents.vars.popup.top[_type].push(yPosition||0);
1677					parents.vars.popup.left[_type].push(xPosition||0);
1678										
1679				}else{
1680					top = yPosition;
1681					left = xPosition;
1682				}
1683			}
1684		
1685			// 관리자 미리보기시 중앙에
1686			,setPositionCenter:function(){
1687				var _width = (document.body.clientWidth/2)-(popupWidth/2)
1688					,_scrollTop = document.body.scrollTop;
1689				
1690				top = _scrollTop + 50;
1691				left = _width;
1692			}
1693			
1694			// 띄울 페이지 applyPage
1695			,isApplyPage:function()
1696			{
1697				// 관리자 통과
1698				if(parents.vars.popup.view=="manager") return true;
1699				/*
1700				var params = bannerpop.linkToJson(location.search.replace("?",""))
1701					,mod = params.mod||""
1702					,act = params.act||""
1703					,section = params.section||"";
1704				
1705				// 메인
1706				if(((mod=="main" && act=="index" && !section) || (!mod && !act && !section)) && applyPage.indexOf("main")>=0) return true;
1707				// 섹션
1708				else if(mod=="main" && act=="index" && section && applyPage.indexOf("section")>=0) return true;
1709				// 기사 리스트
1710				else if(mod=="news" && act=="articleList" && applyPage.indexOf("list")>=0) return true;
1711				// 기사뷰
1712				else if(mod=="news" && act=="articleView" && applyPage.indexOf("view")>=0) return true;
1713				*/
1714			}
1715		
1716			,window:function(){
1717				//if(this.isApplyPage()!==true) return false;
1718				
1719				this.calcPosition(); // 위치 계산
1720				var winpopupUrl = '/bannerpop/popup.html?win_popup_idxno=' + idxno;
1721				window.open(winpopupUrl, popname, "width="+popupWidth+",height="+popupHeight+",scrollbars="+(windowScroll=="Y"?"yes":"no")+",resizable=yes,top="+top+",left="+left);
1722			}
1723		
1724			,layer:function(){
1725				//if(this.isApplyPage()!==true) return false;
1726				
1727				this.calcPosition(); // 위치 계산
1728			
1729				var $content = $(content);
1730
1731				$content.attr({"id":popname})
1732				.css({"top":top+"px","left":left+"px","max-width":popupWidth+"px","min-height":popupHeight+"px","z-index":"100" + parents.vars.popup.order}).addClass("layer_box"+(layerScroll=="Y"?" layer_box_fixed":"")+(layerBorder=="Y"?" layer_box_border":""))
1733				.find(".popup_close_box").addClass("layer_close_box");
1734				
1735				// 드래그 가능
1736				if(layerMove=="Y") $content.addClass("layer_box_cursor_move").draggable();				
1737				
1738				// 창닫기-icon 닫기 버튼은 별개다
1739				//if(bottomClose=="Y"){	
1740				var $btnClose = $content.find(".popup_close, .popup_close_map, .popup_icon_close");
1741				$btnClose.each(function(){
1742					var _$this = $(this);
1743					//if(_$this.is(".popup_close") && bottomClose=="Y") _$this.text('창닫기');
1744
1745					if(_$this.is(".popup_icon_close")) {
1746						if(layerClosePosition == 'BL' || layerClosePosition == 'BR') {
1747							
1748							if($content.find(".popup_close, .popup_close_map").length>0) {
1749								_$this.css('top',Number(j.popup_height)-40+'px');	
1750							}
1751						}
1752
1753						_$this.addClass("layer_position_"+layerClosePosition);
1754					}
1755				});
1756				
1757				$btnClose.click(function(){
1758					parents.evtClose(popupType, idxno);	
1759					return false;
1760				});
1761				//}
1762
1763				// 이미지내 링크가 창닫기 라면
1764				//$content.find("a[href*='javascript:window.close()']").click(function(){
1765				$content.find("[href*='javascript:window.close()']").click(function(){
1766					parents.evtClose(popupType, idxno);	
1767					return false;
1768				});
1769
1770				// 하루, 몇일동안 열지 않기
1771				parents.daysNotOpen(bottomCloseExpireCk, bottomCloseExpire, $content.find(".popup-days, .popup_day_close_map"), j);
1772				
1773				// 관리자 미리보기시 중앙에
1774				if(parents.vars.popup.view=="manager"){
1775					$content.appendTo(document.body);
1776					this.setPositionCenter();	
1777					$content.removeClass("layer_box_fixed").css({"top":top+"px", "left":left+"px"});
1778				}else{
1779					$content.appendTo($("#layer-popups"));
1780				}
1781				
1782				// 이미지맵 리사이즈
1783				$('img[usemap]', $content).rwdImageMaps();
1784			}				
1785		};
1786	
1787		type[popupType]();		
1788	}
1789	
1790	// 팝업띄우기
1791	,popup:function()
1792	{
1793		//try{
1794			var parents = this;
1795			//$(window).on("load", function(){
1796			$(document).ready(function() {
1797				if(!window.___popup) return ;
1798				if($.isArray(___popup)===false && ___popup.length>0) return ;
1799				if(!window.___currentTime) ___currentTime = Math.floor(new Date().getTime()/1000);// 시간이 설정되지 않았다면 js 시간으로 설정함
1800								
1801				var $content = $("#layer-popups");
1802				
1803				if($content.length<=0) return false;
1804				parents.vars.popup.bodyWidth = $content.innerWidth();			
1805				parents.vars.popup.bodyLeft = $content.position().left;
1806				parents.vars.popup.screenWidth = window.screen.width;
1807				for(var i=0,cnt=___popup.length; i<cnt; i++){
1808					// 쿠키인지 판단후 열기
1809					var coo = "";
1810					coo = bannerpop.getCookie(parents.vars.popup.popname+___popup[i].idxno)
1811
1812					if(!coo){
1813						parents.vars.popup.order++;
1814						parents.float(___popup[i]);
1815					}
1816				}
1817			});
1818		//}catch(e){}		
1819	}
1820	
1821	
1822	// 창닫기
1823	,evtClose:function(mode, idxno)
1824	{
1825		if(mode=="layer"){
1826			var layerId = bannerpop.vars.popup.popname+idxno;
1827			
1828			$("#"+layerId).fadeOut("fast", function(){
1829				$(this).remove();
1830			});
1831		}else window.close();
1832	}
1833	
1834	// cookie
1835	,evtCookieClose:function(name, days)
1836	{
1837		bannerpop.setCookie(name, "popup", days);
1838	}
1839	
1840	// 하루,몇일동안 열지 않기
1841	,daysNotOpen:function(expire, period, $btn, p)
1842	{
1843		var parents = this
1844			,idxno = p.idxno
1845			,isClickedMap = false;
1846		
1847		if(expire!="none"){
1848			$btn.each(function(i,v) {
1849				var $thisBtn = $(this);
1850				if($thisBtn.is(".popup-days")){
1851					// 하루동안
1852					if(expire=="day"){
1853						$thisBtn.click(function(){
1854							parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1855							parents.evtClose(p.popup_type, p.idxno);
1856							return false;
1857						})
1858						// 닫기 태그 안에 암것두 없는 거 찾아 닫기 텍스트 넣어주기
1859						.not(":has(*)").html('<a href="#close-to-layer">하루동안 보지 않기</a>');
1860					}
1861					// 몇일동안 daySubfix
1862					else if(expire=="days"){
1863						var select = '<a href="#link">'
1864									+'<label class="show-for-sr" for="popDays"></label>'
1865									+'<select name="popDays" id="popDays" class="tiny" title="기간">'
1866									+'	<option value="1">하루</option>'
1867									+'	<option value="2">2일</option>'
1868									+'	<option value="3">3일</option>'
1869									+'	<option value="4">4일</option>'
1870									+'	<option value="5">5일</option>'
1871									+'	<option value="6">6일</option>'
1872									+'	<option value="7">7일</option>'
1873									+'</select> 동안 열지않기'
1874									+'</a>';
1875						var html = '<a href="#link">'
1876									+ (period>1 ? period+'일동안 보지 않기' : '하루동안 보지 않기')
1877									+'</a>';
1878						//$btn.not(":has(*)").append(select).click(function(){
1879						$thisBtn.append(html).click(function(){
1880							var $this = $(this)
1881								//,days = $this.prev("select").val();
1882								,days = period;
1883							
1884							parents.evtCookieClose(parents.vars.popup.popname+idxno, days);
1885							parents.evtClose(p.popup_type, p.idxno);
1886							return false;
1887						});					
1888					}
1889				}else{
1890					// 이미지맵일때, 하루동안 열지않기
1891					$thisBtn.click(function(){
1892						parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1893						parents.evtClose(p.popup_type, p.idxno);	
1894						return false;
1895					});	
1896					
1897					isClickedMap = true;
1898				}
1899			});
1900		}
1901		
1902		// expire 값이랑 관계없이 이미지맵을 찾아 처리
1903		if(isClickedMap===false && $btn.is(".popup_day_close_map")){
1904			// 이미지맵일때, 하루동안 열지않기
1905			$btn.click(function(){
1906				parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1907				parents.evtClose(p.popup_type, p.idxno);	
1908				return false;
1909			});	
1910		}
1911	}
1912	
1913	// window popup control
1914	,popupControl:function()
1915	{
1916		if(!___popup) return ;
1917		if((typeof ___popup)!=="object") return ;
1918		
1919		var parents = this
1920			,p = ___popup		
1921			,title = decodeURIComponent(p.title)||"" 
1922			,popupType = p.popup_type||"window"
1923			,bottomClose = p.bottom_close||"Y"
1924			,bottomCloseExpireCk = p.bottom_close_expire_ck||"day"	// : day,days,none
1925			,bottomCloseExpire = p.bottom_close_expire||1	// : 몇일
1926			,$btnClose = $(".popup_close, .popup_close_map, .popup_icon_close")
1927			,$btnDayClose = $(".popup-days, .popup_day_close_map");
1928		
1929		if(popupType!="window") return ;
1930		
1931		// 윈도우 바 타이틀 교체
1932		document.title = title;
1933	
1934		// 창닫기
1935		if(bottomClose=="Y"){
1936			$btnClose.each(function(){
1937				var _$this = $(this);
1938				//if(_$this.is(".popup_close")) _$this.text('창닫기');
1939			});
1940			
1941			$btnClose.click(function(){
1942				parents.evtClose(p.popup_type, p.idxno);	
1943				return false;
1944			});
1945		}
1946		
1947		// 하루, 몇일동안 열지 않기
1948		this.daysNotOpen(bottomCloseExpireCk, bottomCloseExpire, $btnDayClose, p);
1949		
1950	}
1951
1952	// array 최고값
1953	,arrayMaxMin:function(arr, mode)
1954	{
1955		if($.isArray(arr)===false) return false;
1956	
1957		if(!mode) mode = "max";
1958		arr.sort(function(a, b){
1959			return b-a;
1960		});
1961		return (mode=="max"?arr[0]:arr[arr.length-1])||0;
1962	}
1963};
1964
1965/******************************************************************************************************************
1966* 멀티 기능성 배너
1967*
1968* @update 2018/07/18
1969*/
1970var bannerpopMulti = {
1971    // php 전달 변수
1972    vars:{
1973        $banner_list:null,
1974        $edit_mode:""
1975    }
1976    
1977    // 페이지 초기 로드
1978    ,init:function() {
1979        $('input[name="effect_type"]').on("click", function() {
1980            if ($(this).val()=='none') {
1981                $("#row_num").val(0).attr("disabled", true);
1982                $("#scroll_num").val(0).attr("disabled", true);
1983            } else {
1984                $("#row_num").removeAttr("disabled");
1985                $("#scroll_num").removeAttr("disabled");
1986            }
1987        });
1988
1989        $('input[name="autoplay"]').on("click", function() {
1990            if ($(this).val()=='Y') {
1991                $("#autoplay_speed").removeAttr("disabled");
1992            } else {
1993                $("#autoplay_speed").attr("disabled", true);
1994            }
1995        });
1996
1997        $('#all-banner-list').on('click', function(e) {
1998            $this = $(this);
1999            href = $this.attr('href');
2000            $("#edit-modal-iframe").attr("src", href);
2001            $('#edit-modal').foundation('open');
2002            return false;
2003        });
2004
2005        $('#banner-activity-box').sortable({
2006            axis: '',
2007            update: function() {
2008                console.log($(this));
2009            }
2010        });
2011
2012        $('#edit-modal').on('open.zf.reveal', function(e){
2013            $('#for-loading').show();
2014        });
2015
2016        $('#edit-modal').on('closed.zf.reveal', function(e){
2017            $("#edit-modal-iframe").attr("src", "about:blank").height('0px').closest('#activity-modal').css('height', '0px');
2018        });
2019
2020        $(document).on("click", '.trash', function() {
2021            var $this=$(this)
2022            ,$parent = $this.closest('.banner-activity-list');
2023            $parent.fadeOut('fast', function(){
2024                $parent.remove();
2025            });
2026        });
2027    }
2028
2029    // 배너 가져오기
2030    ,evtClickMultipleAdd:function() {
2031        var multi_idxno=window.parent.$('#all-banner-list').closest('div').attr('data-multi-idxno')||'';
2032        $('#activity-add-btn').on("click", function() { // #activity-add-btn 기능성배너 버튼 클릭 이벤트를 이용
2033            var $this=$(this);
2034            if($('.banner_element_ckecked').is(':checked') == false) {
2035                alert('배너를 선택해주세요.');
2036                return false;
2037            }else{
2038                var $checked=$(".banner_element_ckecked:checked")
2039                    ,arr = new Array();
2040                if($checked.length>0) {
2041                    $.each($checked, function(idx, v) {
2042                        arr.push(v.value);
2043                    });
2044
2045                    var data = {mode:multi_idxno?'modify':'input', multi_idxno:multi_idxno, banner_idxno:arr};
2046                    data = JSON.stringify(data);
2047                    //console.log(data);
2048
2049                    $.ajax({
2050                        url:"/bannerpop/activity_multi_act.php"
2051                        ,type:'post'
2052                        ,dataType:'json'
2053                        ,contentType:'application/x-www-form-urlencoded; charset=utf-8'
2054                        ,data:{post_data:data}
2055                        ,success:function(json, result) {
2056                            if(result == 'success') {
2057                                if(json.response == 'ok') {
2058                                    var item = JSON.parse(json.data),
2059										$target = window.parent.$("#banner-activity-box"),
2060                                        $sample = window.parent.$("#sample");
2061                                    bannerpopMulti.vars.$banner_list = item;
2062                                    bannerpopMulti.bannerCollocate($target, $sample);
2063                                    window.parent.$(".close-button").trigger("click");
2064                                }else{
2065                                    return false;
2066                                }
2067                            }else return false;
2068                        },
2069                        error:function(request,status,error){
2070                            alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2071                        }
2072                    });
2073                }
2074            }
2075        });
2076    }
2077
2078    // 배너 배치 하기
2079    ,bannerCollocate:function($targetArea, $sample) {
2080        if (!this.vars.$banner_list) return false;
2081        if (typeof $targetArea != "object" || typeof $sample != "object") return false;
2082        var item = this.vars.$banner_list;
2083        for (var i=0;i<item.length;i++) {
2084            var $areaBox = $targetArea,
2085                $clone = $sample.clone(),
2086                stateIcon = "";
2087            if (typeof $clone == "object") {
2088                if (item[i].state=="previous") stateIcon = '<span class="label success tiny">진행전</span>';
2089                else if (item[i].state=="proceeding") stateIcon = '<span class="label tiny">진행중</span>';
2090                else stateIcon = '<span class="label secondary tiny">진행종료</span>';
2091                $clone.attr("data-banner-idxno", item[i].idxno);
2092                $clone.find(".banner-activity-list").attr("data-banner-idxno", item[i].idxno).end().
2093                    find(".dis-table-cell").append(item[i].banner).end().
2094                    find('input[name="banner_idxno[]"]').val(item[i].idxno).end().
2095                    find(".dis-status").empty().append(stateIcon).end().
2096                    find('input[name="delay[]"]').attr("id", "delay_"+item[i].idxno).attr("value", item[i].delay).end().
2097                    find('.input-group-label').attr("for", "delay_"+item[i].idxno);
2098                $areaBox.append($clone.html());
2099            }
2100        }
2101    }
2102
2103    // 선택된 배너 표시
2104    ,selectBannerCheck:function() {
2105        var $areaBox = window.parent.$("#banner-activity-box"),
2106            $list = $areaBox.find('input[name="banner_idxno[]"]'),
2107            $bannerItems = $(".adccfg_list_items"),
2108            bannerList = [],
2109            i = 0;
2110        $list.each(function() {
2111            bannerList.push($(this).val());
2112        });
2113        //console.log(bannerList);
2114
2115        $bannerItems.each(function() {
2116            var $this = $(this),
2117                idxno = $this.attr("data-banner-idxno");
2118            if ($.inArray(idxno, bannerList)!=-1) {
2119                $this.find(".ad-tile").append('<div class="content-inert"><button type="button" class="content-buttons display has-tip" title="삽입된배너" data-tooltip><i class="icon-tv"><span class="show-for-sr">삽입된배너</span></i></button></div>');
2120            }
2121        });
2122    }
2123    
2124    // 배너 등록하기
2125    ,valid_multi:function(form) {
2126        if(form.title.value == '') {
2127            alert('제목을 입력하세요.');
2128            form.title.focus();
2129            return false;
2130        }
2131
2132        if (form.column_num.value>9) {
2133            alert("열수는 1~9까지만 입력할 수 있습니다.");
2134            form.column_num.focus();
2135            return false;
2136        }
2137
2138        if (form.row_num.value>9) {
2139            alert("행수는 1~9까지만 입력할 수 있습니다.");
2140            form.row_num.focus();
2141            return false;
2142        }
2143
2144        if (form.scroll_num.value>9) {
2145            alert("스크롤수는 1~9까지만 입력할 수 있습니다.");
2146            form.scroll_num.focus();
2147            return false;
2148        }
2149
2150        if($('.banner-activity-list').length-1<=0) {
2151            alert('배너를 하나 이상 추가하셔야 합니다.');
2152            return false;
2153        }
2154
2155        return true;
2156    }
2157
2158    // 멀티 기능성 배너 이벤트 로드
2159    ,bannerLoad:function() {
2160        $('.banner-multi-box').each(function() {
2161            var $effectType = $(this).attr("data-effect-type"),
2162                $rowNum = $(this).attr("data-row-num")||1,
2163                $colNum = $(this).attr("data-column-num")||1,
2164                $scrollNum = $(this).attr("data-scroll-num")||1,
2165                $moveDisplay = $(this).attr("data-move-display")||'none',
2166                $autoplay = $(this).attr("data-autoplay")||'N',
2167                $autoplaySpeed = $(this).attr("data-autoplay-speed")||5,
2168                $speed = $(this).attr("data-speed")||300,
2169                $random = $(this).attr("data-random")||'N',
2170                $bannerMultiBoxHtml = $(this);
2171                
2172                // 예약배너이거나 종료 배너일 경우 제외 처리.
2173                if(location.href.indexOf('/edit/adminSection.html')<0) {
2174                    $(this).find(".slick-slide").each(function(){
2175                        if($(this).find('.banner_box').length<=0) {
2176                            //$bannerMultiBoxHtml.find(".slick-slide").eq($(".slick-slide", $bannerMultiBoxHtml).index(this)).remove();
2177							$(this).remove();
2178                        }
2179                    });
2180                }
2181
2182            if ($effectType!="none") {
2183                var totalSlide = $(this).find(".slick-slide").length||0,
2184                    randomStart = Math.floor(Math.random() * totalSlide);
2185                randomStart = ($random=="Y") ? randomStart : 0;
2186
2187                var slickParam = {};
2188                slickParam.prevArrow = '<button type="button" class="roll-btns btn-prev"><i class="icon-angle-left-thin"><span class="show-for-sr">prev</span></i></button>';  // 이전버튼
2189                slickParam.nextArrow = '<button type="button" class="roll-btns btn-next"><i class="icon-angle-right-thin"><span class="show-for-sr">next</span></i></button>'; // 다음버튼
2190                slickParam.infinite = true;                                                                                                                     // 무한 넘기기
2191                slickParam.draggable = false;                                                                                                                   // 제스처(모바일용)
2192
2193                switch ($effectType) {
2194                    case "vertical":
2195                        slickParam.slidesToShow = parseInt($rowNum,10);
2196                        slickParam.vertical = true;
2197                        slickParam.verticalSwiping = true;
2198                        if ($random=="Y"&&totalSlide>parseInt($rowNum,10)) slickParam.initialSlide = randomStart;
2199                        break;
2200                    case "horizon":
2201                    default:
2202                        slickParam.slidesToShow = parseInt($colNum,10);
2203                        if (parseInt($rowNum,10)>1) slickParam.rows = parseInt($rowNum,10);
2204                        if ($random=="Y") slickParam.initialSlide = randomStart;
2205                        break;
2206                }
2207
2208                slickParam.slidesToScroll = parseInt($scrollNum,10);
2209                slickParam.arrows = ($moveDisplay=="arrow"&&bannerpopMulti.vars.$edit_mode!="delete")?true:false;
2210                slickParam.dots = ($moveDisplay=="dot"&&bannerpopMulti.vars.$edit_mode!="delete")?true:false;
2211                slickParam.dotsClass = "auto-pager";
2212                slickParam.autoplay = ($autoplay== "Y")?true:false;
2213                slickParam.autoplaySpeed = ($autoplay== "Y")?parseInt($autoplaySpeed,10)*1000:0;
2214                slickParam.speed = parseInt($speed, 10);
2215                slickParam.centerMode = false;
2216                slickParam.variableWidth = false;
2217                slickParam.focusOnSelect = true;
2218                //console.log(slickParam);
2219
2220                $(this).slick(slickParam);
2221            } else {
2222                if ($random=="Y") shuffle($(this));
2223            }
2224
2225            function shuffleArray(d) {
2226                for (var c = d.length - 1; c > 0; c--) {
2227                    var b = Math.floor(Math.random() * (c + 1));
2228                    var a = d[c];
2229                    d[c] = d[b];
2230                    d[b] = a;
2231                }
2232                return d;
2233            }
2234
2235            function shuffle(target){
2236                var $box = $(target).children(".slick-slide-none")
2237                    ,$container = $box.children(".row")
2238                    ,$li = $box.find(".columns")
2239                    ,total = $li.length
2240                    ,tmp = [];
2241
2242                for(var i=0;i<total;i++) tmp.push(i);
2243
2244                $container.empty();
2245                setTimeout(
2246                    shuffleArray(tmp).forEach(function(a,b){
2247                        var $bannerBoxs=$li[a].querySelectorAll(".banner_box")
2248                            ,length=$bannerBoxs.length
2249                            ,div=document.createElement("div");
2250                        for(var i=0;i<length;i++){
2251                            div.appendChild($bannerBoxs[i]);
2252                            div.className = "columns";
2253                        }
2254                        $container.append(div);
2255                    })
2256                ,0);
2257            }
2258        });
2259    }
2260};
2261
2262/* ****************************************** */
2263/* /script/resizePhoto.js					  */
2264/* ****************************************** */
2265
2266function resizePhoto() {	
2267
2268	var $_container = $('#article-view-content-div');
2269	var articleViewDivWidth = $_container.width();
2270	
2271	$_container.find('img').each(function(e){
2272		if($(this).closest('figure').length) {
2273			var ViewimageObj = new Image();
2274			var $_thisImgObj = $(this);
2275			ViewimageObj.src = $(this).attr("src");
2276			ViewimageObj.onload = function() {
2277				imageWidth = this.width;
2278				if(articleViewDivWidth <= imageWidth) {
2279					$_thisImgObj.closest('figure').addClass('bigsize');
2280				}
2281			};
2282
2283		}
2284	});	
2285
2286	$_container.on('click', 'figure.bigsize', function(e){
2287		$('<form action="/news/userArticlePhoto.html" method="POST"><input type="hidden" name="src" value="'+$(this).find("img").attr('src')+'"></form>').appendTo('body').submit();
2288	})
2289	.on('click', 'figure.bigsize figcaption', function(e){
2290		e.preventDefault();
2291		e.stopPropagation();
2292	});
2293}
2294
2295/* ****************************************** */
2296/* /script/floating.banner.js                 */
2297/* ****************************************** */
2298
2299$(window).scroll(function() {
2300	
2301	if(!($('#floating_banner_left').length || $('#floating_banner_right').length)) return false;
2302	
2303    var floatBannerLeft = $('#floating_banner_left'),
2304        floatBannerRight = $('#floating_banner_right'),
2305        
2306        HeadHeight = $('#user-header').height(),
2307        footerBoxTop = $('#user-footer').offset().top,
2308        footerBoxHeight = $('#user-footer').height(),
2309
2310        scrollTop = $(window).scrollTop(),
2311
2312        flBnLHeight = floatBannerLeft.height(),
2313        flBnRHeight = floatBannerRight.height(),
2314
2315        ahtHeight = $('.aht-wrapper').height(),
2316
2317        flBnLscrollLimit = footerBoxTop - flBnLHeight - HeadHeight - floatBannerLeft.data('down-margin'),
2318        flBnLscrollLimitChk = flBnLscrollLimit + footerBoxHeight + floatBannerLeft.data('down-margin'),
2319        flBnRscrollLimit = footerBoxTop - flBnRHeight - HeadHeight - floatBannerRight.data('down-margin'),
2320        flBnRscrollLimitChk = flBnRscrollLimit + footerBoxHeight + floatBannerRight.data('down-margin'),
2321
2322        flBnLscrollTop = scrollTop - HeadHeight + ahtHeight + floatBannerLeft.data('top-margin'),
2323        flBnRscrollTop = scrollTop - HeadHeight + ahtHeight + floatBannerRight.data('top-margin');
2324
2325    if(floatBannerLeft.data('scroll') == 'y'){
2326        if(floatBannerLeft.data('duration') > 0) floatBannerLeft.stop();
2327        if(scrollTop < HeadHeight) floatBannerLeft.animate({top: '0px'}, floatBannerLeft.data('duration'), 'linear');
2328        else if(scrollTop >= flBnLscrollLimitChk) floatBannerLeft.animate({top:flBnLscrollLimit + 'px'}, floatBannerLeft.data('duration'), 'linear');
2329        else if(scrollTop >= HeadHeight) floatBannerLeft.animate({top:flBnLscrollTop + 'px'}, floatBannerLeft.data('duration'), 'linear');
2330    }
2331
2332    if(floatBannerRight.data('scroll') == 'y'){
2333        if(floatBannerRight.data('duration') > 0) floatBannerRight.stop();
2334        if(scrollTop < HeadHeight) floatBannerRight.animate({top: '0px'}, floatBannerRight.data('duration'), 'linear');
2335        else if(scrollTop >= flBnRscrollLimitChk) floatBannerRight.animate({top:flBnRscrollLimit + 'px'}, floatBannerRight.data('duration'), 'linear');
2336        else if(scrollTop >= HeadHeight) floatBannerRight.animate({top:flBnRscrollTop + 'px'}, floatBannerRight.data('duration'), 'linear');
2337    }
2338});
2339
2340/* ****************************************** */
2341/* /script/mosaic.js					  	*/
2342/* ****************************************** */
2343
2344function mosaic_autobox(data) {
2345	var $_container		= $(data[0].container);
2346	var autoplay		= data[0].autoplay;
2347	var autotime		= data[0].autotime;
2348	var temp_autoplay	= autoplay;
2349	var totalcount		= $_container.find('ul.auto-nav > li').length;
2350	var point			= 0;
2351	
2352	$_container.on('mouseenter', '.auto-cursor', function(e){
2353		mosaic_cmd('current', $(this).index());
2354	});
2355
2356	$_container.on('mouseenter', function(e){
2357		if(autoplay) temp_autoplay = false;
2358	}).on('mouseleave', function(e){
2359		if(autoplay) temp_autoplay = true;
2360	});
2361
2362	if(autoplay) {
2363		var rolling = window.setInterval(function () {
2364			if(temp_autoplay) mosaic_cmd('next', 0);
2365		}, autotime);
2366	}
2367
2368	function mosaic_cmd(mode, current_point) {
2369		
2370		if(mode == "prev") {
2371			point -= 1;
2372			if(point < 0) point = totalcount - 1;
2373		}else if(mode == "next") {
2374			point += 1;
2375			if(point >= totalcount) point = 0;
2376		}else if(mode == "current") {
2377			point = current_point;
2378		}
2379
2380		$_container.find('ul.auto-container > li').eq(point).show().siblings().hide();
2381		$_container.find('ul.auto-nav > li').eq(point).addClass('active').siblings().removeClass('active');
2382
2383		if(point < 2){
2384			$_container.find('ul.auto-container').css({"left":"33.333333%","top":"33.333333%"});
2385		} else if(point < 4 && point >= 2) {
2386			$_container.find('ul.auto-container').css({"left":"0px","top":"33.333333%"});
2387		} else if(point < 6 && point >= 4) {
2388			$_container.find('ul.auto-container').css({"left":"0px","top":"0px"});
2389		} else if(point >= 6) {
2390			$_container.find('ul.auto-container').css({"left":"33.333333%","top":"0px"});
2391		}
2392
2393		return false;
2394	}
2395}
2396
2397/* ****************************************** */
2398/* /script/newsAutoCall.js					  */
2399/* ****************************************** */
2400
2401function fn_articleAutoCall(mode, cycle) {
2402
2403	var autoCallMode	= mode;
2404	var autoCallCycle	= 1000*60*cycle;
2405	var _autoCallWatch  = setInterval(action, autoCallCycle);
2406
2407	// DESK중복수정이면 초기 1회 바로실행.
2408	if(autoCallMode == "desk") action();
2409
2410	function action() {
2411		if(autoCallMode == "save") {
2412			if($('.auto-save', '#admin-aside').length > 0 && $('input:hidden[name="autoSave"]', '#newsWriteForm').val() != "") $('.auto-save', '#admin-aside').show();  
2413			TxRx("/news/articleAutoSave.ajax.php");
2414		}
2415		else if(autoCallMode == "desk")		TxRx("/news/articleAutoDesk.ajax.php");
2416		else								stop();
2417	}
2418
2419	function TxRx(url) {
2420
2421		$.ajax({
2422			type: "post",
2423			dataType: "json",
2424			url:url,
2425			data:$('#newsWriteForm').serialize(),
2426			success: function(data) {
2427				console.log(data[1]);
2428			},
2429			error: function(error, request) {
2430				console.log("자동콜에러 - code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2431				stop();
2432			}
2433		}).always(function() {
2434			if($('.auto-save', '#admin-aside').length > 0) $('.auto-save', '#admin-aside').fadeOut(1500);
2435		});
2436	}
2437
2438	function stop() {
2439		clearInterval(_autoCallWatch);
2440		console.log(autoCallMode + '스톱');
2441	}
2442}
2443
2444/* ****************************************** */
2445/* 기존	common.js							  */
2446/* ****************************************** */
2447
2448/*---------------------------------------------------------------------------------------------
2449                                      JAVASCRIPT CODE
2450  ---------------------------------------------------------------------------------------------
2451	function name						| description				| use process
2452  ---------------------------------------------------------------------------------------------
2453	setCookie(쿠키명, 값, 유효기간(일))	| 							| 쿠키생성
2454	getCookie(쿠키명)					| 							| 쿠키가져오기
2455  ---------------------------------------------------------------------------------------------*/
2456
2457// 쿠키 생성
2458function setCookie(cName, cValue, cDay, cDomain){
2459	var expire = new Date();
2460	expire.setDate(expire.getDate() + cDay);
2461	cookies = cName + '=' + escape(cValue) + '; path=/ '; // 한글 깨짐을 막기위해 escape(cValue)를 합니다.
2462	if(typeof cDay != 'undefined') cookies += ';expires=' + expire.toGMTString() + ';';
2463	document.cookie = cookies;
2464    if (cDomain) {
2465        document.cookie += "domain=" + cDomain + ";";
2466    }
2467}
2468
2469// 쿠키 가져오기
2470function getCookie(cName) {
2471	cName = cName + '=';
2472	var cookieData = document.cookie;
2473	var start = cookieData.indexOf(cName);
2474	var cValue = '';
2475	if(start != -1){
2476		start += cName.length;
2477		var end = cookieData.indexOf(';', start);
2478		if(end == -1)end = cookieData.length;
2479		cValue = cookieData.substring(start, end);
2480	}
2481	return unescape(cValue);
2482}
2483
2484// 쿠키 지움
2485function delCookie(cName) {
2486    var today = new Date();
2487
2488    today.setTime(today.getTime() - 1);
2489    var value = getCookie(cName);
2490    if(value != "")
2491        document.cookie = cName + "=" + value + "; path=/; expires=" + today.toGMTString();
2492}
2493
2494
2495/*---------------------------------------------------------------------------------------------
2496                                      JAVASCRIPT CODE
2497  ---------------------------------------------------------------------------------------------
2498	function name						| description				| use process
2499  ---------------------------------------------------------------------------------------------
2500	checkMsgLength()					| 입력된 문자열 길이 검사			| 기사 댓글
2501	calculateMsgLength()				| 문자열 길이 반환				| 기사 댓글
2502	assertMsgLength()					| 문자열 길이만큼 잘라 변환		| 기사 댓글
2503  ---------------------------------------------------------------------------------------------*/
2504
2505// 문자열길이 검사
2506function checkMsgLength(frm, id, lenStr) {
2507	var length = calculateMsgLength(document.getElementById(frm).value);
2508	document.getElementById(id).innerHTML = length;
2509	if (length > lenStr) {
2510		alert("최대 "+lenStr+" 바이트까지 남기실 수 있습니다.\r\n초과된 " + (length - lenStr) + "바이트는 자동으로 삭제됩니다.");
2511		document.getElementById(frm).value = assertMsgLength(document.getElementById(frm).value, lenStr, id);
2512	}
2513}
2514
2515//문자열길이 반환
2516function calculateMsgLength(message) {
2517	var nbytes = 0;
2518
2519	for (i=0; i<message.length; i++) {
2520		var ch = message.charAt(i);
2521
2522		if (escape(ch).length > 4) {
2523			nbytes += 2;
2524		} else if (ch != "\r") {
2525			nbytes++;
2526		}
2527	}
2528
2529	return nbytes;
2530}
2531
2532//문자열 길이만큼 잘라 변환
2533function assertMsgLength(message, maximum, id) {
2534	var inc = 0;
2535	var nbytes = 0;
2536	var msg = "";
2537	var msglen = message.length;
2538
2539	for (i=0; i<msglen; i++) {
2540		var ch = message.charAt(i);
2541
2542		if (escape(ch).length > 4) {
2543			inc = 2;
2544		} else if (ch != "\r") {
2545			inc = 1;
2546		}
2547
2548		if ((nbytes + inc) > maximum) {
2549			break;
2550		}
2551
2552		nbytes += inc;
2553		msg += ch;
2554	}
2555
2556	document.getElementById(id).innerHTML = nbytes;
2557	return msg;
2558}
2559
2560/*---------------------------------------------------------------------------------------------
2561                                      JAVASCRIPT CODE
2562  ---------------------------------------------------------------------------------------------
2563	function name						| description				| use process
2564  ---------------------------------------------------------------------------------------------
2565	articleHeader()						| 기사뷰 헤더 네비			| 기사뷰 헤더 네비
2566  ---------------------------------------------------------------------------------------------*/
2567
2568var articleHeader = {
2569
2570	// 헤더 네비게이션 생성
2571	setScroll:function(){		
2572		jQuery(window).scroll(function() {
2573			if (jQuery(this).scrollTop() > 300) {
2574				jQuery('#sticky-header').addClass('scroll');
2575			} else {
2576				jQuery('#sticky-header').removeClass('scroll');
2577			}
2578		});			
2579	},
2580	
2581
2582	// 기사이동
2583	move:function(mod, order_type, order_value, section_code, sub_section_code, serial_code){
2584		jQuery.post( "ajaxGetForwardIdxno.php", { mod: mod, order_type:order_type, order_value: order_value, section_code: section_code, sub_section_code: sub_section_code, serial_code: serial_code }, function( f_idxno ) {
2585			
2586			if(f_idxno){
2587				location.href = '/news/articleView.html?idxno='+f_idxno				
2588			}else{
2589				alert('기사가 존재하지 않습니다');
2590			}
2591			
2592		});
2593	}
2594	
2595}
2596
2597
2598/*---------------------------------------------------------------------------------------------
2599                                      JAVASCRIPT CODE
2600  ---------------------------------------------------------------------------------------------
2601	function name						| description				| use process
2602  ---------------------------------------------------------------------------------------------
2603  	bbsPrint(idxno)						| 게시물 인쇄창 오픈				| 게시물 인쇄창 오픈
2604	articlePrint(idxno)					| 인쇄창 오픈					| 인쇄창 오픈
2605	articleMail(idxno)					| 메일보내기창 오픈				| 메일보내기창 오픈
2606	articleErr(idxno)					| 오류신고창 오픈				| 오류신고창 오픈
2607	articleSingo(idxno)					| 댓글신고창 오픈				| 댓글신고창 오픈
2608	fn_guid()							| (랜덤)고유아이디 생성			| (랜덤)고유아이디 생성 
2609  ---------------------------------------------------------------------------------------------*/
2610
2611//인쇄창 오픈
2612function bbsPrint( idxno, ps ) {
2613    var ps_str = "";
2614    if(ps != "") ps_str = "&ps="+ps;
2615    window.open('/bbs/bbsPrint.html?idxno='+idxno+ps_str, 'bbsPrint', 'width=660,height=500,scrollbars=yes');
2616}
2617
2618// 인쇄창 오픈
2619function articlePrint( idxno ) {
2620	window.open('/news/articlePrint.html?idxno='+idxno, 'articlePrint', 'width=660,height=500,scrollbars=yes');
2621}
2622
2623// 메일보내기창 오픈
2624function articleMail( idxno ) {
2625	window.open('/news/articleMail.html?idxno='+idxno, 'articleMail', 'width=660,height=500,scrollbars=yes');
2626}
2627
2628// 오류신고창 오픈
2629function articleErr( idxno ) {
2630	window.open('/news/articleErr.html?idxno='+idxno, 'articleErr', 'width=660,height=500,scrollbars=yes');
2631}
2632
2633// 댓글신고창 오픈
2634function articleSingo( idxno ) {
2635	window.open('/news/articleSingo.html?idxno='+idxno, 'articleSingo', 'width=660,height=500,scrollbars=yes');
2636}
2637
2638//고유값생성 (기사등록 관련기사 띄울때 사용)
2639function fn_guid() {
2640    function s4() {
2641        return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
2642    }
2643    return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4();
2644}
2645
2646/*****************************************************************************
2647*게시판 카테고리 설정
2648*****************************************************************************/
2649var bbsCfg={
2650
2651	 // 카테고리 셋팅
2652     setCategory:function() {	
2653
2654		 // 추가
2655        $('#admin-content').on('click', '#btn_category_add, .btn_category_delete, .btn_category_modify', function(e){
2656
2657			var _this = this
2658			,$this = $(_this)
2659			,isAddButton = $this.is("#btn_category_add")
2660			,isDltButton = $this.is(".btn_category_delete")
2661			,isModalButton = $this.is(".btn_category_modify")
2662			,$categoryName = $('#category_name').val()
2663			,categoryArr = $categoryName.split(',');
2664
2665			if(isAddButton){ // 추가
2666				categoryArr =categoryArr.filter(Boolean);
2667				for (var i in categoryArr) {
2668					var category = categoryArr[i];
2669	
2670					// 필수 항목 체크
2671					if(!category || category == "") {
2672						alert("카테고리명을 정확하게 입력해주세요.");
2673						return false;
2674					}
2675
2676					// 중복체크
2677					if($('#category-div').find("input[class='category'][value='"+category+"']").length>0) {
2678						alert(category+' 카테고리는 존재합니다.');
2679						$('#category_name').val('');
2680						return false;
2681					}
2682					
2683					var _time = (Math.random()*new Date().getTime()).toFixed(0);
2684				    var html='';
2685					   html += "<li class='add-category-entity'> ";
2686					   html += "	<input type='hidden' name='category["+_time+"]' class='category' value='"+category+"'>";
2687					   html += "	<span class='button nd-pink small default-cursor btn_category_modify' data-cate-idxno='"+_time+"'><i class='icon-wrench'>&nbsp;</i>"+category+"</span><button type='button' class='button secondary small btn_category_delete' data-cate-idxno='"+_time+"' ><i class='icon-trash-o'></i></button>";
2688					   html += "</li>";
2689					$('#add-category').append(html); 
2690				}
2691
2692				//초기화
2693				$('#category_name').val('');
2694
2695			} else if(isModalButton) { // 수정 모달 
2696
2697				var $this = $(this)
2698					,$form = $('#form_bbs_category')
2699					,$item = $this.closest(".add-category-entity")
2700					,$span = $this.closest(".btn_category_modify")
2701					,cate_idxno = $span.data("cate-idxno")
2702					,category = $item.find("input:hidden[name='category["+cate_idxno+"]']").val();
2703
2704				$form.find('input:hidden[name="cate_idxno"]').val(cate_idxno);
2705				$form.find('input:text[name="category"]').val(category);
2706
2707				$('#categoryAddModal').foundation('open');
2708				
2709				// 수정 
2710				$form.on('click', '.chk', function(e){
2711					if($item) { 
2712						var cate_idxno= $form.find('input:hidden[name="cate_idxno"]').val()
2713						   ,category = $form.find('input[name="category"]').val();
2714
2715						if($form.find('[name="category"]').val() == ""){
2716							alert('카테고리 명을 정확하게 입력해주세요');
2717							$form.find('[name="category"]').focus();
2718							return false;
2719						}
2720							
2721						$item.find("input:hidden[name='category["+cate_idxno+"]']").val(category);
2722						$item.find("span[data-cate-idxno='"+cate_idxno+"']").html("<i class='icon-wrench'>&nbsp;</i>"+category).attr("data-category",category);
2723					}
2724
2725					$('#categoryAddModal').foundation('close');
2726				});
2727
2728			} else if(isDltButton) {  //삭제		
2729				var cate_idxno = $(this).closest(".btn_category_delete").data("cate-idxno");
2730				if(!window.confirm("삭제하시겠습니까?")) return false;
2731				$.post(	"/bbs/axBbsCategory.php"
2732						,{mode:"categoryChk",cate_idxno:cate_idxno}
2733						,function(data, rst){
2734							if(data.result === "success"){
2735								$this.closest(".add-category-entity").fadeOut("fast",function(){$(this).remove();});	
2736							}else alert(decodeURIComponent(data.msg));
2737
2738				},"json");	
2739				return false;		
2740			}
2741		});
2742	 }
2743
2744	 //정렬
2745	,evtSortableCategory:function(){
2746		var $box = $("#add-category"),
2747			table_name = $box.attr("data-table");
2748			
2749		$box.sortable({
2750			placeholder: "ui-state-highlight"
2751			,forcePlaceholderSize:true
2752			,update:function(event, ui){
2753			// 저장안함
2754			}
2755		});
2756	}
2757
2758 	//카테고리 이동
2759 	,categoryMove:function(checkBoxIdxno){
2760
2761        // 전체선택
2762		$("#all-dummy").click(function(e){
2763			$('input:checkbox[name="bbs_idxno[]"]', '#bbs_table').each(function(i){
2764				this.checked = $('input:checkbox[name="all_dummy"]', '#bbs_table').is(':checked');
2765			});
2766		});
2767
2768		// 추가
2769		$('.bbs-skin').on('click', '.categoryModalBtn', function(e){
2770			var data=$(checkBoxIdxno).filter(function(i){ return this.checked?true:false; }).map(function(a,b){ return b.value; }).get();
2771			if(data.length<=0){
2772				alert("카테고리 이동 할 게시물을 선택해주세요.");
2773				return false;
2774			}
2775			//console.log(data);
2776			$('#categoryMoveModal').foundation('open');
2777			
2778			$('#categoryMoveForm').on('click', '.category_move_btn', function(e){
2779				var to_category = $('#categoryMoveForm').find('#toCategory option:selected').val(),
2780					table_name =  $('#categoryMoveForm').find('input:hidden[name="table_name"]').val();
2781
2782				if(!window.confirm("카테고리 이동 할 게시물로 변경하시겠습니까?")) return false;
2783				$.post("/bbs/axBbsCategory.php"
2784						,{mode:"bbsCategoryMove","bbs_idxno[]":data,"to_category":to_category,"table_name":table_name}
2785						,function(data,rst){
2786							console.log(data);
2787							if(data.result!="success"){
2788								alert(data.msg||"문제가 생겼습니다. 잠시후 다시 시도 하여 주세요.");
2789								return false;
2790							}
2791							//alert("카테고리 이동이 완료되었습니다.");
2792							location.reload(true);
2793						},"json");
2794
2795				return false;
2796			});
2797		});
2798    }
2799}
2800
2801/*****************************************************************************
2802* 다중섹션설정
2803*****************************************************************************/
2804var multiSection ={
2805
2806	// 섹션로드
2807	sectionLoad:function() {
2808		
2809		$('#admin-content').on('change', '.add-section-select', function(e){
2810			var tp = $(this).data('type');
2811			var code = $(this).val();
2812			var $_obj = $('#add_section');
2813
2814			if(tp == 1) multiSection.changeSectionCode(tp, code);
2815			else if(tp == 2) {
2816				if($(this).val() == "") {
2817					multiSection.changeSectionCode(1, $_obj.val());
2818				}
2819				else multiSection.changeSectionCode(tp, code);
2820			}
2821		});
2822
2823		//삭제
2824		$('#section-div').on('click', '.delete-button', function(e){
2825			var tp = $(this).data('type');
2826			$(this).closest('.'+tp+'-section-entity').remove();
2827		});
2828	}
2829
2830	//섹션 코드 호출
2831	,changeSectionCode:function(tp,code) {
2832
2833		var $_subsection = $('#add_subsection');
2834		var $_serial = $('#add_serial');
2835	
2836		$.ajax({
2837			type: "post",
2838			dataType: "json",
2839			url: "/news/changeSectionCode.ajax.php",
2840			data:{tp:tp, code:code},
2841			success: function(data) {
2842				if(data[0] == "Y"){
2843					if(tp == 1){
2844						$_subsection.html(data[1]);
2845						$_serial.html(data[2]);
2846					}else if(tp == 2){
2847						$_serial.html(data[2]);
2848					}
2849				}
2850			},
2851			error: function(error, request) {
2852				alert('error!!!');
2853				console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2854			}
2855		});
2856	
2857		return false;
2858	}
2859
2860	// 자동박스 섹션추가&제외
2861	,addSectionCode:function() {
2862
2863		// 섹션 단락 노출 여부 
2864		if($('.add-section-entity').length > 0) $('#section-div').show();
2865		else  $('#section-div').hide();
2866
2867		$('#admin-content').on('click', '#sectionBtn', function(e){
2868
2869			// 추가 or 제외
2870			var tp = $(this).data('type');
2871
2872			//1차섹션
2873			var sectioncode = $('#add_section option:selected').val();
2874			var sectionname = $('#add_section option:selected').text();
2875			//2차섹션
2876			var subsectioncode = $('#add_subsection option:selected').val();
2877			var subsectionname = $('#add_subsection option:selected').text();
2878			//3차섹션
2879			var serialcode = $('#add_serial option:selected').val();
2880			var serialname = $('#add_serial option:selected').text();
2881
2882			//1차섹션을 선택 안했을시...
2883			if(!sectioncode || sectioncode == "") {
2884				alert("추가할 섹션을 선택해주세요.");
2885				return false;
2886			}
2887
2888			//  중복코드 체크
2889			var addSecCode = sectioncode;
2890			if(subsectioncode) addSecCode += '>'+subsectioncode;
2891			if(serialcode) addSecCode += '>'+serialcode;
2892			
2893			var duplicateChk = false;    
2894
2895			// 동일한 섹션 구성이 추가&제외 동시 추가 제어
2896			$('.input_setion_data').each(function(){
2897				if( $(this).val() == addSecCode) {
2898					alert('이미 중복 된 코드가 존재합니다.');
2899					eixt;
2900					duplicateChk = true;
2901					return false;
2902				}
2903			});
2904			
2905			if(tp == 'add') {
2906				//전체가 선택 된 경우 단일 선택 제어
2907				$('.add_section_data').each(function(){
2908					if($(this).val() == "ALL"){
2909						alert('전체를 선택하실 경우 단일 섹션 선택은 하실 수 없습니다.');
2910						duplicateChk = true;
2911						return false;
2912					}
2913				});
2914
2915				// 단일 섹션 선택시 전체 선택 제어
2916				if($('.add-section-entity').length > 0) {
2917					if(addSecCode == "ALL"){
2918						alert('단일 섹션이 이미 선택되어 있습니다. 전체는 선택하실 수 없습니다.');
2919						duplicateChk = true;
2920						return false;
2921					}
2922				}
2923
2924			} else if(tp == "exc") { 
2925
2926				if(addSecCode == "ALL"){
2927					alert('제외 섹션으로는 전체를 선택하실 수 없습니다.');
2928					duplicateChk = true;
2929					return false;
2930				} else {
2931
2932					if($('.add-section-entity').length > 0) {
2933						$('.add_section_data').each(function(){
2934							if($(this).val().indexOf(addSecCode) != -1) { //포함할 경우 
2935								alert('추가 섹션에 포함 된 1차 섹션으로 제외할 수 없습니다. ');
2936								duplicateChk = true;
2937								return false;
2938							}
2939							if($(this).val() != "ALL"){
2940								if(addSecCode.indexOf(">") == -1) {
2941									alert('제외 섹션으로 처리할 수 없습니다.');
2942									duplicateChk = true;
2943									return false;
2944								}
2945							}
2946						});
2947					}
2948				}
2949
2950				if($('.add-section-entity').length == 0) {
2951					alert('추가 섹션을 먼저 선택해주세요.');
2952					duplicateChk = true;
2953					return false;
2954				}
2955			}
2956			
2957			if(duplicateChk) return false;
2958
2959			// 추가 될 경우 노출 
2960			$('#section-div').show();
2961
2962			var title = "<span class='hollow button nd-pink default-cursor'>"+sectionname+"</span>";
2963			if(subsectioncode || subsectioncode != "") title += "<span class='hollow button warning default-cursor'>"+subsectionname+"</span>";
2964			if(serialcode || serialcode != "") title += "<span class='hollow button alert default-cursor'>"+serialname+"</span>";
2965
2966			var html='';
2967			html += "<div class='button-group small "+tp+"-section-entity'>"; 
2968			html += "	<input type='hidden' name='"+tp+"_section_data[]' class='"+tp+"_section_data input_setion_data' value='"+addSecCode+"'>";
2969		//	html += "	<input type='hidden' class='"+tp+"-chk-sec' value='"+addSecCode+"'>";
2970			html += title;
2971			html += "	<button type='button' class='button nd-white tiny delete-button' data-type='"+tp+"' title='"+sectionname+" 삭제'><i class='icon-trash-o'></i><span class='show-for-sr'>삭제</span></button>";
2972			html += "</div>";
2973							
2974			$('#'+tp+'-section').append(html);  
2975
2976			//.attr("data-code",category)
2977			
2978		});
2979	}
2980
2981	//전송
2982	,multiSectionSumbit:function(form)
2983	{
2984	
2985	   if(!form.description.value)
2986	   {
2987		   alert("리스트명을 입력해주세요.");
2988		   description.focus();
2989		   return false;
2990	   }
2991
2992	   if($('.add-section-entity').length == 0) {
2993			alert("연결 섹션을 선택해주세요.");
2994			return false;
2995	   }
2996
2997		if(confirm("선택한 섹션을 하나의 리스트로 구성합니다. \n정말로 실행하시겠습니까?")) return true;
2998		else return false;
2999
3000	}
3001	
3002}
3003
3004/* ****************************************** */
3005/* /script/app.js	(파운데이션 실행파일			  */
3006/* ****************************************** */
3007
3008$(function(){ 
3009	$(document).foundation();    
3010});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.