// The cookie name to use for storing the blog-side comment session cookie.

var mtCookieName = "mt_blog2_user";

var mtCookieDomain = ".mihama.info";

var mtCookiePath = "";

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.mihama.info/mt/mt-comments.cgi?__mode=session_js&blog_id=2&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 = '8f00afac2e94c3db5c580731207e15ee678af059';

        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');



        mtShow('comments-form');

        mtHide('comments-open-footer');



    }

}



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 {



            mtHide('comments-form');



        }

        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 = '';

    

    

    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.mihama.info/mt/mt-cp.cgi?__mode=login&blog_id=2';

    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.mihama.info%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.mihama.info/mt/mt-cp.cgi?__mode=logout&static=0';

    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.mihama.info%2F';

        }

    } else {

        url += '&return_url=' + encodeURIComponent(doc_url);

    }

    location.href = url;

}





function mtSignOutOnClick() {

    mtSignOut();

    return false;

}







function mtShowGreeting() {



    var reg_reqd = true;



    var cf = document['comments_form'];

    if (!cf) return;



    var el = document.getElementById('comment-greeting');

    if (!el)  // legacy MT 4.x element id

        el = document.getElementById('comment-form-external-auth');

    if (!el) return;



    var eid = cf.entry_id;

    var entry_id;

    if (eid) entry_id = eid.value;



    var phrase;

    var u = mtGetUser();



    if ( u && u.is_authenticated ) {

        if ( u.is_banned ) {

            phrase = 'このブログにコメントする権限を持っていません。(\<a href=\"javas\cript:void(0);\" onclick=\"return mtSignOutOnClick();\"\>サインアウトする\<\/a\>)';

        } else {

            var user_link;

            if ( u.is_author ) {

                user_link = '<a href="http://www.mihama.info/mt/mt-comments.cgi?__mode=edit_profile&return_url=' + encodeURIComponent( location.href );

                user_link += '">' + u.name + '</a>';

            } else {

                // registered user, but not a user with posting rights

                if (u.url)

                    user_link = '<a href="' + u.url + '">' + u.name + '</a>';

                else

                    user_link = u.name;

            }

            // TBD: supplement phrase with userpic if one is available.

            phrase = '__NAME__としてサインインしています。(\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignOutOnClick();\"\>サインアウト\<\/a\>)';

            phrase = phrase.replace(/__NAME__/, user_link);

        }

    } else {

        if (reg_reqd) {

            phrase = 'コメントするにはまず\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignInOnClick(\'comment-greeting\')\"\>サインイン\<\/a\>してください。';

        } else {

            phrase = 'コメントする前に\<a href=\"javas\cript:void(0)\" onclick=\"return mtSignInOnClick(\'comment-greeting\')\"\>サインイン\<\/a\>することもできます。';

        }

    }

    el.innerHTML = phrase;



}







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







/***

 * If request contains a '#_login' or '#_logout' hash, use this to

 * also delete the blog-side user cookie, since we're coming back from

 * a login, logout or edit profile operation.

 */

var clearCookie = ( window.location.hash && window.location.hash.match( /^#_log(in|out)/ ) ) ? true : false;

if (clearCookie) {

    // clear any logged in state

    mtClearUser();

    if (RegExp.$1 == 'in')

        mtFetchUser();

} else {

    

    if ( is_preview && !user )

        mtFetchUser();

}






