/**** minimize 주의사항 : // 아래 사항을 지키지 않으면 minimize 된 뒤에 parsing 에러가 발생한다. 1. var varName = value;의 경우 반드시 뒤에 ;을 넣어야 한다. 2. var funcName = function() {};의 경우 반드시 뒤에 ;을 넣어야 한다. *******/ window.FAMILY_OBJ_STR = ""; window.CUR_WEEK_DATE = ""; window.CUR_WEEKDAY = -1; window.CUR_DAY_DATE = {}; window.CUR_JAMI_CMD = 0; window.TITLE_BAND_HEIGHT="0px"; // css의 titleband의 height와 같은 값으로 지정할 것 window.VALUE_ON = 1; window.VALUE_OFF = 0; function isAlien(a) { return isObject(a) && typeof a.constructor != 'function'; } function isArray(a) { return isObject(a) && a.constructor == Array; } function isBoolean(a) { return typeof a == 'boolean'; } function isEmpty(o) { var i, v; if (isObject(o)) { for (i in o) { v = o[i]; if (isUndefined(v) && isFunction(v)) { return false; } } } return true; } function isFunction(a) { return typeof a == 'function'; } function isNull(a) { return typeof a == 'object' && !a; } function isNumber(a) { return typeof a == 'number' && isFinite(a); } function isObject(a) { return (a && typeof a == 'object') || isFunction(a); } function isString(a) { return typeof a == 'string'; } function isUndefined(a) { return typeof a == 'undefined'; } function printf(msg) { var args = Array.prototype.slice.call(arguments,1), arg; return msg.replace(/(%[disv])/g, function(a,val) { arg = args.shift(); if (arg !== undefined) { switch(val.charCodeAt(1)) { case 100: return +arg; // d case 105: return Math.round(+arg); // i case 115: return String(arg); // s case 118: return arg; // v } } return val; }); } function MbcGetPageMsg(msgCode) { return msgCode; } function MbcChangeButtonStyle(obj, newClassName) { if (!obj) return; obj.className = newClassName; } function MbcBlockEnterKeyPress(event) { return (event.keyCode != 10 && event.keyCode != 13); } function MbcCheckboxChange(checkboxId) { var checkbox = document.getElementById(checkboxId); if (!checkbox) return; var checkboxImg = document.getElementById(checkboxId+"_image"); if (!checkboxImg) return; if (checkbox.checked) checkboxImg.src = "../img/checkbox_checked.png"; else checkboxImg.src = "../img/checkbox_unchecked.png"; } function MbcImageCheckboxClick(checkboxId) { var checkbox = document.getElementById(checkboxId); if (!checkbox) return; checkbox.click(); } function MbcDynamicString(str, paramObj) { var retStr = str; for (var key in paramObj) retStr = retStr.replace('${' + key + '}', paramObj[key]); return retStr; } function MbcGetDeliStrToDate(inStr, deli) { try { var strArray = inStr.split(deli); return new Date(strArray[0], strArray[1]-1, strArray[2]); } catch (e) { return new Date(); } } function MbcIsEmptyString(str) { return (str == null || str == "undefined" || str == ""); } function GetUrlTM() { return new Date().getTime(); } function GetIndexUrl() { return "/?tm="+GetUrlTM(); } function GoIndex() { document.location.href = GetIndexUrl(); } function MbcFillNumZero(num, len) { var str = num.toString(10); var z=""; for (var i=0;i 0 && dstStr[start-1] == "\\") { dstStr = dstStr.substring(0, start-1)+tagVarName+dstStr.substring(end); // start-1했으므로 tarVarName.length만큼만 이동해야 한다. start += tagVarName.length; continue; } var replaceValue = String(""); if (paramObj[varValueName]) replaceValue = String(paramObj[varValueName]); dstStr = dstStr.substring(0, start)+replaceValue+dstStr.substring(end); // replaceValue.length+1만큼 이동해야 한다. start += replaceValue.length+1; } while(true); return dstStr; } function GoDirectUrl(url, target) { if (url.indexOf("?") >= 0) url += "&"; else url += "?"; url += new Date().getTime(); if (!target) { document.location.href = url; return; } var win = window.open(url, target); if (win) win.focus(); } function CallSMS(cellphone) { var phone = MbcTrim(cellphone); if (cellphone.length == 0) { alert("휴대폰 번호가 등록되어 있지 않습니다."); return; } GoDirectUrl("sms:"+cellphone); } function CallPhone(cellphone) { var phone = MbcTrim(cellphone); if (cellphone.length == 0) { alert("휴대폰 번호가 등록되어 있지 않습니다."); return; } GoDirectUrl("tel:"+cellphone); } function CallMail(mailAddr) { var mailAddr = MbcTrim(mailAddr); if (mailAddr.length == 0) { alert("이메일이 들록되어 있지 않습니다."); return; } GoDirectUrl("mailto:"+mailAddr); } function MbcSetRadioValue(obj, value) { if (!obj) return; if (obj.length) { for (var i=0;i maxLen) { alert(name+" : "+MbcEvalDynamicString("${min} ~ ${max} 자로 입력해야 합니다.", { min : minLen, max : maxLen })); return false; } return true; } function GetMbcDateFormat(inDate, fmt) { if (!inDate.valueOf()) return ""; return fmt.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh24|hh|mi|ss|a\/p)/gi, function($1) { switch($1) { case "yyyy" : return inDate.getFullYear(); break; case "mm" : return MbcFillNumZero(inDate.getMonth()+1,2); break; case "dd" : return MbcFillNumZero(inDate.getDate(),2); break; case "hh" : { var h = inDate.getHours() % 12; return MbcFillNumZero((h ? h : 12), 2); } break; case "hh24" : return MbcFillNumZero(inDate.getHours(), 2); break; case "mi" : return MbcFillNumZero(inDate.getMinutes(),2); break; case "ss" : return MbcFillNumZero(inDate.getSeconds(),2); break; case "a/p" : return inDate.getHours() < 12 ? "a" : "p"; break; } } ); } function GetMbcDeliStrToDate(inStr, deli) { try { var strArray = inStr.split(deli); return new Date(strArray[0], strArray[1]-1, strArray[2]); } catch (e) { return new Date(); } } function MbcSetCookie(name, value, expireDays, path, domain) { var cookieStr = ""; cookieStr = name+"="+value; if (path) cookieStr +="; path="+path; if (expireDays) { var tempDate = new Date(); tempDate.setDate(tempDate.getDate() + expireDays); cookieStr += "; expires="+tempDate.toGMTString(); } if (!path) path = "/"; cookieStr += "; path="+path; /*** if (!domain) { var pathName = document.location.pathname; domain = pathName.substring(0, pathName.lastIndexOf("/"))+"/"; } cookieStr += "; domain="+domain; ***/ document.cookie = cookieStr; } function MbcGetCookie(name) { var nameOfCookie = name + "="; var i = 0; while (i<=document.cookie.length) { var j = (i+nameOfCookie.length); if (document.cookie.substring(i, j) == nameOfCookie) { if ((endOfCookie=document.cookie.indexOf( ";", j )) == -1) endOfCookie = document.cookie.length; return document.cookie.substring(j, endOfCookie); } i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return ""; } // 직접 모바일에서 직접 scrollTo를 사용하면 주소창이 올라가지 않아서 // setTimeout 처리함 function MbcGotoTop() { setTimeout(scrollTo, 0, 0, 1); } if (window.addEventListener) window.addEventListener('load', function() { MbcGotoTop(); }, false); else window.attachEvent("onload", function() { MbcGotoTop(); } ); function sms() { setTimeout(function() { document.location.href='sms:025782377'; }, 10); } var HRS_STATUS_SUCCESS = 0; var HRS_STATUS_FAILURE = -1; var HRS_STATUS_VALIDATION_ERROR = -4; var HRS_STATUS_LOGIN_INCORRECT = -5; var HRS_STATUS_MAX_LOGIN_ATTEMPTS_EXCEEDED = -6; var HRS_STATUS_LOGIN_REQUIRED = -7; var HRS_STATUS_LOGIN_SUCCESS = -8; var HRS_STATUS_TRANSPORT_ERROR = -90; var HRS_STATUS_SERVER_TIMEOUT = -100; if (!window.Hrs) window.Hrs = {}; jQuery(document).ready(function($) { var _pageIsFirst = true; var _curPageIndex = -1; var _loadPageIndex = -1; var _newPageIndex = 0; var _hashDelimeter = "__"; var _curHash = ""; var _newHash = ""; MbcGotoTop(); function isLogin() { var uniqId = MbcTrim(MbcGetCookie("memberUniqId")); return !MbcIsEmptyString(uniqId); } function DispLoginInfoInHome() { var obj = $('*[loginInfoInHome="true"]:visible'); if (obj && obj.length > 0) { var dispFuncName = obj.attr("dispFuncName"); if (!MbcIsEmptyString(dispFuncName)) eval(dispFuncName+"()"); } } function setTouchStartEnd() { var touchStartAttr = "mldOnTouchStart"; var touchEndAttr = "mldOnTouchEnd"; var touchStartList = $('['+touchStartAttr+']'); touchStartList.each( function() { var thisObj = $(this); if (thisObj.attr("isMldOnTouchStart") == VALUE_ON) return; var touchStartFn = function(event) { try { if (thisObj.attr("disabled")) return; var fn = thisObj.attr(touchStartAttr); eval(fn); } catch (e) { console.log("touthStart="+fn+"] e=["+e.name+"]["+e.message+"]"); } } var touchEndFn = function(event) { try { if (thisObj.attr("disabled")) return; var fn = thisObj.attr(touchEndAttr); eval(fn); } catch (e) { console.log("touthEnd="+fn+"] e=["+e.name+"]["+e.message+"]"); } } thisObj.bind("touchstart.mldTouch", touchStartFn); thisObj.bind("touchend.mldTouch", touchEndFn); thisObj.bind("touchmove.mldTouch", function(e) { e.preventDefault(); } ); thisObj.attr("isMldOnTouchStart", VALUE_ON); } ); } function setMldClick() { setTouchStartEnd(); } function updateLoginItems() { var isLoginState = isLogin(); var logoutButn = $("#logoutButn"); var loginHome = $("#loginHome"); var notLoginHome = $("#notLoginHome"); var loginArea = $(".loginArea"); var notLoginArea = $(".notLoginArea"); if (isLoginState) { if (logoutButn) logoutButn.show(); if (loginHome) loginHome.show(); if (loginArea) loginArea.show(); if (notLoginHome) notLoginHome.hide(); if (notLoginArea) notLoginArea.hide(); } else { if (logoutButn) logoutButn.hide(); if (loginHome) loginHome.hide(); if (loginArea) loginArea.hide(); if (notLoginHome) notLoginHome.show(); if (notLoginArea) notLoginArea.show(); } //alert(DispLoginInfoInHome); try { if (DispLoginInfoInHome && typeof DispLoginInfoInHome == "function") { DispLoginInfoInHome(); } } catch (e) {} setMldClick(); } function updateTitle(curPage) { var headerTitle = $("#headerTitle"); if (!headerTitle || headerTitle.length == 0) return; if (curPage.length > 0) { var pageTitle = curPage.find("#pageTitle"); for (var i=0;i 255) return "FF"; var i = Math.floor(dec / 16) ; var j = dec % 16 ; return hexCharacters.charAt(i) + hexCharacters.charAt(j) ; } function hashToHex(hash) { var hashInfo = getHashInfo(hash); var url = hashInfo.url; var hexHash = ""; for (var i=0;i 0) fromPage = logout; else fromPage = getPageContainerByHash(_curHash); var toPage = getPageContainerByHash(_newHash); if (_pageIsFirst) { replaceContents(fromPage, toPage); _pageIsFirst = false; } else { var isBackward = (_curPageIndex > _newPageIndex); _curPageIndex = _newPageIndex; _curHash = _newHash; slideContents(fromPage, toPage, isBackward); } } function load(url, isReplace) { _newHash = $.history.appState; var newHashInfo = getHashInfo(_newHash); if (newHashInfo == null) { //alert("load 0 return"); return; } //alert("load 1"); // 내부링크에서 뒤로/앞으로하면 _curHash와 _newHash가 같을 수 있다. // 이 때에는 특별한 처리를 하지 않는다. if (!MbcIsEmptyString(_curHash) && (_curHash == _newHash) && (isReplace != true)) { //alert("load 2 return ["+url+"]"); return; } //alert("load 3"); var isCached = true; var newContainerId = getPageContainerIdByHash(_newHash); var toPage = $("#"+newContainerId); //alert("toPage.length=["+toPage.length+"]"); if (toPage.length == 0) { var containerParent = $("#pageContainerParent"); var newContainer = $("
"); newContainer.attr("id", newContainerId); newContainer.addClass("pageContainerIn"); var footer = $("#pageContainerFooter"); if (footer.length > 0) newContainer.insertBefore(footer); else newContainer.append(containerParent); toPage = getPageContainerByHash(_newHash); toPage.hide(); toPage.css("top", TITLE_BAND_HEIGHT); toPage.css("left", "100%"); isCached = false; } else if (!isCacheUrl(url)) isCached = false; if (isReplace == true) isCached = false; //alert("load 4 isCached=["+isCached+"]"); _newPageIndex = newHashInfo.pageIndex; if (!isCached) { toPage.load(url, null, loadHandler); } else { loadHandler(); } //alert("load End"); } $.history.init( function(hash) { var hashInfo = getHashInfo(hash); if (hashInfo == null) return; // 자세한 내용은 goUrl() 참조 // goUrl의 조치에도 불구하고 스크롤이 되는 브라우저가 있어서 다시 설정 scrollTo(0,1); // 새로 고침하거나 처음 들어왔다. if (_curPageIndex == -1) { _curPageIndex = hashInfo.pageIndex; } load(hashInfo.url); }); function goUrl(url, param) { // 여기서 scrollTo하는 이유는 스크롤된 상태에서 이동할 때 // 이동한 뒤 다시 "뒤로", "앞으로"하게 되면 // 브라이저가 이전의 스크롤 위치를 기억하고 있어서 // 현재 페이지가 이전의 스클롤 위치로 다시 이동한 뒤 // 페이지가 변하기 때문에 다시 맨 위로 돌려 주기 위해서이다. // MbcGotoTop은 timeout을 사용하므로 브라우저가 위치를 저장한 뒤에 // top으로 이동하여 효과가 없으므로 직접 scrollTo를 사용한다. // 그리고 위치도 (0,1)임에 주의 scrollTo(0,1); // 브라우저 반응이 느릴 때 같은 페이지에서 여러 메뉴를 동시에 누르게 되는 경우 // pageIndex 값이 같아 지는 경우가 발생하여 무조건 늘리는 것으로 처리 if (_loadPageIndex == -1) _loadPageIndex = _curPageIndex+1; else _loadPageIndex++; $.history.load((_loadPageIndex)+_hashDelimeter+url); } function goUrlReplace(url, param) { //$.history.load((_curPageIndex)+_hashDelimeter+url); var newUrl = (_curPageIndex)+_hashDelimeter+url; //alert("goUrlReplace url=["+url+"] newUrl=["+newUrl+"]"); load(url, true); } $('form').live('submit', function() { return false; }); function clickHandler(e) { var url = ""; var backImageObj = null; backImageObj = $(this); var pageLink = $(this).attr("page_link"); if (pageLink && pageLink != "") url = pageLink; else { while (backImageObj && backImageObj.length > 0) { if (backImageObj.is("li")) break; backImageObj = backImageObj.parent(); } var url = $(this).attr('href'); // 네임링크(내부링크)는 동작하도록 하기 위해 // 그냥 return true함 // safari는 "#...."로 들어오고, IE는 "http:..../#"로 들어와서 // indexOf로 검사함 if (url.indexOf("#") >= 0) return true; url = url.replace(/^.*#/, ''); } if (url == "" || url == "/") url = "/vcm/home"; if (backImageObj && backImageObj.length > 0) { backImageObj.addClass("backImageObj"); backImageObj.css("background-image", "url(/img/waitflower.gif)"); // backImageObj.css("background-color", "#cccccc"); } if (url.indexOf("javascript") == 0) return true; goUrl(url, null); return false; }; $('a').live('click', clickHandler); function waitReplaceClickHandler(e) { var thisObj = $(this); var url = thisObj.attr("href"); if (!url) return true; var homeWaitObj = thisObj; homeWaitObj.addClass("homeWaitObj"); homeWaitObj.attr("waitOrgHTML", homeWaitObj.html()); homeWaitObj.attr("waitOrgBGColor", homeWaitObj.css("background-color")); var waitBGColor = homeWaitObj.attr("waitBGColor"); if (!MbcIsEmptyString(waitBGColor)) homeWaitObj.css("background-color", waitBGColor); var waitImg = homeWaitObj.attr("waitImg"); if (!MbcIsEmptyString(waitImg)) homeWaitObj.html(""); if (url.indexOf("javascript") == 0) { eval(url); return false; } goUrl(url, null); return false; } $('*[waitReplace="true"]').live('click', waitReplaceClickHandler); (function() { Hrs.GoUrl = function(url, param) { goUrl(url, param); }; Hrs.GoUrlReplace = function(url, param) { //alert("GoUrlReplace url=["+url+"]"); goUrlReplace(url, param); }; function makeFormItemParam(formObj, tagName) { var paramArray = []; var itemList = formObj.getElementsByTagName(tagName); for (var i=0;i 0) { var fromPage = getPageContainerByHash(_curHash); replaceContents(fromPage, logout); } else Hrs.GoUrl("/vcm/home"); } // $("#logoutButn").bind("logoutResult", logoutResultDefault); function logoutCallback(responseText, textStatus, xhr) { var resRootObj = responseText; var resObj = resRootObj.response; if (resObj.status != HRS_STATUS_SUCCESS) { alert(resObj.data); return; } alert("로그아웃되었습니다."); Hrs.MemberInfo = {}; updateLoginItems(); // $("#logoutButn").trigger("logoutResult",[ responseText,textStatus, xhr ]); } Hrs.Logout = function() { jQuery.post("/PHP/logoutDo.php", "", logoutCallback, "json"); }; var fortuneInfo = {}; Hrs.AddFortune = function(loginId, fortuneObj) { if (isLogin() == false || MbcIsEmptyString(MbcTrim(loginId))) return; if (!fortuneInfo[loginId]) fortuneInfo[loginId] = []; fortuneInfo[loginId].push(fortuneObj); }; Hrs.GetFortune = function(loginId) { if (isLogin() == false || MbcIsEmptyString(MbcTrim(loginId))) return []; if (!fortuneInfo[loginId]) return []; return fortuneInfo[loginId]; }; Hrs.SetMldClick = function() { setMldClick(); } Hrs.AddFavorite = function() { /*** hostname=[haebo.harusari.net] // include : port href=[http://haebo.harusari.net/#9__%2FPHP%2FfortuneMain.php] host=[haebo.harusari.net] hash=[#9__%2FPHP%2FfortuneMain.php] port=[] pathname=[/] search=[] protocol=[http:] ***/ var url = window.location.href; var title = document.title; // var url = window.location.protocol+"//"+window.location.hostname; if (window.sidebar) // firefox window.sidebar.addPanel(title, url,""); else if(window.opera && window.print){ // opera var elem = document.createElement('a'); elem.setAttribute('href',url); elem.setAttribute('title',title); elem.setAttribute('rel','sidebar'); elem.click(); } else if (window.external) // IE window.external.AddFavorite(url, title); else alert("이 브라우저는 자동 즐겨찾기를 지원하지 않습니다. Ctrl+D 버튼늘 사용해 주십시오."); }; var titleBand = $("#titleband"); if (titleBand && titleBand.length > 0) TITLE_BAND_HEIGHT = titleBand.height(); Hrs.SetEncMemberInfo({}); })(Hrs); });