PageSourceSearch

https://cdn.weekly.hankooki.com/script/common.js

js hankooki.com collected 2026-09-24 08:50:38 UTC 111,141 bytes, 3,122 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='+bannerIdxno+'&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/'+bannerId
833xno+'.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/'+bannerId
916xno+'.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"
1777: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				if(!window.___popup) return ;
1797				if($.isArray(___popup)===false && ___popup.length>0) return ;
1798				if(!window.___currentTime) ___currentTime = Math.floor(new Date().getTime()/1000);// 시간이 설정되지 않았다면 js 시간으로 설정함
1799								
1800				var $content = $("#layer-popups");
1801				
1802				if($content.length<=0) return false;
1803				parents.vars.popup.bodyWidth = $content.innerWidth();			
1804				parents.vars.popup.bodyLeft = $content.position().left;
1805				parents.vars.popup.screenWidth = window.screen.width;
1806				for(var i=0,cnt=___popup.length; i<cnt; i++){
1807					// 쿠키인지 판단후 열기
1808					var coo = "";
1809					coo = bannerpop.getCookie(parents.vars.popup.popname+___popup[i].idxno)
1810
1811					if(!coo){
1812						parents.vars.popup.order++;
1813						parents.float(___popup[i]);
1814					}
1815				}
1816			});
1817		//}catch(e){}		
1818	}
1819	
1820	
1821	// 창닫기
1822	,evtClose:function(mode, idxno)
1823	{
1824		if(mode=="layer"){
1825			var layerId = bannerpop.vars.popup.popname+idxno;
1826			
1827			$("#"+layerId).fadeOut("fast", function(){
1828				$(this).remove();
1829			});
1830		}else window.close();
1831	}
1832	
1833	// cookie
1834	,evtCookieClose:function(name, days)
1835	{
1836		bannerpop.setCookie(name, "popup", days);
1837	}
1838	
1839	// 하루,몇일동안 열지 않기
1840	,daysNotOpen:function(expire, period, $btn, p)
1841	{
1842		var parents = this
1843			,idxno = p.idxno
1844			,isClickedMap = false;
1845		
1846		if(expire!="none"){
1847			$btn.each(function(i,v) {
1848				var $thisBtn = $(this);
1849				if($thisBtn.is(".popup-days")){
1850					// 하루동안
1851					if(expire=="day"){
1852						$thisBtn.click(function(){
1853							parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1854							parents.evtClose(p.popup_type, p.idxno);
1855							return false;
1856						})
1857						// 닫기 태그 안에 암것두 없는 거 찾아 닫기 텍스트 넣어주기
1858						.not(":has(*)").html('<a href="#close-to-layer">하루동안 보지 않기</a>');
1859					}
1860					// 몇일동안 daySubfix
1861					else if(expire=="days"){
1862						var select = '<a href="#link">'
1863									+'<label class="show-for-sr" for="popDays"></label>'
1864									+'<select name="popDays" id="popDays" class="tiny" title="기간">'
1865									+'	<option value="1">하루</option>'
1866									+'	<option value="2">2일</option>'
1867									+'	<option value="3">3일</option>'
1868									+'	<option value="4">4일</option>'
1869									+'	<option value="5">5일</option>'
1870									+'	<option value="6">6일</option>'
1871									+'	<option value="7">7일</option>'
1872									+'</select> 동안 열지않기'
1873									+'</a>';
1874						var html = '<a href="#link">'
1875									+ (period>1 ? '몇일동안 보지 않기' : '하루동안 보지 않기')
1876									+'</a>';
1877						//$btn.not(":has(*)").append(select).click(function(){
1878						$thisBtn.append(html).click(function(){
1879							var $this = $(this)
1880								//,days = $this.prev("select").val();
1881								,days = period;
1882							
1883							parents.evtCookieClose(parents.vars.popup.popname+idxno, days);
1884							parents.evtClose(p.popup_type, p.idxno);
1885							return false;
1886						});					
1887					}
1888				}else{
1889					// 이미지맵일때, 하루동안 열지않기
1890					$thisBtn.click(function(){
1891						parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1892						parents.evtClose(p.popup_type, p.idxno);	
1893						return false;
1894					});	
1895					
1896					isClickedMap = true;
1897				}
1898			});
1899		}
1900		
1901		// expire 값이랑 관계없이 이미지맵을 찾아 처리
1902		if(isClickedMap===false && $btn.is(".popup_day_close_map")){
1903			// 이미지맵일때, 하루동안 열지않기
1904			$btn.click(function(){
1905				parents.evtCookieClose(parents.vars.popup.popname+idxno, "1");
1906				parents.evtClose(p.popup_type, p.idxno);	
1907				return false;
1908			});	
1909		}
1910	}
1911	
1912	// window popup control
1913	,popupControl:function()
1914	{
1915		if(!___popup) return ;
1916		if((typeof ___popup)!=="object") return ;
1917		
1918		var parents = this
1919			,p = ___popup		
1920			,title = decodeURIComponent(p.title)||"" 
1921			,popupType = p.popup_type||"window"
1922			,bottomClose = p.bottom_close||"Y"
1923			,bottomCloseExpireCk = p.bottom_close_expire_ck||"day"	// : day,days,none
1924			,bottomCloseExpire = p.bottom_close_expire||1	// : 몇일
1925			,$btnClose = $(".popup_close, .popup_close_map, .popup_icon_close")
1926			,$btnDayClose = $(".popup-days, .popup_day_close_map");
1927		
1928		if(popupType!="window") return ;
1929		
1930		// 윈도우 바 타이틀 교체
1931		document.title = title;
1932	
1933		// 창닫기
1934		if(bottomClose=="Y"){
1935			$btnClose.each(function(){
1936				var _$this = $(this);
1937				//if(_$this.is(".popup_close")) _$this.text('창닫기');
1938			});
1939			
1940			$btnClose.click(function(){
1941				parents.evtClose(p.popup_type, p.idxno);	
1942				return false;
1943			});
1944		}
1945		
1946		// 하루, 몇일동안 열지 않기
1947		this.daysNotOpen(bottomCloseExpireCk, bottomCloseExpire, $btnDayClose, p);
1948		
1949	}
1950
1951	// array 최고값
1952	,arrayMaxMin:function(arr, mode)
1953	{
1954		if($.isArray(arr)===false) return false;
1955	
1956		if(!mode) mode = "max";
1957		arr.sort(function(a, b){
1958			return b-a;
1959		});
1960		return (mode=="max"?arr[0]:arr[arr.length-1])||0;
1961	}
1962};
1963
1964/******************************************************************************************************************
1965* 멀티 기능성 배너
1966*
1967* @update 2018/07/18
1968*/
1969var bannerpopMulti = {
1970    // php 전달 변수
1971    vars:{
1972        $banner_list:null,
1973        $edit_mode:""
1974    }
1975    
1976    // 페이지 초기 로드
1977    ,init:function() {
1978        $('input[name="effect_type"]').on("click", function() {
1979            if ($(this).val()=='none') {
1980                $("#row_num").val(0).attr("disabled", true);
1981                $("#scroll_num").val(0).attr("disabled", true);
1982            } else {
1983                $("#row_num").removeAttr("disabled");
1984                $("#scroll_num").removeAttr("disabled");
1985            }
1986        });
1987
1988        $('input[name="autoplay"]').on("click", function() {
1989            if ($(this).val()=='Y') {
1990                $("#autoplay_speed").removeAttr("disabled");
1991            } else {
1992                $("#autoplay_speed").attr("disabled", true);
1993            }
1994        });
1995
1996        $('#all-banner-list').on('click', function(e) {
1997            $this = $(this);
1998            href = $this.attr('href');
1999            $("#edit-modal-iframe").attr("src", href);
2000            $('#edit-modal').foundation('open');
2001            return false;
2002        });
2003
2004        $('#banner-activity-box').sortable({
2005            axis: '',
2006            update: function() {
2007                console.log($(this));
2008            }
2009        });
2010
2011        $('#edit-modal').on('open.zf.reveal', function(e){
2012            $('#for-loading').show();
2013        });
2014
2015        $('#edit-modal').on('closed.zf.reveal', function(e){
2016            $("#edit-modal-iframe").attr("src", "about:blank").height('0px').closest('#activity-modal').css('height', '0px');
2017        });
2018
2019        $(document).on("click", '.trash', function() {
2020            var $this=$(this)
2021            ,$parent = $this.closest('.banner-activity-list');
2022            $parent.fadeOut('fast', function(){
2023                $parent.remove();
2024            });
2025        });
2026    }
2027
2028    // 배너 가져오기
2029    ,evtClickMultipleAdd:function() {
2030        var multi_idxno=window.parent.$('#all-banner-list').closest('div').attr('data-multi-idxno')||'';
2031        $('#activity-add-btn').on("click", function() { // #activity-add-btn 기능성배너 버튼 클릭 이벤트를 이용
2032            var $this=$(this);
2033            if($('.banner_element_ckecked').is(':checked') == false) {
2034                alert('배너를 선택해주세요.');
2035                return false;
2036            }else{
2037                var $checked=$(".banner_element_ckecked:checked")
2038                    ,arr = new Array();
2039                if($checked.length>0) {
2040                    $.each($checked, function(idx, v) {
2041                        arr.push(v.value);
2042                    });
2043
2044                    var data = {mode:multi_idxno?'modify':'input', multi_idxno:multi_idxno, banner_idxno:arr};
2045                    data = JSON.stringify(data);
2046                    //console.log(data);
2047
2048                    $.ajax({
2049                        url:"/bannerpop/activity_multi_act.php"
2050                        ,type:'post'
2051                        ,dataType:'json'
2052                        ,contentType:'application/x-www-form-urlencoded; charset=utf-8'
2053                        ,data:{post_data:data}
2054                        ,success:function(json, result) {
2055                            if(result == 'success') {
2056                                if(json.response == 'ok') {
2057                                    var item = JSON.parse(json.data),
2058										$target = window.parent.$("#banner-activity-box"),
2059                                        $sample = window.parent.$("#sample");
2060                                    bannerpopMulti.vars.$banner_list = item;
2061                                    bannerpopMulti.bannerCollocate($target, $sample);
2062                                    window.parent.$(".close-button").trigger("click");
2063                                }else{
2064                                    return false;
2065                                }
2066                            }else return false;
2067                        },
2068                        error:function(request,status,error){
2069                            alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2070                        }
2071                    });
2072                }
2073            }
2074        });
2075    }
2076
2077    // 배너 배치 하기
2078    ,bannerCollocate:function($targetArea, $sample) {
2079        if (!this.vars.$banner_list) return false;
2080        if (typeof $targetArea != "object" || typeof $sample != "object") return false;
2081        var item = this.vars.$banner_list;
2082        for (var i=0;i<item.length;i++) {
2083            var $areaBox = $targetArea,
2084                $clone = $sample.clone(),
2085                stateIcon = "";
2086            if (typeof $clone == "object") {
2087                if (item[i].state=="previous") stateIcon = '<span class="label success tiny">진행전</span>';
2088                else if (item[i].state=="proceeding") stateIcon = '<span class="label tiny">진행중</span>';
2089                else stateIcon = '<span class="label secondary tiny">진행종료</span>';
2090                $clone.attr("data-banner-idxno", item[i].idxno);
2091                $clone.find(".banner-activity-list").attr("data-banner-idxno", item[i].idxno).end().
2092                    find(".dis-table-cell").append(item[i].banner).end().
2093                    find('input[name="banner_idxno[]"]').val(item[i].idxno).end().
2094                    find(".dis-status").empty().append(stateIcon).end().
2095                    find('input[name="delay[]"]').attr("id", "delay_"+item[i].idxno).attr("value", item[i].delay).end().
2096                    find('.input-group-label').attr("for", "delay_"+item[i].idxno);
2097                $areaBox.append($clone.html());
2098            }
2099        }
2100    }
2101
2102    // 선택된 배너 표시
2103    ,selectBannerCheck:function() {
2104        var $areaBox = window.parent.$("#banner-activity-box"),
2105            $list = $areaBox.find('input[name="banner_idxno[]"]'),
2106            $bannerItems = $(".adccfg_list_items"),
2107            bannerList = [],
2108            i = 0;
2109        $list.each(function() {
2110            bannerList.push($(this).val());
2111        });
2112        //console.log(bannerList);
2113
2114        $bannerItems.each(function() {
2115            var $this = $(this),
2116                idxno = $this.attr("data-banner-idxno");
2117            if ($.inArray(idxno, bannerList)!=-1) {
2118                $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>');
2119            }
2120        });
2121    }
2122    
2123    // 배너 등록하기
2124    ,valid_multi:function(form) {
2125        if(form.title.value == '') {
2126            alert('제목을 입력하세요.');
2127            form.title.focus();
2128            return false;
2129        }
2130
2131        if (form.column_num.value>9) {
2132            alert("열수는 1~9까지만 입력할 수 있습니다.");
2133            form.column_num.focus();
2134            return false;
2135        }
2136
2137        if (form.row_num.value>9) {
2138            alert("행수는 1~9까지만 입력할 수 있습니다.");
2139            form.row_num.focus();
2140            return false;
2141        }
2142
2143        if (form.scroll_num.value>9) {
2144            alert("스크롤수는 1~9까지만 입력할 수 있습니다.");
2145            form.scroll_num.focus();
2146            return false;
2147        }
2148
2149        if($('.banner-activity-list').length-1<=0) {
2150            alert('배너를 하나 이상 추가하셔야 합니다.');
2151            return false;
2152        }
2153
2154        return true;
2155    }
2156
2157    // 멀티 기능성 배너 이벤트 로드
2158    ,bannerLoad:function() {
2159        $('.banner-multi-box').each(function() {
2160            var $effectType = $(this).attr("data-effect-type"),
2161                $rowNum = $(this).attr("data-row-num")||1,
2162                $colNum = $(this).attr("data-column-num")||1,
2163                $scrollNum = $(this).attr("data-scroll-num")||1,
2164                $moveDisplay = $(this).attr("data-move-display")||'none',
2165                $autoplay = $(this).attr("data-autoplay")||'N',
2166                $autoplaySpeed = $(this).attr("data-autoplay-speed")||5,
2167                $speed = $(this).attr("data-speed")||300,
2168                $random = $(this).attr("data-random")||'N',
2169                $bannerMultiBoxHtml = $(this);
2170                
2171                // 예약배너이거나 종료 배너일 경우 제외 처리.
2172                if(location.href.indexOf('/edit/adminSection.html')<0) {
2173                    $(this).find(".slick-slide").each(function(){
2174                        if($(this).find('.banner_box').length<=0) {
2175                            //$bannerMultiBoxHtml.find(".slick-slide").eq($(".slick-slide", $bannerMultiBoxHtml).index(this)).remove();
2176							$(this).remove();
2177                        }
2178                    });
2179                }
2180
2181            if ($effectType!="none") {
2182                var totalSlide = $(this).find(".slick-slide").length||0,
2183                    randomStart = Math.floor(Math.random() * totalSlide);
2184                randomStart = ($random=="Y") ? randomStart : 0;
2185
2186                var slickParam = {};
2187                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>';  // 이전버튼
2188                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>'; // 다음버튼
2189                slickParam.infinite = true;                                                                                                                     // 무한 넘기기
2190                slickParam.draggable = false;                                                                                                                   // 제스처(모바일용)
2191
2192                switch ($effectType) {
2193                    case "vertical":
2194                        slickParam.slidesToShow = parseInt($rowNum,10);
2195                        slickParam.vertical = true;
2196                        slickParam.verticalSwiping = true;
2197                        if ($random=="Y"&&totalSlide>parseInt($rowNum,10)) slickParam.initialSlide = randomStart;
2198                        break;
2199                    case "horizon":
2200                    default:
2201                        slickParam.slidesToShow = parseInt($colNum,10);
2202                        if (parseInt($rowNum,10)>1) slickParam.rows = parseInt($rowNum,10);
2203                        if ($random=="Y") slickParam.initialSlide = randomStart;
2204                        break;
2205                }
2206
2207                slickParam.slidesToScroll = parseInt($scrollNum,10);
2208                slickParam.arrows = ($moveDisplay=="arrow"&&bannerpopMulti.vars.$edit_mode!="delete")?true:false;
2209                slickParam.dots = ($moveDisplay=="dot"&&bannerpopMulti.vars.$edit_mode!="delete")?true:false;
2210                slickParam.dotsClass = "auto-pager";
2211                slickParam.autoplay = ($autoplay== "Y")?true:false;
2212                slickParam.autoplaySpeed = ($autoplay== "Y")?parseInt($autoplaySpeed,10)*1000:0;
2213                slickParam.speed = parseInt($speed, 10);
2214                slickParam.centerMode = false;
2215                slickParam.variableWidth = false;
2216                slickParam.focusOnSelect = true;
2217                //console.log(slickParam);
2218
2219                $(this).slick(slickParam);
2220            } else {
2221                if ($random=="Y") shuffle($(this));
2222            }
2223
2224            function shuffleArray(d) {
2225                for (var c = d.length - 1; c > 0; c--) {
2226                    var b = Math.floor(Math.random() * (c + 1));
2227                    var a = d[c];
2228                    d[c] = d[b];
2229                    d[b] = a;
2230                }
2231                return d;
2232            }
2233
2234            function shuffle(target){
2235                var $box = $(target).children(".slick-slide-none")
2236                    ,$container = $box.children(".row")
2237                    ,$li = $box.find(".columns")
2238                    ,total = $li.length
2239                    ,tmp = [];
2240
2241                for(var i=0;i<total;i++) tmp.push(i);
2242
2243                $container.empty();
2244                setTimeout(
2245                    shuffleArray(tmp).forEach(function(a,b){
2246                        var $bannerBoxs=$li[a].querySelectorAll(".banner_box")
2247                            ,length=$bannerBoxs.length
2248                            ,div=document.createElement("div");
2249                        for(var i=0;i<length;i++){
2250                            div.appendChild($bannerBoxs[i]);
2251                            div.className = "columns";
2252                        }
2253                        $container.append(div);
2254                    })
2255                ,0);
2256            }
2257        });
2258    }
2259};
2260
2261/* ****************************************** */
2262/* /script/resizePhoto.js					  */
2263/* ****************************************** */
2264
2265function resizePhoto() {	
2266
2267	var $_container = $('#article-view-content-div');
2268	var articleViewDivWidth = $_container.width();
2269	
2270	$_container.find('img').each(function(e){
2271		if($(this).closest('figure').length) {
2272			var ViewimageObj = new Image();
2273			var $_thisImgObj = $(this);
2274			ViewimageObj.src = $(this).attr("src");
2275			ViewimageObj.onload = function() {
2276				imageWidth = this.width;
2277				if(articleViewDivWidth <= imageWidth) {
2278					$_thisImgObj.closest('figure').addClass('bigsize');
2279				}
2280			};
2281
2282		}
2283	});	
2284
2285	$_container.on('click', 'figure.bigsize', function(e){
2286		$('<form action="/news/userArticlePhoto.html" method="POST"><input type="hidden" name="src" value="'+$(this).find("img").attr('src')+'"></form>').appendTo('body').submit();
2287	})
2288	.on('click', 'figure.bigsize figcaption', function(e){
2289		e.preventDefault();
2290		e.stopPropagation();
2291	});
2292}
2293
2294/* ****************************************** */
2295/* /script/floating.banner.js                 */
2296/* ****************************************** */
2297
2298$(window).scroll(function() {
2299	
2300	if(!($('#floating_banner_left').length || $('#floating_banner_right').length)) return false;
2301	
2302    var floatBannerLeft = $('#floating_banner_left'),
2303        floatBannerRight = $('#floating_banner_right'),
2304        
2305        HeadHeight = $('#user-header').height(),
2306        footerBoxTop = $('#user-footer').offset().top,
2307        footerBoxHeight = $('#user-footer').height(),
2308
2309        scrollTop = $(window).scrollTop(),
2310
2311        flBnLHeight = floatBannerLeft.height(),
2312        flBnRHeight = floatBannerRight.height(),
2313
2314        ahtHeight = $('.aht-wrapper').height(),
2315
2316        flBnLscrollLimit = footerBoxTop - flBnLHeight - HeadHeight - floatBannerLeft.data('down-margin'),
2317        flBnLscrollLimitChk = flBnLscrollLimit + footerBoxHeight + floatBannerLeft.data('down-margin'),
2318        flBnRscrollLimit = footerBoxTop - flBnRHeight - HeadHeight - floatBannerRight.data('down-margin'),
2319        flBnRscrollLimitChk = flBnRscrollLimit + footerBoxHeight + floatBannerRight.data('down-margin'),
2320
2321        flBnLscrollTop = scrollTop - HeadHeight + ahtHeight + floatBannerLeft.data('top-margin'),
2322        flBnRscrollTop = scrollTop - HeadHeight + ahtHeight + floatBannerRight.data('top-margin');
2323
2324    if(floatBannerLeft.data('scroll') == 'y'){
2325        if(floatBannerLeft.data('duration') > 0) floatBannerLeft.stop();
2326        if(scrollTop < HeadHeight) floatBannerLeft.animate({top: '0px'}, floatBannerLeft.data('duration'), 'linear');
2327        else if(scrollTop >= flBnLscrollLimitChk) floatBannerLeft.animate({top:flBnLscrollLimit + 'px'}, floatBannerLeft.data('duration'), 'linear');
2328        else if(scrollTop >= HeadHeight) floatBannerLeft.animate({top:flBnLscrollTop + 'px'}, floatBannerLeft.data('duration'), 'linear');
2329    }
2330
2331    if(floatBannerRight.data('scroll') == 'y'){
2332        if(floatBannerRight.data('duration') > 0) floatBannerRight.stop();
2333        if(scrollTop < HeadHeight) floatBannerRight.animate({top: '0px'}, floatBannerRight.data('duration'), 'linear');
2334        else if(scrollTop >= flBnRscrollLimitChk) floatBannerRight.animate({top:flBnRscrollLimit + 'px'}, floatBannerRight.data('duration'), 'linear');
2335        else if(scrollTop >= HeadHeight) floatBannerRight.animate({top:flBnRscrollTop + 'px'}, floatBannerRight.data('duration'), 'linear');
2336    }
2337});
2338
2339/* ****************************************** */
2340/* /script/mosaic.js					  	*/
2341/* ****************************************** */
2342
2343function mosaic_autobox(data) {
2344	var $_container		= $(data[0].container);
2345	var autoplay		= data[0].autoplay;
2346	var autotime		= data[0].autotime;
2347	var temp_autoplay	= autoplay;
2348	var totalcount		= $_container.find('ul.auto-nav > li').length;
2349	var point			= 0;
2350	
2351	$_container.on('mouseenter', '.auto-cursor', function(e){
2352		mosaic_cmd('current', $(this).index());
2353	});
2354
2355	$_container.on('mouseenter', function(e){
2356		if(autoplay) temp_autoplay = false;
2357	}).on('mouseleave', function(e){
2358		if(autoplay) temp_autoplay = true;
2359	});
2360
2361	if(autoplay) {
2362		var rolling = window.setInterval(function () {
2363			if(temp_autoplay) mosaic_cmd('next', 0);
2364		}, autotime);
2365	}
2366
2367	function mosaic_cmd(mode, current_point) {
2368		
2369		if(mode == "prev") {
2370			point -= 1;
2371			if(point < 0) point = totalcount - 1;
2372		}else if(mode == "next") {
2373			point += 1;
2374			if(point >= totalcount) point = 0;
2375		}else if(mode == "current") {
2376			point = current_point;
2377		}
2378
2379		$_container.find('ul.auto-container > li').eq(point).show().siblings().hide();
2380		$_container.find('ul.auto-nav > li').eq(point).addClass('active').siblings().removeClass('active');
2381
2382		if(point < 2){
2383			$_container.find('ul.auto-container').css({"left":"33.333333%","top":"33.333333%"});
2384		} else if(point < 4 && point >= 2) {
2385			$_container.find('ul.auto-container').css({"left":"0px","top":"33.333333%"});
2386		} else if(point < 6 && point >= 4) {
2387			$_container.find('ul.auto-container').css({"left":"0px","top":"0px"});
2388		} else if(point >= 6) {
2389			$_container.find('ul.auto-container').css({"left":"33.333333%","top":"0px"});
2390		}
2391
2392		return false;
2393	}
2394}
2395
2396/* ****************************************** */
2397/* /script/newsAutoCall.js					  */
2398/* ****************************************** */
2399
2400function fn_articleAutoCall(mode, cycle) {
2401
2402	var autoCallMode	= mode;
2403	var autoCallCycle	= 1000*60*cycle;
2404	var _autoCallWatch  = setInterval(action, autoCallCycle);
2405
2406	// DESK중복수정이면 초기 1회 바로실행.
2407	if(autoCallMode == "desk") action();
2408
2409	function action() {
2410		if(autoCallMode == "save") {
2411			if($('.auto-save', '#admin-aside').length > 0 && $('input:hidden[name="autoSave"]', '#newsWriteForm').val() != "") $('.auto-save', '#admin-aside').show();  
2412			TxRx("/news/articleAutoSave.ajax.php");
2413		}
2414		else if(autoCallMode == "desk")		TxRx("/news/articleAutoDesk.ajax.php");
2415		else								stop();
2416	}
2417
2418	function TxRx(url) {
2419
2420		$.ajax({
2421			type: "post",
2422			dataType: "json",
2423			url:url,
2424			data:$('#newsWriteForm').serialize(),
2425			success: function(data) {
2426				console.log(data[1]);
2427			},
2428			error: function(error, request) {
2429				console.log("자동콜에러 - code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2430				stop();
2431			}
2432		}).always(function() {
2433			if($('.auto-save', '#admin-aside').length > 0) $('.auto-save', '#admin-aside').fadeOut(1500);
2434		});
2435	}
2436
2437	function stop() {
2438		clearInterval(_autoCallWatch);
2439		console.log(autoCallMode + '스톱');
2440	}
2441}
2442
2443/* ****************************************** */
2444/* 기존	common.js							  */
2445/* ****************************************** */
2446
2447/*---------------------------------------------------------------------------------------------
2448                                      JAVASCRIPT CODE
2449  ---------------------------------------------------------------------------------------------
2450	function name						| description				| use process
2451  ---------------------------------------------------------------------------------------------
2452	setCookie(쿠키명, 값, 유효기간(일))	| 							| 쿠키생성
2453	getCookie(쿠키명)					| 							| 쿠키가져오기
2454  ---------------------------------------------------------------------------------------------*/
2455
2456// 쿠키 생성
2457function setCookie(cName, cValue, cDay, cDomain){
2458	var expire = new Date();
2459	expire.setDate(expire.getDate() + cDay);
2460	cookies = cName + '=' + escape(cValue) + '; path=/ '; // 한글 깨짐을 막기위해 escape(cValue)를 합니다.
2461	if(typeof cDay != 'undefined') cookies += ';expires=' + expire.toGMTString() + ';';
2462	document.cookie = cookies;
2463    if (cDomain) {
2464        document.cookie += "domain=" + cDomain + ";";
2465    }
2466}
2467
2468// 쿠키 가져오기
2469function getCookie(cName) {
2470	cName = cName + '=';
2471	var cookieData = document.cookie;
2472	var start = cookieData.indexOf(cName);
2473	var cValue = '';
2474	if(start != -1){
2475		start += cName.length;
2476		var end = cookieData.indexOf(';', start);
2477		if(end == -1)end = cookieData.length;
2478		cValue = cookieData.substring(start, end);
2479	}
2480	return unescape(cValue);
2481}
2482
2483// 쿠키 지움
2484function delCookie(cName) {
2485    var today = new Date();
2486
2487    today.setTime(today.getTime() - 1);
2488    var value = getCookie(cName);
2489    if(value != "")
2490        document.cookie = cName + "=" + value + "; path=/; expires=" + today.toGMTString();
2491}
2492
2493
2494/*---------------------------------------------------------------------------------------------
2495                                      JAVASCRIPT CODE
2496  ---------------------------------------------------------------------------------------------
2497	function name						| description				| use process
2498  ---------------------------------------------------------------------------------------------
2499	checkMsgLength()					| 입력된 문자열 길이 검사			| 기사 댓글
2500	calculateMsgLength()				| 문자열 길이 반환				| 기사 댓글
2501	assertMsgLength()					| 문자열 길이만큼 잘라 변환		| 기사 댓글
2502  ---------------------------------------------------------------------------------------------*/
2503
2504// 문자열길이 검사
2505function checkMsgLength(frm, id, lenStr) {
2506	var length = calculateMsgLength(document.getElementById(frm).value);
2507	document.getElementById(id).innerHTML = length;
2508	if (length > lenStr) {
2509		alert("최대 "+lenStr+" 바이트까지 남기실 수 있습니다.\r\n초과된 " + (length - lenStr) + "바이트는 자동으로 삭제됩니다.");
2510		document.getElementById(frm).value = assertMsgLength(document.getElementById(frm).value, lenStr, id);
2511	}
2512}
2513
2514//문자열길이 반환
2515function calculateMsgLength(message) {
2516	var nbytes = 0;
2517
2518	for (i=0; i<message.length; i++) {
2519		var ch = message.charAt(i);
2520
2521		if (escape(ch).length > 4) {
2522			nbytes += 2;
2523		} else if (ch != "\r") {
2524			nbytes++;
2525		}
2526	}
2527
2528	return nbytes;
2529}
2530
2531//문자열 길이만큼 잘라 변환
2532function assertMsgLength(message, maximum, id) {
2533	var inc = 0;
2534	var nbytes = 0;
2535	var msg = "";
2536	var msglen = message.length;
2537
2538	for (i=0; i<msglen; i++) {
2539		var ch = message.charAt(i);
2540
2541		if (escape(ch).length > 4) {
2542			inc = 2;
2543		} else if (ch != "\r") {
2544			inc = 1;
2545		}
2546
2547		if ((nbytes + inc) > maximum) {
2548			break;
2549		}
2550
2551		nbytes += inc;
2552		msg += ch;
2553	}
2554
2555	document.getElementById(id).innerHTML = nbytes;
2556	return msg;
2557}
2558
2559/*---------------------------------------------------------------------------------------------
2560                                      JAVASCRIPT CODE
2561  ---------------------------------------------------------------------------------------------
2562	function name						| description				| use process
2563  ---------------------------------------------------------------------------------------------
2564	articleHeader()						| 기사뷰 헤더 네비			| 기사뷰 헤더 네비
2565  ---------------------------------------------------------------------------------------------*/
2566
2567var articleHeader = {
2568
2569	// 헤더 네비게이션 생성
2570	setScroll:function(){		
2571		jQuery(window).scroll(function() {
2572			if (jQuery(this).scrollTop() > 300) {
2573				jQuery('#sticky-header').addClass('scroll');
2574			} else {
2575				jQuery('#sticky-header').removeClass('scroll');
2576			}
2577		});			
2578	},
2579	
2580
2581	// 기사이동
2582	move:function(mod, order_type, order_value, section_code, sub_section_code, serial_code){
2583		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 ) {
2584			
2585			if(f_idxno){
2586				location.href = '/news/articleView.html?idxno='+f_idxno				
2587			}else{
2588				alert('기사가 존재하지 않습니다');
2589			}
2590			
2591		});
2592	}
2593	
2594}
2595
2596
2597/*---------------------------------------------------------------------------------------------
2598                                      JAVASCRIPT CODE
2599  ---------------------------------------------------------------------------------------------
2600	function name						| description				| use process
2601  ---------------------------------------------------------------------------------------------
2602  	bbsPrint(idxno)						| 게시물 인쇄창 오픈				| 게시물 인쇄창 오픈
2603	articlePrint(idxno)					| 인쇄창 오픈					| 인쇄창 오픈
2604	articleMail(idxno)					| 메일보내기창 오픈				| 메일보내기창 오픈
2605	articleErr(idxno)					| 오류신고창 오픈				| 오류신고창 오픈
2606	articleSingo(idxno)					| 댓글신고창 오픈				| 댓글신고창 오픈
2607	fn_guid()							| (랜덤)고유아이디 생성			| (랜덤)고유아이디 생성 
2608  ---------------------------------------------------------------------------------------------*/
2609
2610//인쇄창 오픈
2611function bbsPrint( idxno, ps ) {
2612    var ps_str = "";
2613    if(ps != "") ps_str = "&ps="+ps;
2614    window.open('/bbs/bbsPrint.html?idxno='+idxno+ps_str, 'bbsPrint', 'width=660,height=500,scrollbars=yes');
2615}
2616
2617// 인쇄창 오픈
2618function articlePrint( idxno ) {
2619	window.open('/news/articlePrint.html?idxno='+idxno, 'articlePrint', 'width=660,height=500,scrollbars=yes');
2620}
2621
2622// 메일보내기창 오픈
2623function articleMail( idxno ) {
2624	window.open('/news/articleMail.html?idxno='+idxno, 'articleMail', 'width=660,height=500,scrollbars=yes');
2625}
2626
2627// 오류신고창 오픈
2628function articleErr( idxno ) {
2629	window.open('/news/articleErr.html?idxno='+idxno, 'articleErr', 'width=660,height=500,scrollbars=yes');
2630}
2631
2632// 댓글신고창 오픈
2633function articleSingo( idxno ) {
2634	window.open('/news/articleSingo.html?idxno='+idxno, 'articleSingo', 'width=660,height=500,scrollbars=yes');
2635}
2636
2637//고유값생성 (기사등록 관련기사 띄울때 사용)
2638function fn_guid() {
2639    function s4() {
2640        return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
2641    }
2642    return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4();
2643}
2644
2645/*****************************************************************************
2646*게시판 카테고리 설정
2647*****************************************************************************/
2648var bbsCfg={
2649
2650	 // 카테고리 셋팅
2651     setCategory:function() {	
2652
2653		 // 추가
2654        $('#admin-content').on('click', '#btn_category_add, .btn_category_delete, .btn_category_modify', function(e){
2655
2656			var _this = this
2657			,$this = $(_this)
2658			,isAddButton = $this.is("#btn_category_add")
2659			,isDltButton = $this.is(".btn_category_delete")
2660			,isModalButton = $this.is(".btn_category_modify")
2661			,$categoryName = $('#category_name').val()
2662			,categoryArr = $categoryName.split(',');
2663
2664			if(isAddButton){ // 추가
2665				categoryArr =categoryArr.filter(Boolean);
2666				for (var i in categoryArr) {
2667					var category = categoryArr[i];
2668	
2669					// 필수 항목 체크
2670					if(!category || category == "") {
2671						alert("카테고리명을 정확하게 입력해주세요.");
2672						return false;
2673					}
2674
2675					// 중복체크
2676					if($('#category-div').find("input[class='category'][value='"+category+"']").length>0) {
2677						alert(category+' 카테고리는 존재합니다.');
2678						$('#category_name').val('');
2679						return false;
2680					}
2681					
2682					var _time = (Math.random()*new Date().getTime()).toFixed(0);
2683				    var html='';
2684					   html += "<li class='add-category-entity'> ";
2685					   html += "	<input type='hidden' name='category["+_time+"]' class='category' value='"+category+"'>";
2686					   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>";
2687					   html += "</li>";
2688					$('#add-category').append(html); 
2689				}
2690
2691				//초기화
2692				$('#category_name').val('');
2693
2694			} else if(isModalButton) { // 수정 모달 
2695
2696				var $this = $(this)
2697					,$form = $('#form_bbs_category')
2698					,$item = $this.closest(".add-category-entity")
2699					,$span = $this.closest(".btn_category_modify")
2700					,cate_idxno = $span.data("cate-idxno")
2701					,category = $item.find("input:hidden[name='category["+cate_idxno+"]']").val();
2702
2703				$form.find('input:hidden[name="cate_idxno"]').val(cate_idxno);
2704				$form.find('input:text[name="category"]').val(category);
2705
2706				$('#categoryAddModal').foundation('open');
2707				
2708				// 수정 
2709				$form.on('click', '.chk', function(e){
2710					if($item) { 
2711						var cate_idxno= $form.find('input:hidden[name="cate_idxno"]').val()
2712						   ,category = $form.find('input[name="category"]').val();
2713
2714						if($form.find('[name="category"]').val() == ""){
2715							alert('카테고리 명을 정확하게 입력해주세요');
2716							$form.find('[name="category"]').focus();
2717							return false;
2718						}
2719							
2720						$item.find("input:hidden[name='category["+cate_idxno+"]']").val(category);
2721						$item.find("span[data-cate-idxno='"+cate_idxno+"']").html("<i class='icon-wrench'>&nbsp;</i>"+category).attr("data-category",category);
2722					}
2723
2724					$('#categoryAddModal').foundation('close');
2725				});
2726
2727			} else if(isDltButton) {  //삭제		
2728				var cate_idxno = $(this).closest(".btn_category_delete").data("cate-idxno");
2729				if(!window.confirm("삭제하시겠습니까?")) return false;
2730				$.post(	"/bbs/axBbsCategory.php"
2731						,{mode:"categoryChk",cate_idxno:cate_idxno}
2732						,function(data, rst){
2733							if(data.result === "success"){
2734								$this.closest(".add-category-entity").fadeOut("fast",function(){$(this).remove();});	
2735							}else alert(decodeURIComponent(data.msg));
2736
2737				},"json");	
2738				return false;		
2739			}
2740		});
2741	 }
2742
2743	 //정렬
2744	,evtSortableCategory:function(){
2745		var $box = $("#add-category"),
2746			table_name = $box.attr("data-table");
2747			
2748		$box.sortable({
2749			placeholder: "ui-state-highlight"
2750			,forcePlaceholderSize:true
2751			,update:function(event, ui){
2752			// 저장안함
2753			}
2754		});
2755	}
2756
2757 	//카테고리 이동
2758 	,categoryMove:function(checkBoxIdxno){
2759
2760        // 전체선택
2761		$("#all-dummy").click(function(e){
2762			$('input:checkbox[name="bbs_idxno[]"]', '#bbs_table').each(function(i){
2763				this.checked = $('input:checkbox[name="all_dummy"]', '#bbs_table').is(':checked');
2764			});
2765		});
2766
2767		// 추가
2768		$('.bbs-skin').on('click', '.categoryModalBtn', function(e){
2769			var data=$(checkBoxIdxno).filter(function(i){ return this.checked?true:false; }).map(function(a,b){ return b.value; }).get();
2770			if(data.length<=0){
2771				alert("카테고리 이동 할 게시물을 선택해주세요.");
2772				return false;
2773			}
2774			//console.log(data);
2775			$('#categoryMoveModal').foundation('open');
2776			
2777			$('#categoryMoveForm').on('click', '.category_move_btn', function(e){
2778				var to_category = $('#categoryMoveForm').find('#toCategory option:selected').val(),
2779					table_name =  $('#categoryMoveForm').find('input:hidden[name="table_name"]').val();
2780
2781				if(!window.confirm("카테고리 이동 할 게시물로 변경하시겠습니까?")) return false;
2782				$.post("/bbs/axBbsCategory.php"
2783						,{mode:"bbsCategoryMove","bbs_idxno[]":data,"to_category":to_category,"table_name":table_name}
2784						,function(data,rst){
2785							console.log(data);
2786							if(data.result!="success"){
2787								alert(data.msg||"문제가 생겼습니다. 잠시후 다시 시도 하여 주세요.");
2788								return false;
2789							}
2790							//alert("카테고리 이동이 완료되었습니다.");
2791							location.reload(true);
2792						},"json");
2793
2794				return false;
2795			});
2796		});
2797    }
2798}
2799
2800/*****************************************************************************
2801* 다중섹션설정
2802*****************************************************************************/
2803var multiSection ={
2804
2805	// 섹션로드
2806	sectionLoad:function() {
2807		
2808		$('#admin-content').on('change', '.add-section-select', function(e){
2809			var tp = $(this).data('type');
2810			var code = $(this).val();
2811			var $_obj = $('#add_section');
2812
2813			if(tp == 1) multiSection.changeSectionCode(tp, code);
2814			else if(tp == 2) {
2815				if($(this).val() == "") {
2816					multiSection.changeSectionCode(1, $_obj.val());
2817				}
2818				else multiSection.changeSectionCode(tp, code);
2819			}
2820		});
2821
2822		//삭제
2823		$('#section-div').on('click', '.delete-button', function(e){
2824			var tp = $(this).data('type');
2825			$(this).closest('.'+tp+'-section-entity').remove();
2826		});
2827	}
2828
2829	//섹션 코드 호출
2830	,changeSectionCode:function(tp,code) {
2831
2832		var $_subsection = $('#add_subsection');
2833		var $_serial = $('#add_serial');
2834	
2835		$.ajax({
2836			type: "post",
2837			dataType: "json",
2838			url: "/news/changeSectionCode.ajax.php",
2839			data:{tp:tp, code:code},
2840			success: function(data) {
2841				if(data[0] == "Y"){
2842					if(tp == 1){
2843						$_subsection.html(data[1]);
2844						$_serial.html(data[2]);
2845					}else if(tp == 2){
2846						$_serial.html(data[2]);
2847					}
2848				}
2849			},
2850			error: function(error, request) {
2851				alert('error!!!');
2852				console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
2853			}
2854		});
2855	
2856		return false;
2857	}
2858
2859	// 자동박스 섹션추가&제외
2860	,addSectionCode:function() {
2861
2862		// 섹션 단락 노출 여부 
2863		if($('.add-section-entity').length > 0) $('#section-div').show();
2864		else  $('#section-div').hide();
2865
2866		$('#admin-content').on('click', '#sectionBtn', function(e){
2867
2868			// 추가 or 제외
2869			var tp = $(this).data('type');
2870
2871			//1차섹션
2872			var sectioncode = $('#add_section option:selected').val();
2873			var sectionname = $('#add_section option:selected').text();
2874			//2차섹션
2875			var subsectioncode = $('#add_subsection option:selected').val();
2876			var subsectionname = $('#add_subsection option:selected').text();
2877			//3차섹션
2878			var serialcode = $('#add_serial option:selected').val();
2879			var serialname = $('#add_serial option:selected').text();
2880
2881			//1차섹션을 선택 안했을시...
2882			if(!sectioncode || sectioncode == "") {
2883				alert("추가할 섹션을 선택해주세요.");
2884				return false;
2885			}
2886
2887			//  중복코드 체크
2888			var addSecCode = sectioncode;
2889			if(subsectioncode) addSecCode += '>'+subsectioncode;
2890			if(serialcode) addSecCode += '>'+serialcode;
2891			
2892			var duplicateChk = false;    
2893
2894			// 동일한 섹션 구성이 추가&제외 동시 추가 제어
2895			$('.input_setion_data').each(function(){
2896				if( $(this).val() == addSecCode) {
2897					alert('이미 중복 된 코드가 존재합니다.');
2898					eixt;
2899					duplicateChk = true;
2900					return false;
2901				}
2902			});
2903			
2904			if(tp == 'add') {
2905				//전체가 선택 된 경우 단일 선택 제어
2906				$('.add_section_data').each(function(){
2907					if($(this).val() == "ALL"){
2908						alert('전체를 선택하실 경우 단일 섹션 선택은 하실 수 없습니다.');
2909						duplicateChk = true;
2910						return false;
2911					}
2912				});
2913
2914				// 단일 섹션 선택시 전체 선택 제어
2915				if($('.add-section-entity').length > 0) {
2916					if(addSecCode == "ALL"){
2917						alert('단일 섹션이 이미 선택되어 있습니다. 전체는 선택하실 수 없습니다.');
2918						duplicateChk = true;
2919						return false;
2920					}
2921				}
2922
2923			} else if(tp == "exc") { 
2924
2925				if(addSecCode == "ALL"){
2926					alert('제외 섹션으로는 전체를 선택하실 수 없습니다.');
2927					duplicateChk = true;
2928					return false;
2929				} else {
2930
2931					if($('.add-section-entity').length > 0) {
2932						$('.add_section_data').each(function(){
2933							if($(this).val().indexOf(addSecCode) != -1) { //포함할 경우 
2934								alert('추가 섹션에 포함 된 1차 섹션으로 제외할 수 없습니다. ');
2935								duplicateChk = true;
2936								return false;
2937							}
2938							if($(this).val() != "ALL"){
2939								if(addSecCode.indexOf(">") == -1) {
2940									alert('제외 섹션으로 처리할 수 없습니다.');
2941									duplicateChk = true;
2942									return false;
2943								}
2944							}
2945						});
2946					}
2947				}
2948
2949				if($('.add-section-entity').length == 0) {
2950					alert('추가 섹션을 먼저 선택해주세요.');
2951					duplicateChk = true;
2952					return false;
2953				}
2954			}
2955			
2956			if(duplicateChk) return false;
2957
2958			// 추가 될 경우 노출 
2959			$('#section-div').show();
2960
2961			var title = "<span class='hollow button nd-pink default-cursor'>"+sectionname+"</span>";
2962			if(subsectioncode || subsectioncode != "") title += "<span class='hollow button warning default-cursor'>"+subsectionname+"</span>";
2963			if(serialcode || serialcode != "") title += "<span class='hollow button alert default-cursor'>"+serialname+"</span>";
2964
2965			var html='';
2966			html += "<div class='button-group small "+tp+"-section-entity'>"; 
2967			html += "	<input type='hidden' name='"+tp+"_section_data[]' class='"+tp+"_section_data input_setion_data' value='"+addSecCode+"'>";
2968		//	html += "	<input type='hidden' class='"+tp+"-chk-sec' value='"+addSecCode+"'>";
2969			html += title;
2970			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>";
2971			html += "</div>";
2972							
2973			$('#'+tp+'-section').append(html);  
2974
2975			//.attr("data-code",category)
2976			
2977		});
2978	}
2979
2980	//전송
2981	,multiSectionSumbit:function(form)
2982	{
2983	
2984	   if(!form.description.value)
2985	   {
2986		   alert("리스트명을 입력해주세요.");
2987		   description.focus();
2988		   return false;
2989	   }
2990
2991	   if($('.add-section-entity').length == 0) {
2992			alert("연결 섹션을 선택해주세요.");
2993			return false;
2994	   }
2995
2996		if(confirm("선택한 섹션을 하나의 리스트로 구성합니다. \n정말로 실행하시겠습니까?")) return true;
2997		else return false;
2998
2999	}
3000	
3001}
3002
3003/* ****************************************** */
3004/* /script/app.js	(파운데이션 실행파일			  */
3005/* ****************************************** */
3006
3007$(function(){ 
3008	$(document).foundation();    
3009});
3010
3011/*****************************************************************************
3012*기사 카운트 
3013*****************************************************************************/
3014var _statistics={
3015	articleCookieCount:function(article_idxno){
3016		if(!article_idxno) return false;
3017		
3018		var cookieRestore = false
3019			,articleIdxno = article_idxno
3020			,articleUniqView = _statistics.getCookie('___AUV')
3021			,dateTime = new Date();
3022
3023		var regexp = new RegExp("_"+articleIdxno+"\.(\\d{10})x","i");
3024		var dataArr = articleUniqView.match(regexp); 
3025
3026		if(dataArr !== null){
3027			var limitTime =  dateTime.setHours(dateTime.getHours() - 1);
3028			limitTime =  Math.floor(limitTime / 1000);
3029			if (limitTime > dataArr[1]){
3030				articleUniqView = articleUniqView.replace(dataArr[0], '');
3031				cookieRestore = true;
3032			}
3033		} else cookieRestore = true;
3034
3035		if(cookieRestore === true) {  
3036			var newData = '_'+articleIdxno+'.'+ Math.floor(new Date().getTime() / 1000) +'x';
3037			$.ajax({
3038				url:'/news/makeArticleUniqSave.ajax.php',
3039				type:'POST',
3040				dataType:'json',
3041				cahse: false,
3042				data: {article_idxno:articleIdxno},
3043				success:function(rst,data){
3044					if(rst.result == "success"){
3045						var tmpTotalSize = 8 + articleUniqView.length + newData.length; 
3046						if (tmpTotalSize >= 2048) articleUniqView = articleUniqView.substr(0, (articleUniqView.length - newData.length));
3047						articleUniqView = newData + articleUniqView;
3048
3049						var domain = '.'+ countDomain.replace(/^http(s)?:\/\//i,'').replace(/^(www|m)\./i,'');
3050						_statistics.setCookie("___AUV", articleUniqView.trim(), 30, domain);
3051					}
3052				},
3053				error: function(error, request) {
3054					console.log("error:"+error+"\n"+"request:"+request);
3055				}
3056			});
3057		}
3058	}
3059	,getCookie:function(name)
3060	{	
3061		name+="=";
3062		var ca = document.cookie.split(';');
3063		for(var i=0; i<ca.length; i++) {
3064			var c = ca[i];
3065			while (c.charAt(0)==' ') c = c.substring(1);
3066			if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
3067		}
3068		return "";
3069	}
3070	,setCookie:function(name, value, days, domain)
3071	{
3072		var expires = "";
3073		if(days){
3074			var date = new Date();
3075			date.setTime(date.getTime()+(days*24*60*60*1000));
3076			expires = "; expires="+date.toGMTString();
3077		}
3078		if(!domain) domain = countDomain.replace(/^http(s)?:\/\//i,'').replace(/^(www|m)\./i,'');
3079		document.cookie = name+"="+value+expires+"; path=/; " + (domain?"domain="+domain+";":"");
3080	}
3081}
3082
3083// 세션갱신
3084var sReq;
3085function processAutoSessReload()
3086{
3087    if (sReq.readyState == 4) {
3088        // only if "OK"
3089        if (sReq.status == 200) {
3090            // moveItem();
3091        } else {
3092              alert("작업중 오류가 발생 했습니다.\n다시 시도해 주세요.");
3093            //alert("작업중 오류가 발생 했습니다.\n다시 시도해 주세요." + REQ.statusText);
3094        }
3095    }
3096}
3097
3098function autoSessReload()
3099{
3100    try {
3101        sReq = new XMLHttpRequest;
3102    } catch(e) {}
3103
3104    if(!sReq)
3105        try {
3106            sReq = new ActiveXObject("Msxml2.XMLHTTP");
3107        } catch(e) {}
3108
3109    if(!sReq)
3110           try {
3111              sReq = new ActiveXObject("Microsoft.XMLHTTP");
3112        } catch(e) {}
3113
3114    if(!sReq) alert("호환되지 않는 브라우저 입니다.\n");
3115
3116      var handlerFunction = processAutoSessReload;
3117    sReq.onreadystatechange = handlerFunction;
3118
3119    sReq.open("POST", "/member/sessionReload.php", true);
3120      sReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
3121    sReq.send();
3122}

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.