//The cookie name to use for storing the blog-side comment session cookie.
var mtCookieName="mt_blog2_user";
var mtCookieDomain=".spell.vincent.in";
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='<div class="label"><label for="captcha_code">Captcha</label></div><div class="field"><input type="hidden" name="token" value="afr4CNnqXO7XzQBdptGsdt2bVAwopviW7zeoYNJW" /><img src="http://mt.vincent.in/mt-comments.cgi/captcha/2/afr4CNnqXO7XzQBdptGsdt2bVAwopviW7zeoYNJW" width="150" height="35" /><br /><input name="captcha_code" id="captcha_code" value="" autocomplete="off" /><p>画像の中に見える文字を入力してください。</p></div>';
		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://mt.vincent.in/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='4f0e2950899e203b9a9c7ee2f89e21b8babb9bd4';
		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='';
	
	
	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://mt.vincent.in/mt-comments.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%2Fspell.vincent.in%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://mt.vincent.in/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%2Fspell.vincent.in%2F';
		}
	}else{
		url+='&return_url='+encodeURIComponent(doc_url);
	}
	location.href=url;
}


function mtSignOutOnClick(){
	mtSignOut();
	return false;
}



function mtShowGreeting(){

	var reg_reqd=false;

	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 class=\"btn\" href=\"javas\cript:void(0);\" onclick=\"return mtSignOutOnClick();\"\>サインアウト\<\/a\>)';
		}else{
			var user_link;
			if(u.is_author){
				user_link='<a href="http://mt.vincent.in/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='<strong>__NAME__<\/strong> としてサインインしています。 \<a class=\"btn\" href=\"javas\cript:void(0);\" onclick=\"return mtSignOutOnClick();\"\>サインアウト\<\/a\>';
			phrase=phrase.replace(/__NAME__/,user_link);
		}
	}else{
		if(reg_reqd){
			phrase='コメントするにはまず \<a class=\"btn\" href=\"javas\cript:void(0);\" onclick=\"return mtSignInOnClick(\'comment-greeting\');\"\>サインイン\<\/a\> してください。';
		}else{
			phrase='匿名でもコメントできますが \<a class=\"btn\" href=\"javas\cript:void(0);\" onclick=\"return mtSignInOnClick(\'comment-greeting\');\"\>サインイン\<\/a\> することもできます。';
		}
	}
	el.innerHTML=phrase;

}



function mtReplyCommentOnClick(parent_id,author){
	mtShow('comment-form-reply');

	//桁数埋め（6桁）
	var parent_id=''+parent_id;
	while(parent_id.length<6){
		parent_id='0'+parent_id;
	}

	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();
}


