﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>CodeIgniter 한국사용자포럼 - TIP게시판</title><link>http://ww.w.codeigniter-kr.org/bbs/lists/tip</link><language>ko</language><generator>TapBBS</generator><copyright>http://ww.w.codeigniter-kr.org/</copyright>                <item>
                    <title>javascript - snow fall</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=28595</link>
                    <description>첨부파일을 삭제한다는 것이 글을 삭제 했네요;&lt;br /&gt;
&lt;br /&gt;
눈송이를 랜덤하게 뿌려주는 변수들을 조금 수정했습니다&lt;br /&gt;
&lt;br /&gt;
글내용중에 background-image url 에 a태그가 붙는 현상이 있습니다.&lt;br /&gt;
&lt;br /&gt;
글을 올리게 되면 코드의 최적화를 단시간내에 끝낼수 있습니다.&lt;br /&gt;
&lt;br /&gt;
이젠 큰 수정은 필요 없어 보이는데 나머지는 여러분의 몫입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;ko&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;눈 내리는 애니메이션&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;style&amp;gt;&lt;br /&gt;
		body {&lt;br /&gt;
			background-image: url(https://images.unsplash.com/photo-1491002052546-bf38f186af56?ixlib=rb-4.0.3&amp;amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=2200&amp;amp;q=80);&lt;br /&gt;
			background-size: cover;&lt;br /&gt;
		}&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;snowflakes.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		//https://codepen.io/tmrDevelops/pen/PPgjwz&lt;br /&gt;
		//https://stickode.tistory.com/413&lt;br /&gt;
		//https://forum.squarespace.com/topic/174119-falling-snowflakes-on-webpage#comment-416466_wrap&lt;br /&gt;
		//https://chatgpt.com/&lt;br /&gt;
&lt;br /&gt;
		// Flag to reset the position of the snowflakes&lt;br /&gt;
		var resetPosition = false;&lt;br /&gt;
&lt;br /&gt;
		var reduceMotionQuery = matchMedia(&amp;quot;(prefers-reduced-motion)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		// Handle accessibility&lt;br /&gt;
		var enableAnimations = false;&lt;br /&gt;
&lt;br /&gt;
		// Handle animation accessibility preferences &lt;br /&gt;
		function setAccessibilityState() {&lt;br /&gt;
			if (reduceMotionQuery.matches) {&lt;br /&gt;
				enableAnimations = false;&lt;br /&gt;
			} else { &lt;br /&gt;
				enableAnimations = true;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		setAccessibilityState();&lt;br /&gt;
&lt;br /&gt;
		reduceMotionQuery.addListener(setAccessibilityState);&lt;br /&gt;
&lt;br /&gt;
		//&lt;br /&gt;
		// Trigger a reset of all the snowflakes&amp;#39; positions&lt;br /&gt;
		//&lt;br /&gt;
		function sf_setResetFlag(e) {&lt;br /&gt;
			resetPosition = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//&lt;br /&gt;
		// It all starts here...&lt;br /&gt;
		//&lt;br /&gt;
		function snowflake_setup() {&lt;br /&gt;
			if (enableAnimations) {&lt;br /&gt;
				window.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;, generateSnowflakes, false);&lt;br /&gt;
				window.addEventListener(&amp;quot;resize&amp;quot;, sf_setResetFlag, false);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		snowflake_setup();&lt;br /&gt;
&lt;br /&gt;
		//&lt;br /&gt;
		// The function responsible for creating the snowflake&lt;br /&gt;
		//&lt;br /&gt;
		function generateSnowflakes() {&lt;br /&gt;
			// create our snowflake element&amp;#39;s parent container&lt;br /&gt;
			var snowflakeDIV = document.getElementById(&amp;quot;snowflakeDIV_id&amp;quot;);&lt;br /&gt;
			if (!snowflakeDIV) {&lt;br /&gt;
				snowflakeDIV = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
				snowflakeDIV.id = &amp;quot;snowflakeDIV_id&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.left = &amp;quot;0px&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.bottom = &amp;quot;0px&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.width = &amp;quot;100vw&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.height = &amp;quot;100vh&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.overflow = &amp;quot;hidden&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.zindex = &amp;quot;9999999&amp;quot;;&lt;br /&gt;
				snowflakeDIV.style.pointerEvents = &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
				document.body.appendChild(snowflakeDIV);&lt;br /&gt;
&lt;br /&gt;
				makeSnowflakes(snowflakeDIV);&lt;br /&gt;
			}	&lt;br /&gt;
		}	&lt;br /&gt;
&lt;br /&gt;
		//&lt;br /&gt;
		// The function responsible for creating the snowflake&lt;br /&gt;
		//&lt;br /&gt;
		function makeSnowflakes(snowflakeDIV) {&lt;br /&gt;
			// Global variables to store our browser&amp;#39;s window size&lt;br /&gt;
			var snowflake_cw = document.documentElement.clientWidth;&lt;br /&gt;
			var snowflake_ch = document.documentElement.clientHeight;&lt;br /&gt;
&lt;br /&gt;
			var	randMinMax = function(min,max) {&lt;br /&gt;
				return min + Math.floor(Math.random() * ((max - min) + 1));&lt;br /&gt;
			};&lt;br /&gt;
			var	snowflakeColor = function() { &lt;br /&gt;
				var items = [&amp;quot;#dcf2fd&amp;quot;, &amp;quot;#60b4f2&amp;quot;, &amp;quot;#dbf2fd&amp;quot;, &amp;quot;#d8f8ff&amp;quot;, &amp;quot;#b8ddfa&amp;quot;];&lt;br /&gt;
				var item = items[Math.floor(Math.random()*items.length)];&lt;br /&gt;
				return item;&lt;br /&gt;
			};&lt;br /&gt;
			var	snowflakeColorRand = function() { &lt;br /&gt;
				var letters = &amp;#39;0123456789ABCDEF&amp;#39;;&lt;br /&gt;
				var color = &amp;#39;#&amp;#39;;&lt;br /&gt;
				for (var i = 0; i &amp;lt; 6; i++) {&lt;br /&gt;
					color += letters[Math.floor(Math.random() * 16)];&lt;br /&gt;
				}&lt;br /&gt;
				return color;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			// Array to store our Snowflake objects&lt;br /&gt;
			var snowflakes = [];&lt;br /&gt;
&lt;br /&gt;
			// Specify the number of snowflakes you want visible&lt;br /&gt;
			var snowflakes_num = 50;&lt;br /&gt;
&lt;br /&gt;
			var fmid = 100;&lt;br /&gt;
			var fend = 200;&lt;br /&gt;
			var spn = 100; &lt;br /&gt;
			var spd = 25; // 눈송이 떨어지는 속도 최소, 최대&lt;br /&gt;
			var spv = 70; &lt;br /&gt;
			var szn = 100; &lt;br /&gt;
			var szd = 30;  // 눈송이 크기 최소, 최대&lt;br /&gt;
			var szv = 52; &lt;br /&gt;
			var spmin = 1;&lt;br /&gt;
			var sp = 0.25; // 눈송이 떨어지는 속도조절&lt;br /&gt;
			var xpv = 0.17; // 눈송이 좌우이동 값 조절&lt;br /&gt;
			var opacity = 0.65;&lt;br /&gt;
&lt;br /&gt;
            var viewfpscount = false;&lt;br /&gt;
			var viewconsolelog = false;&lt;br /&gt;
			var viewcount = 0;&lt;br /&gt;
			var viewmax = 0;&lt;br /&gt;
&lt;br /&gt;
			//&lt;br /&gt;
			// Constructor for our Snowflake object&lt;br /&gt;
			//&lt;br /&gt;
			function Snowflake() {&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			Snowflake.prototype.animate = function (fpsCount) {&lt;br /&gt;
				var snow = this;&lt;br /&gt;
			&lt;br /&gt;
				var xp = Math.random() * snow.sz * xpv; // 눈송이가 좌우로 이동하는 값&lt;br /&gt;
				if (snow.sp &amp;gt; 3) {&lt;br /&gt;
					xp = xp * randMinMax(3, 5); // 눈송이가 떨어지는 속도가 빠르면 랜덤하게 좌우 이동값을 크게한다&lt;br /&gt;
				}	&lt;br /&gt;
				else if (snow.sp &amp;gt; 2) {&lt;br /&gt;
					xp = xp * randMinMax(1, 3);&lt;br /&gt;
				}	&lt;br /&gt;
				if (snow.sp &amp;gt; 2.5) { // 속도가 빠르면 규칙적인 이동에 변화를 준다&lt;br /&gt;
					if (Math.random() &amp;gt; snow.direction) {&lt;br /&gt;
						xp = xp * -1;&lt;br /&gt;
					}	&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				snow.frame += 1; &lt;br /&gt;
				xp = snow.frame &amp;gt; snow.fmid ? xp * -1 : xp; // 특정 프레임마다 눈송이가 좌우로 이동하는 방향을 바꿈&lt;br /&gt;
				snow.x += xp;&lt;br /&gt;
				snow.y += snow.sp; &lt;br /&gt;
				snow.frame = snow.frame &amp;gt;= snow.fend ? snow.frame = 0 : snow.frame; &lt;br /&gt;
&lt;br /&gt;
				if (snow.y &amp;gt; snowflake_ch) { // 눈송이가 화면 하단을 벗어나면&lt;br /&gt;
&lt;br /&gt;
					if (viewconsolelog) {&lt;br /&gt;
						if (viewmax == 0 || (viewmax &amp;gt; 0 &amp;amp;&amp;amp; viewcount &amp;lt; viewmax))  {&lt;br /&gt;
							viewcount++;&lt;br /&gt;
							console.log();	&lt;br /&gt;
						}	&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					snow.y = 0; &lt;br /&gt;
					snow.x = Math.random() * snowflake_cw; &lt;br /&gt;
					snow.frame = randMinMax(1, fend);&lt;br /&gt;
					snow.fmid = randMinMax(1, fmid);&lt;br /&gt;
					snow.fend = randMinMax(snow.fmid, fend);&lt;br /&gt;
&lt;br /&gt;
					snow.direction = Math.random();&lt;br /&gt;
					&lt;br /&gt;
   					snow.sz = szn / (szd + (szv * Math.random()));&lt;br /&gt;
					snow.scale = snow.sz / (szn / (szd + szv)); // 눈송이 크기&lt;br /&gt;
					var spz = spn / (spd + (spv * Math.random())); &lt;br /&gt;
					snow.sp = Math.max(spmin, (Math.pow(spz, 2) * sp)); // 눈송이 떨어지는 속도 (눈송이 크기와 비례하지 않음)&lt;br /&gt;
&lt;br /&gt;
					if (snow.sp &amp;gt; 3) { // 눈송이가 떨어지는 속도가 빠르면 좌우 이동값을 느리게 바꾼다 &lt;br /&gt;
						snow.fmid = snow.fmid * 2;&lt;br /&gt;
						snow.fend = snow.fend * 2;&lt;br /&gt;
					}	&lt;br /&gt;
					else if (snow.sp &amp;gt; 2) {&lt;br /&gt;
						snow.fmid = snow.fmid * 1.5;&lt;br /&gt;
						snow.fend = snow.fend * 1.5;&lt;br /&gt;
					}	&lt;br /&gt;
&lt;br /&gt;
					snow.flake.style.backgroundColor = snowflakeColorRand();&lt;br /&gt;
					snow.flake.style.opacity = (opacity + Math.random()) / 3; //0.22 ~ 0.55&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				// 실제 눈송이 위치 이동&lt;br /&gt;
				snow.flake.style.transform = &amp;quot;translate(&amp;quot; + snow.x + &amp;quot;px, &amp;quot; + snow.y + &amp;quot;px) scale(&amp;quot; + snow.scale + &amp;quot;)&amp;quot;;&lt;br /&gt;
			}	&lt;br /&gt;
&lt;br /&gt;
			// create snowflake and add it to snowflakeContainer&lt;br /&gt;
			var sf = document.createElement(&amp;#39;div&amp;#39;);&lt;br /&gt;
			sf.className = &amp;quot;snowflake&amp;quot;;&lt;br /&gt;
			sf.style.position = &amp;quot;absolute&amp;quot;;&lt;br /&gt;
			sf.style.width = &amp;quot;7px&amp;quot;;&lt;br /&gt;
			sf.style.height = &amp;quot;7px&amp;quot;;&lt;br /&gt;
			sf.style.borderRadius = &amp;quot;50%&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var spz;&lt;br /&gt;
			// create each individual snowflake&lt;br /&gt;
			for (var i = 0; i &amp;lt; snowflakes_num; i++) {&lt;br /&gt;
&lt;br /&gt;
				// create our Snowflake object&lt;br /&gt;
				var snow = new Snowflake();&lt;br /&gt;
&lt;br /&gt;
				// set initial snowflake properties&lt;br /&gt;
				snow.y = Math.random() * snowflake_ch; &lt;br /&gt;
				snow.x = Math.random() * snowflake_cw; &lt;br /&gt;
				snow.frame = randMinMax(1, fend);&lt;br /&gt;
				snow.fmid = randMinMax(1, fmid);&lt;br /&gt;
				snow.fend = randMinMax(snow.fmid, fend);&lt;br /&gt;
&lt;br /&gt;
				snow.direction = Math.random();&lt;br /&gt;
&lt;br /&gt;
  				snow.sz = szn / (szd + (szv * Math.random()));&lt;br /&gt;
				snow.scale = snow.sz / (szn / (szd + szv));&lt;br /&gt;
				spz = spn / (spd + (spv * Math.random()));&lt;br /&gt;
				snow.sp = Math.max(spmin, (Math.pow(spz, 2) * sp));&lt;br /&gt;
&lt;br /&gt;
				if (snow.sp &amp;gt; 3) { // 눈송이가 떨어지는 속도가 빠르면 좌우 이동값을 느리게 바꾼다 &lt;br /&gt;
					snow.fmid = snow.fmid * 2;&lt;br /&gt;
					snow.fend = snow.fend * 2;&lt;br /&gt;
				}	&lt;br /&gt;
				else if (snow.sp &amp;gt; 2) {&lt;br /&gt;
					snow.fmid = snow.fmid * 1.5;&lt;br /&gt;
					snow.fend = snow.fend * 1.5;&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				// clone our original snowflake and add it to snowflakeContainer&lt;br /&gt;
				snow.flake = sf.cloneNode(true);&lt;br /&gt;
&lt;br /&gt;
				snow.flake.id = &amp;quot;snowflake&amp;quot;+i;&lt;br /&gt;
				snow.flake.style.backgroundColor = snowflakeColorRand();&lt;br /&gt;
				snow.flake.style.opacity = (opacity + Math.random()) / 3; //0.22 ~ 0.55&lt;br /&gt;
&lt;br /&gt;
				if ((i % 3) == 0) {&lt;br /&gt;
					snow.flake.style.filter = &amp;quot;drop-shadow(0 0 &amp;quot;+snow.scale+&amp;quot;px blue)&amp;quot;;&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				snowflakes.push(snow);&lt;br /&gt;
&lt;br /&gt;
				snowflakeDIV.appendChild(snow.flake);&lt;br /&gt;
			}&lt;br /&gt;
			sf.remove();&lt;br /&gt;
&lt;br /&gt;
			// 초기화&lt;br /&gt;
			var fpsCount = 0;&lt;br /&gt;
			var lastCheck = performance.now();&lt;br /&gt;
&lt;br /&gt;
			var lowfpsCount = 0;&lt;br /&gt;
			var decsnowflake = false;&lt;br /&gt;
			//&lt;br /&gt;
			// Responsible for moving each snowflake by calling its update function&lt;br /&gt;
			//&lt;br /&gt;
			function snowflakes_frame_animate() {&lt;br /&gt;
				const now = performance.now();&lt;br /&gt;
&lt;br /&gt;
				fpsCount++;&lt;br /&gt;
				if (now - lastCheck &amp;gt;= 1000) {&lt;br /&gt;
					if (fpsCount &amp;lt; 60) {&lt;br /&gt;
						lowfpsCount++;&lt;br /&gt;
						if (lowfpsCount &amp;gt;= 3) {&lt;br /&gt;
							lowfpsCount = 0;&lt;br /&gt;
							decsnowflake = true;&lt;br /&gt;
						}	&lt;br /&gt;
					}	&lt;br /&gt;
					else {&lt;br /&gt;
						lowfpsCount = 0;&lt;br /&gt;
					}	&lt;br /&gt;
&lt;br /&gt;
					if (viewfpscount) console.log(&amp;quot;fpsCount: &amp;quot; + fpsCount);&lt;br /&gt;
&lt;br /&gt;
					fpsCount = 0;&lt;br /&gt;
					lastCheck = now;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				for (let i = 0; i &amp;lt; snowflakes.length; i++) {&lt;br /&gt;
					const snow = snowflakes[i];&lt;br /&gt;
					if (snow) snow.animate(fpsCount); // 눈송이를 움직인다&lt;br /&gt;
&lt;br /&gt;
						if (decsnowflake &amp;amp;&amp;amp; snow.y == 0) { // 눈송이가 화면 하단을 벗어난 거&lt;br /&gt;
							snowflakes.splice(i, 1); // 배열 삭제&lt;br /&gt;
							snow.flake.remove(); // 눈송이 제거&lt;br /&gt;
				&lt;br /&gt;
							decsnowflake = false;&lt;br /&gt;
&lt;br /&gt;
							if (viewconsolelog) console.log(snow.flake.id+&amp;quot; 삭제 남은 갯수 : &amp;quot; + snowflakes.length);&lt;br /&gt;
						}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// Reset the position of all the snowflakes to a new value&lt;br /&gt;
				if (resetPosition) {&lt;br /&gt;
					resetPosition = false;&lt;br /&gt;
&lt;br /&gt;
					snowflake_cw = document.documentElement.clientWidth;&lt;br /&gt;
					snowflake_ch = document.documentElement.clientHeight;&lt;br /&gt;
&lt;br /&gt;
					var spz;&lt;br /&gt;
					for (let i = 0; i &amp;lt; snowflakes.length; i++) {&lt;br /&gt;
						let snow = snowflakes[i];&lt;br /&gt;
&lt;br /&gt;
						// set initial snowflake properties&lt;br /&gt;
						snow.y = Math.random() * snowflake_ch; &lt;br /&gt;
						snow.x = Math.random() * snowflake_cw; &lt;br /&gt;
						snow.frame = randMinMax(1, fend);&lt;br /&gt;
						snow.fmid = randMinMax(1, fmid);&lt;br /&gt;
						snow.fend = randMinMax(snow.fmid, fend);&lt;br /&gt;
&lt;br /&gt;
						snow.direction = Math.random();&lt;br /&gt;
&lt;br /&gt;
						snow.sz = szn / (szd + (szv * Math.random()));&lt;br /&gt;
						snow.scale = snow.sz / (szn / (szd + szv));&lt;br /&gt;
						spz = spn / (spd + (spv * Math.random()));&lt;br /&gt;
						snow.sp = Math.max(spmin, (Math.pow(spz, 2) * sp));&lt;br /&gt;
&lt;br /&gt;
						if (snow.sp &amp;gt; 3) { // 눈송이가 떨어지는 속도가 빠르면 좌우 이동값을 느리게 바꾼다 &lt;br /&gt;
							snow.fmid = snow.fmid * 2;&lt;br /&gt;
							snow.fend = snow.fend * 2;&lt;br /&gt;
						}	&lt;br /&gt;
						else if (snow.sp &amp;gt; 2) {&lt;br /&gt;
							snow.fmid = snow.fmid * 1.5;&lt;br /&gt;
							snow.fend = snow.fend * 1.5;&lt;br /&gt;
						}	&lt;br /&gt;
&lt;br /&gt;
						snow.flake.style.backgroundColor = snowflakeColorRand();&lt;br /&gt;
						snow.flake.style.opacity = (opacity + Math.random()) / 3; //0.22 ~ 0.55&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				requestAnimationFrame(snowflakes_frame_animate);&lt;br /&gt;
			}&lt;br /&gt;
			snowflakes_frame_animate();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Fri, 13 Jun 2025 14:30:14 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>ajaxcall function (beforeSend) + loading spinner 수정됨</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=26898</link>
                    <description>https://stackoverflow.com/questions/66737093/wrap-dynamic-text-around-a-spinning-cylinder-with-css-javascript-splitting-js&lt;br /&gt;
&lt;br /&gt;
https://github.com/nadimshah008/circulartextrotatingjavascript&lt;br /&gt;
&lt;br /&gt;
https://www.loadergallery.com/&lt;br /&gt;
&lt;br /&gt;
https://css-loaders.com/&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
param.headers 가 추가 되었고&lt;br /&gt;
&lt;br /&gt;
param.beforeSend 가 위치 이동 되었습니다&lt;br /&gt;
&lt;br /&gt;
수정된&amp;nbsp;spinner-2024-07-19.zip 파일을 다운 받으세요.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
개인적으로 로딩gif 이미지가 기어두개 돌아가는게 마음에 드는데&lt;br /&gt;
&lt;br /&gt;
저작권 문제가 불확실해서&lt;br /&gt;
&lt;br /&gt;
찾아보니 이런게 있더군요.&lt;br /&gt;
&lt;br /&gt;
클래스 비슷한 형태는 복잡해서 함수형태로 만들었습니다.&lt;br /&gt;
&lt;br /&gt;
css 만으로도 가능하지만 여러개를 동시에 사용할때는 css 를 여러개 만들어야 합니다.&lt;br /&gt;
&lt;br /&gt;
개인적으로 사용하는데는 큰 불편함이 없는데&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
남이 만든거는 100% 마음에 들기 힘듭니다.&lt;br /&gt;
&lt;br /&gt;
각자 취향대로 수정해서 사용하시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.spinner-body {&lt;br /&gt;
	color: official;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	height: 60px;&lt;br /&gt;
	width: 60px;&lt;br /&gt;
	background-color:#ddd;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	function spinner(spinner_body_id, spinner_cnt=0, spinner_duration=1200) {			&lt;br /&gt;
		var spinner_body = document.getElementById(spinner_body_id);&lt;br /&gt;
&lt;br /&gt;
		var spinner_cnt = spinner_cnt ? spinner_cnt : (spinner_duration / 100) * 2;&lt;br /&gt;
&lt;br /&gt;
		var delay_step = spinner_duration / spinner_cnt;&lt;br /&gt;
		var delay = 0 - (delay_step * spinner_cnt);&lt;br /&gt;
		var deg = 360 / spinner_cnt;&lt;br /&gt;
&lt;br /&gt;
		for ( var i = 0; i &amp;lt; spinner_cnt; i++ ) {&lt;br /&gt;
			var spinnerdiv = document.createElement(&amp;#39;div&amp;#39;);&lt;br /&gt;
			spinnerdiv.style.transform = &amp;quot;rotate(&amp;quot; + i*deg + &amp;quot;deg)&amp;quot;;&lt;br /&gt;
			spinnerdiv.style.transformOrigin  = &amp;quot;30px 30px&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			var span = document.createElement(&amp;#39;span&amp;#39;);&lt;br /&gt;
			span.innerHTML = &amp;quot; &amp;quot;;&lt;br /&gt;
			span.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			span.style.position = &amp;quot;absolute&amp;quot;;&lt;br /&gt;
			span.style.top = &amp;quot;1px&amp;quot;;&lt;br /&gt;
			span.style.left = &amp;quot;29px&amp;quot;;&lt;br /&gt;
			span.style.width = &amp;quot;3px&amp;quot;;&lt;br /&gt;
			span.style.height = &amp;quot;12px&amp;quot;;&lt;br /&gt;
			span.style.borderRadius = &amp;quot;20%&amp;quot;;&lt;br /&gt;
			span.style.background = &amp;quot;#1043A0&amp;quot;;&lt;br /&gt;
			spinnerdiv.appendChild(span);&lt;br /&gt;
&lt;br /&gt;
			var keyframes = [&lt;br /&gt;
				{opacity: 1},&lt;br /&gt;
				{opacity: 0}&lt;br /&gt;
			];&lt;br /&gt;
			var options = {&lt;br /&gt;
				delay: delay,&lt;br /&gt;
				duration: spinner_duration,&lt;br /&gt;
				easing: &amp;quot;linear&amp;quot;,&lt;br /&gt;
				iterations: Infinity&lt;br /&gt;
			};&lt;br /&gt;
			spinnerdiv.animate(keyframes, options);&lt;br /&gt;
&lt;br /&gt;
			spinner_body.appendChild(spinnerdiv);&lt;br /&gt;
			delay += delay_step;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div id=&amp;quot;spinner-body&amp;quot; class=&amp;quot;spinner-body&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Tue, 28 May 2024 23:01:38 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>javascript footer bottom</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=26666</link>
                    <description>각 판넬은&amp;nbsp;data-namespace 와&amp;nbsp;data-panelid 로 구분되는 2차원 배열 개념입니다.&lt;br /&gt;
&lt;br /&gt;
중첩되는 판넬들은&amp;nbsp;data-position 을 공통으로 가집니다.&lt;br /&gt;
&lt;br /&gt;
판넬 높이를 구할때 닫히거나 열린 각 판넬들의 높이를 먼저 구하고&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
(중접된 판넬은 부모판넬높이 하나만 구합니다. 자식판넬들은 하위요소로 포함되어 있으니 부모높이에 포함됨)&lt;br /&gt;
&lt;br /&gt;
각 판넬이 열리거나 닫힐때&amp;nbsp;handy-panelcontent 의 높이가 전달되는데&lt;br /&gt;
&lt;br /&gt;
이것을 더하거나 빼면 실제 판넬높이가 됩니다.&lt;br /&gt;
&lt;br /&gt;
이렇게 구해진 실제높이를 화면높이와 비교하면&lt;br /&gt;
&lt;br /&gt;
top 과 bottom 사이의 view 높이를 구할수 있습니다.&lt;br /&gt;
&lt;br /&gt;
화면이 감춰지고 (로딩 부하는 그대로)&amp;nbsp;정보의 전달력이 떨어지니 실제 홈페이지에는 적용 안하는게 좋습니다;&lt;br /&gt;
&lt;br /&gt;
이걸 왜 했을까요?&lt;br /&gt;
&lt;br /&gt;
구글에서 javascript footer bottom 로 검색하시면 정보를 좀더 얻을수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;handy-panel sidebar nestedparent collapsed&amp;quot; data-namespace=&amp;quot;sidebarleft&amp;quot; data-position=&amp;quot;msg&amp;quot; data-panelid=&amp;quot;msg&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-sidebarleft-button=&amp;quot;msg&amp;quot;&amp;gt;msg&amp;lt;/button&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-sidebarleft-content=&amp;quot;msg&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;handy-content&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;handy-panel nested&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div id=&amp;quot;disp_ajax&amp;quot; name=&amp;quot;disp_ajax&amp;quot; class=&amp;quot;disp_ajax&amp;quot;&amp;gt;disp_ajax &amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div id=&amp;quot;disp_lunar&amp;quot; name=&amp;quot;disp_lunar&amp;quot; class=&amp;quot;disp_lunar&amp;quot;&amp;gt;disp_lunar &amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div id=&amp;quot;disp_msg&amp;quot; name=&amp;quot;disp_msg&amp;quot; class=&amp;quot;disp_msg&amp;quot;&amp;gt;disp_msg &amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
						&amp;lt;div class=&amp;quot;handy-panel sidebar nested nestedchild collapsed&amp;quot; data-namespace=&amp;quot;sidebarleft&amp;quot; data-position=&amp;quot;msg&amp;quot; data-panelid=&amp;quot;cssjs&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-sidebarleft-button=&amp;quot;cssjs&amp;quot;&amp;gt;cssjs&amp;lt;/button&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-sidebarleft-content=&amp;quot;cssjs&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;textarea id=&amp;quot;disp_cssjs&amp;quot; name=&amp;quot;disp_cssjs&amp;quot; rows=&amp;quot;20&amp;quot; style=&amp;quot;width: 96.5%&amp;quot; spellcheck=&amp;quot;false&amp;quot; placeholder=&amp;quot;disp_cssjs&amp;quot;&amp;gt;cssjs&amp;lt;/textarea&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
						&amp;lt;div class=&amp;quot;handy-panel sidebar nested nestedchild collapsed&amp;quot; data-namespace=&amp;quot;sidebarleft&amp;quot; data-position=&amp;quot;msg&amp;quot; data-panelid=&amp;quot;ztree&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-sidebarleft-button=&amp;quot;ztree&amp;quot;&amp;gt;ztree&amp;lt;/button&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-sidebarleft-content=&amp;quot;ztree&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;ul id=&amp;quot;ztree_category&amp;quot; class=&amp;quot;tree ztree_category&amp;quot;&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
								&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;loadjsondata&amp;quot;&amp;gt;load jsondata&amp;lt;/button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
								&amp;lt;div class=&amp;quot;handy-panel sidebar nested nestedchild expand&amp;quot; data-namespace=&amp;quot;sidebarleft&amp;quot; data-position=&amp;quot;msg&amp;quot; data-panelid=&amp;quot;jsonformatview&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-sidebarleft-button=&amp;quot;jsonformatview&amp;quot;&amp;gt;jsonformatview&amp;lt;/button&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-sidebarleft-content=&amp;quot;jsonformatview&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div id=&amp;quot;disp_json_data&amp;quot; name=&amp;quot;disp_json_data&amp;quot; class=&amp;quot;disp_json_data&amp;quot;&amp;gt;disp json data&amp;lt;/div&amp;gt;&lt;br /&gt;
										&amp;lt;div id=&amp;quot;disp_format_cookies&amp;quot; name=&amp;quot;disp_format_cookies&amp;quot; class=&amp;quot;disp_format_cookies&amp;quot;&amp;gt;disp format cookies&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			var ahandypanel_h = [];&lt;br /&gt;
			var panelsList = document.getElementsByClassName(&amp;quot;handy-panel&amp;quot;);&lt;br /&gt;
			for (var i=0; i&amp;lt;panelsList.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				var panel = panelsList[i];&lt;br /&gt;
				var panel_h = panel.offsetHeight;&lt;br /&gt;
				var data_namespace = panel.getAttribute(&amp;quot;data-namespace&amp;quot;);&lt;br /&gt;
				var data_position = panel.getAttribute(&amp;quot;data-position&amp;quot;);&lt;br /&gt;
				var data_panelid = panel.getAttribute(&amp;quot;data-panelid&amp;quot;);&lt;br /&gt;
				if ((data_namespace == null) || (data_namespace == &amp;quot;&amp;quot;)) {&lt;br /&gt;
					continue;&lt;br /&gt;
				}	&lt;br /&gt;
				if (!assincludes(ahandypanel_h, data_namespace)) {&lt;br /&gt;
					ahandypanel_h[data_namespace] = [];&lt;br /&gt;
				}	&lt;br /&gt;
				if (panel.classList.contains(&amp;quot;nestedparent&amp;quot;)) {&lt;br /&gt;
					ahandypanel_h[data_namespace][data_position] = panel_h;&lt;br /&gt;
				}	&lt;br /&gt;
				else if (panel.classList.contains(&amp;quot;nestedchild&amp;quot;)) {&lt;br /&gt;
				}	&lt;br /&gt;
				else {&lt;br /&gt;
					ahandypanel_h[data_namespace][data_panelid] = panel_h;&lt;br /&gt;
				}	&lt;br /&gt;
			}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Mon, 25 Mar 2024 17:54:19 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>PHP 8.2 CLI Xdebug 사용 방법</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25722</link>
                    <description>&lt;br /&gt;
	Windows Xampp 사용&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
set XDEBUG_MODE=debug&amp;amp; set XDEBUG_SESSION=1&lt;br /&gt;
C:\xampp\php\php.exe -dxdebug.mode=debug -dxdebug.client_host=127.0.0.1 -dxdebug.client_port=9003&lt;br /&gt;
-dxdebug.start_with_request=yes {PHP파일.php}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Linux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export XDEBUG_MODE=debug XDEBUG_SESSION=1&lt;br /&gt;
php -dxdebug.mode=debug -dxdebug.client_host=127.0.0.1 -dxdebug.client_port=9003&lt;br /&gt;
-dxdebug.start_with_request=yes {PHP파일.php}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
즐거운 코딩되세요.</description>
                    <pubDate>Wed, 19 Jul 2023 10:59:15 +0900</pubDate>
                    <dc:creator>한대승(불의회상)</dc:creator>
                </item>
                            <item>
                    <title>ajaxcall - How can I make an AJAX call without jQuery?</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25544</link>
                    <description>How can I make an AJAX call without jQuery?&lt;br /&gt;
&lt;br /&gt;
https://stackoverflow.com/questions/8567114/how-can-i-make-an-ajax-call-without-jquery&lt;br /&gt;
&lt;br /&gt;
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status&lt;br /&gt;
&lt;br /&gt;
https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/HTTP/Response.php&lt;br /&gt;
&lt;br /&gt;
실무에 바로 적용하기에는 모자람이 있습니다&lt;br /&gt;
&lt;br /&gt;
충분히 검토하고 보완해서 사용하세요!&lt;br /&gt;
&lt;br /&gt;
index.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!doctype html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge,chrome=1&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Ajaxcall&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;style type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;border: 1px solid #ddd; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
		ajax_formdata&lt;br /&gt;
		&amp;lt;div id=&amp;quot;ajax_formdata&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;border: 1px solid #ddd; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
		ajax_info&lt;br /&gt;
		&amp;lt;div id=&amp;quot;ajax_info&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;		&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;border: 1px solid #ddd; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
		ajax_result&lt;br /&gt;
		&amp;lt;div id=&amp;quot;ajax_result&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;ajax.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var ajax_formdata = document.getElementById(&amp;quot;ajax_formdata&amp;quot;);&lt;br /&gt;
		var ajax_info = document.getElementById(&amp;quot;ajax_info&amp;quot;);&lt;br /&gt;
		var ajax_result = document.getElementById(&amp;quot;ajax_result&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
        var formData = {&lt;br /&gt;
			id          : &amp;#39;_id&amp;#39;,&lt;br /&gt;
			subject     : &amp;#39;_subject&amp;#39;,&lt;br /&gt;
			contents    : &amp;#39;_contents&amp;#39;,&lt;br /&gt;
			time        : &amp;#39;_time&amp;#39;&lt;br /&gt;
        };&lt;br /&gt;
		&lt;br /&gt;
		ajax_formdata.innerText = &amp;quot;obj_param: &amp;quot;+obj_param(formData);&lt;br /&gt;
		//ajax_formdata.innerText = &amp;quot;obj_param: &amp;quot;+JSON.stringify(formData);&lt;br /&gt;
&lt;br /&gt;
		function loadtext() {&lt;br /&gt;
			Ajaxcall({&lt;br /&gt;
				url: &amp;quot;get.php&amp;quot;,&lt;br /&gt;
				type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
				data: formData,&lt;br /&gt;
				//contentType: &amp;quot;json&amp;quot;,&lt;br /&gt;
				async: true, //synchronous request. Default value is true &lt;br /&gt;
				timeout: 10000, //default timeout 20000&lt;br /&gt;
				beforeSend: function() {&lt;br /&gt;
					ajax_info.innerText = &amp;quot;loading...&amp;quot;;&lt;br /&gt;
				},&lt;br /&gt;
				dataType: &amp;#39;text&amp;#39;,&lt;br /&gt;
				success: function(result, status) {&lt;br /&gt;
					if (status == &amp;quot;success&amp;quot;) {&lt;br /&gt;
						if (result) {&lt;br /&gt;
							ajax_info.innerText = &amp;quot;success...&amp;quot;;&lt;br /&gt;
							ajax_result.innerText = result;&lt;br /&gt;
						}	&lt;br /&gt;
						else {&lt;br /&gt;
							ajax_info.innerText = &amp;quot;resule none...&amp;quot;;&lt;br /&gt;
							ajax_result.innerText = &amp;quot;&amp;quot;;&lt;br /&gt;
						}	&lt;br /&gt;
					}&lt;br /&gt;
					else {&lt;br /&gt;
						ajax_info.innerText = &amp;quot;timeout...&amp;quot;;&lt;br /&gt;
						ajax_result.innerText = &amp;quot;&amp;quot;;&lt;br /&gt;
					}	&lt;br /&gt;
				},&lt;br /&gt;
				error: function(status, statusText) {&lt;br /&gt;
					alert(&amp;quot;error code: &amp;quot; + status + &amp;quot;\n&amp;quot; + &amp;quot;error message: &amp;quot; + statusText);&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
		}	&lt;br /&gt;
		loadtext();&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$data = file_get_contents(&amp;quot;php://input&amp;quot;);&lt;br /&gt;
echo &amp;quot;file_get_contents(&amp;#39;php://input&amp;#39;)&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
echo $data.&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if (isset($_GET) &amp;amp;&amp;amp; count($_GET) &amp;gt; 0) {&lt;br /&gt;
	parse_str($data, $input); &lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;parse_str data to input&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	print_r($input);&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;_GET&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	print_r($_GET);&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;id =&amp;gt; &amp;quot;.$_GET[&amp;quot;id&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
else if (isset($_POST) &amp;amp;&amp;amp; count($_POST) &amp;gt; 0) {&lt;br /&gt;
	parse_str($data, $input); &lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;parse_str data to input&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	print_r($input);&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;_POST&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	print_r($_POST);&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;id =&amp;gt; &amp;quot;.$_POST[&amp;quot;id&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
	//contentType: &amp;quot;json&amp;quot;&lt;br /&gt;
	$param = json_decode($data, false);&lt;br /&gt;
	echo &amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;json&amp;quot;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;id =&amp;gt; &amp;quot;.$param-&amp;gt;id.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;subject =&amp;gt; &amp;quot;.$param-&amp;gt;subject.&amp;quot;\n&amp;quot;;&lt;br /&gt;
	echo &amp;quot;contents =&amp;gt; &amp;quot;.$param-&amp;gt;contents.&amp;quot;\n&amp;quot;;&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ajaxcall.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//https://stackoverflow.com/questions/8567114/how-can-i-make-an-ajax-call-without-jquery&lt;br /&gt;
//https://developer.mozilla.org/en-US/docs/Web/HTTP/Status&lt;br /&gt;
//https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/HTTP/Response.php&lt;br /&gt;
&lt;br /&gt;
var ajax_load_process = false;&lt;br /&gt;
&lt;br /&gt;
var xhr_statusCodes = {&lt;br /&gt;
    // 1xx: Informational&lt;br /&gt;
    100 : &amp;#39;Continue&amp;#39;,&lt;br /&gt;
    101 : &amp;#39;Switching Protocols&amp;#39;,&lt;br /&gt;
    102 : &amp;#39;Processing&amp;#39;, // http://www.iana.org/go/rfc2518&lt;br /&gt;
    103 : &amp;#39;Early Hints&amp;#39;, // http://www.ietf.org/rfc/rfc8297.txt&lt;br /&gt;
    // 2xx: Success&lt;br /&gt;
    200 : &amp;#39;OK&amp;#39;,&lt;br /&gt;
    201 : &amp;#39;Created&amp;#39;,&lt;br /&gt;
    202 : &amp;#39;Accepted&amp;#39;,&lt;br /&gt;
    203 : &amp;#39;Non-Authoritative Information&amp;#39;, // 1.1&lt;br /&gt;
    204 : &amp;#39;No Content&amp;#39;,&lt;br /&gt;
    205 : &amp;#39;Reset Content&amp;#39;,&lt;br /&gt;
    206 : &amp;#39;Partial Content&amp;#39;,&lt;br /&gt;
    207 : &amp;#39;Multi-Status&amp;#39;, // http://www.iana.org/go/rfc4918&lt;br /&gt;
    208 : &amp;#39;Already Reported&amp;#39;, // http://www.iana.org/go/rfc5842&lt;br /&gt;
    226 : &amp;#39;IM Used&amp;#39;, // 1.1; http://www.ietf.org/rfc/rfc3229.txt&lt;br /&gt;
    // 3xx: Redirection&lt;br /&gt;
    300 : &amp;#39;Multiple Choices&amp;#39;,&lt;br /&gt;
    301 : &amp;#39;Moved Permanently&amp;#39;,&lt;br /&gt;
    302 : &amp;#39;Found&amp;#39;, // Formerly &amp;#39;Moved Temporarily&amp;#39;&lt;br /&gt;
    303 : &amp;#39;See Other&amp;#39;, // 1.1&lt;br /&gt;
    304 : &amp;#39;Not Modified&amp;#39;,&lt;br /&gt;
    305 : &amp;#39;Use Proxy&amp;#39;, // 1.1&lt;br /&gt;
    306 : &amp;#39;Switch Proxy&amp;#39;, // No longer used&lt;br /&gt;
    307 : &amp;#39;Temporary Redirect&amp;#39;, // 1.1&lt;br /&gt;
    308 : &amp;#39;Permanent Redirect&amp;#39;, // 1.1; Experimental; http://www.ietf.org/rfc/rfc7238.txt&lt;br /&gt;
    // 4xx: Client error&lt;br /&gt;
    400 : &amp;#39;Bad Request&amp;#39;,&lt;br /&gt;
    401 : &amp;#39;Unauthorized&amp;#39;,&lt;br /&gt;
    402 : &amp;#39;Payment Required&amp;#39;,&lt;br /&gt;
    403 : &amp;#39;Forbidden&amp;#39;,&lt;br /&gt;
    404 : &amp;#39;Not Found&amp;#39;,&lt;br /&gt;
    405 : &amp;#39;Method Not Allowed&amp;#39;,&lt;br /&gt;
    406 : &amp;#39;Not Acceptable&amp;#39;,&lt;br /&gt;
    407 : &amp;#39;Proxy Authentication Required&amp;#39;,&lt;br /&gt;
    408 : &amp;#39;Request Timeout&amp;#39;,&lt;br /&gt;
    409 : &amp;#39;Conflict&amp;#39;,&lt;br /&gt;
    410 : &amp;#39;Gone&amp;#39;,&lt;br /&gt;
    411 : &amp;#39;Length Required&amp;#39;,&lt;br /&gt;
    412 : &amp;#39;Precondition Failed&amp;#39;,&lt;br /&gt;
    413 : &amp;#39;Content Too Large&amp;#39;, // https://www.iana.org/assignments/http-status-codes/http-status-codes.xml&lt;br /&gt;
    414 : &amp;#39;URI Too Long&amp;#39;, // https://www.iana.org/assignments/http-status-codes/http-status-codes.xml&lt;br /&gt;
    415 : &amp;#39;Unsupported Media Type&amp;#39;,&lt;br /&gt;
    416 : &amp;#39;Requested Range Not Satisfiable&amp;#39;,&lt;br /&gt;
    417 : &amp;#39;Expectation Failed&amp;#39;,&lt;br /&gt;
    418 : &amp;quot;I&amp;#39;m a teapot&amp;quot;, // April&amp;#39;s Fools joke; http://www.ietf.org/rfc/rfc2324.txt&lt;br /&gt;
    // 419 (Authentication Timeout) is a non-standard status code with unknown origin&lt;br /&gt;
    421 : &amp;#39;Misdirected Request&amp;#39;, // http://www.iana.org/go/rfc7540 Section 9.1.2&lt;br /&gt;
    422 : &amp;#39;Unprocessable Content&amp;#39;, // https://www.iana.org/assignments/http-status-codes/http-status-codes.xml&lt;br /&gt;
    423 : &amp;#39;Locked&amp;#39;, // http://www.iana.org/go/rfc4918&lt;br /&gt;
    424 : &amp;#39;Failed Dependency&amp;#39;, // http://www.iana.org/go/rfc4918&lt;br /&gt;
    425 : &amp;#39;Too Early&amp;#39;, // https://datatracker.ietf.org/doc/draft-ietf-httpbis-replay/&lt;br /&gt;
    426 : &amp;#39;Upgrade Required&amp;#39;,&lt;br /&gt;
    428 : &amp;#39;Precondition Required&amp;#39;, // 1.1; http://www.ietf.org/rfc/rfc6585.txt&lt;br /&gt;
    429 : &amp;#39;Too Many Requests&amp;#39;, // 1.1; http://www.ietf.org/rfc/rfc6585.txt&lt;br /&gt;
    431 : &amp;#39;Request Header Fields Too Large&amp;#39;, // 1.1; http://www.ietf.org/rfc/rfc6585.txt&lt;br /&gt;
    451 : &amp;#39;Unavailable For Legal Reasons&amp;#39;, // http://tools.ietf.org/html/rfc7725&lt;br /&gt;
    499 : &amp;#39;Client Closed Request&amp;#39;, // http://lxr.nginx.org/source/src/http/ngx_http_request.h#0133&lt;br /&gt;
    // 5xx: Server error&lt;br /&gt;
    500 : &amp;#39;Internal Server Error&amp;#39;,&lt;br /&gt;
    501 : &amp;#39;Not Implemented&amp;#39;,&lt;br /&gt;
    502 : &amp;#39;Bad Gateway&amp;#39;,&lt;br /&gt;
    503 : &amp;#39;Service Unavailable&amp;#39;,&lt;br /&gt;
    504 : &amp;#39;Gateway Timeout&amp;#39;,&lt;br /&gt;
    505 : &amp;#39;HTTP Version Not Supported&amp;#39;,&lt;br /&gt;
    506 : &amp;#39;Variant Also Negotiates&amp;#39;, // 1.1; http://www.ietf.org/rfc/rfc2295.txt&lt;br /&gt;
    507 : &amp;#39;Insufficient Storage&amp;#39;, // http://www.iana.org/go/rfc4918&lt;br /&gt;
    508 : &amp;#39;Loop Detected&amp;#39;, // http://www.iana.org/go/rfc5842&lt;br /&gt;
    510 : &amp;#39;Not Extended&amp;#39;, // http://www.ietf.org/rfc/rfc2774.txt&lt;br /&gt;
    511 : &amp;#39;Network Authentication Required&amp;#39;, // http://www.ietf.org/rfc/rfc6585.txt&lt;br /&gt;
    599 : &amp;#39;Network Connect Timeout Error&amp;#39; // https://httpstatuses.com/599&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function obj_param(obj) {&lt;br /&gt;
	var parts = [];&lt;br /&gt;
	for (var key in obj) {&lt;br /&gt;
		if (obj.hasOwnProperty(key)) {&lt;br /&gt;
			parts.push(encodeURIComponent(key) + &amp;#39;=&amp;#39; + encodeURIComponent(obj[key]));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return parts.join(&amp;#39;&amp;amp;&amp;#39;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//create an XMLHttpRequest object&lt;br /&gt;
function GetXMLHttpRequest() {   &lt;br /&gt;
	var xhr = false;&lt;br /&gt;
    if (typeof XMLHttpRequest !== &amp;#39;undefined&amp;#39;) {&lt;br /&gt;
		xhr = new XMLHttpRequest();&lt;br /&gt;
		if (xhr.overrideMimeType) {&lt;br /&gt;
			xhr.overrideMimeType(&amp;#39;text/xml&amp;#39;);&lt;br /&gt;
		}&lt;br /&gt;
	} &lt;br /&gt;
	else if (window.ActiveXObject) {&lt;br /&gt;
		//var versions = [ &amp;quot;MSXML2.XmlHttp.6.0&amp;quot;, &amp;quot;MSXML2.XmlHttp.5.0&amp;quot;, &amp;quot;MSXML2.XmlHttp.4.0&amp;quot;, &amp;quot;MSXML2.XmlHttp.3.0&amp;quot;, &amp;quot;MSXML2.XmlHttp.2.0&amp;quot;, &amp;quot;Microsoft.XmlHttp&amp;quot; ];&lt;br /&gt;
		//for (var i = 0; i &amp;lt; versions.length; i++) {&lt;br /&gt;
		//	try { xhr = new ActiveXObject(versions[i]); break; } catch (e) {}&lt;br /&gt;
		//}&lt;br /&gt;
		try { xhr = new ActiveXObject(&amp;quot;Msxml2.XMLHTTP&amp;quot;); } catch(e) {&lt;br /&gt;
			try { xhr = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);	} catch(e) {}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if (!xhr) { return 0; }&lt;br /&gt;
	return xhr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Ajaxcall(param, response) &lt;br /&gt;
{&lt;br /&gt;
	if (ajax_load_process == true) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if (param.async == undefined) {&lt;br /&gt;
		param.async = true;&lt;br /&gt;
	}&lt;br /&gt;
	if (param.async == false) {&lt;br /&gt;
		ajax_load_process = true;&lt;br /&gt;
	}&lt;br /&gt;
	if (param.beforeSend != undefined) {&lt;br /&gt;
		param.beforeSend();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var xhr = GetXMLHttpRequest();&lt;br /&gt;
	if (!xhr) { return 0; }&lt;br /&gt;
&lt;br /&gt;
	if (param.timeout != undefined) {&lt;br /&gt;
		xhr.timeout = param.timeout;&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		xhr.timeout = 20000;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (param.type != &amp;quot;GET&amp;quot;) {&lt;br /&gt;
		xhr.open(param.type, param.url, param.async);&lt;br /&gt;
&lt;br /&gt;
		if (param.processData != undefined &amp;amp;&amp;amp; param.processData == false &amp;amp;&amp;amp; param.contentType != undefined &amp;amp;&amp;amp; param.contentType == false) {&lt;br /&gt;
		}&lt;br /&gt;
		else if (param.contentType != undefined &amp;amp;&amp;amp; param.contentType == &amp;quot;json&amp;quot;) {&lt;br /&gt;
			xhr.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/json; charset=utf-8&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		else if (param.contentType != undefined || param.contentType == true) {&lt;br /&gt;
			xhr.setRequestHeader(&amp;#39;Content-type&amp;#39;, param.contentType);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			xhr.setRequestHeader(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);			&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		if (param.data) {&lt;br /&gt;
			xhr.open(param.type, param.url + &amp;quot;?&amp;quot; + obj_param(param.data), param.async);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			xhr.open(param.type, param.url, param.async);&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	xhr.onprogress = function(loadTime) {&lt;br /&gt;
		if (param.progress != undefined) {&lt;br /&gt;
			param.progress({ loaded: loadTime.loaded }, &amp;quot;success&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	xhr.ontimeout = function () {&lt;br /&gt;
		this.abort(response);&lt;br /&gt;
		param.success(&amp;quot;timeout&amp;quot;, &amp;quot;timeout&amp;quot;);&lt;br /&gt;
		ajax_load_process = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	xhr.onerror = function() {&lt;br /&gt;
		if (param.error != undefined) {&lt;br /&gt;
			param.error(xhr, xhr_statusCodes[xhr.status], xhr.statusText);&lt;br /&gt;
		}	&lt;br /&gt;
		ajax_load_process = false;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
    xhr.onreadystatechange = function() {&lt;br /&gt;
		if(xhr.readyState == 0) { //UNSENT  Client has been created. open() not called yet.&lt;br /&gt;
		}&lt;br /&gt;
		else if(xhr.readyState == 1) { //OPENED  open() has been called.&lt;br /&gt;
		}&lt;br /&gt;
		else if(xhr.readyState == 2) { //HEADERS_RECEIVED  send() has been called, and headers and status are available.&lt;br /&gt;
		}&lt;br /&gt;
		else if(xhr.readyState == 3) { //LOADING  Downloading; responseText holds partial data.&lt;br /&gt;
		}&lt;br /&gt;
		else if (xhr.readyState == 4) { //DONE  The operation is complete.&lt;br /&gt;
			if (xhr.status == 200) { //request succesfull&lt;br /&gt;
			}&lt;br /&gt;
			else { //request failled&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	xhr.onload = function() {&lt;br /&gt;
		if (xhr.status == 200) {&lt;br /&gt;
			var data;&lt;br /&gt;
			if (param.dataType != undefined) {&lt;br /&gt;
				if (param.dataType == &amp;quot;document&amp;quot;) {&lt;br /&gt;
					data = xhr.responseXML;&lt;br /&gt;
				}	&lt;br /&gt;
				else if (param.dataType == &amp;quot;json&amp;quot;) {&lt;br /&gt;
					try { data = JSON.parse(xhr.responseText); } catch (err) { data = null; }&lt;br /&gt;
				} &lt;br /&gt;
				else if (param.dataType == &amp;quot;stringify&amp;quot;) {&lt;br /&gt;
					data = JSON.stringify(xhr.responseText);&lt;br /&gt;
				}&lt;br /&gt;
				else if (param.dataType == &amp;quot;text&amp;quot;) {&lt;br /&gt;
					data = xhr.responseText;&lt;br /&gt;
				}	&lt;br /&gt;
				else { //&amp;quot;arraybuffer&amp;quot;, &amp;quot;blob&amp;quot;, &amp;quot;html&amp;quot;&lt;br /&gt;
					data = xhr.response;&lt;br /&gt;
				}	&lt;br /&gt;
			}	&lt;br /&gt;
			else {&lt;br /&gt;
				data = xhr.responseText;&lt;br /&gt;
			}&lt;br /&gt;
			param.success(data, &amp;quot;success&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (param.error != undefined) {&lt;br /&gt;
				param.error(xhr, xhr_statusCodes[xhr.status], xhr.statusText);&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
		ajax_load_process = false;&lt;br /&gt;
	};&lt;br /&gt;
		&lt;br /&gt;
	if (param.data != null || param.data != undefined) {&lt;br /&gt;
		if (param.processData != undefined &amp;amp;&amp;amp; param.processData == false &amp;amp;&amp;amp; param.contentType != undefined &amp;amp;&amp;amp; param.contentType == false) {&lt;br /&gt;
			xhr.send(param.data);&lt;br /&gt;
		}&lt;br /&gt;
		else if (param.contentType != undefined &amp;amp;&amp;amp; param.contentType == &amp;quot;json&amp;quot;) {&lt;br /&gt;
			xhr.send(JSON.stringify(param.data));&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			xhr.send(obj_param(param.data));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		xhr.send();&lt;br /&gt;
	}&lt;br /&gt;
		&lt;br /&gt;
	this.abort = function(response) {&lt;br /&gt;
		if (XMLHttpRequest != null) {&lt;br /&gt;
			xhr.abort();&lt;br /&gt;
			ajax_load_process = false;&lt;br /&gt;
			if (response != undefined) {&lt;br /&gt;
				response({ status: &amp;quot;success&amp;quot; });&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**********&lt;br /&gt;
	function loadsatimg() {&lt;br /&gt;
		var satimg = document.getElementById(&amp;quot;satimg&amp;quot;);&lt;br /&gt;
		Ajaxcall({&lt;br /&gt;
			url: &amp;quot;&amp;lt;?php echo site_url(); ?&amp;gt;/home/satimg&amp;quot;,&lt;br /&gt;
			type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
			data: null,&lt;br /&gt;
			contentType: null,&lt;br /&gt;
			dataType: &amp;#39;json&amp;#39;,&lt;br /&gt;
			async: true,//synchronous request. Default value is true &lt;br /&gt;
			timeout: 10000,//default timeout 20000&lt;br /&gt;
			beforeSend:function(){&lt;br /&gt;
				satimg.src = &amp;quot;&amp;lt;?php echo base_url(); ?&amp;gt;images/ajax-loading.gif&amp;quot;;&lt;br /&gt;
				satimg.width = &amp;quot;150&amp;quot;;&lt;br /&gt;
				satimg.height = &amp;quot;150&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			success:function(result, status){&lt;br /&gt;
				if (result) {&lt;br /&gt;
					//alert(result[&amp;#39;imgsrc&amp;#39;]);&lt;br /&gt;
					satimg.src = result[&amp;#39;imgsrc&amp;#39;];&lt;br /&gt;
					satimg.title = result[&amp;#39;title&amp;#39;];&lt;br /&gt;
				}	&lt;br /&gt;
				else&lt;br /&gt;
					satimg.src = &amp;quot;&amp;lt;?php echo base_url(); ?&amp;gt;images/no-image.gif&amp;quot;;&lt;br /&gt;
			},&lt;br /&gt;
			error:function(xhr,statusCodes,statusText){&lt;br /&gt;
				alert(&amp;quot;status:&amp;quot;+xhr.status+&amp;quot;\n&amp;quot;+&amp;quot;statusCodes:&amp;quot;+statusCodes+&amp;quot;\n&amp;quot;+&amp;quot;statusText:&amp;quot;+statusText+&amp;quot;\n&amp;quot;+&amp;quot;responseText:&amp;quot;+xhr.responseText);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
	//for abort previous requests&lt;br /&gt;
    my_ajaxCall.abort(function(result) { console.log(result); });&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sat, 17 Jun 2023 23:45:03 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>풀다운 메뉴(pulldown menu) css, js</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25436</link>
                    <description>구시대의 유물인&amp;nbsp;&amp;nbsp;풀다운 메뉴(pulldown menu) 입니다.&lt;br /&gt;
&lt;br /&gt;
참고.&lt;br /&gt;
&lt;br /&gt;
https://github.com/codrops/Blueprint-HorizontalDropDownMenu/blob/master/js/cbpHorizontalMenu.js&lt;br /&gt;
&lt;br /&gt;
https://tympanus.net/codrops/2013/03/05/horizontal-drop-down-menu/&lt;br /&gt;
&lt;br /&gt;
https://codyhouse.co/gem/mega-dropdown&lt;br /&gt;
&lt;br /&gt;
10년쯤 묵은 코드인데 이제서야 개선할 실력이 되었네요.&lt;br /&gt;
&lt;br /&gt;
참고한 소스중에 사라진 분도 계시고...&lt;br /&gt;
&lt;br /&gt;
소스부분을 수정하면 정상적인 동작이 안될 가능성이 아주 많습니다&lt;br /&gt;
&lt;br /&gt;
분석을 먼저 하신 후에 사용 바랍니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
github 에 보관창고를 마련했습니다.&lt;br /&gt;
&lt;br /&gt;
https://github.com/darkninjaaa&lt;br /&gt;
&lt;br /&gt;
index.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge,chrome=1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;menu.css&amp;quot;; /&amp;gt;&lt;br /&gt;
	&amp;lt;style type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot;&amp;gt;&lt;br /&gt;
		html,&lt;br /&gt;
		body {&lt;br /&gt;
			margin: 0;&lt;br /&gt;
			height: 100%;&lt;br /&gt;
			font-family: &amp;quot;맑은 고딕&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;, &amp;quot;나눔고딕&amp;quot;, &amp;quot;NanumGothic&amp;quot;, &amp;quot;굴림&amp;quot;, &amp;quot;Gulim&amp;quot;, &amp;quot;Tahoma&amp;quot;, &amp;quot;Verdana&amp;quot;, &amp;quot;sans-serif&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.clearfix:before {&lt;br /&gt;
			content: &amp;quot; &amp;quot;;&lt;br /&gt;
			display: table;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.clearfix:after {&lt;br /&gt;
			content: &amp;quot; &amp;quot;; /* Older browser do not support empty content */&lt;br /&gt;
			display: table;&lt;br /&gt;
			clear: both;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.clearfix8:after { /* if you don&amp;#39;t require IE...8 support, the following is fine too: */&lt;br /&gt;
			content: &amp;quot;&amp;quot;;&lt;br /&gt;
			display: table;&lt;br /&gt;
			clear: both;&lt;br /&gt;
		}&lt;br /&gt;
	&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;nav clearfix&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;nav-button&amp;quot; class=&amp;quot;nav-button&amp;quot;&amp;gt;nav button&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;ul id=&amp;quot;nav-ul&amp;quot; class=&amp;quot;nav-ul submenu&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;/&amp;quot; hyperlink=&amp;quot;true&amp;quot; target_blank=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Home&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;	&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassubmenu&amp;quot;&amp;gt;php&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;ul class=&amp;quot;submenu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;file&amp;quot;&amp;gt;&amp;lt;span&amp;gt;File&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;image&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Image&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;json&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Json&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;	&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassubmenu&amp;quot;&amp;gt;BLOG&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;ul class=&amp;quot;submenu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;HTML&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li class=&amp;quot;dropright&amp;quot;&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassub&amp;quot;&amp;gt;Design&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
						&amp;lt;ul&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;HTML&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
							&amp;lt;li class=&amp;quot;dropright&amp;quot;&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassub&amp;quot;&amp;gt;Design&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
								&amp;lt;ul&amp;gt;&lt;br /&gt;
									&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;Design&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;li class=&amp;quot;dropright&amp;quot;&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassub&amp;quot;&amp;gt;HTML&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
										&amp;lt;ul&amp;gt;&lt;br /&gt;
											&amp;lt;li class=&amp;quot;dropright&amp;quot;&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassub&amp;quot;&amp;gt;ul class=&amp;quot;submenu&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
												&amp;lt;ul&amp;gt;&lt;br /&gt;
													&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;who am i&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
													&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;who are u&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
													&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;who is dog&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
												&amp;lt;/ul&amp;gt;&lt;br /&gt;
											&amp;lt;/li&amp;gt;&lt;br /&gt;
											&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;li class=&amp;quot;dropright&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
											&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;span class=&amp;quot;hassub&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
										&amp;lt;/ul&amp;gt;&lt;br /&gt;
									&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;JavaScript&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
								&amp;lt;/ul&amp;gt;&lt;br /&gt;
							&amp;lt;/li&amp;gt;&lt;br /&gt;
							&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;JavaScript&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
						&amp;lt;/ul&amp;gt;&lt;br /&gt;
					&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;JavaScript&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassubmenu&amp;quot;&amp;gt;Work&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;ul class=&amp;quot;submenu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;Web Design&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;Typography&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
					&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;Front-End&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;/ul&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span class=&amp;quot;hassubmenu&amp;quot;&amp;gt;Etc&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;ul class=&amp;quot;submenu&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;menucolumns&amp;quot;&amp;gt; &lt;br /&gt;
						&amp;lt;div class=&amp;quot;menucolumn-12 clearfix&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;menucol-12 menucol highlighted&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;menucol-inner&amp;quot;&amp;gt; &lt;br /&gt;
									Tomatoes&lt;br /&gt;
								&amp;lt;/div&amp;gt;	&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;menucol-3 menucol&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;menucol-inner&amp;quot;&amp;gt; &lt;br /&gt;
									&amp;lt;h5&amp;gt;abc&amp;lt;/h5&amp;gt;&lt;br /&gt;
									&amp;lt;ul&amp;gt;&lt;br /&gt;
										&amp;lt;li&amp;gt;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;https://www.youtube.com/results?search_query=grafting+tree&amp;quot;&amp;gt;grafting tree&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;/ul&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;	&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;menucol-3 menucol&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;menucol-inner&amp;quot;&amp;gt; &lt;br /&gt;
									&amp;lt;h5&amp;gt;def&amp;lt;/h5&amp;gt;&lt;br /&gt;
									&amp;lt;ul&amp;gt;&lt;br /&gt;
										&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;Apple&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;/ul&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;	&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;menucol-3 menucol&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;menucol-inner&amp;quot;&amp;gt; &lt;br /&gt;
									&amp;lt;h5&amp;gt;ghi&amp;lt;/h5&amp;gt;&lt;br /&gt;
									&amp;lt;ul&amp;gt;&lt;br /&gt;
										&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;Banana&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;/ul&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;	&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;menucol-3 menucol&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;menucol-inner&amp;quot;&amp;gt; &lt;br /&gt;
									&amp;lt;h5&amp;gt;zzz&amp;lt;/h5&amp;gt;&lt;br /&gt;
									&amp;lt;ul&amp;gt;&lt;br /&gt;
										&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;Grape&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
									&amp;lt;/ul&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;	&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;	&lt;br /&gt;
					&amp;lt;/div&amp;gt;	&lt;br /&gt;
				&amp;lt;/ul&amp;gt;	&lt;br /&gt;
			&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;About&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;menu_right&amp;quot;&amp;gt;&lt;br /&gt;
				who am i ?&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;menu.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
        let menu = new Menu({ &lt;br /&gt;
			nav_button : &amp;quot;nav-button&amp;quot;,&lt;br /&gt;
			nav_ul : &amp;quot;nav-ul&amp;quot;&lt;br /&gt;
		});&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
menu.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* menu-sub */&lt;br /&gt;
.submenuopen .submenu {&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menu_right {&lt;br /&gt;
	float: right;&lt;br /&gt;
	padding: 0px 3px 0px 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menu_right form,&lt;br /&gt;
.menu_right form span {&lt;br /&gt;
	font-size: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav {&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul {&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    z-index:5555;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    list-style-type: none;  &lt;br /&gt;
	margin: 0px;&lt;br /&gt;
	padding: 0px;&lt;br /&gt;
	letter-spacing: 0px;&lt;br /&gt;
	word-spacing: 0px;	 &lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	border-bottom: 0px solid #777;&lt;br /&gt;
	font-size: 16px;&lt;br /&gt;
	background: #acacac;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav ul li {&lt;br /&gt;
    position:relative;&lt;br /&gt;
	display: block;&lt;br /&gt;
	color: #fff;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
	font-size: 16px;&lt;br /&gt;
}&lt;br /&gt;
.nav ul li span {&lt;br /&gt;
	font-size: 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav a {&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav ul li a {&lt;br /&gt;
	padding: 0 10px 0 10px;&lt;br /&gt;
	color:#111;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li.submenuopen &amp;gt; a {&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background: #47a3da;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li.submenuopen &amp;gt; a:hover {&lt;br /&gt;
	color: #eee;&lt;br /&gt;
	background: #47a3da;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* first level */&lt;br /&gt;
&lt;br /&gt;
.nav-ul &amp;gt; li:hover &amp;gt; a {&lt;br /&gt;
	color: #888;&lt;br /&gt;
	background: #e9e9e9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul.submenu {&lt;br /&gt;
    position:relative;&lt;br /&gt;
    float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul.submenu &amp;gt; li {&lt;br /&gt;
	float: left;&lt;br /&gt;
    margin: 0px 0px 0px 0px;&lt;br /&gt;
    display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul.submenu &amp;gt; li .hassubmenu:after {&lt;br /&gt;
	width: 0;&lt;br /&gt;
	height: 0;&lt;br /&gt;
	border: 5px solid transparent;&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
	border-top-color: #fff;&lt;br /&gt;
	content: &amp;#39;&amp;#39;;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	right: -5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* second level */&lt;br /&gt;
&lt;br /&gt;
.nav-ul li &amp;gt; ul {&lt;br /&gt;
	display: none;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 100%;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	background: #bbb;&lt;br /&gt;
    z-index:7777;&lt;br /&gt;
    padding: 2px;&lt;br /&gt;
	min-width: 110px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li.submenuopen &amp;gt; ul {&lt;br /&gt;
	background: #bbb;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li:hover &amp;gt; ul {&lt;br /&gt;
	display: block;&lt;br /&gt;
	background: #ccc;&lt;br /&gt;
    z-index:9999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li:hover &amp;gt; ul li a {&lt;br /&gt;
    display: block; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li &amp;gt; ul li a:hover {&lt;br /&gt;
	color: #888;&lt;br /&gt;
	background: #e9e9e9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul li &amp;gt; ul li .hassub:after {&lt;br /&gt;
    content: &amp;#39;+&amp;#39;;&lt;br /&gt;
    /*position: absolute;*/&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    right: 5px;&lt;br /&gt;
    margin-top: -11px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul &amp;gt; li &amp;gt; ul.submenu {&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 100%;&lt;br /&gt;
	left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul &amp;gt; li &amp;gt; ul.submenu .menucolumns { /*do not set background-color*/&lt;br /&gt;
	padding: 0 5px 5px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul &amp;gt; li &amp;gt; ul.submenu .menucolumns ul li a:hover {&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nav-ul &amp;gt; li &amp;gt; ul.submenu .menucolumns .highlighted { &lt;br /&gt;
	background: #9f9f9f; &lt;br /&gt;
	border: 1px solid #c1c1c1; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* third level */&lt;br /&gt;
&lt;br /&gt;
.nav-ul .dropright ul {&lt;br /&gt;
	display: none;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 100%;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	background: #ccc;&lt;br /&gt;
    z-index:8888;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* more level */&lt;br /&gt;
&lt;br /&gt;
.nav-ul .dropright ul ul {&lt;br /&gt;
	background: #c7c7c7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menucolumn-1  {width: 55px;}&lt;br /&gt;
.menucolumn-2  {width: 110px;}&lt;br /&gt;
.menucolumn-3  {width: 165px;}&lt;br /&gt;
.menucolumn-4  {width: 220px;}&lt;br /&gt;
.menucolumn-5  {width: 275px;}&lt;br /&gt;
.menucolumn-6  {width: 330px;}&lt;br /&gt;
.menucolumn-7  {width: 385px;}&lt;br /&gt;
.menucolumn-8  {width: 440px;}&lt;br /&gt;
.menucolumn-9  {width: 495px;}&lt;br /&gt;
.menucolumn-10 {width: 550px;}&lt;br /&gt;
.menucolumn-11 {width: 605px;}&lt;br /&gt;
.menucolumn-12 {width: 660px;}&lt;br /&gt;
.menucolumn-13 {width: 715px;}&lt;br /&gt;
.menucolumn-14 {width: 770px;}&lt;br /&gt;
.menucolumn-15 {width: 825px;}&lt;br /&gt;
.menucolumn-16 {width: 880px;}&lt;br /&gt;
.menucolumn-17 {width: 935px;}&lt;br /&gt;
.menucolumn-18 {width: 990px;}&lt;br /&gt;
.menucolumn-19 {width: 1045px;}&lt;br /&gt;
.menucolumn-20 {width: 1100px;}&lt;br /&gt;
&lt;br /&gt;
.menucol-1 { width:50px; }&lt;br /&gt;
.menucol-2 { width:105px; }&lt;br /&gt;
.menucol-3 { width:160px; }&lt;br /&gt;
.menucol-4 { width:215px; }&lt;br /&gt;
.menucol-5 { width:270px; }&lt;br /&gt;
.menucol-6 { width:325px; }&lt;br /&gt;
.menucol-7 { width:380px; }&lt;br /&gt;
.menucol-8 { width:435px; }&lt;br /&gt;
.menucol-9 { width:490px; }&lt;br /&gt;
.menucol-10 { width:545px; }&lt;br /&gt;
.menucol-11 { width:600px; }&lt;br /&gt;
.menucol-12 { width:655px; }&lt;br /&gt;
.menucol-13 { width:710px; }&lt;br /&gt;
.menucol-14 { width:765px; }&lt;br /&gt;
.menucol-15 { width:820px; }&lt;br /&gt;
.menucol-16 { width:875px; }&lt;br /&gt;
.menucol-17 { width:930px; }&lt;br /&gt;
.menucol-18 { width:985px; }&lt;br /&gt;
.menucol-19 { width:1040px; }&lt;br /&gt;
.menucol-20 { width:1095px; }&lt;br /&gt;
&lt;br /&gt;
.menucol-1, .menucol-2, .menucol-3, .menucol-4, .menucol-5, .menucol-6, .menucol-7, .menucol-8, .menucol-9, .menucol-10, .menucol-11, .menucol-12, .menucol-13, .menucol-14, .menucol-15, .menucol-16, .menucol-17, .menucol-18, .menucol-19, .menucol-20 {&lt;br /&gt;
	display:inline-block;&lt;br /&gt;
	float: left;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin: 5px 0 0 5px;&lt;br /&gt;
	background: #aaa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menucol-inner {&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.submenu {&lt;br /&gt;
	font-size: 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.submenu h3 {&lt;br /&gt;
	color: #555;&lt;br /&gt;
	background: #939393;&lt;br /&gt;
	padding: 2px 3px 2px 3px;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.submenu h4 {&lt;br /&gt;
	color: #555;&lt;br /&gt;
	background: #939393;&lt;br /&gt;
	padding: 2px 3px 2px 3px;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-size: 110%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.submenu h5 {&lt;br /&gt;
	color: #555;&lt;br /&gt;
	background: #939393;&lt;br /&gt;
	padding: 2px 3px 2px 3px;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Examples for media queries */&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 35em) { &lt;br /&gt;
&lt;br /&gt;
	.nav {&lt;br /&gt;
		position: relative;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    .nav-button {&lt;br /&gt;
        display: block;&lt;br /&gt;
        cursor: pointer;&lt;br /&gt;
		font-size: 110%;&lt;br /&gt;
        font-weight: 700;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 5px;&lt;br /&gt;
		background: #39b1cc;&lt;br /&gt;
    }&lt;br /&gt;
	.nav-button::before {&lt;br /&gt;
		display: block;&lt;br /&gt;
		content: &amp;#39;&amp;#39;;&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		height: 3px;&lt;br /&gt;
		width: 22px;&lt;br /&gt;
		border-top: 3px solid #d3eced;&lt;br /&gt;
		right: 7px;&lt;br /&gt;
		top: 8px;&lt;br /&gt;
	}&lt;br /&gt;
	.nav-button::after {&lt;br /&gt;
		display: block;&lt;br /&gt;
		content: &amp;#39;&amp;#39;;&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		height: 3px;&lt;br /&gt;
		width: 22px;&lt;br /&gt;
		border-top: 3px solid #d3eced;&lt;br /&gt;
		border-bottom: 3px solid #d3eced;&lt;br /&gt;
		right: 7px;&lt;br /&gt;
		top: 14px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul {&lt;br /&gt;
		height: auto;&lt;br /&gt;
		display: none;&lt;br /&gt;
		position: relative;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul.open {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul li a {&lt;br /&gt;
		padding: 0 10px 0 10px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.submenu li {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.menu_right {&lt;br /&gt;
		float:none;&lt;br /&gt;
	}&lt;br /&gt;
	.menu_right form {&lt;br /&gt;
		padding: 0 0;&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
	/* first level */&lt;br /&gt;
&lt;br /&gt;
	.nav-ul li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul.submenu {&lt;br /&gt;
		position:relative;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul.submenu &amp;gt; li {&lt;br /&gt;
		position:relative;&lt;br /&gt;
		display: block;&lt;br /&gt;
		float: none;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* second level */&lt;br /&gt;
 &lt;br /&gt;
	.nav-ul li &amp;gt; ul {&lt;br /&gt;
		position: static;&lt;br /&gt;
		display: none;&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	.nav-ul li &amp;gt; ul.submenu {&lt;br /&gt;
		position:relative;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul li &amp;gt; ul.submenu .menucolumns {&lt;br /&gt;
		margin: 0px 0 0 0;&lt;br /&gt;
		padding: 0 2px 0 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* third level */&lt;br /&gt;
&lt;br /&gt;
	.nav-ul .dropright ul {&lt;br /&gt;
		position: static;&lt;br /&gt;
		padding: 0 0 0 3px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* more level */&lt;br /&gt;
	&lt;br /&gt;
	.nav-ul .dropright ul ul {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.menucol-1,	.menucol-2,	.menucol-3,	.menucol-4,	.menucol-5,	.menucol-6,	.menucol-7,	.menucol-8,	.menucol-9,	.menucol-10, .menucol-11, .menucol-12, .menucol-13,	.menucol-14, .menucol-15, .menucol-16, .menucol-17,	.menucol-18, .menucol-19, .menucol-20 {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 2px 0 2px 2px;&lt;br /&gt;
	}&lt;br /&gt;
	.menucolumn-1, .menucolumn-2, .menucolumn-3, .menucolumn-4,	.menucolumn-5, .menucolumn-6, .menucolumn-7, .menucolumn-8, .menucolumn-9, .menucolumn-10, .menucolumn-11, .menucolumn-12, .menucolumn-13, .menucolumn-14, .menucolumn-15, .menucolumn-16, .menucolumn-17, .menucolumn-18, .menucolumn-19, .menucolumn-20 {&lt;br /&gt;
		width: auto; &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.nav-ul &amp;gt; li &amp;gt; ul.submenu .menucolumns .menucol { &lt;br /&gt;
		position:relative;&lt;br /&gt;
		display: block;&lt;br /&gt;
		float: none;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
menu.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Menu.js v1.0.0&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
var MENU_NAV_BUTTON = &amp;quot;nav-button&amp;quot;&lt;br /&gt;
var MENU_NAV_UL     = &amp;quot;nav-ul&amp;quot;&lt;br /&gt;
&lt;br /&gt;
var _typeof = &lt;br /&gt;
	typeof Symbol === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; typeof Symbol.iterator === &amp;quot;symbol&amp;quot; ? &lt;br /&gt;
		function(obj) { return typeof obj; } : &lt;br /&gt;
		function(obj) { return obj &amp;amp;&amp;amp; typeof Symbol === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; obj.constructor === Symbol &amp;amp;&amp;amp; obj !== Symbol.prototype ? &amp;quot;symbol&amp;quot; : typeof obj; };&lt;br /&gt;
&lt;br /&gt;
var _extends = Object.assign || function(target) {&lt;br /&gt;
    for (var i = 1; i &amp;lt; arguments.length; i++) {&lt;br /&gt;
        var source = arguments[i];&lt;br /&gt;
        for (var key in source) {&lt;br /&gt;
            if (Object.prototype.hasOwnProperty.call(source, key)) {&lt;br /&gt;
                target[key] = source[key];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return target;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var _createClass = function() {&lt;br /&gt;
    function defineProperties(target, props) &lt;br /&gt;
	{&lt;br /&gt;
        for (var i = 0; i &amp;lt; props.length; i++) &lt;br /&gt;
		{&lt;br /&gt;
            var descriptor = props[i];&lt;br /&gt;
			&lt;br /&gt;
            descriptor.enumerable = descriptor.enumerable || false;&lt;br /&gt;
            descriptor.configurable = true;&lt;br /&gt;
			&lt;br /&gt;
            if (&amp;quot;value&amp;quot; in descriptor) descriptor.writable = true;&lt;br /&gt;
			&lt;br /&gt;
            Object.defineProperty(target, descriptor.key, descriptor);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    return function(Constructor, protoProps, staticProps) {&lt;br /&gt;
        if (protoProps) defineProperties(Constructor.prototype, protoProps);&lt;br /&gt;
        if (staticProps) defineProperties(Constructor, staticProps);&lt;br /&gt;
        return Constructor;&lt;br /&gt;
    };&lt;br /&gt;
}();&lt;br /&gt;
 &lt;br /&gt;
function _classCallCheck(instance, Constructor) &lt;br /&gt;
{&lt;br /&gt;
    if (!(instance instanceof Constructor)) {&lt;br /&gt;
        throw new TypeError(&amp;quot;Cannot call a class as a function&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var Menu = function() &lt;br /&gt;
{&lt;br /&gt;
    function Menu() &lt;br /&gt;
	{&lt;br /&gt;
        var options = arguments.length &amp;gt; 0 &amp;amp;&amp;amp; arguments[0] !== undefined ? arguments[0] : {};&lt;br /&gt;
        _classCallCheck(this, Menu);&lt;br /&gt;
        _extends(this, {&lt;br /&gt;
            nav_button: MENU_NAV_BUTTON, /* id */&lt;br /&gt;
            nav_ul: MENU_NAV_UL /* id */&lt;br /&gt;
        }, options);&lt;br /&gt;
&lt;br /&gt;
		this.LastselectedulLi = null;&lt;br /&gt;
        this.init();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    _createClass( Menu, &lt;br /&gt;
		[	&lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;init&amp;quot;,&lt;br /&gt;
				value: function init() {&lt;br /&gt;
					this.setListner_Navclick();&lt;br /&gt;
					this.setListner_NavUlLiclick();&lt;br /&gt;
					this.setListner_bodyclick();&lt;br /&gt;
					this.setListner_bodykeyup();&lt;br /&gt;
				}&lt;br /&gt;
			}, &lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;setListner_Navclick&amp;quot;,&lt;br /&gt;
				value: function setListner_Navclick() {&lt;br /&gt;
					var _thisNavclick = this;&lt;br /&gt;
					var nav_button = document.getElementById(_thisNavclick.nav_button);&lt;br /&gt;
					nav_button.addEventListener(&amp;#39;click&amp;#39;, function(event) {&lt;br /&gt;
						event.preventDefault();&lt;br /&gt;
						var nav_ul = document.getElementById(_thisNavclick.nav_ul);&lt;br /&gt;
						if (nav_ul.classList.contains(&amp;#39;open&amp;#39;)) {&lt;br /&gt;
							nav_ul.classList.remove(&amp;#39;open&amp;#39;);&lt;br /&gt;
						}	&lt;br /&gt;
						else {&lt;br /&gt;
							nav_ul.classList.add(&amp;#39;open&amp;#39;);&lt;br /&gt;
						}&lt;br /&gt;
						return false; &lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;setListner_NavUlLiclick&amp;quot;,&lt;br /&gt;
				value: function setListner_NavUlLiclick() {&lt;br /&gt;
					var _thisNavUlLi = this;&lt;br /&gt;
					var menuItems = document.querySelectorAll(&amp;quot;#&amp;quot;+_thisNavUlLi.nav_ul+&amp;quot; &amp;gt; li &amp;gt; a &amp;gt; span&amp;quot;)&lt;br /&gt;
					for (var i = 0; i &amp;lt; menuItems.length; i++) {&lt;br /&gt;
						menuItems[i].addEventListener(&amp;#39;click&amp;#39;, function(event) {&lt;br /&gt;
						    event.preventDefault();&lt;br /&gt;
							_thisNavUlLi.NavUlLi_open(event);&lt;br /&gt;
							return false;&lt;br /&gt;
						} );&lt;br /&gt;
					}	&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;NavUlLi_open&amp;quot;,&lt;br /&gt;
				value: function NavUlLi_open(event) {&lt;br /&gt;
					var	itemulLi = event.target.parentNode.parentNode;&lt;br /&gt;
					if( this.LastselectedulLi !== null ) {&lt;br /&gt;
						if (this.LastselectedulLi.classList.contains(&amp;#39;submenuopen&amp;#39;)) {&lt;br /&gt;
							this.LastselectedulLi.classList.remove(&amp;#39;submenuopen&amp;#39;);&lt;br /&gt;
						}	&lt;br /&gt;
					}&lt;br /&gt;
					if( this.LastselectedulLi == itemulLi ) {&lt;br /&gt;
						if (itemulLi.classList.contains(&amp;#39;submenuopen&amp;#39;)) {&lt;br /&gt;
							itemulLi.classList.remove(&amp;#39;submenuopen&amp;#39;);&lt;br /&gt;
						}	&lt;br /&gt;
						this.LastselectedulLi = null;&lt;br /&gt;
					}&lt;br /&gt;
					else {&lt;br /&gt;
						if (event.target.parentNode.getAttribute(&amp;#39;hyperlink&amp;#39;) != &amp;quot;true&amp;quot;) { &lt;br /&gt;
							itemulLi.classList.add(&amp;#39;submenuopen&amp;#39;);&lt;br /&gt;
							this.LastselectedulLi = itemulLi;&lt;br /&gt;
						}	&lt;br /&gt;
					}	&lt;br /&gt;
					if (event.target.parentNode.getAttribute(&amp;#39;hyperlink&amp;#39;) == &amp;quot;true&amp;quot;) { &lt;br /&gt;
						if (event.target.parentNode.getAttribute(&amp;#39;target_blank&amp;#39;) == &amp;quot;true&amp;quot;)  &lt;br /&gt;
							window.open(event.target.parentNode.getAttribute(&amp;#39;href&amp;#39;)); &lt;br /&gt;
						else &lt;br /&gt;
							location.href = event.target.parentNode.getAttribute(&amp;#39;href&amp;#39;); &lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;setListner_bodyclick&amp;quot;, //display: none; nav-ul &amp;gt; li &amp;gt; ul&lt;br /&gt;
				value: function setListner_bodyclick() {&lt;br /&gt;
					var _thisbodyclick = this;&lt;br /&gt;
					var body = document.body;&lt;br /&gt;
					body.addEventListener(&amp;#39;click&amp;#39;, function(event) {&lt;br /&gt;
						var itemulLi = _thisbodyclick.LastselectedulLi;&lt;br /&gt;
						// event.target.closest(&amp;#39;.&amp;#39;)&lt;br /&gt;
						// event.target.parentNode.querySelector(&amp;#39;.&amp;#39;)&lt;br /&gt;
						if (itemulLi !== null &amp;amp;&amp;amp; ! itemulLi.contains(event.target.parentNode)) {&lt;br /&gt;
							if (itemulLi.classList.contains(&amp;#39;submenuopen&amp;#39;)) {&lt;br /&gt;
								itemulLi.classList.remove(&amp;#39;submenuopen&amp;#39;);&lt;br /&gt;
							}	&lt;br /&gt;
							_thisbodyclick.LastselectedulLi = null;&lt;br /&gt;
						}	&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				key: &amp;quot;setListner_bodykeyup&amp;quot;, //display: none; nav-ul &amp;gt; li &amp;gt; ul&lt;br /&gt;
				value: function setListner_bodykeyup() {&lt;br /&gt;
					var _thisbodykeyup = this;&lt;br /&gt;
					var body = document.body;&lt;br /&gt;
					body.addEventListener(&amp;#39;keyup&amp;#39;, function(event) {&lt;br /&gt;
						if (event.code == &amp;#39;Escape&amp;#39;) {&lt;br /&gt;
							var itemulLi = _thisbodykeyup.LastselectedulLi;&lt;br /&gt;
							if (itemulLi !== null) {&lt;br /&gt;
								if (itemulLi.classList.contains(&amp;#39;submenuopen&amp;#39;)) {&lt;br /&gt;
									itemulLi.classList.remove(&amp;#39;submenuopen&amp;#39;);&lt;br /&gt;
								}	&lt;br /&gt;
								_thisbodykeyup.LastselectedulLi = null;&lt;br /&gt;
							}	&lt;br /&gt;
						}	&lt;br /&gt;
					} );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		]&lt;br /&gt;
	);&lt;br /&gt;
    &lt;br /&gt;
	return Menu;&lt;br /&gt;
}();&lt;br /&gt;
	&lt;br /&gt;
if ((typeof module === &amp;quot;undefined&amp;quot; ? &amp;quot;undefined&amp;quot; : _typeof(module)) === &amp;#39;object&amp;#39;) {&lt;br /&gt;
    module.exports = Menu;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sat, 13 May 2023 22:45:28 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>ci4 초 간단 csv 작성 [한글 안깨짐]</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25430</link>
                    <description>안녕하세요&lt;br /&gt;
&lt;br /&gt;
오랜만에 짤막하게 팁&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
간단하게 csv 다운로드를 만들기 입니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
한글이 깨지길래 찾아보다 해결 방법 찾다가&amp;nbsp;간단한 샘플 코드 공개합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//모델 파트 getResultArray 한 데이터&lt;br /&gt;
$data = $Model-&amp;gt;info_all(); // ==&amp;gt; $db-&amp;gt;table(&amp;quot;table_name&amp;quot;)-&amp;gt;limit(10)-&amp;gt;get()-&amp;gt;getResultArray();&lt;br /&gt;
&lt;br /&gt;
$csv_dump = &amp;quot;title, title2, title3 ....&amp;quot;;//헤드라인 넣어주기&lt;br /&gt;
$csv_dump .= &amp;quot;\r\n&amp;quot;; //강제개행&lt;br /&gt;
foreach ($data as $key =&amp;gt;$val) { &lt;br /&gt;
	$csv_dump .= implode(&amp;quot;,&amp;quot;, $val);                &lt;br /&gt;
	$csv_dump .= &amp;quot;\r\n&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return $this-&amp;gt;response-&amp;gt;download(&amp;#39;filename.csv&amp;#39;, chr(239).chr(187).chr(191).$csv_dump);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
중요포인트가 chr() 넣어줘야지 인식 합니다.&lt;br /&gt;
&lt;br /&gt;
끗.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
#php #csv #utf8 #한글깨짐 #codeigniter4&amp;nbsp;</description>
                    <pubDate>Fri, 12 May 2023 19:24:06 +0900</pubDate>
                    <dc:creator>kaido</dc:creator>
                </item>
                            <item>
                    <title>nested panel - sk-rt / handy-collapse</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25127</link>
                    <description>https://github.com/sk-rt/handy-collapse&lt;br /&gt;
&lt;br /&gt;
취미로 코딩을 하는 것은 정말 재미있고 흥미로운 것입니다.&lt;br /&gt;
&lt;br /&gt;
초보자들이 코딩에 빠져들수 있는 재미를 가져볼수 있게 만들고 싶었는데&lt;br /&gt;
&lt;br /&gt;
코드조각들이 점점 암호문처럼 되어가는.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Test page&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;style&amp;gt;&lt;br /&gt;
		pre&lt;br /&gt;
		{&lt;br /&gt;
			padding: 0px;&lt;br /&gt;
			border-left: 3px solid #ccc;&lt;br /&gt;
			border-right: 2px solid #ccc;&lt;br /&gt;
			margin: 0px;&lt;br /&gt;
			overflow: auto;	width: 99.7%;&lt;br /&gt;
			background-color: #F5F5F5;&lt;br /&gt;
		}&lt;br /&gt;
	&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;style&amp;gt;&lt;br /&gt;
		/* handy-collapse */&lt;br /&gt;
		/* top, right, bottom, left */&lt;br /&gt;
&lt;br /&gt;
		.handy-panel&lt;br /&gt;
		{&lt;br /&gt;
			background: #eee;&lt;br /&gt;
			margin: 1px;&lt;br /&gt;
			border: 1px solid #CCC;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-subpanel&lt;br /&gt;
		{ &lt;br /&gt;
			background: #eee;&lt;br /&gt;
			margin: 1px 10px 1px 10px;&lt;br /&gt;
			border: 1px solid #CCC;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel.collapsed,&lt;br /&gt;
		.handy-subpanel.collapsed&lt;br /&gt;
		{&lt;br /&gt;
			border: 1px solid #999;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel.expand,&lt;br /&gt;
		.handy-subpanel.expand&lt;br /&gt;
		{&lt;br /&gt;
			border-left: 1px solid #CCC;&lt;br /&gt;
			border-right: 1px solid #CCC;&lt;br /&gt;
			border-bottom: 1px solid #CCC;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel &amp;gt; button,&lt;br /&gt;
		.handy-subpanel &amp;gt; button&lt;br /&gt;
		{&lt;br /&gt;
			margin: 0px;&lt;br /&gt;
			padding: 2px 2px 2px 5px;&lt;br /&gt;
			background: #CCC url(images/arrow-up.gif) no-repeat 99.2% center;&lt;br /&gt;
			border: 0px;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel &amp;gt; button:hover,&lt;br /&gt;
		.handy-subpanel &amp;gt; button:hover { &lt;br /&gt;
			background-color: #A9BCEF; &lt;br /&gt;
			cursor:pointer;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel.collapsed &amp;gt; button,&lt;br /&gt;
		.handy-subpanel.collapsed &amp;gt; button&lt;br /&gt;
		{&lt;br /&gt;
			margin: 0px;&lt;br /&gt;
			padding: 2px 2px 2px 5px;&lt;br /&gt;
			background: #CCC url(images/arrow-dn.gif) no-repeat 99.2% center;&lt;br /&gt;
			border-color: #CCC;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panel.collapsed &amp;gt; button:hover,&lt;br /&gt;
		.handy-subpanel.collapsed &amp;gt; button:hover&lt;br /&gt;
		{&lt;br /&gt;
			margin: 0px;&lt;br /&gt;
			padding: 2px 2px 2px 5px;&lt;br /&gt;
			background: #A9BCEF url(images/arrow-dn.gif) no-repeat 99.2% center;&lt;br /&gt;
			-moz-border-radius: 3px;&lt;br /&gt;
			-webkit-border-radius: 3px;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panelcontent&lt;br /&gt;
		{ &lt;br /&gt;
			padding: 2px 3px 2px 4px; &lt;br /&gt;
			margin: 0px 0px 0px 0px;&lt;br /&gt;
			overflow: hidden;&lt;br /&gt;
			list-style-type: none;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		.handy-panelcontent.is-1 { background-color:#FFFFFF; }&lt;br /&gt;
		.handy-panelcontent.is-2 { background-color:#F7F7F7; }&lt;br /&gt;
		.handy-panelcontent.is-3 { background-color:#EEEEEE; }&lt;br /&gt;
		.handy-panelcontent.is-4 { background-color:#E7E7E7; }&lt;br /&gt;
		.handy-panelcontent.is-5 { background-color:#CACACA; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		.handy-panelcontent p&lt;br /&gt;
		{ &lt;br /&gt;
			margin: 0px; &lt;br /&gt;
			padding: 0px 0px 2px 0px; &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		/* collapsed panel content */&lt;br /&gt;
		.handy-panel.collapsed .handy-panelcontent { display: none; }&lt;br /&gt;
		.handy-subpanel.collapsed .handy-panelcontent { display: none; }&lt;br /&gt;
	&lt;br /&gt;
		.button.is-fullwidth{&lt;br /&gt;
			display:flex;&lt;br /&gt;
			width:100%&lt;br /&gt;
		}&lt;br /&gt;
	&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;?php&lt;br /&gt;
		//source&lt;br /&gt;
		//https://www.media-division.com/javascript-animated-collapsible-panels-without-frameworks/&lt;br /&gt;
		//https://github.com/sk-rt/handy-collapse&lt;br /&gt;
		//https://www.cssscript.com/nested-accordion-content-toggle-handy-collapse/&lt;br /&gt;
		//https://www.cssscript.com/demo/Nested-Accordion-Content-Toggle-handy-collapse/&lt;br /&gt;
		//https://stackoverflow.com/questions/6054033/pretty-printing-json-with-php&lt;br /&gt;
		//https://github.com/LorDOniX/json-viewer&lt;br /&gt;
		//https://github.com/JAAulde/cookies&lt;br /&gt;
	?&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;div class=&amp;quot;handy-panel left expand&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-nested-button=&amp;quot;handy-panel-nested&amp;quot;&amp;gt;handy-panel-nested&amp;lt;/button&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-nested-content=&amp;quot;handy-panel-nested&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;loadjsondata&amp;quot;&amp;gt;load jsondata&amp;lt;/button&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
			&amp;lt;div class=&amp;quot;handy-panel left&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-nested-button=&amp;quot;handy-panel&amp;quot;&amp;gt;handy-panel&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-nested-content=&amp;quot;handy-panel&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div id=&amp;quot;handycookiesArray&amp;quot; name=&amp;quot;handycookiesArray&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;div id=&amp;quot;allcookiesArray&amp;quot; name=&amp;quot;allcookiesArray&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;handy-panel left&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;button is-fullwidth&amp;quot; data-nested-button=&amp;quot;jsonformatview&amp;quot;&amp;gt;jsonformatview&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;handy-panelcontent is-1&amp;quot; data-nested-content=&amp;quot;jsonformatview&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div id=&amp;quot;disp_format_json&amp;quot; name=&amp;quot;disp_format_json&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;div id=&amp;quot;disp_format_json1&amp;quot; name=&amp;quot;disp_format_json1&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;div id=&amp;quot;disp_format_json2&amp;quot; name=&amp;quot;disp_format_json2&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		var HANDY_PANEL           = &amp;quot;handy-panel&amp;quot;;&lt;br /&gt;
		var HANDY_SUBPANEL        = &amp;quot;handy-subpanel&amp;quot;;&lt;br /&gt;
		var HANDY_PANELCONTENT    = &amp;quot;handy-panelcontent&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var HANDY_NAMESPACE_HEAD  = &amp;quot;data&amp;quot;&lt;br /&gt;
		var HANDY_NAMESPACE       = &amp;quot;basic&amp;quot;&lt;br /&gt;
		var HANDY_HEADING_TAG     = &amp;quot;button&amp;quot;;&lt;br /&gt;
		var HANDY_CONTENT_TAG     = &amp;quot;content&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var HANDY_EXPAND_CLASS    = &amp;quot;expand&amp;quot;;&lt;br /&gt;
		var HANDY_COLLAPSED_CLASS = &amp;quot;collapsed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var HANDY_COOKIE_NAME     = &amp;quot;handy-panels&amp;quot;;&lt;br /&gt;
		var HANDY_CSS_EASING      = &amp;quot;ease-in-out&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var HANDY_ANIMATION_DELAY = 400; /*ms*/&lt;br /&gt;
		var HANDY_ANIMATION_STEPS = 10;&lt;br /&gt;
&lt;br /&gt;
		var HANDY_PANEL_LEFT      = &amp;quot;left&amp;quot;;&lt;br /&gt;
		var HANDY_PANEL_RIGHT     = &amp;quot;right&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		var _typeof = &lt;br /&gt;
			typeof Symbol === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; typeof Symbol.iterator === &amp;quot;symbol&amp;quot; ? &lt;br /&gt;
				function(obj) { return typeof obj; } : &lt;br /&gt;
				function(obj) { return obj &amp;amp;&amp;amp; typeof Symbol === &amp;quot;function&amp;quot; &amp;amp;&amp;amp; obj.constructor === Symbol &amp;amp;&amp;amp; obj !== Symbol.prototype ? &amp;quot;symbol&amp;quot; : typeof obj; };&lt;br /&gt;
&lt;br /&gt;
		var _extends = Object.assign || function(target) &lt;br /&gt;
		{&lt;br /&gt;
			for (var i = 1; i &amp;lt; arguments.length; i++) {&lt;br /&gt;
				var source = arguments[i];&lt;br /&gt;
				for (var key in source) {&lt;br /&gt;
					if (Object.prototype.hasOwnProperty.call(source, key)) {&lt;br /&gt;
						target[key] = source[key];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return target;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var _createClass = function() &lt;br /&gt;
		{&lt;br /&gt;
			function defineProperties(target, props) {&lt;br /&gt;
				for (var i = 0; i &amp;lt; props.length; i++) {&lt;br /&gt;
					var descriptor = props[i];&lt;br /&gt;
			&lt;br /&gt;
					descriptor.enumerable = descriptor.enumerable || false;&lt;br /&gt;
					descriptor.configurable = true;&lt;br /&gt;
			&lt;br /&gt;
					if (&amp;quot;value&amp;quot; in descriptor) descriptor.writable = true;&lt;br /&gt;
			&lt;br /&gt;
					Object.defineProperty(target, descriptor.key, descriptor);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return function(Constructor, protoProps, staticProps) {&lt;br /&gt;
				if (protoProps) defineProperties(Constructor.prototype, protoProps);&lt;br /&gt;
				if (staticProps) defineProperties(Constructor, staticProps);&lt;br /&gt;
		&lt;br /&gt;
				return Constructor;&lt;br /&gt;
			};&lt;br /&gt;
		}();&lt;br /&gt;
 &lt;br /&gt;
		function _classCallCheck(instance, Constructor) &lt;br /&gt;
		{&lt;br /&gt;
			if (!(instance instanceof Constructor)) {&lt;br /&gt;
				throw new TypeError(&amp;quot;Cannot call a class as a function&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var HandyCollapse = function() &lt;br /&gt;
		{&lt;br /&gt;
			function HandyCollapse() &lt;br /&gt;
			{&lt;br /&gt;
				var options = arguments.length &amp;gt; 0 &amp;amp;&amp;amp; arguments[0] !== undefined ? arguments[0] : {};&lt;br /&gt;
		&lt;br /&gt;
				_classCallCheck(this, HandyCollapse);&lt;br /&gt;
		&lt;br /&gt;
				_extends(this, {&lt;br /&gt;
					nameSpace: HANDY_NAMESPACE,&lt;br /&gt;
					toggleHeadingAttr: HANDY_NAMESPACE_HEAD + &amp;quot;-&amp;quot; + (options.nameSpace || HANDY_NAMESPACE) + &amp;quot;-&amp;quot; + HANDY_HEADING_TAG,&lt;br /&gt;
					toggleContentAttr: HANDY_NAMESPACE_HEAD + &amp;quot;-&amp;quot; + (options.nameSpace || HANDY_NAMESPACE) + &amp;quot;-&amp;quot; + HANDY_CONTENT_TAG,&lt;br /&gt;
					isAimation: true,&lt;br /&gt;
					closeOthers: true,&lt;br /&gt;
					animatinSpeed: HANDY_ANIMATION_DELAY,&lt;br /&gt;
					cssEasing: HANDY_CSS_EASING,&lt;br /&gt;
					cookie_name : HANDY_COOKIE_NAME + &amp;quot;-&amp;quot; + options.nameSpace,&lt;br /&gt;
					onSlideStart: function onSlideStart() {&lt;br /&gt;
						return false;&lt;br /&gt;
					},&lt;br /&gt;
					onSlideEnd: function onSlideEnd() {&lt;br /&gt;
						return false;&lt;br /&gt;
					}&lt;br /&gt;
				}, options);&lt;br /&gt;
		&lt;br /&gt;
				this.toggleHeadingEls = document.querySelectorAll(&amp;quot;[&amp;quot; + this.toggleHeadingAttr + &amp;quot;]&amp;quot;);&lt;br /&gt;
				this.toggleContentEls = document.querySelectorAll(&amp;quot;[&amp;quot; + this.toggleContentAttr + &amp;quot;]&amp;quot;);&lt;br /&gt;
				this.itemsStatus = {};&lt;br /&gt;
&lt;br /&gt;
				this.loadSettings();&lt;br /&gt;
				this.init();&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			_createClass( HandyCollapse, &lt;br /&gt;
				[	&lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;init&amp;quot;,&lt;br /&gt;
						value: function init() {&lt;br /&gt;
							if (this.toggleHeadingEls) {&lt;br /&gt;
								this.setListner();&lt;br /&gt;
							}&lt;br /&gt;
							if (this.toggleContentEls) {&lt;br /&gt;
								this.setItem();&lt;br /&gt;
							}&lt;br /&gt;
							this.refresh();&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;loadSettings&amp;quot;,&lt;br /&gt;
						value: function loadSettings() {&lt;br /&gt;
							// prepare the object that will keep the panel statuses&lt;br /&gt;
							this.itemsStatus = {};&lt;br /&gt;
&lt;br /&gt;
							var cookie = this.getcookie();&lt;br /&gt;
							if (cookie[0] == &amp;quot;empty&amp;quot;) return;&lt;br /&gt;
	&lt;br /&gt;
							var cookieData = cookie[1];&lt;br /&gt;
							for( var key in cookieData ) {&lt;br /&gt;
								var value = cookieData[key];&lt;br /&gt;
								if (key == &amp;quot;undefined&amp;quot; || key == null || key == &amp;quot;&amp;quot;) {&lt;br /&gt;
									//alert(key + &amp;quot; &amp;quot; + value);&lt;br /&gt;
								}	&lt;br /&gt;
								else {	&lt;br /&gt;
									this.itemsStatus[key] = value;&lt;br /&gt;
								}	&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;saveSettings&amp;quot;,&lt;br /&gt;
						value: function saveSettings(id, expand) {&lt;br /&gt;
							// put the new expanding in the object&lt;br /&gt;
							this.itemsStatus[id] = expand;&lt;br /&gt;
	&lt;br /&gt;
							// create an array that will keep the contentid:expanding pairs&lt;br /&gt;
							var panelsData = [];&lt;br /&gt;
							for (var cid in this.itemsStatus) {&lt;br /&gt;
								if (cid == &amp;quot;undefined&amp;quot; || cid == null || cid == &amp;quot;&amp;quot;) {&lt;br /&gt;
									//alert(cid + &amp;quot; &amp;quot; + this.itemsStatus[cid]);&lt;br /&gt;
								}	&lt;br /&gt;
								else {	&lt;br /&gt;
									panelsData.push(cid+&amp;quot;:&amp;quot;+this.itemsStatus[cid]);&lt;br /&gt;
								}	&lt;br /&gt;
							}	&lt;br /&gt;
		&lt;br /&gt;
							// set the cookie expiration date 1 year from now&lt;br /&gt;
							var today = new Date();&lt;br /&gt;
							var expirationDate = new Date(today.getTime() + 1 * 1000 * 60 * 60 * 24);&lt;br /&gt;
						&lt;br /&gt;
							// write the cookie&lt;br /&gt;
							document.cookie = this.cookie_name + &amp;quot;=&amp;quot; + escape(panelsData.join(&amp;quot;,&amp;quot;)) + &amp;quot;;expires=&amp;quot; + expirationDate.toGMTString();&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;getSubcookie&amp;quot;,&lt;br /&gt;
						value: function getSubcookie(cookieValue) {&lt;br /&gt;
							var itemsArray = {};&lt;br /&gt;
							var cData = cookieValue.split(&amp;quot;,&amp;quot;);&lt;br /&gt;
							// split each key:value pair and put in object&lt;br /&gt;
							for (var i=0; i&amp;lt; cData.length; i++)&lt;br /&gt;
							{&lt;br /&gt;
								var pair = cData[i].split(&amp;quot;:&amp;quot;);&lt;br /&gt;
								itemsArray[pair[0]] = pair[1];&lt;br /&gt;
							}&lt;br /&gt;
							return itemsArray;&lt;br /&gt;
						}	&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;getAllcookies&amp;quot;,&lt;br /&gt;
						value: function getAllcookies() {&lt;br /&gt;
							var c = [];&lt;br /&gt;
							if (document.cookie &amp;amp;&amp;amp; document.cookie != &amp;#39;&amp;#39;) {&lt;br /&gt;
								var split = document.cookie.split(&amp;#39;;&amp;#39;);&lt;br /&gt;
								for (var i = 0; i &amp;lt; split.length; i++) {&lt;br /&gt;
									var name_value = split[i].split(&amp;quot;=&amp;quot;);&lt;br /&gt;
									name_value[0] = name_value[0].replace(/^ /, &amp;#39;&amp;#39;);&lt;br /&gt;
									&lt;br /&gt;
									var name = decodeURIComponent(name_value[0]);&lt;br /&gt;
									var value = this.getSubcookie(decodeURIComponent(name_value[1]));&lt;br /&gt;
									&lt;br /&gt;
									c.push([name, value]);&lt;br /&gt;
								}&lt;br /&gt;
							}&lt;br /&gt;
							else {&lt;br /&gt;
								c = { &amp;quot;empty&amp;quot;: &amp;quot;cookie&amp;quot; };&lt;br /&gt;
							}	&lt;br /&gt;
							return c;&lt;br /&gt;
						}&lt;br /&gt;
					},	&lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;getcookie&amp;quot;,&lt;br /&gt;
						value: function getcookie() {&lt;br /&gt;
							var c = this.getAllcookies();&lt;br /&gt;
							&lt;br /&gt;
							var cr = { &amp;quot;empty&amp;quot;: &amp;quot;cookie&amp;quot; };&lt;br /&gt;
							for (var i = 0; i &amp;lt; c.length; i++) {&lt;br /&gt;
&lt;br /&gt;
								//alert(c[i][0]);&lt;br /&gt;
								if (c[i][0] == this.cookie_name) { &lt;br /&gt;
									cr = [ c[i][0], c[i][1] ];&lt;br /&gt;
									break;&lt;br /&gt;
								}	&lt;br /&gt;
								&lt;br /&gt;
							}&lt;br /&gt;
							return cr;&lt;br /&gt;
						}&lt;br /&gt;
					},	&lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;setListner&amp;quot;,&lt;br /&gt;
						value: function setListner() {&lt;br /&gt;
							var _this2 = this;&lt;br /&gt;
							Array.prototype.slice.call(this.toggleHeadingEls).forEach(function(buttonEl, index) {&lt;br /&gt;
								var id = buttonEl.getAttribute(_this2.toggleHeadingAttr);&lt;br /&gt;
								if (id) {&lt;br /&gt;
									buttonEl.addEventListener(&amp;quot;click&amp;quot;, function(e) {&lt;br /&gt;
										e.preventDefault();&lt;br /&gt;
										_this2.toggleSlide(id, buttonEl);&lt;br /&gt;
									}, false);&lt;br /&gt;
								}&lt;br /&gt;
							});&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;setItem&amp;quot;,&lt;br /&gt;
						value: function setItem() {&lt;br /&gt;
							var _this = this;&lt;br /&gt;
							Array.prototype.slice.call(this.toggleContentEls).forEach(function(contentEl) {&lt;br /&gt;
								contentEl.style.maxHeight = &amp;quot;none&amp;quot;;&lt;br /&gt;
							});&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;setItemStatus&amp;quot;,&lt;br /&gt;
						value: function setItemStatus(id, collapsed) {&lt;br /&gt;
							this.itemsStatus[id] = collapsed;&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;expandAll&amp;quot;,&lt;br /&gt;
						value: function expandAll() {&lt;br /&gt;
							for (var id in this.itemsStatus)&lt;br /&gt;
								this.setItemStatus(id, HANDY_EXPAND_CLASS);&lt;br /&gt;
		&lt;br /&gt;
							this.saveSettings();&lt;br /&gt;
							this.refresh();&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;collapseAll&amp;quot;,&lt;br /&gt;
						value: function collapseAll() {&lt;br /&gt;
							for (var id in this.itemsStatus)&lt;br /&gt;
								this.setItemStatus(id, HANDY_COLLAPSED_CLASS);&lt;br /&gt;
		&lt;br /&gt;
							this.saveSettings();&lt;br /&gt;
							this.refresh();&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;refresh&amp;quot;,&lt;br /&gt;
						value: function refresh() {&lt;br /&gt;
							var _this2 = this;&lt;br /&gt;
							Array.prototype.slice.call(this.toggleHeadingEls).forEach(function(buttonEl, index) {&lt;br /&gt;
								var id = buttonEl.getAttribute(_this2.toggleHeadingAttr);&lt;br /&gt;
								if (id) {&lt;br /&gt;
									// look for the id in loaded settings, apply the normal/collapsed class&lt;br /&gt;
									if (_this2.itemsStatus.hasOwnProperty(id)) {&lt;br /&gt;
										if (_this2.itemsStatus[id] == HANDY_EXPAND_CLASS) {&lt;br /&gt;
											buttonEl.parentNode.classList.remove(HANDY_COLLAPSED_CLASS);&lt;br /&gt;
											buttonEl.parentNode.classList.add(HANDY_EXPAND_CLASS);&lt;br /&gt;
										}	&lt;br /&gt;
										else {&lt;br /&gt;
											buttonEl.parentNode.classList.remove(HANDY_EXPAND_CLASS);&lt;br /&gt;
											buttonEl.parentNode.classList.add(HANDY_COLLAPSED_CLASS);&lt;br /&gt;
										}	&lt;br /&gt;
									}	&lt;br /&gt;
									else {&lt;br /&gt;
										// if no saved setting, see the initial setting&lt;br /&gt;
										_this2.itemsStatus[id] = &lt;br /&gt;
											(buttonEl.parentNode.classList.contains(HANDY_EXPAND_CLASS)) ? HANDY_EXPAND_CLASS : HANDY_COLLAPSED_CLASS;&lt;br /&gt;
									}&lt;br /&gt;
						&lt;br /&gt;
									var expand = buttonEl.parentNode.classList.contains(HANDY_EXPAND_CLASS);&lt;br /&gt;
&lt;br /&gt;
									_this2.setItemStatus(id, expand ? HANDY_EXPAND_CLASS : HANDY_COLLAPSED_CLASS);&lt;br /&gt;
								&lt;br /&gt;
									if (expand) {&lt;br /&gt;
										_this2.open(id, false, false);&lt;br /&gt;
									} else {&lt;br /&gt;
										_this2.close(id, false, false);&lt;br /&gt;
									}&lt;br /&gt;
								}&lt;br /&gt;
							});&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;toggleSlide&amp;quot;,&lt;br /&gt;
						value: function toggleSlide(id, buttonEl) {&lt;br /&gt;
							var isRunCallback = arguments.length &amp;gt; 1 &amp;amp;&amp;amp; arguments[1] !== undefined ? arguments[1] : true;&lt;br /&gt;
	&lt;br /&gt;
							if (this.itemsStatus[id] == HANDY_EXPAND_CLASS) {&lt;br /&gt;
								this.saveSettings(id, HANDY_COLLAPSED_CLASS);&lt;br /&gt;
								this.close(id, isRunCallback, this.isAimation);&lt;br /&gt;
							} else {&lt;br /&gt;
								this.saveSettings(id, HANDY_EXPAND_CLASS);&lt;br /&gt;
								this.open(id, isRunCallback, this.isAimation);&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;open&amp;quot;,&lt;br /&gt;
						value: function open(id) {&lt;br /&gt;
							var _this3 = this;&lt;br /&gt;
							var isRunCallback = arguments.length &amp;gt; 1 &amp;amp;&amp;amp; arguments[1] !== undefined ? arguments[1] : true;&lt;br /&gt;
							var isAimation = arguments.length &amp;gt; 2 &amp;amp;&amp;amp; arguments[2] !== undefined ? arguments[2] : true;&lt;br /&gt;
							if (!id) return;&lt;br /&gt;
							if (this.closeOthers) {&lt;br /&gt;
								Array.prototype.slice.call(this.toggleHeadingEls).forEach(function(buttonEl, index) {&lt;br /&gt;
									var closeId = buttonEl.getAttribute(_this3.toggleHeadingAttr);&lt;br /&gt;
									if (closeId !== id) _this3.close(closeId, false, isAimation);&lt;br /&gt;
								});&lt;br /&gt;
							}&lt;br /&gt;
							if (isRunCallback !== false) this.onSlideStart(true, id);&lt;br /&gt;
							var toggleButton = document.querySelector(&amp;quot;[&amp;quot; + this.toggleHeadingAttr + &amp;quot;=&amp;#39;&amp;quot; + id + &amp;quot;&amp;#39;]&amp;quot;);&lt;br /&gt;
							var toggleContent = document.querySelector(&amp;quot;[&amp;quot; + this.toggleContentAttr + &amp;quot;=&amp;#39;&amp;quot; + id + &amp;quot;&amp;#39;]&amp;quot;);&lt;br /&gt;
							var clientHeight = this.getTargetHeight(toggleContent);&lt;br /&gt;
							toggleButton.parentNode.classList.remove(HANDY_COLLAPSED_CLASS);&lt;br /&gt;
							toggleButton.parentNode.classList.add(HANDY_EXPAND_CLASS);&lt;br /&gt;
							if (isAimation) {&lt;br /&gt;
								toggleContent.style.transition = this.animatinSpeed + &amp;quot;ms &amp;quot; + this.cssEasing;&lt;br /&gt;
								toggleContent.style.maxHeight = (clientHeight || &amp;quot;1000&amp;quot;) + &amp;quot;px&amp;quot;;&lt;br /&gt;
								setTimeout(function() {&lt;br /&gt;
									if (isRunCallback !== false) _this3.onSlideEnd(true, id);&lt;br /&gt;
									toggleContent.style.maxHeight = &amp;quot;none&amp;quot;;&lt;br /&gt;
									toggleContent.style.transition = &amp;quot;&amp;quot;;&lt;br /&gt;
								}, this.animatinSpeed);&lt;br /&gt;
							} else {&lt;br /&gt;
								toggleContent.style.maxHeight = &amp;quot;none&amp;quot;;&lt;br /&gt;
							}&lt;br /&gt;
							this.itemsStatus[id] = HANDY_EXPAND_CLASS;&lt;br /&gt;
						}	&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;close&amp;quot;,&lt;br /&gt;
						value: function close(id) {&lt;br /&gt;
							var _this4 = this;&lt;br /&gt;
							var isRunCallback = arguments.length &amp;gt; 1 &amp;amp;&amp;amp; arguments[1] !== undefined ? arguments[1] : true;&lt;br /&gt;
							var isAimation = arguments.length &amp;gt; 2 &amp;amp;&amp;amp; arguments[2] !== undefined ? arguments[2] : true;&lt;br /&gt;
							if (!id) return;&lt;br /&gt;
							if (isRunCallback !== false) this.onSlideStart(false, id);&lt;br /&gt;
							var toggleButton = document.querySelector(&amp;quot;[&amp;quot; + this.toggleHeadingAttr + &amp;quot;=&amp;#39;&amp;quot; + id + &amp;quot;&amp;#39;]&amp;quot;);&lt;br /&gt;
							var toggleContent = document.querySelector(&amp;quot;[&amp;quot; + this.toggleContentAttr + &amp;quot;=&amp;#39;&amp;quot; + id + &amp;quot;&amp;#39;]&amp;quot;);&lt;br /&gt;
							toggleButton.parentNode.classList.remove(HANDY_EXPAND_CLASS);&lt;br /&gt;
							toggleButton.parentNode.classList.add(HANDY_COLLAPSED_CLASS);&lt;br /&gt;
							toggleContent.style.maxHeight = toggleContent.clientHeight + &amp;quot;px&amp;quot;;&lt;br /&gt;
							setTimeout(function() {&lt;br /&gt;
								toggleContent.style.maxHeight = &amp;quot;0px&amp;quot;;&lt;br /&gt;
							}, 5);&lt;br /&gt;
							if (isAimation) {&lt;br /&gt;
								toggleContent.style.transition = this.animatinSpeed + &amp;quot;ms &amp;quot; + this.cssEasing;&lt;br /&gt;
								setTimeout(function() {&lt;br /&gt;
									if (isRunCallback !== false) _this4.onSlideEnd(false, id);&lt;br /&gt;
									toggleContent.style.transition = &amp;quot;&amp;quot;;&lt;br /&gt;
								}, this.animatinSpeed);&lt;br /&gt;
							} else {&lt;br /&gt;
								this.onSlideEnd(false, id);&lt;br /&gt;
							}&lt;br /&gt;
							this.itemsStatus[id] = HANDY_COLLAPSED_CLASS;&lt;br /&gt;
						}&lt;br /&gt;
					}, &lt;br /&gt;
					{&lt;br /&gt;
						key: &amp;quot;getTargetHeight&amp;quot;,&lt;br /&gt;
						value: function getTargetHeight(targetEl) {&lt;br /&gt;
							if (!targetEl) return;&lt;br /&gt;
							var cloneEl = targetEl.cloneNode(true);&lt;br /&gt;
							var parentEl = targetEl.parentNode;&lt;br /&gt;
							cloneEl.style.maxHeight = &amp;quot;none&amp;quot;;&lt;br /&gt;
							cloneEl.style.opacity = &amp;quot;0&amp;quot;;&lt;br /&gt;
							parentEl.appendChild(cloneEl);&lt;br /&gt;
							targetEl.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
							var clientHeight = cloneEl.clientHeight;&lt;br /&gt;
							parentEl.removeChild(cloneEl);&lt;br /&gt;
							return clientHeight;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			);&lt;br /&gt;
    &lt;br /&gt;
			return HandyCollapse;&lt;br /&gt;
		}();&lt;br /&gt;
&lt;br /&gt;
		if ((typeof module === &amp;quot;undefined&amp;quot; ? &amp;quot;undefined&amp;quot; : _typeof(module)) === &amp;#39;object&amp;#39;) {&lt;br /&gt;
			module.exports = HandyCollapse;&lt;br /&gt;
		}&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
        //Nested&lt;br /&gt;
        let handy_nested = new HandyCollapse({&lt;br /&gt;
            nameSpace: &amp;quot;nested&amp;quot;,&lt;br /&gt;
            closeOthers: false&lt;br /&gt;
        });&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		function formatJSON(jsonstr, html = false) {&lt;br /&gt;
			var tabcount = 0;&lt;br /&gt;
			var result = &amp;quot;&amp;quot;;&lt;br /&gt;
			var inquote = false;&lt;br /&gt;
			var ignorenext = false;&lt;br /&gt;
			var tab = &amp;quot; &amp;quot;;&lt;br /&gt;
			var newline = &amp;quot;\n&amp;quot;;&lt;br /&gt;
			if (html) {&lt;br /&gt;
				tab = &amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;
				newline = &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			for(var i = 0; i &amp;lt; jsonstr.length; i++) &lt;br /&gt;
			{&lt;br /&gt;
				c = jsonstr[i];&lt;br /&gt;
				if (ignorenext) {&lt;br /&gt;
					result += c;&lt;br /&gt;
					ignorenext = false;&lt;br /&gt;
				} else {&lt;br /&gt;
					switch(c) {&lt;br /&gt;
						case &amp;#39;[&amp;#39;:&lt;br /&gt;
						case &amp;#39;{&amp;#39;:&lt;br /&gt;
							tabcount++;&lt;br /&gt;
							result += c + newline + tab.repeat( tabcount*2);&lt;br /&gt;
							break;&lt;br /&gt;
						case &amp;#39;]&amp;#39;:&lt;br /&gt;
						case &amp;#39;}&amp;#39;:&lt;br /&gt;
							tabcount--;&lt;br /&gt;
							result = result.trim() + newline + tab.repeat( tabcount*2) + c;&lt;br /&gt;
							break;&lt;br /&gt;
						case &amp;#39;,&amp;#39;:&lt;br /&gt;
							result += c + newline + tab.repeat( tabcount*2);&lt;br /&gt;
							break;&lt;br /&gt;
						case &amp;#39;&amp;quot;&amp;#39;:&lt;br /&gt;
							if ( !inquote ) {	&lt;br /&gt;
								if ( jsonstr[i-1] == &amp;#39;:&amp;#39; || jsonstr[i-2] == &amp;#39;:&amp;#39; )&lt;br /&gt;
									result += &amp;#39;&amp;lt;span style=&amp;quot;color:#0000ff;&amp;quot;&amp;gt;&amp;#39;;&lt;br /&gt;
								else&lt;br /&gt;
									result += &amp;#39;&amp;lt;span style=&amp;quot;color:#ff0000;&amp;quot;&amp;gt;&amp;#39;;&lt;br /&gt;
							}&lt;br /&gt;
							if (inquote)&lt;br /&gt;
								result += &amp;#39;&amp;lt;/span&amp;gt;&amp;#39;;&lt;br /&gt;
							inquote = !inquote;&lt;br /&gt;
							result += c;&lt;br /&gt;
							break;&lt;br /&gt;
						case &amp;#39;\\&amp;#39;:&lt;br /&gt;
							if (inquote) ignorenext = true;&lt;br /&gt;
							result += c;&lt;br /&gt;
							break;&lt;br /&gt;
						default:&lt;br /&gt;
							result += c;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (result == &amp;quot;&amp;quot;)&lt;br /&gt;
				result = &amp;quot;no data...&amp;quot;;&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;+result+&amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			return result;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var json_data1 = {a:1, &amp;#39;b&amp;#39;:&amp;#39;foo&amp;#39;, c:[false, &amp;#39;false&amp;#39;, null, &amp;#39;null&amp;#39;, {d:{e:1.3e5, f:&amp;#39;1.3e5&amp;#39;}}]};&lt;br /&gt;
		var json_data2 = { &amp;quot;data&amp;quot;: { &amp;quot;x&amp;quot;: 1, &amp;quot;y&amp;quot;: 1, &amp;quot;url&amp;quot;: &amp;quot;http://url.com&amp;quot; }, &amp;quot;event&amp;quot;: &amp;quot;start&amp;quot;, &amp;quot;show&amp;quot;: 1, &amp;quot;id&amp;quot;: 50 };	&lt;br /&gt;
		var json_data = {&lt;br /&gt;
			key0: &amp;quot;&amp;amp;lt;script&amp;amp;gt;alert(&amp;#39;no xss!&amp;#39;)&amp;amp;lt;\/script&amp;amp;gt;&amp;quot;,&lt;br /&gt;
			key1: &amp;quot;alert(&amp;#39;no xss!&amp;#39;)&amp;quot;,&lt;br /&gt;
			key2: 12345,&lt;br /&gt;
			key3: new Date(),&lt;br /&gt;
			key4: [],&lt;br /&gt;
			key5: [&lt;br /&gt;
				123,&lt;br /&gt;
				&amp;quot;123&amp;quot;,&lt;br /&gt;
				{&lt;br /&gt;
					a: 5,&lt;br /&gt;
					b: 6,&lt;br /&gt;
					c: null,&lt;br /&gt;
					d: true&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			key6: {&lt;br /&gt;
				a: 1,&lt;br /&gt;
				b: 3,&lt;br /&gt;
				c: {&lt;br /&gt;
					d: 4&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		function all_cookiesArray() &lt;br /&gt;
		{&lt;br /&gt;
			function getSubcookie(cookieValue) &lt;br /&gt;
			{&lt;br /&gt;
				var itemsArray = {};&lt;br /&gt;
				var cData = cookieValue.split(&amp;quot;,&amp;quot;);&lt;br /&gt;
				// split each key:value pair and put in object&lt;br /&gt;
				for (var i=0; i&amp;lt; cData.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					var pair = cData[i].split(&amp;quot;:&amp;quot;);&lt;br /&gt;
					itemsArray[pair[0]] = pair[1];&lt;br /&gt;
				}&lt;br /&gt;
				return itemsArray;&lt;br /&gt;
			}&lt;br /&gt;
			var c = [];&lt;br /&gt;
			if (document.cookie &amp;amp;&amp;amp; document.cookie != &amp;#39;&amp;#39;) {&lt;br /&gt;
				var split = document.cookie.split(&amp;#39;;&amp;#39;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; split.length; i++) {&lt;br /&gt;
					var name_value = split[i].split(&amp;quot;=&amp;quot;);&lt;br /&gt;
					name_value[0] = name_value[0].replace(/^ /, &amp;#39;&amp;#39;);&lt;br /&gt;
					c.push(decodeURIComponent(name_value[0]), getSubcookie(decodeURIComponent(name_value[1])));&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else {&lt;br /&gt;
				c = { &amp;quot;empty&amp;quot;: &amp;quot;cookie&amp;quot; };&lt;br /&gt;
			}	&lt;br /&gt;
			return c;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function loadjsondata() {&lt;br /&gt;
			var json_data_str = JSON.stringify(json_data);&lt;br /&gt;
			document.getElementById(&amp;quot;disp_format_json&amp;quot;).innerHTML  = &amp;quot;json_data&amp;lt;br&amp;gt;&amp;quot;+formatJSON(json_data_str);&lt;br /&gt;
			var json_data_str1 = JSON.stringify(json_data1);&lt;br /&gt;
			document.getElementById(&amp;quot;disp_format_json1&amp;quot;).innerHTML  = &amp;quot;json_data1&amp;lt;br&amp;gt;&amp;quot;+formatJSON(json_data_str1);&lt;br /&gt;
			var json_data_str2 = JSON.stringify(json_data2);&lt;br /&gt;
			document.getElementById(&amp;quot;disp_format_json2&amp;quot;).innerHTML  = &amp;quot;json_data2&amp;lt;br&amp;gt;&amp;quot;+formatJSON(json_data_str2);&lt;br /&gt;
&lt;br /&gt;
			var handycookiesArray = handy_nested.getcookie();&lt;br /&gt;
			var handycookiesArray_str = JSON.stringify(handycookiesArray);&lt;br /&gt;
			document.getElementById(&amp;quot;handycookiesArray&amp;quot;).innerHTML  = &amp;quot;handycookiesArray&amp;lt;br&amp;gt;&amp;quot;+formatJSON(handycookiesArray_str);&lt;br /&gt;
&lt;br /&gt;
			var allcookiesArray = all_cookiesArray();&lt;br /&gt;
			var allcookiesArray_str = JSON.stringify(allcookiesArray);&lt;br /&gt;
			document.getElementById(&amp;quot;allcookiesArray&amp;quot;).innerHTML  = &amp;quot;allcookiesArray&amp;lt;br&amp;gt;&amp;quot;+formatJSON(allcookiesArray_str);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		loadjsondata();&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
		document.getElementById(&amp;quot;loadjsondata&amp;quot;).addEventListener(&amp;#39;click&amp;#39;, function(event)&lt;br /&gt;
		{&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
			loadjsondata();&lt;br /&gt;
			return false;&lt;br /&gt;
		} );&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sat, 25 Feb 2023 23:23:23 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>Javascript animated collapsible panels</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25084</link>
                    <description>https://www.media-division.com/javascript-animated-collapsible-panels-without-frameworks/&lt;br /&gt;
&lt;br /&gt;
뭔가 필요할거 같았는데 만들고 나니 그다지 유용할거 같지 않은&lt;br /&gt;
&lt;br /&gt;
멍때릴대 유용함.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;left-sidebar-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ex-panel left&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;progress&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;ex-panelcontent&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;current_datetime&amp;quot; style=&amp;quot;height:17px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;progress_bar&amp;quot; style=&amp;quot;height:19px&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div id=&amp;quot;progress_forward&amp;quot; style=&amp;quot;height:19px; width:50%; float:left;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div id=&amp;quot;progress_backward&amp;quot; style=&amp;quot;height:19px; width:50%; float:right&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;							&lt;br /&gt;
		&amp;lt;/div&amp;gt;				&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ex-panel collapsed left&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;text&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;ex-panelcontent&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;textarea id=&amp;quot;disp_text_area&amp;quot; name=&amp;quot;disp_text_area&amp;quot; rows=&amp;quot;5&amp;quot; style=&amp;quot;width: 99.9%&amp;quot; spellcheck=&amp;quot;false&amp;quot; placeholder=&amp;quot;disp_text&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;멍때림 금지구역&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.left-sidebar-wrapper {&lt;br /&gt;
	font-size: 10pt;&lt;br /&gt;
	margin: 1px;&lt;br /&gt;
	padding: 2px 2px 2px 2px; &lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	background-color: #eee; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#current_datetime {&lt;br /&gt;
    padding: 0px 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#progress_bar {&lt;br /&gt;
    width: 99.45%;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 3px 0px 0px 3px;&lt;br /&gt;
    border: 1px solid #777;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#progress_forward,&lt;br /&gt;
#progress_backward {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* panel */&lt;br /&gt;
.ex-panel&lt;br /&gt;
{&lt;br /&gt;
	background: #eee;&lt;br /&gt;
	margin: 1px;&lt;br /&gt;
	padding: 0px 0px 3px 0px;&lt;br /&gt;
	border: 1px solid #999;&lt;br /&gt;
	-moz-border-radius: 3px;&lt;br /&gt;
	-webkit-border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* panel heading */&lt;br /&gt;
.ex-panel h3&lt;br /&gt;
{&lt;br /&gt;
	/* font-size: 15px; */&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	margin: 0px;&lt;br /&gt;
	padding: 2px 2px 2px 5px;&lt;br /&gt;
	background: #CCC url(images/arrow-up.gif) no-repeat center right;&lt;br /&gt;
	border-bottom: 1px solid #999;&lt;br /&gt;
	-moz-border-radius: 3px;&lt;br /&gt;
	-webkit-border-radius: 3px;&lt;br /&gt;
	border-top: 1px solid #FFF;&lt;br /&gt;
	border-right: 1px solid #FFF;&lt;br /&gt;
	border-left: 1px solid #FFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* panel heading on rollover */&lt;br /&gt;
.ex-panel h3:hover { background-color: #A9BCEF; }&lt;br /&gt;
&lt;br /&gt;
/* heading of a collapsed panel */&lt;br /&gt;
.ex-panel.collapsed h3&lt;br /&gt;
{&lt;br /&gt;
	background: #CCC url(images/arrow-dn.gif) no-repeat center right;&lt;br /&gt;
	border-color: #CCC;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* collapsed panel content */&lt;br /&gt;
.ex-panel.collapsed .ex-panelcontent { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* panel content - do not set borders or paddings */&lt;br /&gt;
.ex-panelcontent &lt;br /&gt;
{ &lt;br /&gt;
	margin: 0px 0px 0px 0px;&lt;br /&gt;
	padding: 0px 0px 0px 2px;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background: #EEE;&lt;br /&gt;
	list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	//도움 받은 곳&lt;br /&gt;
	//https://stackoverflow.com/questions/13958303/curl-download-progress-in-php&lt;br /&gt;
	//https://www.media-division.com/javascript-animated-collapsible-panels-without-frameworks/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;left-sidebar-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ex-panel left&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;progress&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;ex-panelcontent&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;current_datetime&amp;quot; style=&amp;quot;height:17px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;progress_bar&amp;quot; style=&amp;quot;height:19px&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div id=&amp;quot;progress_forward&amp;quot; style=&amp;quot;height:19px; width:50%; float:left;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div id=&amp;quot;progress_backward&amp;quot; style=&amp;quot;height:19px; width:50%; float:right&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;							&lt;br /&gt;
		&amp;lt;/div&amp;gt;				&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;ex-panel collapsed left&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;h3&amp;gt;text&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;ex-panelcontent&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;textarea id=&amp;quot;disp_text_area&amp;quot; name=&amp;quot;disp_text_area&amp;quot; rows=&amp;quot;5&amp;quot; style=&amp;quot;width: 99.9%&amp;quot; spellcheck=&amp;quot;false&amp;quot; placeholder=&amp;quot;disp_text&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	function numberPad(n, width) {&lt;br /&gt;
		n = n + &amp;#39;&amp;#39;;&lt;br /&gt;
		return n.length &amp;gt;= width ? n : new Array(width - n.length + 1).join(&amp;#39;0&amp;#39;) + n;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var current_datetimeElement = document.getElementById(&amp;#39;current_datetime&amp;#39;)&lt;br /&gt;
&lt;br /&gt;
	var progress_forwardElement = document.getElementById(&amp;#39;progress_forward&amp;#39;)&lt;br /&gt;
	var progress_backwardElement = document.getElementById(&amp;#39;progress_backward&amp;#39;)&lt;br /&gt;
&lt;br /&gt;
	function updateProgress(percentage, progress, current_datetime, forward=ture) {&lt;br /&gt;
		if (forward) {&lt;br /&gt;
			progress_forwardElement.style.width = percentage + &amp;#39;%&amp;#39;;&lt;br /&gt;
			progress_forwardElement.style.backgroundColor = &amp;quot;#999&amp;quot;;&lt;br /&gt;
			progress_forwardElement.innerText = numberPad(progress, 2);&lt;br /&gt;
&lt;br /&gt;
			progress_backwardElement.style.width = (100 - percentage) + &amp;#39;%&amp;#39;;&lt;br /&gt;
			progress_backwardElement.style.backgroundColor = &amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			progress_backwardElement.innerText = numberPad((60 - progress), 2);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			progress_forwardElement.style.width = percentage + &amp;#39;%&amp;#39;;&lt;br /&gt;
			progress_forwardElement.style.backgroundColor = &amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			progress_forwardElement.innerText = numberPad((60 - progress), 2);&lt;br /&gt;
&lt;br /&gt;
			progress_backwardElement.style.width = (100 - percentage) + &amp;#39;%&amp;#39;;&lt;br /&gt;
			progress_backwardElement.style.backgroundColor = &amp;quot;#999&amp;quot;;&lt;br /&gt;
			progress_backwardElement.innerText = numberPad(progress, 2);&lt;br /&gt;
		}	&lt;br /&gt;
		&lt;br /&gt;
		current_datetimeElement.innerText = current_datetime;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	var clockF_set = false;&lt;br /&gt;
	var clockF_forward = true;&lt;br /&gt;
	function clockF() { &lt;br /&gt;
		today = new Date(); &lt;br /&gt;
		var weekday = new Array(7);&lt;br /&gt;
		weekday[0] = &amp;quot;일요일&amp;quot;;&lt;br /&gt;
		weekday[1] = &amp;quot;월요일&amp;quot;;&lt;br /&gt;
		weekday[2] = &amp;quot;화요일&amp;quot;;&lt;br /&gt;
		weekday[3] = &amp;quot;수요일&amp;quot;;&lt;br /&gt;
		weekday[4] = &amp;quot;목요일&amp;quot;;&lt;br /&gt;
		weekday[5] = &amp;quot;금요일&amp;quot;;&lt;br /&gt;
		weekday[6] = &amp;quot;토요일&amp;quot;;&lt;br /&gt;
		var day = weekday[today.getDay()];			&lt;br /&gt;
		&lt;br /&gt;
		var symd = today.toISOString().split(&amp;#39;T&amp;#39;)[0]+&amp;quot; &amp;quot;+day;&lt;br /&gt;
		var shms = today.toTimeString().split(&amp;#39; &amp;#39;)[0];&lt;br /&gt;
		var ssec = today.getSeconds(); &lt;br /&gt;
		var smilisec = today.getMilliseconds(); &lt;br /&gt;
		var progress = (ssec + (smilisec / 1000))/60 * 100;&lt;br /&gt;
&lt;br /&gt;
		if (ssec == 0 &amp;amp;&amp;amp; clockF_set) {&lt;br /&gt;
			clockF_set = false;&lt;br /&gt;
			clockF_forward = ! clockF_forward;&lt;br /&gt;
		}	&lt;br /&gt;
		if (ssec &amp;gt;= 1)&lt;br /&gt;
			clockF_set = true;&lt;br /&gt;
&lt;br /&gt;
		if (! clockF_forward)&lt;br /&gt;
			progress = 100 - progress;&lt;br /&gt;
&lt;br /&gt;
	    updateProgress(progress, ssec, symd + &amp;quot; &amp;quot; + shms, clockF_forward);&lt;br /&gt;
	} &lt;br /&gt;
	setInterval(&amp;#39;clockF()&amp;#39; , 100) ; &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&amp;lt;?php echo JS_DIR; ?&amp;gt;/ex-pannel.js&amp;quot;&amp;gt;&amp;lt;/script--&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
var PANEL_CLASS           = &amp;quot;ex-panel&amp;quot;;&lt;br /&gt;
var PANEL_EXPAND_CLASS    = &amp;quot;expand&amp;quot;;&lt;br /&gt;
var PANEL_COLLAPSED_CLASS = &amp;quot;collapsed&amp;quot;;&lt;br /&gt;
var PANEL_HEADING_TAG     = &amp;quot;h3&amp;quot;;&lt;br /&gt;
var PANEL_CONTENT_CLASS   = &amp;quot;ex-panelcontent&amp;quot;;&lt;br /&gt;
var PANEL_COOKIE_NAME     = &amp;quot;ex-panels&amp;quot;;&lt;br /&gt;
var PANEL_ANIMATION_DELAY = 20; /*ms*/&lt;br /&gt;
var PANEL_ANIMATION_STEPS = 10;&lt;br /&gt;
&lt;br /&gt;
var PANEL_CLASS_LEFT      = &amp;quot;left&amp;quot;;&lt;br /&gt;
var PANEL_CLASS_RIGHT     = &amp;quot;right&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
var panelsleft = new Array();;&lt;br /&gt;
var panelsright = new Array();;&lt;br /&gt;
&lt;br /&gt;
var	panelsStatus = new Array();;&lt;br /&gt;
&lt;br /&gt;
function getPanelsHeight()&lt;br /&gt;
{&lt;br /&gt;
	var lh = 0;&lt;br /&gt;
	for (var i=0; i&amp;lt;panelsleft.length; i++) {&lt;br /&gt;
		lh += panelsleft[i].offsetHeight;&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	var rh = 0;&lt;br /&gt;
	for (var i=0; i&amp;lt;panelsright.length; i++) {&lt;br /&gt;
		rh += panelsright[i].offsetHeight;&lt;br /&gt;
	}	&lt;br /&gt;
&lt;br /&gt;
	var lsw = document.getElementById(&amp;#39;left-sidebar-wrapper&amp;#39;);&lt;br /&gt;
	var lsw_h = window.getComputedStyle(lsw).height;&lt;br /&gt;
	lsw_h = Number(lsw_h.replace(&amp;#39;px&amp;#39;, &amp;#39;&amp;#39;));&lt;br /&gt;
&lt;br /&gt;
	var rsw = document.getElementById(&amp;#39;right-sidebar-wrapper&amp;#39;);&lt;br /&gt;
	var rsw_h = window.getComputedStyle(rsw).height;&lt;br /&gt;
	rsw_h = Number(rsw_h.replace(&amp;#39;px&amp;#39;, &amp;#39;&amp;#39;));&lt;br /&gt;
&lt;br /&gt;
	var big_lr = (lh&amp;gt;rh) ? lh : rh;&lt;br /&gt;
	var big_lswrsw = (lsw_h&amp;gt;rsw_h) ? lsw_h : rsw_h;&lt;br /&gt;
	var big = (big_lr&amp;gt;big_lswrsw) ? big_lr : big_lswrsw;&lt;br /&gt;
&lt;br /&gt;
    var ret = [];&lt;br /&gt;
	ret[&amp;#39;lh&amp;#39;] = lh;&lt;br /&gt;
	ret[&amp;#39;rh&amp;#39;] = rh;&lt;br /&gt;
	ret[&amp;#39;lsw_h&amp;#39;] = lsw_h;&lt;br /&gt;
	ret[&amp;#39;rsw_h&amp;#39;] = rsw_h;&lt;br /&gt;
	ret[&amp;#39;big_lr&amp;#39;] = big_lr;&lt;br /&gt;
	ret[&amp;#39;big_lswrsw&amp;#39;] = big_lswrsw;&lt;br /&gt;
	ret[&amp;#39;big&amp;#39;] = big;&lt;br /&gt;
&lt;br /&gt;
	return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setUpPanels()&lt;br /&gt;
{&lt;br /&gt;
	loadSettings();&lt;br /&gt;
	&lt;br /&gt;
	// get all headings&lt;br /&gt;
	var headingTags = document.getElementsByTagName(PANEL_HEADING_TAG);&lt;br /&gt;
	&lt;br /&gt;
	// go through all tags&lt;br /&gt;
	for (var i=0; i&amp;lt;headingTags.length; i++)&lt;br /&gt;
	{&lt;br /&gt;
		var el = headingTags[i];&lt;br /&gt;
		var panel = headingTags[i].parentNode;&lt;br /&gt;
		&lt;br /&gt;
		// make sure it&amp;#39;s the heading inside a panel&lt;br /&gt;
		if (! panel.classList.contains(PANEL_CLASS))&lt;br /&gt;
			continue;		&lt;br /&gt;
&lt;br /&gt;
		if (panel.classList.contains(PANEL_CLASS_LEFT)) {&lt;br /&gt;
			panelsleft.push(panel);&lt;br /&gt;
		}	&lt;br /&gt;
		else if (panel.classList.contains(PANEL_CLASS_RIGHT)) {&lt;br /&gt;
			panelsright.push(panel);&lt;br /&gt;
		}	&lt;br /&gt;
	&lt;br /&gt;
		// get the text value of the tag&lt;br /&gt;
		var name = el.firstChild.nodeValue;&lt;br /&gt;
	&lt;br /&gt;
		// look for the name in loaded settings, apply the normal/collapsed class&lt;br /&gt;
		if (panelsStatus[name] == &amp;quot;collapsed&amp;quot;) {&lt;br /&gt;
			panel.classList.remove(PANEL_EXPAND_CLASS);&lt;br /&gt;
			panel.classList.add(PANEL_COLLAPSED_CLASS);&lt;br /&gt;
		}	&lt;br /&gt;
		else if (panelsStatus[name] == &amp;quot;expand&amp;quot;) {&lt;br /&gt;
			panel.classList.remove(PANEL_COLLAPSED_CLASS);&lt;br /&gt;
			panel.classList.add(PANEL_EXPAND_CLASS);&lt;br /&gt;
		}	&lt;br /&gt;
		else {&lt;br /&gt;
			// if no saved setting, see the initial setting&lt;br /&gt;
			panelsStatus[name] = (panel.classList.contains(PANEL_EXPAND_CLASS)) ? &amp;quot;expand&amp;quot; : &amp;quot;collapsed&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// add the click behavor to headings&lt;br /&gt;
		el.onclick = function() &lt;br /&gt;
		{&lt;br /&gt;
			var target    = this.parentNode;&lt;br /&gt;
			var name      = this.firstChild.nodeValue;&lt;br /&gt;
			var collapsed = target.classList.contains(PANEL_COLLAPSED_CLASS);&lt;br /&gt;
			saveSettings(name, collapsed?&amp;quot;expand&amp;quot;:&amp;quot;collapsed&amp;quot;);&lt;br /&gt;
			animateTogglePanel(target, collapsed);&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Start the expand/collapse animation of the panel&lt;br /&gt;
 * @param panel reference to the panel div&lt;br /&gt;
 */&lt;br /&gt;
function animateTogglePanel(panel, expanding)&lt;br /&gt;
{&lt;br /&gt;
	// find the .panelcontent div&lt;br /&gt;
	var elements = panel.getElementsByTagName(&amp;quot;div&amp;quot;);&lt;br /&gt;
	var panelContent = null;&lt;br /&gt;
	for (var i=0; i&amp;lt;elements.length; i++)&lt;br /&gt;
	{&lt;br /&gt;
		if (elements[i].classList.contains(PANEL_CONTENT_CLASS))&lt;br /&gt;
		{&lt;br /&gt;
			panelContent = elements[i];&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// make sure the content is visible before getting its height&lt;br /&gt;
	panelContent.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// get the height of the content&lt;br /&gt;
	var contentHeight = panelContent.offsetHeight;&lt;br /&gt;
	var stepHeight = contentHeight / PANEL_ANIMATION_STEPS;&lt;br /&gt;
	&lt;br /&gt;
	// if panel is collapsed and expanding, we must start with 0 height&lt;br /&gt;
	var direction = -1;&lt;br /&gt;
	if (expanding) {&lt;br /&gt;
		direction = 1;&lt;br /&gt;
		panelContent.style.height = &amp;quot;0px&amp;quot;;&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	setTimeout(function(){animateStep(panelContent,1,stepHeight,direction)}, PANEL_ANIMATION_DELAY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Change the height of the target&lt;br /&gt;
 * @param panelContent	reference to the panel content to change height&lt;br /&gt;
 * @param iteration		current iteration; animation will be stopped when iteration reaches PANEL_ANIMATION_STEPS&lt;br /&gt;
 * @param stepHeight	height increment to be added/substracted in one step&lt;br /&gt;
 * @param direction		1 for expanding, -1 for collapsing&lt;br /&gt;
 */&lt;br /&gt;
function animateStep(panelContent, iteration, stepHeight, direction)&lt;br /&gt;
{&lt;br /&gt;
	if (iteration&amp;lt;PANEL_ANIMATION_STEPS)&lt;br /&gt;
	{&lt;br /&gt;
		panelContent.style.height = Math.round(((direction&amp;gt;0) ? iteration : 10 - iteration) * stepHeight) +&amp;quot;px&amp;quot;;&lt;br /&gt;
		iteration++;&lt;br /&gt;
		setTimeout(function(){animateStep(panelContent,iteration,stepHeight,direction)}, PANEL_ANIMATION_DELAY);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		// set class for the panel&lt;br /&gt;
		if (direction &amp;lt; 0) {&lt;br /&gt;
			panelContent.parentNode.classList.remove(PANEL_EXPAND_CLASS);&lt;br /&gt;
			panelContent.parentNode.classList.add(PANEL_COLLAPSED_CLASS);&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			panelContent.parentNode.classList.remove(PANEL_COLLAPSED_CLASS);&lt;br /&gt;
			panelContent.parentNode.classList.add(PANEL_EXPAND_CLASS);&lt;br /&gt;
		}	&lt;br /&gt;
&lt;br /&gt;
		// clear inline styles&lt;br /&gt;
		panelContent.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
		panelContent.style.height = &amp;quot;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------------------------&lt;br /&gt;
// Load-Save&lt;br /&gt;
// -----------------------------------------------------------------------------------------------&lt;br /&gt;
/**&lt;br /&gt;
 * Reads the &amp;quot;panels&amp;quot; cookie if exists, expects data formatted as key:value|key:value... puts in panelsStatus object&lt;br /&gt;
 */&lt;br /&gt;
function loadSettings()&lt;br /&gt;
{&lt;br /&gt;
	// prepare the object that will keep the panel statuses&lt;br /&gt;
	//panelsStatus = {};&lt;br /&gt;
	&lt;br /&gt;
	// find the cookie name&lt;br /&gt;
	var start = document.cookie.indexOf(PANEL_COOKIE_NAME + &amp;quot;=&amp;quot;);&lt;br /&gt;
	if (start == -1) return;&lt;br /&gt;
	&lt;br /&gt;
	// starting point of the value&lt;br /&gt;
	start += PANEL_COOKIE_NAME.length+1;&lt;br /&gt;
	&lt;br /&gt;
	// find end point of the value&lt;br /&gt;
	var end = document.cookie.indexOf(&amp;quot;;&amp;quot;, start);&lt;br /&gt;
	if (end == -1) end = document.cookie.length;&lt;br /&gt;
	&lt;br /&gt;
	// get the value, split into key:value pairs&lt;br /&gt;
	var cookieValue = unescape(document.cookie.substring(start, end));&lt;br /&gt;
	var panelsData = cookieValue.split(&amp;quot;|&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	// split each key:value pair and put in object&lt;br /&gt;
	for (var i=0; i&amp;lt; panelsData.length; i++)&lt;br /&gt;
	{&lt;br /&gt;
		var pair = panelsData[i].split(&amp;quot;:&amp;quot;);&lt;br /&gt;
		panelsStatus[pair[0]] = pair[1];&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function expandAll()&lt;br /&gt;
{&lt;br /&gt;
	for (var key in panelsStatus)&lt;br /&gt;
		saveSettings(key, &amp;quot;expand&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
	setUpPanels();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function collapseAll()&lt;br /&gt;
{&lt;br /&gt;
	for (var key in panelsStatus)&lt;br /&gt;
		saveSettings(key, &amp;quot;collapsed&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
	setUpPanels();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Takes data from the panelsStatus object, formats as key:value|key:value... and puts in cookie valid for 365 days&lt;br /&gt;
 * @param key	key name to save&lt;br /&gt;
 * @paeam value	key value&lt;br /&gt;
 */&lt;br /&gt;
function saveSettings(key, value)&lt;br /&gt;
{&lt;br /&gt;
	// put the new value in the object&lt;br /&gt;
	panelsStatus[key] = value;&lt;br /&gt;
	&lt;br /&gt;
	// create an array that will keep the key:value pairs&lt;br /&gt;
	var panelsData = [];&lt;br /&gt;
	for (var key in panelsStatus)&lt;br /&gt;
		panelsData.push(key+&amp;quot;:&amp;quot;+panelsStatus[key]);&lt;br /&gt;
		&lt;br /&gt;
	// set the cookie expiration date 1 year from now&lt;br /&gt;
	var today = new Date();&lt;br /&gt;
	var expirationDate = new Date(today.getTime() + 365 * 1000 * 60 * 60 * 24);&lt;br /&gt;
	// write the cookie&lt;br /&gt;
	document.cookie = PANEL_COOKIE_NAME + &amp;quot;=&amp;quot; + escape(panelsData.join(&amp;quot;|&amp;quot;)) + &amp;quot;;expires=&amp;quot; + expirationDate.toGMTString();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -----------------------------------------------------------------------------------------------&lt;br /&gt;
// Register setUpPanels to be executed on load&lt;br /&gt;
// the &amp;quot;proper&amp;quot; way&lt;br /&gt;
//if (window.addEventListener)&lt;br /&gt;
//	window.addEventListener(&amp;quot;load&amp;quot;, setUpPanels, false);&lt;br /&gt;
// the IE way&lt;br /&gt;
//else if (window.attachEvent)&lt;br /&gt;
//	window.attachEvent(&amp;quot;onload&amp;quot;, setUpPanels);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	setUpPanels();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sat, 04 Feb 2023 23:13:27 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>개발자에게 유용한 북마크 툴 소개</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25054</link>
                    <description>* 개발자분들께 도움이 되는 내용이라고 생각해 올려 봅니다. 커뮤니티 정책을 위반하는 글이라면 바로 조치하겠습니다(꾸벅)&lt;br /&gt;
&lt;br /&gt;
안녕하세요! 저는 &amp;lsquo;피큐레잇&amp;#39;이라는 북마크 툴을 만들고 있습니다.&lt;br /&gt;
&lt;br /&gt;
피큐레잇의 목표는 구글링 &amp;amp; 링크 저장을 많이 하시는 분들이 최소의 노력으로 최대의 지식 관리 효율을 얻으시는 건데요.&lt;br /&gt;
&lt;br /&gt;
개발자분들만큼 많이 구글링하고 링크 저장하시는 분들도 없다는 생각에, 피큐레잇이 개발자분들께 도움이 될까 싶어 이렇게 글을 올리게 됐습니다.&lt;br /&gt;
&lt;br /&gt;
혹시 여러분은 구글링 기록이나 개발 공부 기록, 어떻게 남기시나요? 요즘은 노션을 많이 쓰시는 것 같은데요, 노션은 괜찮은 툴이지만 제대로 보려면 손이 많이 간다는 게 좀 아쉽죠.&lt;br /&gt;
&lt;br /&gt;
노션은 한번 지저분해지면 나중에 다시 정리할 때 복잡한데, 피큐레잇은 그럴 때 같이 써주면 좋습니다. 막 정리하기에는 애매한데, 그렇다고 아무데나 저장하자니 나중에 못 찾을 것 같은 그런 링크들을 저장하면 딱입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
대분류, 중분류만 정해서 적절한 곳에 넣어주기만 하면 알아서 정리가 끝나거든요. 메모도 쓸 수 있어서 나중에 까먹을 일이 없구요.&lt;br /&gt;
&lt;br /&gt;
노션에는 잘 정리된 것만 넣으시고 이런저런 링크들은 피큐레잇에 먼저 저장해보세요. 더 효율적으로 구글링 기록을 관리하실 수 있을 거예요.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
크롬 익스텐션도 있어서 웹 환경에서 빠르게 링크를 저장할 수도 있습니다. 열린 탭을 한꺼번에 저장할 수도 있어서 분명 개발자분들께서 더 나은 구글링 기록을 남기시는 데 플러스 알파가 될 거라고 생각합니다.&lt;br /&gt;
&lt;br /&gt;
많은 개발자분들께 도움이 되고자 이렇게 피큐레잇을 알리는 글을 쓰게 됐는데요, 만약 링크 저장&amp;middot;관리에 불편함을 느끼고 계셨다면 피큐레잇을 한번 시도해보시면 좋겠습니다.&lt;br /&gt;
&lt;br /&gt;
관심 있는 분들은 아래 링크에서 한번 구경해보세요!&lt;br /&gt;
&lt;br /&gt;
피큐레잇 구경하러 가기 &amp;rarr;&amp;nbsp;http://bit.ly/3QRE8Wt</description>
                    <pubDate>Fri, 20 Jan 2023 15:33:08 +0900</pubDate>
                    <dc:creator>Pikubot</dc:creator>
                </item>
                            <item>
                    <title>고영창님의 만세력</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25027</link>
                    <description>아직 구정은 멀었지만 초보분들에게 유용했으면 하는? 설날 선물입니다&lt;br /&gt;
&lt;br /&gt;
(제가 코딩한 달력소스는 오류가 있을수 있습니다, 소스를 완전히 이해하고 만든게 아니라서)&lt;br /&gt;
&lt;br /&gt;
내일부터는 여태 미뤄둔 본업인 서툰 농사일을 시작해야 하기에&lt;br /&gt;
&lt;br /&gt;
ci 공부는 다음에 또 ...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
도움 받은 곳&lt;br /&gt;
&lt;br /&gt;
https://link2me.tistory.com/1545&lt;br /&gt;
&lt;br /&gt;
http://oops.org/project/manse/&lt;br /&gt;
&lt;br /&gt;
http://www.responsivegridsystem.com/calculator/&lt;br /&gt;
&lt;br /&gt;
http://afnmp3.homeip.net/~kohyc/calendar/index.cgi&lt;br /&gt;
&lt;br /&gt;
소스 구하는 곳&lt;br /&gt;
&lt;br /&gt;
https://github.com/OOPS-ORG-PHP/Lunar&lt;br /&gt;
&lt;br /&gt;
Lunar.php * import myException class&lt;br /&gt;
&lt;br /&gt;
http://pear.oops.org/package/myException&lt;br /&gt;
&lt;br /&gt;
https://github.com/OOPS-ORG-PHP/myException/&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;태양태음력&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
p { &lt;br /&gt;
	margin: 2px 0px 2px 0px; &lt;br /&gt;
    padding:3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
textarea {&lt;br /&gt;
    border:1px solid #999999;&lt;br /&gt;
    margin: 0px 0px 0px 0px;&lt;br /&gt;
    padding:3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.span1_7,&lt;br /&gt;
.span2_7,&lt;br /&gt;
.span3_7,&lt;br /&gt;
.span4_7,&lt;br /&gt;
.span5_7,&lt;br /&gt;
.span6_7,&lt;br /&gt;
.span7_7 {&lt;br /&gt;
	margin:0;clear:none;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;*behavior:url(boxsizing.htc)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.span1_12,&lt;br /&gt;
.span2_12,&lt;br /&gt;
.span3_12,&lt;br /&gt;
.span4_12, &lt;br /&gt;
.span5_12, &lt;br /&gt;
.span6_12, &lt;br /&gt;
.span7_12, &lt;br /&gt;
.span8_12, &lt;br /&gt;
.span9_12, &lt;br /&gt;
.span10_12,&lt;br /&gt;
.span11_12,&lt;br /&gt;
.span12_12 {&lt;br /&gt;
	margin:0;clear:none;float:left;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;*behavior:url(boxsizing.htc)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.span1_7 { width: 14.28%; }&lt;br /&gt;
.span2_7 { width: 28.57%; }&lt;br /&gt;
.span3_7 { width: 42.85%; }&lt;br /&gt;
.span4_7 { width: 57.14%; }&lt;br /&gt;
.span5_7 { width: 71.42%; }&lt;br /&gt;
.span6_7 { width: 85.71%; }&lt;br /&gt;
.span7_7 { width: 100%; }&lt;br /&gt;
&lt;br /&gt;
.span1_12 {	width: 8.333%; }&lt;br /&gt;
.span2_12 {	width: 16.66%; }&lt;br /&gt;
.span3_12 {	width: 25%; }&lt;br /&gt;
.span4_12 {	width: 33.33%; }&lt;br /&gt;
.span5_12 {	width: 41.66%; }&lt;br /&gt;
.span6_12 {	width: 50%; }&lt;br /&gt;
.span7_12 {	width: 58.33%; }&lt;br /&gt;
.span8_12 {	width: 66.66%; }&lt;br /&gt;
.span9_12 {	width: 75%; }&lt;br /&gt;
.span10_12 { width: 83.33%; }&lt;br /&gt;
.span11_12 { width: 91.66%; }&lt;br /&gt;
.span12_12 { width: 100%; }&lt;br /&gt;
&lt;br /&gt;
/*  SECTIONS  */&lt;br /&gt;
.section {&lt;br /&gt;
	clear: both;&lt;br /&gt;
	padding: 0px;&lt;br /&gt;
    margin-top: 0px;&lt;br /&gt;
    margin-left: 0px;	&lt;br /&gt;
    margin-right: 0px;&lt;br /&gt;
    margin-bottom: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*  COLUMN SETUP top, right, bottom, left */&lt;br /&gt;
.section .col {&lt;br /&gt;
	display: block;&lt;br /&gt;
	float:left;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
    padding-top: 8px;&lt;br /&gt;
    padding-left: 6px;	&lt;br /&gt;
    padding-right: 0px;&lt;br /&gt;
    padding-bottom: 0px;&lt;br /&gt;
	border: 1px solid #aaa;&lt;br /&gt;
	line-height: 115%;&lt;br /&gt;
}&lt;br /&gt;
.col:first-child { margin-left: 0; }&lt;br /&gt;
&lt;br /&gt;
/*  GROUPING  */&lt;br /&gt;
.group:before,&lt;br /&gt;
.group:after { content:&amp;quot;&amp;quot;; display:table; }&lt;br /&gt;
.group:after { clear:both;}&lt;br /&gt;
.group { zoom:1; /* For IE 6/7 */ }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*  GO FULL WIDTH BELOW 480 PIXELS */&lt;br /&gt;
@media only screen and (max-width: 480px) {&lt;br /&gt;
	.col {  margin: 0 0 0 0; }&lt;br /&gt;
	.span1_7, .span2_7, .span3_7, .span4_7, .span5_7, .span6_7, .span7_7 { width: 100%; }&lt;br /&gt;
    .span1_12, .span2_12, .span3_12, .span4_12, .span5_12, .span6_12, .span7_12, .span8_12, .span9_12, .span10_12, .span11_12, .span12_12 {	width: 100%; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.calendar-title {&lt;br /&gt;
	background-color : #7799AA;&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
.col.week {&lt;br /&gt;
	background-color: #2579cf;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.days-info.active {&lt;br /&gt;
	background-color : #BBEEFF;&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
.days-info.smallmoon {&lt;br /&gt;
	background-color : #EEFFAA;&lt;br /&gt;
}	&lt;br /&gt;
		&lt;br /&gt;
.days-info.largemoon {&lt;br /&gt;
	background-color : #FFFF99;&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
.days-info.season24 {&lt;br /&gt;
	background-color : #AA99FF;&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
.schedule_form_div.active {&lt;br /&gt;
	background-color : #BBEEFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.schedule_check_div.active {&lt;br /&gt;
	background-color : #99AACC;&lt;br /&gt;
}&lt;br /&gt;
.weekscheck_div.active {&lt;br /&gt;
	background-color : #99AACC;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
font.calendar  {font-family: tahoma; font-size: 22px; color: #ffffff; }&lt;br /&gt;
font.week      {font-family: tahoma; font-size: 12pt; color: #ffffff; }&lt;br /&gt;
&lt;br /&gt;
font.holy      {font-family: tahoma; font-size: 25px; color: #CC1133; } /*ff6c21*/&lt;br /&gt;
font.black     {font-family: tahoma; font-size: 25px; color: #000000; }&lt;br /&gt;
font.blue      {font-family: tahoma; font-size: 25px; color: #0000ff; }&lt;br /&gt;
font.gray      {font-family: tahoma; font-size: 15px; color: #bbbbbb; }&lt;br /&gt;
&lt;br /&gt;
font.su28      {font-family: tahoma; font-size: 14px; color: #424242; }&lt;br /&gt;
font.lunarday  {font-family: tahoma; font-size: 14px; color: #0000bb; }&lt;br /&gt;
font.gangi     {font-family: tahoma; font-size: 14px; color: #424242; }&lt;br /&gt;
&lt;br /&gt;
font.holiname  {font-family: tahoma; font-size: 14px; color: #ff0000; }&lt;br /&gt;
font.season24s {font-family: tahoma; font-size: 14px; color: #0000ff; }&lt;br /&gt;
font.schedule  {font-family: tahoma; font-size: 14px; color: #0000ff; }&lt;br /&gt;
font.memorial  {font-family: tahoma; font-size: 14px; color: #0000ff; }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	//도움 받은 곳&lt;br /&gt;
    //https://link2me.tistory.com/1545&lt;br /&gt;
	//http://oops.org/project/manse/&lt;br /&gt;
	//http://www.responsivegridsystem.com/calculator/&lt;br /&gt;
	//http://afnmp3.homeip.net/~kohyc/calendar/index.cgi&lt;br /&gt;
&lt;br /&gt;
	//소스 구하는 곳&lt;br /&gt;
    //https://github.com/OOPS-ORG-PHP/Lunar&lt;br /&gt;
    //Lunar.php * import myException class&lt;br /&gt;
    //http://pear.oops.org/package/myException&lt;br /&gt;
	//https://github.com/OOPS-ORG-PHP/myException/&lt;br /&gt;
&lt;br /&gt;
	require_once &amp;#39;Lunar.php&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
	$lunar = new oops\Lunar();&lt;br /&gt;
&lt;br /&gt;
	function ErrorMsg($msg) &lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot; &amp;lt;script&amp;gt;window.alert(&amp;#39;$msg&amp;#39;);history.go(-1);&amp;lt;/script&amp;gt;&amp;quot;;&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function tolunar($cdate, $c=false) &lt;br /&gt;
	{&lt;br /&gt;
		global $lunar;&lt;br /&gt;
		&lt;br /&gt;
		$o = $lunar-&amp;gt;tolunar($cdate);&lt;br /&gt;
		&lt;br /&gt;
		if ($c)&lt;br /&gt;
			return $o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day;&lt;br /&gt;
		else	&lt;br /&gt;
			return $o;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function tosolar($cdate, $c=false) &lt;br /&gt;
	{&lt;br /&gt;
		global $lunar;&lt;br /&gt;
		&lt;br /&gt;
		$o = $lunar-&amp;gt;tosolar($cdate);&lt;br /&gt;
		&lt;br /&gt;
		if ($c)&lt;br /&gt;
			return $o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day;&lt;br /&gt;
		else	&lt;br /&gt;
			return $o;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// 앙력 날짜의 요일을 리턴 일요일 0 토요일 6&lt;br /&gt;
	function isweekend($cdate)&lt;br /&gt;
	{&lt;br /&gt;
		//$time = mktime(0, 0, 0, $month, $day, $year);&lt;br /&gt;
		//$weekday = date(&amp;#39;w&amp;#39;, $time);&lt;br /&gt;
		//return $weekday; //($weekday == 0 || $weekday == 6);&lt;br /&gt;
&lt;br /&gt;
		return date(&amp;quot;w&amp;quot;, strtotime($cdate));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
		//---- 오늘 날짜&lt;br /&gt;
		date_default_timezone_set(&amp;#39;Asia/Seoul&amp;#39;);&lt;br /&gt;
		$thisyear = date(&amp;#39;Y&amp;#39;); // 4자리 연도&lt;br /&gt;
		$thismonth = date(&amp;#39;n&amp;#39;); // 0을 포함하지 않는 월&lt;br /&gt;
		$today = date(&amp;#39;j&amp;#39;); // 0을 포함하지 않는 일&lt;br /&gt;
&lt;br /&gt;
// $year, $month 값이 없으면 현재 날짜&lt;br /&gt;
$year = isset($_GET[&amp;#39;year&amp;#39;]) ? $_GET[&amp;#39;year&amp;#39;] : $thisyear;&lt;br /&gt;
$month = isset($_GET[&amp;#39;month&amp;#39;]) ? $_GET[&amp;#39;month&amp;#39;] : $thismonth;&lt;br /&gt;
$day = isset($_GET[&amp;#39;day&amp;#39;]) ? $_GET[&amp;#39;day&amp;#39;] : $today;&lt;br /&gt;
&lt;br /&gt;
		if ( $year &amp;lt; -2000 ) {&lt;br /&gt;
			$year = -2000;&lt;br /&gt;
			$ErrorMsg(&amp;quot;-2000년 이전은 웹에서 사용하는 것을 권장하지 않음.&amp;quot;);&lt;br /&gt;
		}	&lt;br /&gt;
		else if ( $year &amp;gt; 2300 ) {&lt;br /&gt;
			$year = 2300;&lt;br /&gt;
			$ErrorMsg(&amp;quot;2300년 이후는 웹에서 사용하는 것을 권장하지 않음.&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		// 1391-02-05 ~ 2050-12-31 까지는 KASI data로 처리를 한다.&lt;br /&gt;
&lt;br /&gt;
	   /*&lt;br /&gt;
		* Lunar 1.0.0에서는 is_leap method가 연도만으로 율리우스력&lt;br /&gt;
		* 판단을 하지 않으며로 아래과 같이 조건을 체크해야 한다.&lt;br /&gt;
		* if ( $lunar-&amp;gt;is_leap ($year, $year &amp;lt; 1583 ? true : false) )&lt;br /&gt;
		* Lunar 1.0.1 부터는 2번째 인자가 없어도, 연도만으로&lt;br /&gt;
		* 율리우스력 판단을 한다.&lt;br /&gt;
		*/&lt;br /&gt;
		$lastdayofmonth = array (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);&lt;br /&gt;
		if ( $lunar-&amp;gt;is_leap($year) )&lt;br /&gt;
			$lastdayofmonth[2] = 29;&lt;br /&gt;
		&lt;br /&gt;
		// 해당월의 총일수 구하기&lt;br /&gt;
		$lastday = $lastdayofmonth[(int) $month];&lt;br /&gt;
		//$lastday = date(&amp;#39;t&amp;#39;, mktime(0, 0, 0, $month, 1, $year)); &lt;br /&gt;
&lt;br /&gt;
		$scheduledays = array();&lt;br /&gt;
&lt;br /&gt;
		$schedule_empty = array(&lt;br /&gt;
			&amp;#39;id&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;subject&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;contents&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;time&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;repeat&amp;#39; =&amp;gt; &amp;#39;once&amp;#39;,&lt;br /&gt;
			&amp;#39;type&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;alarm&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_lunar&amp;#39; =&amp;gt; &amp;#39;solar&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_month&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;schedule_day&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;schedule_check&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;weekday&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksdate&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksmonth&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;weekscheck&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;start_date&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;end_date&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
		);	&lt;br /&gt;
		$schedule_11 = array(&lt;br /&gt;
			&amp;#39;id&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;subject&amp;#39; =&amp;gt; &amp;#39;설날&amp;#39;,&lt;br /&gt;
			&amp;#39;contents&amp;#39; =&amp;gt; &amp;#39;설날 새로운 일정을 입력하세요&amp;#39;,&lt;br /&gt;
			&amp;#39;time&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;repeat&amp;#39; =&amp;gt; &amp;#39;once&amp;#39;,&lt;br /&gt;
			&amp;#39;type&amp;#39; =&amp;gt; &amp;#39;day&amp;#39;,&lt;br /&gt;
			&amp;#39;alarm&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_lunar&amp;#39; =&amp;gt; &amp;#39;solar&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_month&amp;#39; =&amp;gt; 1,&lt;br /&gt;
			&amp;#39;schedule_day&amp;#39; =&amp;gt; 1,&lt;br /&gt;
			&amp;#39;schedule_check&amp;#39; =&amp;gt; 1,&lt;br /&gt;
			&amp;#39;weekday&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksdate&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksmonth&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;weekscheck&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;start_date&amp;#39; =&amp;gt; &amp;#39;2023-01-1&amp;#39;,&lt;br /&gt;
			&amp;#39;end_date&amp;#39; =&amp;gt; &amp;#39;2023-01-1&amp;#39;,&lt;br /&gt;
		);	&lt;br /&gt;
		$schedule_122 = array(&lt;br /&gt;
			&amp;#39;id&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;subject&amp;#39; =&amp;gt; &amp;#39;진짜 설날&amp;#39;,&lt;br /&gt;
			&amp;#39;contents&amp;#39; =&amp;gt; &amp;#39;진짜 설날 새로운 일정을 입력하세요&amp;#39;,&lt;br /&gt;
			&amp;#39;time&amp;#39; =&amp;gt; &amp;#39;&amp;#39;,&lt;br /&gt;
			&amp;#39;repeat&amp;#39; =&amp;gt; &amp;#39;once&amp;#39;,&lt;br /&gt;
			&amp;#39;type&amp;#39; =&amp;gt; &amp;#39;day&amp;#39;,&lt;br /&gt;
			&amp;#39;alarm&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_lunar&amp;#39; =&amp;gt; &amp;#39;solar&amp;#39;,&lt;br /&gt;
			&amp;#39;schedule_month&amp;#39; =&amp;gt; 1,&lt;br /&gt;
			&amp;#39;schedule_day&amp;#39; =&amp;gt; 22,&lt;br /&gt;
			&amp;#39;schedule_check&amp;#39; =&amp;gt; 1,&lt;br /&gt;
			&amp;#39;weekday&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksdate&amp;#39; =&amp;gt; &amp;#39;none&amp;#39;,&lt;br /&gt;
			&amp;#39;weeksmonth&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;weekscheck&amp;#39; =&amp;gt; 0,&lt;br /&gt;
			&amp;#39;start_date&amp;#39; =&amp;gt; &amp;#39;2023-01-21&amp;#39;,&lt;br /&gt;
			&amp;#39;end_date&amp;#39; =&amp;gt; &amp;#39;2023-01-24&amp;#39;,&lt;br /&gt;
		);	&lt;br /&gt;
&lt;br /&gt;
		$holidays = array();&lt;br /&gt;
&lt;br /&gt;
		$holidays[1][1] = &amp;#39;신정&amp;#39;;&lt;br /&gt;
		$holidays[3][1] = &amp;#39;삼일절&amp;#39;;&lt;br /&gt;
		$holidays[5][5] = &amp;#39;어린이날&amp;#39;;&lt;br /&gt;
		$holidays[6][6] = &amp;#39;현충일&amp;#39;;&lt;br /&gt;
		$holidays[8][15] = &amp;#39;광복절&amp;#39;;&lt;br /&gt;
		$holidays[10][3] = &amp;#39;개천절&amp;#39;;&lt;br /&gt;
		$holidays[10][9] = &amp;#39;한글날&amp;#39;;&lt;br /&gt;
		$holidays[12][25] = &amp;#39;성탄절&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
		$o = tosolar($year.&amp;quot;-1-1&amp;quot;);&lt;br /&gt;
		$t1 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day) - (3600 * 24);&lt;br /&gt;
		$t2 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day);&lt;br /&gt;
		$t3 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day) + (3600 * 24);&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t1)][date(&amp;quot;j&amp;quot;, $t1)] = &amp;#39;&amp;#39;;&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t2)][date(&amp;quot;j&amp;quot;, $t2)] = &amp;#39;설날&amp;#39;;&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t3)][date(&amp;quot;j&amp;quot;, $t3)] = &amp;#39;&amp;#39;;&lt;br /&gt;
		&lt;br /&gt;
		$o = tosolar($year.&amp;quot;-4-8&amp;quot;);&lt;br /&gt;
		$t = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day);&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t)][date(&amp;quot;j&amp;quot;, $t)] = &amp;#39;석가탄신일&amp;#39;;&lt;br /&gt;
		&lt;br /&gt;
		$o = tosolar($year.&amp;quot;-8-15&amp;quot;);&lt;br /&gt;
		$t1 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day) - (3600 * 24);&lt;br /&gt;
		$t2 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day);&lt;br /&gt;
		$t3 = strtotime($o-&amp;gt;year.&amp;#39;-&amp;#39;.$o-&amp;gt;month.&amp;#39;-&amp;#39;.$o-&amp;gt;day) + (3600 * 24);&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t1)][date(&amp;quot;j&amp;quot;, $t1)] = &amp;#39;&amp;#39;;&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t2)][date(&amp;quot;j&amp;quot;, $t2)] = &amp;#39;추석&amp;#39;;&lt;br /&gt;
		$holidays[date(&amp;quot;n&amp;quot;, $t3)][date(&amp;quot;j&amp;quot;, $t3)] = &amp;#39;&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
		// 설날 대체공휴일 검사&lt;br /&gt;
		if ((isweekend(tosolar($year.&amp;quot;-1-1&amp;quot;, true)) == 0) || &lt;br /&gt;
            (isweekend(tosolar($year.&amp;quot;-1-1&amp;quot;, true)) == 6) ||&lt;br /&gt;
		    (isweekend(tosolar($year.&amp;quot;-1-2&amp;quot;, true)) == 0)) &lt;br /&gt;
		{&lt;br /&gt;
			$o = tosolar($year.&amp;quot;-1-3&amp;quot;);&lt;br /&gt;
			$holidays[$o-&amp;gt;month][$o-&amp;gt;day] = &amp;#39;대체공휴일&amp;#39;;&lt;br /&gt;
		}	&lt;br /&gt;
&lt;br /&gt;
		// 어린이날 대체공휴일 검사 : 어린이날은 토요일, 일요일인 경우 그 다음 평일을 대체공유일로 지정&lt;br /&gt;
		if (isweekend($year.&amp;quot;-5-5&amp;quot;) == 0) {&lt;br /&gt;
			$holidays[5][6] = &amp;#39;대체공휴일&amp;#39;;&lt;br /&gt;
		}	&lt;br /&gt;
		if (isweekend($year.&amp;quot;-5-5&amp;quot;) == 6) {&lt;br /&gt;
			$holidays[5][7] = &amp;#39;대체공휴일&amp;#39;;&lt;br /&gt;
		}	&lt;br /&gt;
&lt;br /&gt;
		// 추석 대체공휴일 검사&lt;br /&gt;
		if ((isweekend(tosolar($year.&amp;quot;-8-14&amp;quot;, true)) == 0) || &lt;br /&gt;
            (isweekend(tosolar($year.&amp;quot;-8-15&amp;quot;, true)) == 0) ||&lt;br /&gt;
		    (isweekend(tosolar($year.&amp;quot;-8-16&amp;quot;, true)) == 0)) &lt;br /&gt;
		{&lt;br /&gt;
			$o = tosolar($year.&amp;quot;-8-17&amp;quot;);&lt;br /&gt;
			$holidays[$o-&amp;gt;month][$o-&amp;gt;day] = &amp;#39;대체공휴일&amp;#39;;&lt;br /&gt;
		}	&lt;br /&gt;
&lt;br /&gt;
		$memorialdays = array();&lt;br /&gt;
		$memorialdays[1][8] = &amp;#39;쉬는날&amp;#39;;&lt;br /&gt;
		$memorialdays[1][15] = &amp;#39;노는날&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
		//echo &amp;quot;&amp;lt;xmp&amp;gt;&amp;quot;;&lt;br /&gt;
		//var_dump($season);&lt;br /&gt;
		//echo &amp;quot;&amp;lt;/xmp&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		$cyear = $year;&lt;br /&gt;
		$cmonth = $month;&lt;br /&gt;
		$cday = 1;&lt;br /&gt;
		$cdate = $cyear.&amp;#39;-&amp;#39;.$cmonth.&amp;#39;-&amp;#39;.$cday;&lt;br /&gt;
&lt;br /&gt;
		$season = $lunar-&amp;gt;seasondate ($cdate);&lt;br /&gt;
		$tune_day = $lunar-&amp;gt;dayfortune($cdate);&lt;br /&gt;
&lt;br /&gt;
		$fday = $lunar-&amp;gt;tolunar($cdate);&lt;br /&gt;
		$lyear = $fday-&amp;gt;year;&lt;br /&gt;
		$lmonth = $fday-&amp;gt;month;&lt;br /&gt;
		$lday = $fday-&amp;gt;day;&lt;br /&gt;
		&lt;br /&gt;
		$ly = array();&lt;br /&gt;
		$lm = array();&lt;br /&gt;
		$ld = array();&lt;br /&gt;
		$l28su = array();&lt;br /&gt;
		$y_liljin = array();&lt;br /&gt;
		$m_liljin = array();&lt;br /&gt;
		$d_liljin = array();&lt;br /&gt;
		$largemonth = array();&lt;br /&gt;
		$s28day = &amp;#39;&amp;#39;;&lt;br /&gt;
		&lt;br /&gt;
		for ( $i=0; $i&amp;lt;$lastday; $i++ ) {&lt;br /&gt;
			$chk = false;&lt;br /&gt;
&lt;br /&gt;
            //음력날짜 lyear, lmonth, lday&lt;br /&gt;
			if ( $fday-&amp;gt;largemonth ) {&lt;br /&gt;
				if ( $lday &amp;gt; 30 ) {&lt;br /&gt;
					$lmonth = preg_replace (&amp;#39;/[^0-9]/&amp;#39;, &amp;#39;&amp;#39;, $fday-&amp;gt;month);&lt;br /&gt;
					$lmonth ++;&lt;br /&gt;
					if ( $lmonth &amp;gt; 12 ) {&lt;br /&gt;
						$lyear ++;&lt;br /&gt;
						$lmonth -= 12;&lt;br /&gt;
					}	&lt;br /&gt;
					$lday -= 30;&lt;br /&gt;
					$chk = true;&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				if ( $lday &amp;gt; 29 ) {&lt;br /&gt;
					$lmonth = preg_replace (&amp;#39;/[^0-9]/&amp;#39;, &amp;#39;&amp;#39;, $fday-&amp;gt;month);&lt;br /&gt;
					$lmonth ++;&lt;br /&gt;
					if ( $lmonth &amp;gt; 12 ) {&lt;br /&gt;
						$lyear ++;&lt;br /&gt;
						$lmonth -= 12;&lt;br /&gt;
					}	&lt;br /&gt;
					$lday -= 29;&lt;br /&gt;
					$chk = true;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			//양력날짜 cyear, cmonth, cday&lt;br /&gt;
			if ( ($i + 1) &amp;gt; $lastdayofmonth[(int) $cmonth] ) {&lt;br /&gt;
				$cmonth = $cmonth + 1;&lt;br /&gt;
				if ($cmonth == 13) {&lt;br /&gt;
					$cmonth = 1;&lt;br /&gt;
					$cyear = $cyear + 1;&lt;br /&gt;
				}	&lt;br /&gt;
				$cday = ($i + 1) - $lastdayofmonth[$cmonth];&lt;br /&gt;
			} else {&lt;br /&gt;
				$cday = $i + 1;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$cdate = str_pad($cyear,4,&amp;quot;0&amp;quot;,STR_PAD_LEFT).&amp;quot;-&amp;quot;.str_pad($cmonth,2,&amp;quot;0&amp;quot;,STR_PAD_LEFT).&amp;quot;-&amp;quot;.str_pad($cday,2,&amp;quot;0&amp;quot;,STR_PAD_LEFT);&lt;br /&gt;
&lt;br /&gt;
			//read schedule data&lt;br /&gt;
			//$scheduledays[$cmonth][$cday] = $this-&amp;gt;schedule_model-&amp;gt;get_datetime($cdate); &lt;br /&gt;
&lt;br /&gt;
			if ($cdate == &amp;quot;2023-01-01&amp;quot;) &lt;br /&gt;
				$s = (object) $schedule_11;&lt;br /&gt;
			else if ($cdate == &amp;quot;2023-01-21&amp;quot; || $cdate == &amp;quot;2023-01-22&amp;quot; || $cdate == &amp;quot;2023-01-23&amp;quot; || $cdate == &amp;quot;2023-01-24&amp;quot;) &lt;br /&gt;
				$s = (object) $schedule_122;&lt;br /&gt;
			else &lt;br /&gt;
				$s = (object) $schedule_empty;&lt;br /&gt;
			$scheduledays[$cmonth][$cday] = $s; &lt;br /&gt;
&lt;br /&gt;
			if ( $chk ) {&lt;br /&gt;
				if ( $season-&amp;gt;center-&amp;gt;month != $cmonth ) {&lt;br /&gt;
					$season = $lunar-&amp;gt;seasondate ($cdate);&lt;br /&gt;
				}	&lt;br /&gt;
				$fday = $lunar-&amp;gt;tolunar ($cdate);&lt;br /&gt;
&lt;br /&gt;
				$lyear = $fday-&amp;gt;year;&lt;br /&gt;
				$lmonth = $fday-&amp;gt;month;&lt;br /&gt;
				$lday = $fday-&amp;gt;day;&lt;br /&gt;
&lt;br /&gt;
				$chk == false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ( $fday-&amp;gt;largemonth ) &lt;br /&gt;
				$largemonth[] = true;&lt;br /&gt;
			else	&lt;br /&gt;
				$largemonth[] = false;&lt;br /&gt;
&lt;br /&gt;
			$ly[] = $lyear;&lt;br /&gt;
			$lm[] = ($fday-&amp;gt;leap ? &amp;#39;(閏)&amp;#39; : &amp;#39;&amp;#39;).$lmonth;&lt;br /&gt;
			$ld[] = $lday;&lt;br /&gt;
	&lt;br /&gt;
			$s28day = $lunar-&amp;gt;s28day($cdate);&lt;br /&gt;
			$l28su[] = &amp;quot;(&amp;quot;.$s28day-&amp;gt;h.&amp;quot;)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
			$tune_ym = $lunar-&amp;gt;dayfortune(date(&amp;quot;Y-m-d&amp;quot;, strtotime($cdate)));&lt;br /&gt;
			$y_liljin[] = $tune_ym-&amp;gt;hyear;&lt;br /&gt;
			$m_liljin[] = $tune_ym-&amp;gt;hmonth;&lt;br /&gt;
&lt;br /&gt;
			$d_gindex = $tune_day-&amp;gt;data-&amp;gt;d + $i;&lt;br /&gt;
			if ( $d_gindex &amp;gt;= 60 )&lt;br /&gt;
				$d_gindex -= 60;&lt;br /&gt;
			$d_liljin[] = $lunar-&amp;gt;ganji_ref($d_gindex, true);&lt;br /&gt;
&lt;br /&gt;
			$lday++;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$prevmonth = $month - 1;&lt;br /&gt;
		$nextmonth = $month + 1;&lt;br /&gt;
		$prevyear = $nextyear = $year;&lt;br /&gt;
		if ($month == 1) {&lt;br /&gt;
			$prevmonth = 12;&lt;br /&gt;
			$prevyear = $year - 1;&lt;br /&gt;
		} &lt;br /&gt;
		elseif ($month == 12) {&lt;br /&gt;
			$nextmonth = 1;&lt;br /&gt;
			$nextyear = $year + 1;&lt;br /&gt;
		}&lt;br /&gt;
		$prev_year = $year - 1;&lt;br /&gt;
		$next_year = $year + 1;&lt;br /&gt;
&lt;br /&gt;
		$view_data = array(&lt;br /&gt;
		    &amp;#39;year&amp;#39; =&amp;gt; $year,&lt;br /&gt;
		    &amp;#39;month&amp;#39; =&amp;gt; $month,&lt;br /&gt;
			&amp;#39;today&amp;#39; =&amp;gt; $today,&lt;br /&gt;
		    &amp;#39;thisyear&amp;#39; =&amp;gt; $thisyear,&lt;br /&gt;
		    &amp;#39;thismonth&amp;#39; =&amp;gt; $thismonth,&lt;br /&gt;
		    &amp;#39;prev_year&amp;#39; =&amp;gt; $prev_year,&lt;br /&gt;
		    &amp;#39;prevyear&amp;#39; =&amp;gt; $prevyear,&lt;br /&gt;
		    &amp;#39;prevmonth&amp;#39; =&amp;gt; $prevmonth,&lt;br /&gt;
		    &amp;#39;nextyear&amp;#39; =&amp;gt; $nextyear,&lt;br /&gt;
		    &amp;#39;nextmonth&amp;#39; =&amp;gt; $nextmonth,&lt;br /&gt;
		    &amp;#39;next_year&amp;#39; =&amp;gt; $next_year,&lt;br /&gt;
		    &amp;#39;lastday&amp;#39; =&amp;gt; $lastday,&lt;br /&gt;
			&amp;#39;ly&amp;#39; =&amp;gt; $ly,&lt;br /&gt;
			&amp;#39;lm&amp;#39; =&amp;gt; $lm,&lt;br /&gt;
			&amp;#39;ld&amp;#39; =&amp;gt; $ld,&lt;br /&gt;
			&amp;#39;y_liljin&amp;#39; =&amp;gt; $y_liljin,&lt;br /&gt;
			&amp;#39;m_liljin&amp;#39; =&amp;gt; $m_liljin,&lt;br /&gt;
			&amp;#39;d_liljin&amp;#39; =&amp;gt; $d_liljin,&lt;br /&gt;
			&amp;#39;l28su&amp;#39; =&amp;gt; $l28su,&lt;br /&gt;
			&amp;#39;holidays&amp;#39; =&amp;gt; $holidays,			&lt;br /&gt;
			&amp;#39;memorialdays&amp;#39; =&amp;gt; $memorialdays,			&lt;br /&gt;
			&amp;#39;scheduledays&amp;#39; =&amp;gt; $scheduledays,			&lt;br /&gt;
			&amp;#39;season&amp;#39; =&amp;gt; $season,&lt;br /&gt;
			&amp;#39;lunar&amp;#39; =&amp;gt; $lunar,&lt;br /&gt;
			&amp;#39;largemonth&amp;#39; =&amp;gt; $largemonth,&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
	function SkipOffset($no, $sdate = &amp;#39;&amp;#39;, $edate = &amp;#39;&amp;#39;) &lt;br /&gt;
	{&lt;br /&gt;
		for ($i = 1; $i &amp;lt;= $no; $i++) {&lt;br /&gt;
			$ck = $no - $i + 1;&lt;br /&gt;
			if ($sdate)&lt;br /&gt;
				$num = date(&amp;#39;n.j&amp;#39;, $sdate - (3600 * 24) * $ck);&lt;br /&gt;
			if ($edate)&lt;br /&gt;
				$num = date(&amp;#39;n.j&amp;#39;, $edate + (3600 * 24) * ($i - 1));&lt;br /&gt;
			echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days&amp;#39; valign=&amp;#39;top&amp;#39;&amp;gt;&amp;lt;font class=&amp;#39;gray&amp;#39;&amp;gt;$num&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function CalendarPrint($day, $style, $s28, $lunarday, $gangi, $holiname, $memorialname, $schedulename, $season24s) &lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot;&amp;lt;a href=&amp;#39;&amp;#39; class=&amp;#39;ahref&amp;#39;&amp;gt;&amp;quot;.&lt;br /&gt;
		     &amp;quot;&amp;lt;font class=&amp;quot;.$style.&amp;quot;&amp;gt;&amp;quot;.$day.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/a&amp;gt;&amp;quot;.&lt;br /&gt;
		     &amp;quot;&amp;lt;font class=&amp;#39;lunarday&amp;#39;&amp;gt;&amp;amp;nbsp;$lunarday&amp;lt;/font&amp;gt;&amp;quot;.&lt;br /&gt;
			 &amp;quot;&amp;lt;font class=&amp;#39;su28&amp;#39;&amp;gt;&amp;amp;nbsp;$s28&amp;lt;/font&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
			 &lt;br /&gt;
		echo &amp;quot;&amp;lt;font class=&amp;#39;gangi&amp;#39;&amp;gt;$gangi&amp;lt;/font&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
		echo &amp;quot;&amp;lt;font class=&amp;#39;season24s&amp;#39;&amp;gt;$season24s&amp;lt;/font&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
		echo &amp;quot;&amp;lt;font class=&amp;#39;holiname&amp;#39;&amp;gt;$holiname&amp;lt;/font&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
		echo &amp;quot;&amp;lt;font class=&amp;#39;memorial&amp;#39;&amp;gt;$memorialname&amp;lt;/font&amp;gt;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
		echo &amp;quot;&amp;lt;font class=&amp;#39;schedule&amp;#39;&amp;gt;$schedulename-&amp;gt;subject&amp;lt;/font&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$path = &amp;quot;&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;group&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col span9_12&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;section group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/font&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/font&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span3_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;Lunar Calendar&amp;lt;/font&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/font&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/font&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;section group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;&amp;lt;?php echo $path.&amp;#39;calendar.php?year=&amp;#39;.$prev_year.&amp;#39;&amp;amp;month=&amp;#39;.$month.&amp;#39;&amp;amp;day=1&amp;#39;; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;◀◀&amp;amp;nbsp;&amp;lt;/font&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;&amp;lt;?php echo $path.&amp;#39;calendar.php?year=&amp;#39;.$prevyear.&amp;#39;&amp;amp;month=&amp;#39;.$prevmonth.&amp;#39;&amp;amp;day=1&amp;#39;; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;◀&amp;amp;nbsp;&amp;lt;/font&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span3_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;&amp;lt;?php echo $path.&amp;#39;calendar.php?=yeay=&amp;#39;.$thisyear.&amp;#39;&amp;amp;month=&amp;#39;.$thismonth.&amp;#39;&amp;amp;day=1&amp;#39;; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;lt;?php echo &amp;quot;&amp;amp;nbsp;&amp;quot;.$year . &amp;#39;년&amp;amp;nbsp;&amp;#39;; ?&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
					&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;lt;?php echo &amp;quot;&amp;amp;nbsp;&amp;quot;.$month . &amp;#39;월&amp;amp;nbsp;&amp;#39;; ?&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
					&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;lt;?php echo &amp;quot;&amp;amp;nbsp;&amp;quot;.$today . &amp;#39;일&amp;amp;nbsp;&amp;#39;; ?&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
				&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;&amp;lt;?php echo $path.&amp;#39;calendar.php?year=&amp;#39;.$nextyear.&amp;#39;&amp;amp;month=&amp;#39;.$nextmonth.&amp;#39;&amp;amp;day=1&amp;#39;; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;▶&amp;amp;nbsp;&amp;lt;/font&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 calendar-title&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;&amp;lt;?php echo $path.&amp;#39;calendar.php?year=&amp;#39;.$next_year.&amp;#39;&amp;amp;month=&amp;#39;.$month.&amp;#39;&amp;amp;day=1&amp;#39;; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;calendar&amp;quot;&amp;gt;&amp;amp;nbsp;▶▶&amp;amp;nbsp;&amp;lt;/font&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;quot;section group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;일&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;월&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;화&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;수&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;목&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;금&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div align=&amp;quot;center&amp;quot; class=&amp;quot;col span1_7 week&amp;quot;&amp;gt;&amp;lt;font class=&amp;quot;week&amp;quot;&amp;gt;토&amp;lt;/font&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;div class=&amp;#39;section group&amp;#39;&amp;gt;&lt;br /&gt;
		&amp;lt;?php&lt;br /&gt;
			$day = 1;&lt;br /&gt;
			$offset = 0;&lt;br /&gt;
			$ck_row = 0;&lt;br /&gt;
&lt;br /&gt;
			$gangi_temp = $y_liljin[$day-1].&amp;#39; &amp;#39;.$m_liljin[$day-1];&lt;br /&gt;
&lt;br /&gt;
			// 시작 요일 구하기 : date(&amp;quot;w&amp;quot;, strtotime($year.&amp;quot;-&amp;quot;.$month.&amp;quot;-01&amp;quot;));&lt;br /&gt;
			$offset = date(&amp;#39;w&amp;#39;, mktime(0, 0, 0, $month, $day, $year)); // 0: 일요일, 6: 토요일&lt;br /&gt;
			SkipOffset($offset, mktime(0, 0, 0, $month, $day, $year));&lt;br /&gt;
	&lt;br /&gt;
			while ($day &amp;lt;= $lastday) &lt;br /&gt;
			{&lt;br /&gt;
				if ($offset == 0)&lt;br /&gt;
					$style = &amp;quot;holy&amp;quot;; // 일요일 빨간색으로 표기&lt;br /&gt;
				else if($offset == 6)&lt;br /&gt;
					$style = &amp;quot;blue&amp;quot;; // 토요일 빨간색 또는 파란색&lt;br /&gt;
				else&lt;br /&gt;
					$style = &amp;quot;black&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
				//28수&lt;br /&gt;
				$s28 = $l28su[$day-1];&lt;br /&gt;
&lt;br /&gt;
				$gangi_ym = $y_liljin[$day-1].&amp;#39; &amp;#39;.$m_liljin[$day-1];&lt;br /&gt;
&lt;br /&gt;
				//세차 월건 일진 표시 (1일, 음력1일,15일 월건값이 바뀔때)	&lt;br /&gt;
				if ($day == 1 || $ld[$day-1] == 1 || $ld[$day-1] == 15 || $gangi_ym != $gangi_temp) {&lt;br /&gt;
					$gangi_temp = $gangi_ym;&lt;br /&gt;
					$lunarday = $lm[$day-1].&amp;#39;.&amp;#39;.$ld[$day-1]; //年月日&lt;br /&gt;
					$gangi = $y_liljin[$day-1].&amp;#39; &amp;#39;.$m_liljin[$day-1].&amp;#39; &amp;#39;.$d_liljin[$day-1];&lt;br /&gt;
					if($gangi_ym != $gangi_temp)&lt;br /&gt;
						$gangi .= &amp;#39;***&amp;#39;;&lt;br /&gt;
				}	&lt;br /&gt;
				else {&lt;br /&gt;
					// 음력 일자 및 간지 데이터&lt;br /&gt;
					$lunarday = $lm[$day-1].&amp;#39;.&amp;#39;.$ld[$day-1]; //年月日&lt;br /&gt;
					$gangi = $y_liljin[$day-1].&amp;#39; &amp;#39;.$m_liljin[$day-1].&amp;#39; &amp;#39;.$d_liljin[$day-1];&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				// 법적 공휴일&lt;br /&gt;
				$holiname = false;&lt;br /&gt;
				if (isset($holidays[$month][$day])) {&lt;br /&gt;
					$style = &amp;quot;holy&amp;quot;;&lt;br /&gt;
					$holiname = $holidays[$month][$day];&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				// 기념일&lt;br /&gt;
				$memorialname = false;&lt;br /&gt;
				if (isset($memorialdays[$month][$day])) {&lt;br /&gt;
					$style = &amp;quot;holy&amp;quot;;&lt;br /&gt;
					$memorialname = $memorialdays[$month][$day];&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				// 사용자 일정 데이터&lt;br /&gt;
				$schedulename = false;&lt;br /&gt;
				if (isset($scheduledays[$month][$day])) {&lt;br /&gt;
					$style = &amp;quot;holy&amp;quot;;&lt;br /&gt;
					$schedulename = $scheduledays[$month][$day];&lt;br /&gt;
				}	&lt;br /&gt;
&lt;br /&gt;
				//24절기&lt;br /&gt;
				$season24s = false;&lt;br /&gt;
				if ($season-&amp;gt;center-&amp;gt;month == $month &amp;amp;&amp;amp; $season-&amp;gt;center-&amp;gt;day == $day)&lt;br /&gt;
					$season24s = $season-&amp;gt;center-&amp;gt;name.&amp;quot;(&amp;quot;.$season-&amp;gt;center-&amp;gt;hname.&amp;quot;)&amp;quot;;&lt;br /&gt;
				if ($season-&amp;gt;ccenter-&amp;gt;month == $month &amp;amp;&amp;amp; $season-&amp;gt;ccenter-&amp;gt;day == $day)&lt;br /&gt;
					$season24s = $season-&amp;gt;ccenter-&amp;gt;name.&amp;quot;(&amp;quot;.$season-&amp;gt;ccenter-&amp;gt;hname.&amp;quot;)&amp;quot;;&lt;br /&gt;
				if ($season-&amp;gt;nenter-&amp;gt;month == $month &amp;amp;&amp;amp; $season-&amp;gt;nenter-&amp;gt;day == $day)&lt;br /&gt;
					$season24s = $season-&amp;gt;nenter-&amp;gt;name.&amp;quot;(&amp;quot;.$season-&amp;gt;nenter-&amp;gt;hname.&amp;quot;)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
				//$sqltimestamp = $year.&amp;quot;-&amp;quot;.$month.&amp;quot;-&amp;quot;.$day.&amp;quot; 00:00:00&amp;quot;;&lt;br /&gt;
				//$unixtimestamp  = strtotime($sqltimestamp);&lt;br /&gt;
				//$id = date(&amp;#39;Y-m-d\TH:i&amp;#39;, $unixtimestamp);&lt;br /&gt;
				//$id = $year.&amp;quot;-&amp;quot;.$month.&amp;quot;-&amp;quot;.$day;&lt;br /&gt;
&lt;br /&gt;
				//달력의 날짜들(1일부터 말일까지)들의 id&lt;br /&gt;
				$id = str_pad($year, 4, &amp;quot;0&amp;quot;, STR_PAD_LEFT).&amp;quot;-&amp;quot;.  &lt;br /&gt;
					str_pad($month, 2, &amp;quot;0&amp;quot;, STR_PAD_LEFT).&amp;quot;-&amp;quot;.  &lt;br /&gt;
					str_pad($day, 2, &amp;quot;0&amp;quot;, STR_PAD_LEFT);  &lt;br /&gt;
			&lt;br /&gt;
				if ($year == $thisyear &amp;amp;&amp;amp; $month == $thismonth &amp;amp;&amp;amp; $day == $today) { &lt;br /&gt;
					echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days-info active&amp;#39; valign=&amp;#39;top&amp;#39; id=&amp;#39;&amp;quot;.$id.&amp;quot;&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
				}	&lt;br /&gt;
				else {&lt;br /&gt;
					if ($season24s)&lt;br /&gt;
						echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days-info season24&amp;#39; valign=&amp;#39;top&amp;#39; id=&amp;#39;&amp;quot;.$id.&amp;quot;&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
					else if (($ld[$day-1] == 1) || ($ld[$day-1] == 15)) {&lt;br /&gt;
						if ($largemonth[$day-1])&lt;br /&gt;
							echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days-info largemoon&amp;#39; valign=&amp;#39;top&amp;#39; id=&amp;#39;&amp;quot;.$id.&amp;quot;&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days-info smallmoon&amp;#39; valign=&amp;#39;top&amp;#39; id=&amp;#39;&amp;quot;.$id.&amp;quot;&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
					}	&lt;br /&gt;
					else&lt;br /&gt;
						echo &amp;quot;&amp;lt;div class=&amp;#39;col span1_7 days-info&amp;#39; valign=&amp;#39;top&amp;#39; id=&amp;#39;&amp;quot;.$id.&amp;quot;&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
				}	&lt;br /&gt;
				&lt;br /&gt;
				CalendarPrint($day, $style, $s28, $lunarday, $gangi, $holiname, $memorialname, $schedulename, $season24s);&lt;br /&gt;
				echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;; //close col span&lt;br /&gt;
&lt;br /&gt;
				$offset++;&lt;br /&gt;
				//다음줄 넘김&lt;br /&gt;
				if ($offset == 7) {&lt;br /&gt;
					$offset = 0;&lt;br /&gt;
					echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;; //close section group&lt;br /&gt;
					//말일이 아니라면 다음줄 시작&lt;br /&gt;
					if ($day &amp;lt; $lastday) {&lt;br /&gt;
						echo &amp;quot;&amp;lt;div class=&amp;#39;section group&amp;#39;&amp;gt;&amp;quot;;&lt;br /&gt;
						$ck_row++;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
						&lt;br /&gt;
				$day++; // 날짜 증가&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			//줄의 끝(토요일)에서 끝난 것이 아니라면&lt;br /&gt;
			if ($offset != 0) {&lt;br /&gt;
				SkipOffset((7 - $offset), &amp;#39;&amp;#39;, mktime(0, 0, 0, $month + 1, 1, $year));&lt;br /&gt;
				echo &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;; //close section group&lt;br /&gt;
			}&lt;br /&gt;
		?&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;col span3_12&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;section group&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;schedule_form_div&amp;quot; class=&amp;quot;schedule_form_div&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;form id=&amp;quot;schedule&amp;quot; name=&amp;quot;schedule&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span id=&amp;quot;schedule_form_title&amp;quot;&amp;gt;일정 입력&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;amp;nbsp;(type/repeat/alarm)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;subject&amp;quot; name=&amp;quot;subject&amp;quot; size=&amp;quot;60&amp;quot; style=&amp;quot;width: 98%&amp;quot; placeholder=&amp;quot;새로운 일정을 입력하세요.&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;textarea id=&amp;quot;contents&amp;quot; name=&amp;quot;contents&amp;quot; rows=&amp;quot;10&amp;quot; style=&amp;quot;width: 98%&amp;quot; placeholder=&amp;quot;contents&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;time&amp;quot; id=&amp;quot;time&amp;quot; name=&amp;quot;time&amp;quot;&amp;gt;&amp;amp;nbsp;알림시간&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;repeat / type / alarm&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;repeat&amp;quot; name=&amp;quot;repeat&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;once&amp;quot;&amp;gt;once&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;repeat&amp;quot;&amp;gt;repeat&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;type&amp;quot; name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;none&amp;quot;&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;day&amp;quot;&amp;gt;day&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;week&amp;quot;&amp;gt;week&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;month&amp;quot;&amp;gt;month&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;year&amp;quot;&amp;gt;year&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;alarm&amp;quot; name=&amp;quot;alarm&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;none&amp;quot;&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;once&amp;quot;&amp;gt;once&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;repeat&amp;quot;&amp;gt;repeat&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
				&amp;lt;/p&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
				&amp;lt;div id=&amp;quot;schedule_check_div&amp;quot; class=&amp;quot;border schedule_check_div&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;lunar / month / day / time / check&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;schedule_lunar&amp;quot; name=&amp;quot;schedule_lunar&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;solar&amp;quot;&amp;gt;solar&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;lunar&amp;quot;&amp;gt;lunar&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
					&amp;lt;input type=&amp;quot;number&amp;quot; name=&amp;quot;schedule_month&amp;quot; id=&amp;quot;schedule_month&amp;quot; min=&amp;quot;00&amp;quot; max=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;input type=&amp;quot;number&amp;quot; name=&amp;quot;schedule_day&amp;quot; id=&amp;quot;schedule_day&amp;quot; min=&amp;quot;00&amp;quot; max=&amp;quot;31&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;schedule_check&amp;quot; name=&amp;quot;schedule_check&amp;quot; onchange=&amp;quot;schedule_check_onchange(this);&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=0&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=1&amp;gt;active&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=-1&amp;gt;disable&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
				&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
				&amp;lt;div id=&amp;quot;weekscheck_div&amp;quot; class=&amp;quot;border weekscheck_div&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;day / weeksdate / month / check&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;weekday&amp;quot; name=&amp;quot;weekday&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;none&amp;quot;&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;all&amp;quot;&amp;gt;all&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;일요일&amp;quot;&amp;gt;일요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;월요일&amp;quot;&amp;gt;월요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;화요일&amp;quot;&amp;gt;화요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;수요일&amp;quot;&amp;gt;수요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;목요일&amp;quot;&amp;gt;목요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;금요일&amp;quot;&amp;gt;금요일&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;토요일&amp;quot;&amp;gt;토요일&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;weeksdate&amp;quot; name=&amp;quot;weeksdate&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;none&amp;quot;&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;all&amp;quot;&amp;gt;all&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;first&amp;quot;&amp;gt;first&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;second&amp;quot;&amp;gt;second&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;third&amp;quot;&amp;gt;third&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;fourth&amp;quot;&amp;gt;fourth&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=&amp;quot;fifth&amp;quot;&amp;gt;fifth&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
					&amp;lt;input type=&amp;quot;number&amp;quot; name=&amp;quot;weeksmonth&amp;quot; id=&amp;quot;weeksmonth&amp;quot; min=&amp;quot;00&amp;quot; max=&amp;quot;12&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;select id=&amp;quot;weekscheck&amp;quot; name=&amp;quot;weekscheck&amp;quot; onchange=&amp;quot;weekscheck_onchange(this);&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;option value=0&amp;gt;none&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=1&amp;gt;active&amp;lt;/option&amp;gt;&lt;br /&gt;
						&amp;lt;option value=-1&amp;gt;disable&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;/select&amp;gt;&lt;br /&gt;
				&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;date&amp;quot; id=&amp;quot;start_date&amp;quot; name=&amp;quot;start_date&amp;quot;&amp;gt;&amp;amp;nbsp;일정시작일&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;date&amp;quot; id=&amp;quot;end_date&amp;quot; name=&amp;quot;end_date&amp;quot;&amp;gt;&amp;amp;nbsp;일정종료일&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;p&amp;gt;	&lt;br /&gt;
					&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;schedule_read&amp;quot;&amp;gt;읽기&amp;lt;/button&amp;gt;&lt;br /&gt;
					&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;schedule_insert&amp;quot;&amp;gt;등록&amp;lt;/button&amp;gt;&lt;br /&gt;
					&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;schedule_update&amp;quot;&amp;gt;수정&amp;lt;/button&amp;gt;&lt;br /&gt;
					&amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;schedule_delete&amp;quot;&amp;gt;삭제&amp;lt;/button&amp;gt;&lt;br /&gt;
				&amp;lt;/p&amp;gt;&lt;br /&gt;
			&amp;lt;/form&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;ajaxinfo&amp;quot; name=&amp;quot;ajaxinfo&amp;quot;&amp;gt;ajaxinfo &amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;disp_msg&amp;quot; name=&amp;quot;disp_msg&amp;quot;&amp;gt;disp_msg &amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;jquery-1.11.1.min.js&amp;quot;&amp;gt;&amp;lt;/script--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	function ajaxinfo(msg){&lt;br /&gt;
		document.getElementById(&amp;quot;ajaxinfo&amp;quot;).textContent = msg;&lt;br /&gt;
		document.getElementById(&amp;quot;ajaxinfo&amp;quot;).innerText = msg;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function disp_msg(msg){&lt;br /&gt;
		document.getElementById(&amp;quot;disp_msg&amp;quot;).textContent = msg;&lt;br /&gt;
		document.getElementById(&amp;quot;disp_msg&amp;quot;).innerText = msg;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function sortNumber(a,b) {&lt;br /&gt;
		if (a &amp;gt; b) return -1;&lt;br /&gt;
		else if (b &amp;gt; a) return 1;&lt;br /&gt;
		else return 0;	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function element_has_class(items, className) &lt;br /&gt;
	{&lt;br /&gt;
		//alert(JSON.stringify(items));&lt;br /&gt;
		for(var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
			var classlist = items[i].classList;&lt;br /&gt;
			for(var j = 0; j &amp;lt; classlist.length; j++) {&lt;br /&gt;
				if (classlist[j] == className) {&lt;br /&gt;
					return items[i];&lt;br /&gt;
				}&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    //목록에서 같은 클래스 이름을 가지고 있는 구성원을 전부 구해서 배열로 반환&lt;br /&gt;
	function elements_has_class(items, className) {&lt;br /&gt;
		var ret_elements = [];&lt;br /&gt;
		for(var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
			var classlist = items[i].classList;&lt;br /&gt;
			for(var j = 0; j &amp;lt; classlist.length; j++) {&lt;br /&gt;
				if (classlist[j] == className) {&lt;br /&gt;
					ret_elements.push(items[i]);&lt;br /&gt;
				}&lt;br /&gt;
			}	&lt;br /&gt;
		}&lt;br /&gt;
		return ret_elements;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function schedule_read(schedule_date, msg=&amp;quot;&amp;quot;){&lt;br /&gt;
&lt;br /&gt;
		var js_data = false;&lt;br /&gt;
		var schedule = false;&lt;br /&gt;
&lt;br /&gt;
		disp_msg(msg);&lt;br /&gt;
&lt;br /&gt;
        if (schedule_date == &amp;quot;2023-01-01&amp;quot;) {&lt;br /&gt;
			js_data = &amp;#39;&amp;lt;?php echo json_encode($schedule_11); ?&amp;gt;&amp;#39;;&lt;br /&gt;
			schedule = JSON.parse(js_data );&lt;br /&gt;
		}&lt;br /&gt;
		else if (schedule_date == &amp;quot;2023-01-21&amp;quot; || schedule_date == &amp;quot;2023-01-22&amp;quot; || schedule_date == &amp;quot;2023-01-23&amp;quot; || schedule_date == &amp;quot;2023-01-24&amp;quot;) {&lt;br /&gt;
			js_data = &amp;#39;&amp;lt;?php echo json_encode($schedule_122); ?&amp;gt;&amp;#39;;&lt;br /&gt;
			schedule = JSON.parse(js_data );&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			js_data = &amp;#39;&amp;lt;?php echo json_encode($schedule_empty); ?&amp;gt;&amp;#39;;&lt;br /&gt;
			schedule = JSON.parse(js_data );&lt;br /&gt;
		}	&lt;br /&gt;
		//alert(JSON.stringify(schedule));&lt;br /&gt;
&lt;br /&gt;
		//document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;schedule_id&amp;#39;].value = schedule.id;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;subject&amp;#39;].value = schedule.subject;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;contents&amp;#39;].value = schedule.contents;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;time&amp;#39;].value = schedule.time;&lt;br /&gt;
&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;repeat&amp;#39;].value = schedule.repeat;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;type&amp;#39;].value = schedule.type;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;alarm&amp;#39;].value = schedule.alarm;&lt;br /&gt;
&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;schedule_lunar&amp;#39;].value = schedule.schedule_lunar;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;schedule_month&amp;#39;].value = schedule.schedule_month;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;schedule_day&amp;#39;].value = schedule.schedule_day;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;schedule_check&amp;#39;].value = schedule.schedule_check;&lt;br /&gt;
&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;weekday&amp;#39;].value = schedule.weekday;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;weeksdate&amp;#39;].value = schedule.weeksdate;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;weeksmonth&amp;#39;].value = schedule.weeksmonth;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;weekscheck&amp;#39;].value = schedule.weekscheck;&lt;br /&gt;
&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;start_date&amp;#39;].value = schedule.start_date;&lt;br /&gt;
		document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;end_date&amp;#39;].value = schedule.end_date;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	document.getElementById(&amp;quot;schedule_read&amp;quot;).addEventListener(&amp;#39;click&amp;#39;, function(event)&lt;br /&gt;
	{&lt;br /&gt;
		event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
	    //schedule_read(document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;start_date&amp;#39;].value);&lt;br /&gt;
		//return false; &lt;br /&gt;
		&lt;br /&gt;
  		var item = element_has_class(daysinfoList, days_active);&lt;br /&gt;
		if (item) {&lt;br /&gt;
		    schedule_read(item.id, &amp;quot;읽기 버튼을 눌렀습니다.&amp;quot;);&lt;br /&gt;
		}	&lt;br /&gt;
		return false;&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	var daysinfoList = document.getElementsByClassName(&amp;quot;days-info&amp;quot;); //1일부터 말일까지 네모들&lt;br /&gt;
	var daysList = document.getElementsByClassName(&amp;quot;days&amp;quot;); //달력의 1일 왼쪽 말일 오른쪽 네모들&lt;br /&gt;
    var days_smallmoon = &amp;quot;smallmoon&amp;quot;; //음력달이 작은 달이면 1일, 15일에 smallmoon classname 있다&lt;br /&gt;
    var days_largemoon = &amp;quot;largemoon&amp;quot;; //음력달이 큰 달이면 1일, 15일에 largemoon classname 있다&lt;br /&gt;
    var days_season24 = &amp;quot;season24&amp;quot;; //24절기이면 해당날짜에 season24 classname 있다, 해당날짜가 음력 1,15일이라도 smallmoon,largemoon 보다 우선 적용&lt;br /&gt;
    var days_active = &amp;quot;active&amp;quot;; //선택(클릭)된 날짜를 표시할 class name&lt;br /&gt;
	var heights = new Array();&lt;br /&gt;
	var highest = 0;&lt;br /&gt;
	var day = false;&lt;br /&gt;
&lt;br /&gt;
	var	el_smallmoons = elements_has_class(daysinfoList, days_smallmoon);&lt;br /&gt;
	var	el_largemoons = elements_has_class(daysinfoList, days_largemoon);&lt;br /&gt;
	var	el_season24s = elements_has_class(daysinfoList, days_season24);&lt;br /&gt;
&lt;br /&gt;
	for(var i = 0; i &amp;lt; daysinfoList.length; i++) {&lt;br /&gt;
		&lt;br /&gt;
		//달력의 숫자 네모박스의 실제 높이를 계산&lt;br /&gt;
		var h_str = window.getComputedStyle(daysinfoList[i]).height;&lt;br /&gt;
		h_str = h_str.replace(&amp;#39;px&amp;#39;, &amp;#39;&amp;#39;);&lt;br /&gt;
		h_num = Number(h_str);&lt;br /&gt;
		//높이를 배열에 추가&lt;br /&gt;
		heights.push(h_num);&lt;br /&gt;
&lt;br /&gt;
		//달력의 숫자 네모박스를 클릭할 때&lt;br /&gt;
		daysinfoList[i].addEventListener(&amp;#39;click&amp;#39;, function() &lt;br /&gt;
		{&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
&lt;br /&gt;
			//이전에 선택된 날짜의 days_active class name을 제거한다&lt;br /&gt;
			for(var j = 0; j &amp;lt; daysinfoList.length; j++) {&lt;br /&gt;
				daysinfoList[j].classList.remove(days_active);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			//현재 선택된 날짜가 24절기이면 days_season24 class name을 제거한다&lt;br /&gt;
			//다른 날짜들(el_season24s[])은 days_season24 class name을 추가한다 &lt;br /&gt;
			for(var i = 0; i &amp;lt; el_season24s.length; i++) {&lt;br /&gt;
				if (this == el_season24s[i])&lt;br /&gt;
					this.classList.remove(days_season24);&lt;br /&gt;
				else&lt;br /&gt;
					el_season24s[i].classList.add(days_season24);&lt;br /&gt;
			}	&lt;br /&gt;
&lt;br /&gt;
			//현재 선택된 날짜의 음력달이 작은 달이면 days_smallmoon class name을 제거한다&lt;br /&gt;
			//다른 날짜들(el_smallmoons[])은 days_smallmoon class name을 추가한다 &lt;br /&gt;
			for(var i = 0; i &amp;lt; el_smallmoons.length; i++) {&lt;br /&gt;
				if (this == el_smallmoons[i])&lt;br /&gt;
					this.classList.remove(days_smallmoon);&lt;br /&gt;
				else&lt;br /&gt;
					el_smallmoons[i].classList.add(days_smallmoon);&lt;br /&gt;
			}	&lt;br /&gt;
&lt;br /&gt;
			//현재 선택된 날짜의 음력달이 큰 달이면 days_largemoon class name을 제거한다&lt;br /&gt;
			//다른 날짜들(el_largemoons[])은 days_largemoon class name을 추가한다 &lt;br /&gt;
			for(var i = 0; i &amp;lt; el_largemoons.length; i++) {&lt;br /&gt;
				if (this == el_largemoons[i])&lt;br /&gt;
					this.classList.remove(days_largemoon);&lt;br /&gt;
				else&lt;br /&gt;
					el_largemoons[i].classList.add(days_largemoon);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			//현재 선택된 날짜에 days_active class name을 추가한다 &lt;br /&gt;
			this.classList.add(days_active);&lt;br /&gt;
&lt;br /&gt;
            //일정을 읽는다&lt;br /&gt;
			//달력의 날짜들(1일부터 말일까지)들의 id&lt;br /&gt;
			//$id = str_pad($year, 4, &amp;quot;0&amp;quot;, STR_PAD_LEFT).&amp;quot;-&amp;quot;.  &lt;br /&gt;
			//	str_pad($month, 2, &amp;quot;0&amp;quot;, STR_PAD_LEFT).&amp;quot;-&amp;quot;.  &lt;br /&gt;
			//	str_pad($day, 2, &amp;quot;0&amp;quot;, STR_PAD_LEFT);  &lt;br /&gt;
			//document.forms[&amp;#39;schedule&amp;#39;][&amp;#39;start_date&amp;#39;].value = this.id;&lt;br /&gt;
&lt;br /&gt;
			disp_msg(&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		    schedule_read(this.id);&lt;br /&gt;
&lt;br /&gt;
			return false; &lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		//달력의 숫자를 클릭할 때&lt;br /&gt;
		daysinfoList[i].querySelector(&amp;#39;.ahref&amp;#39;).addEventListener(&amp;#39;click&amp;#39;, function(event)&lt;br /&gt;
		{&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
			//this.parentNode.classList.add(days_active);&lt;br /&gt;
			//read schedule data&lt;br /&gt;
		    //schedule_read(this.parentNode.id);&lt;br /&gt;
			return false; &lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//배열을 내림차순으로 정렬	&lt;br /&gt;
	heights = heights.sort(sortNumber);&lt;br /&gt;
&lt;br /&gt;
    //제일 큰 숫자 : 높이&lt;br /&gt;
	if (isNaN(highest[0])) {&lt;br /&gt;
		highest = heights[0]+&amp;#39;px&amp;#39;; &lt;br /&gt;
	}	&lt;br /&gt;
	else {&lt;br /&gt;
		highest = heights[0]; &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//alert(JSON.stringify(heights));&lt;br /&gt;
	//alert(highest);&lt;br /&gt;
	&lt;br /&gt;
	//달력의 날짜표시 네모들의 높이를 같은 크기로 만든다&lt;br /&gt;
	for(var i = 0; i &amp;lt; daysinfoList.length; i++) {&lt;br /&gt;
		daysinfoList[i].style.height = highest;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//달력의 날짜표시 네모들의 높이를 같은 크기로 만든다&lt;br /&gt;
	for(var i = 0; i &amp;lt; daysList.length; i++) {&lt;br /&gt;
		daysList[i].style.height = highest;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//days_active class name 을 가지고 있는 요소가 있으면 누른다&lt;br /&gt;
	day = element_has_class(daysinfoList, days_active); //현재 선택된 날짜 &lt;br /&gt;
	if (day) {&lt;br /&gt;
		day.querySelector(&amp;#39;.ahref&amp;#39;).click();&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	function schedule_check_onchange(el){&lt;br /&gt;
		if (el.value == 1) {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.add(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = false;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = true;&lt;br /&gt;
		}	&lt;br /&gt;
		else if (el.value == -1) {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).value = -1;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.add(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).value = 1;&lt;br /&gt;
		}	&lt;br /&gt;
		else {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).value = 0;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = false;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function weekscheck_onchange(el){&lt;br /&gt;
		if (el.value == 1) {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = true;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.add(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = false;&lt;br /&gt;
		}	&lt;br /&gt;
		else if (el.value == -1) {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.add(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).value = 1;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = true;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).value = -1;&lt;br /&gt;
		}	&lt;br /&gt;
		else {&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_lunar&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_month&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_day&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;schedule_check&amp;quot;).disabled = false;&lt;br /&gt;
&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck_div&amp;quot;).classList.remove(&amp;#39;active&amp;#39;);&lt;br /&gt;
			document.getElementById(&amp;quot;weekday&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksdate&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weeksmonth&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).disabled = false;&lt;br /&gt;
			document.getElementById(&amp;quot;weekscheck&amp;quot;).value = 0;&lt;br /&gt;
		}	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Tue, 10 Jan 2023 11:04:17 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>simple tab</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25005</link>
                    <description>&lt;br /&gt;
html tag 와 js 처리부분이 연결되어 있으니 한곳만 수정하면 작동이 안됩니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
js 부분은 간단히 몇줄로 압축이 가능하지만&lt;br /&gt;
&lt;br /&gt;
이것을 풀어서 코딩하고 동작시키는데 며칠이 걸렸습니다;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
	.tabs_wrapper {&lt;br /&gt;
		-moz-box-shadow: 0 0 2px #ccc;&lt;br /&gt;
		-webkit-box-shadow: 0 0 2px #ccc;&lt;br /&gt;
		box-shadow: 0 0 2px #ccc;&lt;br /&gt;
&lt;br /&gt;
		-moz-border-radius: 2px;&lt;br /&gt;
		-webkit-border-radius: 2px;&lt;br /&gt;
		border-radius: 2px;&lt;br /&gt;
&lt;br /&gt;
		background-color: #fafafa;&lt;br /&gt;
	&lt;br /&gt;
		margin: 1px 1px 3px 1px;&lt;br /&gt;
		padding: 1px 1px 1px 1px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs_contents_container {&lt;br /&gt;
		border: 1px solid #ccc;&lt;br /&gt;
		border-top: none;&lt;br /&gt;
		padding: 3px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tab_contents {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs_container {&lt;br /&gt;
		border-bottom: 1px solid #ccc;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs_pull_right {&lt;br /&gt;
		float: right !important;&lt;br /&gt;
		right: 0;&lt;br /&gt;
		left: auto;&lt;br /&gt;
		margin-right: 0;&lt;br /&gt;
		position: relative;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: middle;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs {&lt;br /&gt;
		list-style: none;&lt;br /&gt;
		padding: 5px 0 4px 0;&lt;br /&gt;
		margin: 0 0 0 10px;&lt;br /&gt;
		font: 0.75em arial;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs div span {&lt;br /&gt;
		display: inline;&lt;br /&gt;
		background-color: #eeeeee;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li {&lt;br /&gt;
		display: inline;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li a {&lt;br /&gt;
		border: 1px solid #ccc;&lt;br /&gt;
		padding: 4px 6px;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		background-color: #eeeeee;&lt;br /&gt;
		border-bottom: none;&lt;br /&gt;
		outline: none;&lt;br /&gt;
		border-radius: 5px 5px 0 0;&lt;br /&gt;
		-moz-border-radius: 5px 5px 0 0;&lt;br /&gt;
		-webkit-border-top-left-radius: 5px;&lt;br /&gt;
		-webkit-border-top-right-radius: 5px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li a:hover {&lt;br /&gt;
		background-color: #dddddd;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li.active a {&lt;br /&gt;
		border-bottom: 1px solid #fff;&lt;br /&gt;
		background-color: #fff;&lt;br /&gt;
		padding: 4px 6px 5px 6px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li.active a:hover {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li a.icon_accept {&lt;br /&gt;
		background-image: url(&amp;#39;accept.png&amp;#39;);&lt;br /&gt;
		background-position: 5px;&lt;br /&gt;
		background-repeat: no-repeat;&lt;br /&gt;
		padding-left: 24px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.tabs li a.icon_accept:hover {&lt;br /&gt;
		padding-left: 24px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.clearfix:before {&lt;br /&gt;
		display: table;&lt;br /&gt;
		content: &amp;quot; &amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.clearfix:after {&lt;br /&gt;
		display: table;&lt;br /&gt;
		content: &amp;quot; &amp;quot;; /* Older browser do not support empty content */&lt;br /&gt;
		clear: both;&lt;br /&gt;
		visibility: hidden;&lt;br /&gt;
		display: block;&lt;br /&gt;
		height: 0;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/* 사용자 정의 */&lt;br /&gt;
	// http://127.0.0.1/ci-426/public&lt;br /&gt;
	define(&amp;#39;SCRIPT_NAME&amp;#39;, $_SERVER[&amp;#39;SCRIPT_NAME&amp;#39;]); &lt;br /&gt;
	define(&amp;#39;HTTP_HTTPS&amp;#39;, ((isset($_SERVER[&amp;#39;HTTPS&amp;#39;]) &amp;amp;&amp;amp; $_SERVER[&amp;#39;HTTPS&amp;#39;]==&amp;#39;on&amp;#39;) ? &amp;#39;s&amp;#39; : &amp;#39;&amp;#39;));&lt;br /&gt;
&lt;br /&gt;
	define(&amp;#39;HTTP_HOST&amp;#39;, &amp;#39;http&amp;#39;.HTTP_HTTPS.&amp;#39;://&amp;#39;.$_SERVER[&amp;#39;HTTP_HOST&amp;#39;]); &lt;br /&gt;
	define(&amp;#39;DOCUMENT_ROOT&amp;#39;, $_SERVER[&amp;#39;DOCUMENT_ROOT&amp;#39;]);&lt;br /&gt;
&lt;br /&gt;
	$root_path = str_replace(basename(SCRIPT_NAME), &amp;#39;&amp;#39;, SCRIPT_NAME);&lt;br /&gt;
	$root_path = substr($root_path, 0, -1);&lt;br /&gt;
	if (empty($root_path)) {&lt;br /&gt;
		$root_path = &amp;#39;&amp;#39;;&lt;br /&gt;
	}	&lt;br /&gt;
	$base_path = str_replace(&amp;#39;/public&amp;#39; , &amp;#39;&amp;#39;, $root_path);&lt;br /&gt;
	define(&amp;#39;BASE_PATH&amp;#39;, $base_path);&lt;br /&gt;
	define(&amp;#39;ROOT_PATH&amp;#39;, $root_path);&lt;br /&gt;
	&lt;br /&gt;
	define(&amp;#39;HTTP_BASE&amp;#39;, HTTP_HOST.BASE_PATH);&lt;br /&gt;
	define(&amp;#39;DOC_BASE&amp;#39;, DOCUMENT_ROOT.BASE_PATH);&lt;br /&gt;
&lt;br /&gt;
	define(&amp;#39;HTTP_ROOT&amp;#39;, HTTP_HOST.ROOT_PATH); &lt;br /&gt;
	define(&amp;#39;DOC_ROOT&amp;#39;, DOCUMENT_ROOT.ROOT_PATH);&lt;br /&gt;
&lt;br /&gt;
	$request = \Config\Services::request();&lt;br /&gt;
	$uri = $request-&amp;gt;uri;&lt;br /&gt;
	$TotalSegments = $uri-&amp;gt;getTotalSegments();&lt;br /&gt;
&lt;br /&gt;
	$seg_controller = $uri-&amp;gt;getTotalSegments()&amp;gt;=1 ? $uri-&amp;gt;getSegment(1) : &amp;#39;/&amp;#39;;&lt;br /&gt;
	$seg_func       = $uri-&amp;gt;getTotalSegments()&amp;gt;=2 ? $uri-&amp;gt;getSegment(2) : &amp;#39;&amp;#39;;&lt;br /&gt;
	$seg_table      = $uri-&amp;gt;getTotalSegments()&amp;gt;=3 ? $uri-&amp;gt;getSegment(3) : &amp;#39;&amp;#39;;&lt;br /&gt;
	$seg_index      = $uri-&amp;gt;getTotalSegments()&amp;gt;=4 ? $uri-&amp;gt;getSegment(4) : &amp;#39;&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div class=&amp;quot;tabs_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;tabs_container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;ul id=&amp;quot;tabs_info&amp;quot; class=&amp;quot;tabs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;tabs_pull_right&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;span id=&amp;quot;tab_prev&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;prev&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
					&amp;lt;span id=&amp;quot;tab_next&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;next&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#tab_seg&amp;quot; class=&amp;quot;ahref&amp;quot;&amp;gt;segments&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#tab_path&amp;quot; class=&amp;quot;ahref&amp;quot;&amp;gt;path&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;li class=&amp;quot;active&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#tab_doc&amp;quot; class=&amp;quot;ahref&amp;quot;&amp;gt;doc&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/ul&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;tabs_info_contents&amp;quot; class=&amp;quot;tabs_contents_container&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;tab_seg&amp;quot; class=&amp;quot;tab_contents&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php&lt;br /&gt;
					echo &amp;#39;TotalSegments : &amp;#39;.$TotalSegments.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;&lt;br /&gt;
					echo &amp;#39;seg_controller : &amp;#39;.$seg_controller.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;&lt;br /&gt;
					echo &amp;#39;seg_func : &amp;#39;.$seg_func.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;&lt;br /&gt;
					echo &amp;#39;seg_table : &amp;#39;.$seg_table.&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;&lt;br /&gt;
				?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;tab_path&amp;quot; class=&amp;quot;tab_contents&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php&lt;br /&gt;
					echo &amp;quot;HTTP_HOST =&amp;gt; &amp;quot;.HTTP_HOST.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;DOCUMENT_ROOT =&amp;gt; &amp;quot;.DOCUMENT_ROOT.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;; &lt;br /&gt;
					echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;BASE_PATH =&amp;gt; &amp;quot;.BASE_PATH.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;; &lt;br /&gt;
					echo &amp;quot;ROOT_PATH =&amp;gt; &amp;quot;.ROOT_PATH.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;; &lt;br /&gt;
					echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;HTTP_BASE =&amp;gt; &amp;quot;.HTTP_BASE.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;DOC_BASE =&amp;gt; &amp;quot;.DOC_BASE.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;HTTP_ROOT =&amp;gt; &amp;quot;.HTTP_ROOT.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;DOC_ROOT =&amp;gt; &amp;quot;.DOC_ROOT.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;; &lt;br /&gt;
					echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
					echo &amp;quot;base_url() =&amp;gt; &amp;quot;.base_url().&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
				?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div id=&amp;quot;tab_doc&amp;quot; class=&amp;quot;tab_contents&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.phpschool.com/&amp;quot;&amp;gt;phpschool&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;http://www.tcpschool.com/&amp;quot;&amp;gt;tcpschool&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;https://link2me.tistory.com/category&amp;quot;&amp;gt;link2me&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;https://www.php.net/manual/en/index.php&amp;quot;&amp;gt;php&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;https://ko.javascript.info/&amp;quot;&amp;gt;JavaScript&amp;lt;/a&amp;gt;&lt;br /&gt;
				&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;https://www.devkuma.com/&amp;quot;&amp;gt;devkuma&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
		function has_class(items, className) &lt;br /&gt;
		{&lt;br /&gt;
			//alert(JSON.stringify(items));&lt;br /&gt;
			for(var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
				var classlist = items[i].classList;&lt;br /&gt;
				for(var j = 0; j &amp;lt; classlist.length; j++) {&lt;br /&gt;
					if (classlist[j] == className) {&lt;br /&gt;
						return items[i];&lt;br /&gt;
					}&lt;br /&gt;
				}	&lt;br /&gt;
			}&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		function item_prev(items, className) &lt;br /&gt;
		{&lt;br /&gt;
	  		var item = has_class(items, className);&lt;br /&gt;
			for(var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
				if (items[i] == item) {&lt;br /&gt;
					if (i &amp;gt; 0) {&lt;br /&gt;
					    return items[i-1];&lt;br /&gt;
					}&lt;br /&gt;
				}	&lt;br /&gt;
			}&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		function item_next(items, className) &lt;br /&gt;
		{&lt;br /&gt;
	  		var item = has_class(items, className);&lt;br /&gt;
			for(var i = 0; i &amp;lt; items.length; i++) {&lt;br /&gt;
				if (items[i] == item) {&lt;br /&gt;
					if (i &amp;lt; items.length-1) {&lt;br /&gt;
					    return items[i+1];&lt;br /&gt;
					}&lt;br /&gt;
				}	&lt;br /&gt;
			}&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
  &lt;br /&gt;
		var tabs_info = document.getElementById(&amp;quot;tabs_info&amp;quot;);&lt;br /&gt;
		var tabList = tabs_info.getElementsByTagName(&amp;quot;li&amp;quot;)&lt;br /&gt;
		var tabs_info_contents = document.getElementById(&amp;quot;tabs_info_contents&amp;quot;);&lt;br /&gt;
		var contentList = tabs_info_contents.querySelectorAll(&amp;#39;.tab_contents&amp;#39;);&lt;br /&gt;
	    var tabs_active = &amp;quot;active&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		document.getElementById(&amp;quot;tab_prev&amp;quot;).onclick = function(event)&lt;br /&gt;
		{&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
			var item = item_prev(tabList, tabs_active);&lt;br /&gt;
			if (item) {&lt;br /&gt;
				item.querySelector(&amp;#39;.ahref&amp;#39;).click();&lt;br /&gt;
			}	&lt;br /&gt;
			return false;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		document.getElementById(&amp;quot;tab_next&amp;quot;).onclick = function(event)&lt;br /&gt;
		{&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
			var item = item_next(tabList, tabs_active);&lt;br /&gt;
			if (item) {&lt;br /&gt;
				item.querySelector(&amp;#39;.ahref&amp;#39;).click();&lt;br /&gt;
			}	&lt;br /&gt;
			return false;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		for(var i = 0; i &amp;lt; tabList.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			tabList[i].querySelector(&amp;#39;.ahref&amp;#39;).addEventListener(&amp;#39;click&amp;#39;, function(event)&lt;br /&gt;
			{&lt;br /&gt;
				event.preventDefault();&lt;br /&gt;
				for(var j = 0; j &amp;lt; tabList.length; j++) {&lt;br /&gt;
					tabList[j].classList.remove(tabs_active);&lt;br /&gt;
					contentList[j].style.display = &amp;#39;none&amp;#39;;&lt;br /&gt;
				}&lt;br /&gt;
				this.parentNode.classList.add(tabs_active);&lt;br /&gt;
&lt;br /&gt;
				var selected_tab = this.getAttribute(&amp;#39;href&amp;#39;);&lt;br /&gt;
				document.querySelector(selected_tab).style.display = &amp;#39;block&amp;#39;;&lt;br /&gt;
				return false; &lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
  		var item = has_class(tabList, tabs_active);&lt;br /&gt;
		if (item) {&lt;br /&gt;
			item.querySelector(&amp;#39;.ahref&amp;#39;).click();&lt;br /&gt;
		}	&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sun, 01 Jan 2023 23:27:46 +0900</pubDate>
                    <dc:creator>darkninja</dc:creator>
                </item>
                            <item>
                    <title>captcha font size 폰트 사이즈가 바뀌지 않을 때 참고하세요.</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=25001</link>
                    <description>제 경험이 혹 도움이 될까 하여 남깁니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
기존에 php7.2 에서 잘 사용하던 captcha 가 php7.4 인 서버로 이전하니 회원가입 페이지의 captcha 부분에서 오류가 나왔습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A PHP Error was encountered&lt;br /&gt;
&lt;br /&gt;
Severity: Warning&lt;br /&gt;
&lt;br /&gt;
Message: imagettftext(): Could not find/open font&lt;br /&gt;
&lt;br /&gt;
Filename: helpers/captcha_helper.php&lt;br /&gt;
&lt;br /&gt;
Line Number: 320&lt;br /&gt;
&lt;br /&gt;
Backtrace:&lt;br /&gt;
&lt;br /&gt;
File: /home/math/application/controllers/Auth.phpLine: 549Function: create_captcha&lt;br /&gt;
&lt;br /&gt;
File: /home/math/application/controllers/Auth.phpLine: 213Function: _create_captcha&lt;br /&gt;
&lt;br /&gt;
File: /home/math/public_html/index.phpLine: 328Function: require_once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A PHP Error was encountered&lt;br /&gt;
&lt;br /&gt;
Severity: Notice&lt;br /&gt;
&lt;br /&gt;
Message: Trying to access array offset on value of type bool&lt;br /&gt;
&lt;br /&gt;
Filename: controllers/Auth.php&lt;br /&gt;
&lt;br /&gt;
Line Number: 554&lt;br /&gt;
&lt;br /&gt;
Backtrace:&lt;br /&gt;
&lt;br /&gt;
File: /home/math/application/controllers/Auth.phpLine: 554Function: _error_handler&lt;br /&gt;
&lt;br /&gt;
File: /home/math/application/controllers/Auth.phpLine: 213Function: _create_captcha&lt;br /&gt;
&lt;br /&gt;
File: /home/math/public_html/index.phpLine: 328Function: require_once&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
어떻게든 했는데, 이번에는 폰트 사이즈가 조절이 안됩니다;&lt;br /&gt;
&lt;br /&gt;
결론은,, fonts_path 경로 설정이었습니다..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$config[&amp;#39;captcha_path&amp;#39;] = &amp;#39;assets/captcha/&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
$config[&amp;#39;captcha_fonts_path&amp;#39;] = FCPATH.&amp;#39;assets/captcha/fonts/3.ttf&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
검색 사이트 바로 가기&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$config[&amp;#39;captcha_path&amp;#39;] = &amp;#39;assets/captcha/&amp;#39;;&lt;br /&gt;
$config[&amp;#39;captcha_fonts_path&amp;#39;] = FCPATH.&amp;#39;assets/captcha/fonts/3.ttf&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
FCPATH 로 폰트 경로를 지정하니 정상적으로 나왔네요.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
참고로 저는 tank_auth 를 사용하고 있고요,&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
리눅스 CentOS 7 + php7.4 + CI&amp;nbsp;3.1.13 버전 사용중입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
도움이 되셨으면 좋겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Sat, 31 Dec 2022 20:59:29 +0900</pubDate>
                    <dc:creator>하늘치</dc:creator>
                </item>
                            <item>
                    <title>모바일 환경에서의 이미지 업로드</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=24998</link>
                    <description>회사 앱(하이브리드)&amp;nbsp;특성상 모바일 상에서 카메라로 찍어서 이미지를 자주 올리도록 되어있습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
이미지를 올릴때 용량이 크면 중간에 새로고친다던지..&lt;br /&gt;
&lt;br /&gt;
앱이 죽은줄 알고 앱을 닫는다던지.. 등등의 액션으로 인해서&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
파일이 안올라온다거나.. 이탈하는 회원이 생깁니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
그래서 고민하다가 좋은 참고자료를 찾았습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
원본은&amp;nbsp;https://stackoverflow.com/questions/23945494/use-html5-to-resize-an-image-before-upload 여기에서 확인&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input name=&amp;quot;imagefile[]&amp;quot; type=&amp;quot;file&amp;quot; id=&amp;quot;takePictureField&amp;quot; accept=&amp;quot;image/*&amp;quot; onchange=&amp;quot;uploadPhotos(&amp;#39;test/html5prc&amp;#39;);&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;uploadImageForm&amp;quot; method=&amp;quot;post&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;/test/html5prc&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;name&amp;quot; value=&amp;quot;text-field&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;upfile_blob&amp;quot; id=&amp;quot;upfile_blob&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; id=&amp;quot;uploadImageForm_btn&amp;quot; value=&amp;quot;업로드&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
input=file 필드를 form 밖에 둔 이유는 해당 첨부파일이 업로드되지 않도록 하기 위함.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
window.uploadPhotos = function(url){&lt;br /&gt;
    // Read in file&lt;br /&gt;
    var file = event.target.files[0];&lt;br /&gt;
&lt;br /&gt;
    // Ensure it&amp;#39;s an image&lt;br /&gt;
    if(file.type.match(/image.*/)) {&lt;br /&gt;
        var reader = new FileReader();&lt;br /&gt;
        reader.onload = function (readerEvent) {&lt;br /&gt;
            var image = new Image();&lt;br /&gt;
            image.onload = function (imageEvent) {&lt;br /&gt;
                var canvas = document.createElement(&amp;#39;canvas&amp;#39;),&lt;br /&gt;
                    max_size = 1024,  /* 리사이즈될 이미지의 크기 지정 */&lt;br /&gt;
                    width = image.width,&lt;br /&gt;
                    height = image.height;&lt;br /&gt;
                if (width &amp;gt; height) {&lt;br /&gt;
                    if (width &amp;gt; max_size){height *= max_size/width;width = max_size;}&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (height &amp;gt; max_size){width *= max_size/height;height = max_size;}&lt;br /&gt;
                }&lt;br /&gt;
                canvas.width = width;canvas.height = height;&lt;br /&gt;
                canvas.getContext(&amp;#39;2d&amp;#39;).drawImage(image, 0, 0, width, height);&lt;br /&gt;
                var dataUrl = canvas.toDataURL(&amp;#39;image/jpeg&amp;#39;);&lt;br /&gt;
                var resizedImage = dataURLToBlob(dataUrl);&lt;br /&gt;
                $(&amp;quot;#upfile_blob&amp;quot;).val(dataUrl);&lt;br /&gt;
                $.event.trigger({type: &amp;quot;imageResized&amp;quot;,blob: resizedImage,url: dataUrl});&lt;br /&gt;
            }&lt;br /&gt;
            image.src = readerEvent.target.result;&lt;br /&gt;
        }&lt;br /&gt;
        reader.readAsDataURL(file);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var dataURLToBlob = function(dataURL) {&lt;br /&gt;
    var BASE64_MARKER = &amp;#39;;base64,&amp;#39;;&lt;br /&gt;
    if (dataURL.indexOf(BASE64_MARKER) == -1) {&lt;br /&gt;
    	var parts = dataURL.split(&amp;#39;,&amp;#39;);&lt;br /&gt;
    	var contentType = parts[0].split(&amp;#39;:&amp;#39;)[1];&lt;br /&gt;
    	var raw = parts[1];&lt;br /&gt;
    	return new Blob([raw], {type: contentType});&lt;br /&gt;
    }&lt;br /&gt;
    var parts = dataURL.split(BASE64_MARKER);&lt;br /&gt;
    var contentType = parts[0].split(&amp;#39;:&amp;#39;)[1];&lt;br /&gt;
    var raw = window.atob(parts[1]);&lt;br /&gt;
    var rawLength = raw.length;&lt;br /&gt;
    var uInt8Array = new Uint8Array(rawLength);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rawLength; ++i) {uInt8Array[i] = raw.charCodeAt(i);}&lt;br /&gt;
    return new Blob([uInt8Array], {type: contentType});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(document).on(&amp;quot;imageResized&amp;quot;, function (event) {&lt;br /&gt;
    if (event.blob &amp;amp;&amp;amp; event.url) {&lt;br /&gt;
        $(&amp;quot;#uploadImageForm_btn&amp;quot;).click();&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
업로드가 파일이 아니고 text필드의 값으로 넘어왔으므로&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
DB에 blog 필드에 저장해도 되고 폴더에 저장해도 됩니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
폴더에 저장하시려면 아래와 같이 변환해서 저장하면 됩니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$blob = $_POST[&amp;quot;upfile_blob&amp;quot;];&lt;br /&gt;
$arr = explode(&amp;quot;,&amp;quot;, $blob);&lt;br /&gt;
unset($arr[0]);&lt;br /&gt;
$blob = base64_decode(implode(&amp;quot;&amp;quot;,$arr));&lt;br /&gt;
$filename = time() . &amp;quot;.jpeg&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
file_put_contents(&amp;#39;./img/event_temp/&amp;#39;.$filename, $blob);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
max_width를 1024 정도로 했을때 5~6매가 씩이나 되는 이미지도 200kbyte 정도 이하로 리사이즈 되어 업로드 됩니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
모바일 환경에서 파일 업로드 고민 하시는 분들에게는 좋은 팁이 될듯 합니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
참고한 URL&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	https://uminoh.tistory.com/14&lt;br /&gt;
	https://stackoverflow.com/questions/23945494/use-html5-to-resize-an-image-before-upload&lt;br /&gt;
</description>
                    <pubDate>Wed, 28 Dec 2022 20:20:08 +0900</pubDate>
                    <dc:creator>도라에몽</dc:creator>
                </item>
                            <item>
                    <title>자바스크립트 이미지 에디터</title>
                    <link>http://ww.w.codeigniter-kr.org/bbs/view/tip?idx=24663</link>
                    <description>Toast UI image editor 라는 물건인데 웹브라우져에서 간단히 이미지 편집이 가능하네요.&lt;br /&gt;
&lt;br /&gt;
샘플 코드 공유합니다.&lt;br /&gt;
&lt;br /&gt;
* github :&amp;nbsp;https://github.com/nhn/tui.image-editor&lt;br /&gt;
&lt;br /&gt;
* CDN을 이용한 샘플코드&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;0. Design&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://uicdn.toast.com/tui-color-picker/v2.2.6/tui-color-picker.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://uicdn.toast.com/tui-image-editor/latest/tui-image-editor.css&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;style&amp;gt;&lt;br /&gt;
        @import url(http://fonts.googleapis.com/css?family=Noto+Sans);&lt;br /&gt;
        html, body {&lt;br /&gt;
            height: 100%;&lt;br /&gt;
            margin: 0;&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tui-image-editor-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.6.0/fabric.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://uicdn.toast.com/tui.code-snippet/v1.5.0/tui-code-snippet.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://uicdn.toast.com/tui-color-picker/v2.2.6/tui-color-picker.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://uicdn.toast.com/tui-image-editor/latest/tui-image-editor.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./js/theme/white-theme.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./js/theme/black-theme.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Image editor&lt;br /&gt;
    var imageEditor = new tui.ImageEditor(&amp;#39;#tui-image-editor-container&amp;#39;, {&lt;br /&gt;
        includeUI: {&lt;br /&gt;
            loadImage: {&lt;br /&gt;
                path: &amp;#39;img/sampleImage2.png&amp;#39;,&lt;br /&gt;
                name: &amp;#39;SampleImage&amp;#39;&lt;br /&gt;
            },&lt;br /&gt;
            //  theme: blackTheme, // or whiteTheme&lt;br /&gt;
            initMenu: &amp;#39;filter&amp;#39;,&lt;br /&gt;
            menuBarPosition: &amp;#39;bottom&amp;#39;&lt;br /&gt;
        },&lt;br /&gt;
        cssMaxWidth: 700,&lt;br /&gt;
        cssMaxHeight: 500,&lt;br /&gt;
        usageStatistics: false&lt;br /&gt;
    });&lt;br /&gt;
    window.onresize = function() {&lt;br /&gt;
        imageEditor.ui.resizeEditor();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;</description>
                    <pubDate>Fri, 26 Aug 2022 12:04:38 +0900</pubDate>
                    <dc:creator>한대승(불의회상)</dc:creator>
                </item>
            </channel></rss>