// The cookie name to use for storing the blog-side comment session cookie.var mtCookieName = "mt_blog3_user";var mtCookieDomain = ".sf-dpi.com";var mtCookiePath = "/blog";var mtCookieTimeout = 14400;function mtHide(id) {    var el = (typeof id == "string") ? document.getElementById(id) : id;    if (el) el.style.display = 'none';}function mtShow(id) {    var el = (typeof id == "string") ? document.getElementById(id) : id;    if (el) el.style.display = 'block';}function mtAttachEvent(eventName,func) {    var onEventName = 'on' + eventName;    var old = window[onEventName];    if( typeof old != 'function' )        window[onEventName] = func;    else {        window[onEventName] = function( evt ) {            old( evt );            return func( evt );        };    }}function mtFireEvent(eventName,param) {    var fn = window['on' + eventName];    if (typeof fn == 'function') return fn(param);    return;}function mtRelativeDate(ts, fds) {    var now = new Date();    var ref = ts;    var delta = Math.floor((now.getTime() - ref.getTime()) / 1000);    var str;    if (delta < 60) {        str = '直前';    } else if (delta <= 86400) {        // less than 1 day        var hours = Math.floor(delta / 3600);        var min = Math.floor((delta % 3600) / 60);        if (hours == 1)            str = '1 時間前';        else if (hours > 1)            str = '2 時間前'.replace(/2/, hours);        else if (min == 1)            str = '1 分前';        else            str = '2 分前'.replace(/2/, min);    } else if (delta <= 604800) {        // less than 1 week        var days = Math.floor(delta / 86400);        var hours = Math.floor((delta % 86400) / 3600);        if (days == 1)            str = '1 日前';        else if (days > 1)            str = '2 日前'.replace(/2/, days);        else if (hours == 1)            str = '1 時間前';        else            str = '2 時間前'.replace(/2/, hours);    }    return str ? str : fds;}function mtEditLink(entry_id, author_id) {    var u = mtGetUser();    if (! u) return;    if (! entry_id) return;    if (! author_id) return;    if (u.id != author_id) return;    var link = '<a href="mt.cgi?__mode=view&amp;_type=entry&amp;id=' + entry_id + '">編集</a>';    document.write(link);}function mtCommentFormOnFocus() {    // if CAPTCHA is enabled, this causes the captcha image to be    // displayed if it hasn't been already.    mtShowCaptcha();}var mtCaptchaVisible = false;function mtShowCaptcha() {    var u = mtGetUser();    if ( u && u.is_authenticated ) return;    if (mtCaptchaVisible) return;    var div = document.getElementById('comments-open-captcha');    if (div) {        div.innerHTML = '';        mtCaptchaVisible = true;    }}var is_preview;var user;function mtSetUser(u) {    if (u) {        // persist this        user = u;        mtSaveUser();        // sync up user greeting        mtFireEvent('usersignin');    }}function mtEscapeJS(s) {    s = s.replace(/'/g, "&apos;");    return s;}function mtUnescapeJS(s) {    s = s.replace(/&apos;/g, "'");    return s;}function mtBakeUserCookie(u) {    var str = "";    if (u.name) str += "name:'" + mtEscapeJS(u.name) + "';";    if (u.url) str += "url:'" + mtEscapeJS(u.url) + "';";    if (u.email) str += "email:'" + mtEscapeJS(u.email) + "';";    if (u.is_authenticated) str += "is_authenticated:'1';";    if (u.profile) str += "profile:'" + mtEscapeJS(u.profile) + "';";    if (u.userpic) str += "userpic:'" + mtEscapeJS(u.userpic) + "';";    if (u.sid) str += "sid:'" + mtEscapeJS(u.sid) + "';";    str += "is_trusted:'" + (u.is_trusted ? "1" : "0") + "';";    str += "is_author:'" + (u.is_author ? "1" : "0") + "';";    str += "is_banned:'" + (u.is_banned ? "1" : "0") + "';";    str += "can_post:'" + (u.can_post ? "1" : "0") + "';";    str += "can_comment:'" + (u.can_comment ? "1" : "0") + "';";    str = str.replace(/;$/, '');    return str;}function mtUnbakeUserCookie(s) {    if (!s) return;    var u = {};    var m;    while (m = s.match(/^((name|url|email|is_authenticated|profile|userpic|sid|is_trusted|is_author|is_banned|can_post|can_comment):'([^']+?)';?)/)) {        s = s.substring(m[1].length);        if (m[2].match(/^(is|can)_/)) // boolean fields            u[m[2]] = m[3] == '1' ? true : false;        else            u[m[2]] = mtUnescapeJS(m[3]);    }    if (u.is_authenticated) {        u.is_anonymous = false;    } else {        u.is_anonymous = true;        u.can_post = false;        u.is_author = false;        u.is_banned = false;        u.is_trusted = false;    }    return u;}function mtGetUser() {    if (!user) {        var cookie = mtGetCookie(mtCookieName);        if (!cookie) return;        user = mtUnbakeUserCookie(cookie);        if (! user) {            user = {};            user.is_anonymous = true;            user.can_post = false;            user.is_author = false;            user.is_banned = false;            user.is_trusted = false;        }    }    return user;}var mtFetchedUser = false;function mtFetchUser(cb) {    if (!cb) cb = 'mtSetUser';    if ( ( cb == 'mtSetUser' ) && mtGetUser() ) {        var url = document.URL;        url = url.replace(/#.+$/, '');        url += '#comments-open';        location.href = url;    } else {        // we aren't using AJAX for this, since we may have to request        // from a different domain. JSONP to the rescue.        mtFetchedUser = true;        var script = document.createElement('script');        var ts = new Date().getTime();        script.src = 'http://www.sf-dpi.com/cgi-bin/mt/mt-comments.cgi?__mode=session_js&blog_id=3&jsonp=' + cb + '&ts=' + ts;        (document.getElementsByTagName('head'))[0].appendChild(script);    }}function mtRememberMeOnClick(b) {    if (!b.checked)        mtClearUser(b.form);    return true;}var mtRequestSubmitted = false;function mtCommentOnSubmit(f) {    if (!mtRequestSubmitted) {        mtRequestSubmitted = true;        if (f.armor)            f.armor.value = '38e772f1b980751ec3a6fc3ad75e0a581a04b73b';        if (f.bakecookie && f.bakecookie.checked)            mtSaveUser(f);        // disable submit buttons        if (f.preview_button) f.preview_button.disabled = true;        if (f.post) f.post.disabled = true;        var u = mtGetUser();        if ( !is_preview && ( u && u.is_authenticated ) ) {            // validate session; then submit            mtFetchedUser = false;            mtFetchUser('mtCommentSessionVerify');            return false;        }        return true;    }    return false;}function mtCommentSessionVerify(app_user) {    var u = mtGetUser();    var f = document['comments_form'];    if ( u && app_user && app_user.sid && ( u.sid == app_user.sid ) ) {        f.submit();    } else {        alert('セッションの有効期限が切れています。再度サインインしてください。');        mtClearUser();        mtFireEvent('usersignin');    }}function mtUserOnLoad() {    var u = mtGetUser();    // if the user is authenticated, hide the 'anonymous' fields    // and any captcha input if already shown    if ( document.getElementById('comments-form')) {        if ( u && u.is_authenticated ) {            mtShow('comments-form');            mtHide('comments-open-data');            if (mtCaptchaVisible)                mtHide('comments-open-captcha');        } else {        }        if ( u && u.is_banned )            mtHide('comments-form');        // if we're previewing a comment, make sure the captcha        // field is visible        if (is_preview)            mtShowCaptcha();        else            mtShowGreeting();        // populate anonymous comment fields if user is cookied as anonymous        var cf = document['comments_form'];        if (cf) {            if (u && u.is_anonymous) {                if (u.email) cf.email.value = u.email;                if (u.name) cf.author.value = u.name;                if (u.url) cf.url.value = u.url;                if (cf.bakecookie)                    cf.bakecookie.checked = u.name || u.email;            } else {                if (u && u.sid && cf.sid)                    cf.sid.value = u.sid;            }            if (cf.post && cf.post.disabled)                cf.post.disabled = false;            if (cf.preview_button && cf.preview_button.disabled)                cf.preview_button.disabled = false;            mtRequestSubmitted = false;        }    }}function mtEntryOnLoad() {    var cf = document['comments_form'];    if (cf && cf.preview) cf.preview.value = '';    mtHide('trackbacks-info');    mtHide('comments-open');    mtFireEvent('usersignin');}function mtEntryOnUnload() {    if (mtRequestSubmitted) {        var cf = document['comments_form'];        if (cf) {            if (cf.post && cf.post.disabled)                cf.post.disabled = false;            if (cf.preview_button && cf.preview_button.disabled)                cf.preview_button.disabled = false;        }        mtRequestSubmitted = false;    }    return true;}mtAttachEvent('usersignin', mtUserOnLoad);function mtSignIn() {    var doc_url = document.URL;    doc_url = doc_url.replace(/#.+/, '');    var url = 'http://www.sf-dpi.com/cgi-bin/mt/mt-comments.cgi?__mode=login&blog_id=3';    if (is_preview) {        if ( document['comments_form'] ) {            var entry_id = document['comments_form'].entry_id.value;            url += '&entry_id=' + entry_id;        } else {            url += '&return_url=http%3A%2F%2Fwww.sf-dpi.com%2Fblog%2F';        }    } else {        url += '&return_url=' + encodeURIComponent(doc_url);    }    mtClearUser();    location.href = url;}function mtSignInOnClick(sign_in_element) {    var el;    if (sign_in_element) {        // display throbber        el = document.getElementById(sign_in_element);        if (!el)  // legacy MT 4.x element id            el = document.getElementById('comment-form-external-auth');    }    if (el)        el.innerHTML = 'サインインします... <span class="status-indicator">&nbsp;</span>';    mtClearUser(); // clear any 'anonymous' user cookie to allow sign in    mtFetchUser('mtSetUserOrLogin');    return false;}function mtSetUserOrLogin(u) {    if (u && u.is_authenticated) {        mtSetUser(u);    } else {        // user really isn't logged in; so let's do this!        mtSignIn();    }}function mtSignOut(entry_id) {    mtClearUser();    var doc_url = document.URL;    doc_url = doc_url.replace(/#.+/, '');    var url = 'http://www.sf-dpi.com/cgi-bin/mt/mt-comments.cgi?__mode=handle_sign_in&static=0&logout=1';    if (is_preview) {        if ( document['comments_form'] ) {            var entry_id = document['comments_form'].entry_id.value;            url += '&entry_id=' + entry_id;        } else {            url += '&return_url=http%3A%2F%2Fwww.sf-dpi.com%2Fblog%2F';        }    } else {        url += '&return_url=' + encodeURIComponent(doc_url);    }    location.href = url;}function mtSignOutOnClick() {    mtSignOut();    return false;}function mtShowGreeting() {    mtShowCaptcha();}function mtReplyCommentOnClick(parent_id, author) {    mtShow('comment-form-reply');    var checkbox = document.getElementById('comment-reply');    var label = document.getElementById('comment-reply-label');    var text = document.getElementById('comment-text');    // Populate label with new values    var reply_text = '\<a href=\"#comment-__PARENT__\" onclick=\"location.href=this.href; return false\"\>__AUTHOR__からのコメント\<\/a\>に返信';    reply_text = reply_text.replace(/__PARENT__/, parent_id);    reply_text = reply_text.replace(/__AUTHOR__/, author);    label.innerHTML = reply_text;    checkbox.value = parent_id;     checkbox.checked = true;    try {        // text field may be hidden        text.focus();    } catch(e) {    }    mtSetCommentParentID();}function mtSetCommentParentID() {    var checkbox = document.getElementById('comment-reply');    var parent_id_field = document.getElementById('comment-parent-id');    if (!checkbox || !parent_id_field) return;    var pid = 0;    if (checkbox.checked == true)        pid = checkbox.value;    parent_id_field.value = pid;}function mtSaveUser(f) {    // We can't reliably store the user cookie during a preview.    if (is_preview) return;    var u = mtGetUser();    if (f && (!u || u.is_anonymous)) {        if ( !u ) {            u = {};            u.is_authenticated = false;            u.can_comment = true;            u.is_author = false;            u.is_banned = false;            u.is_anonymous = true;            u.is_trusted = false;        }        if (f.author != undefined) u.name = f.author.value;        if (f.email != undefined) u.email = f.email.value;        if (f.url != undefined) u.url = f.url.value;    }    if (!u) return;    var cache_period = mtCookieTimeout * 1000;    // cache anonymous user info for a long period if the    // user has requested to be remembered    if (u.is_anonymous && f && f.bakecookie && f.bakecookie.checked)        cache_period = 365 * 24 * 60 * 60 * 1000;    var now = new Date();    mtFixDate(now);    now.setTime(now.getTime() + cache_period);    var cmtcookie = mtBakeUserCookie(u);    mtSetCookie(mtCookieName, cmtcookie, now, mtCookiePath, mtCookieDomain,        location.protocol == 'https:');}function mtClearUser() {    user = null;    mtDeleteCookie(mtCookieName, mtCookiePath, mtCookieDomain,        location.protocol == 'https:');}function mtSetCookie(name, value, expires, path, domain, secure) {    if (domain && domain.match(/^\.?localhost$/))        domain = null;    var curCookie = name + "=" + escape(value) +        (expires ? "; expires=" + expires.toGMTString() : "") +        (path ? "; path=" + path : "") +        (domain ? "; domain=" + domain : "") +        (secure ? "; secure" : "");    document.cookie = curCookie;}function mtGetCookie(name) {    var prefix = name + '=';    var c = document.cookie;    var cookieStartIndex = c.indexOf(prefix);    if (cookieStartIndex == -1)        return '';    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);    if (cookieEndIndex == -1)        cookieEndIndex = c.length;    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));}function mtDeleteCookie(name, path, domain, secure) {    if (mtGetCookie(name)) {        if (domain && domain.match(/^\.?localhost$/))            domain = null;        document.cookie = name + "=" +            (path ? "; path=" + path : "") +            (domain ? "; domain=" + domain : "") +            (secure ? "; secure" : "") +            "; expires=Thu, 01-Jan-70 00:00:01 GMT";    }}function mtFixDate(date) {    var skew = (new Date(0)).getTime();    if (skew > 0)        date.setTime(date.getTime() - skew);}function mtGetXmlHttp() {    if ( !window.XMLHttpRequest ) {        window.XMLHttpRequest = function() {            var types = [                "Microsoft.XMLHTTP",                "MSXML2.XMLHTTP.5.0",                "MSXML2.XMLHTTP.4.0",                "MSXML2.XMLHTTP.3.0",                "MSXML2.XMLHTTP"            ];            for ( var i = 0; i < types.length; i++ ) {                try {                    return new ActiveXObject( types[ i ] );                } catch( e ) {}            }            return undefined;        };    }    if ( window.XMLHttpRequest )        return new XMLHttpRequest();}// BEGIN: fast browser onload init// Modifications by David Davis, DWD// Dean Edwards/Matthias Miller/John Resig// http://dean.edwards.name/weblog/2006/06/again/?full#comment5338function mtInit() {    // quit if this function has already been called    if (arguments.callee.done) return;    // flag this function so we don't do the same thing twice    arguments.callee.done = true;    // kill the timer    // DWD - check against window    if ( window._timer ) clearInterval(window._timer);    // DWD - fire the window onload now, and replace it    if ( window.onload && ( window.onload !== window.mtInit ) ) {        window.onload();        window.onload = function() {};    }}/* for Mozilla/Opera9 */if (document.addEventListener) {    document.addEventListener("DOMContentLoaded", mtInit, false);}/* for Internet Explorer *//*@cc_on @*//*@if (@_win32)document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");var script = document.getElementById("__ie_onload");script.onreadystatechange = function() {    if (this.readyState == "complete") {        mtInit(); // call the onload handler    }};/*@end @*//* for Safari */if (/WebKit/i.test(navigator.userAgent)) { // sniff    _timer = setInterval(function() {        if (/loaded|complete/.test(document.readyState)) {            mtInit(); // call the onload handler        }    }, 10);}/* for other browsers */window.onload = mtInit;// END: fast browser onload init
