//////////////////////////////////////////////////////////////////////////////
// adiary 汎用 JavaScript
//							(C)2006-2008 nabe@abk
//////////////////////////////////////////////////////////////////////////////
//[TAB=4]

// 条件によりスタイルシート書き換え

var Is_IE  = false;
var Is_IE6 = false;
var appVer = navigator.appVersion;
var IE_pos = appVer.indexOf("MSIE");
if (0<IE_pos)
	Is_IE=parseFloat(appVer.substring(IE_pos+5,appVer.indexOf(';',IE_pos)));
if (Is_IE==7 && 0<appVer.indexOf("Trident/"))
	Is_IE=8;
if (Is_IE && Is_IE<8) Is_IE6=Is_IE;

var default_mode = new Array();
default_mode["diary"] = "block";
default_mode["com"]   = "block";
default_mode["tb"]    = "block";
default_mode["tbe"]   = "block";

function set_switchs(diary, comment, tb, tb_excerpt) {
	document.write('<style TYPE="text/css"><!--');
	if (diary) {
		default_mode["diary"] = "none";
		document.write('div.day div.body { display: none; }');
	}
	if (comment)    {
		default_mode["com"] = "none";
		document.write('div.commentshort { display: none; }');
	}
	if (tb) {
		default_mode["tb"] = "none";
		document.write('ul.tb { display: none; }');
	}
	if (tb_excerpt) {
		default_mode["tbe"] = "none";
		document.write('div.tb div.excerpt { display: none; }');
	}
	document.write('--></style>');
}

function set_close() {
	document.write('<style TYPE="text/css"><!--');
	for(var i=0; i<arguments.length; i++) {
		document.write(arguments[i] + " { display: none; }");
	}
	document.write('--></style>');
}

function change(mode_name, id) {
	var style = document.getElementById(id).style;
	var mode  = style.display;
	var a_obj = document.getElementById(id + "a");
	/* デフォルト値ロード */
	if (mode == "") {
		mode = default_mode[ mode_name ];
		if (!mode) { mode=mode_name; }
	}
	if ( mode == "block" || mode == "open" ) {
		style.display = "none";
		if (a_obj) { a_obj.className = "close"; }
	} else {
		style.display = "block";
		if (a_obj) { a_obj.className = "open"; }
	}
	if (typeof resizable != "undefined") resizable.resetpos();
}
//------------------------------------------------------------------------------
// SPAM対策
//------------------------------------------------------------------------------
function array2str() {
	var str="";
	for (i = 0; i < arguments.length; i++) {
		var v = arguments[i];
		if (i != 1 && i != 3 && v<128 && v>0) {
			str += "&#" + v + ";";
		}
	}
	document.write(str);
}

function put_sid(id) {
	var formtext = document.getElementById(id);
	var str="";
	for (i = 1; i < arguments.length; i++) {
		var v = arguments[i];
		if (i != 2 && v<128 && v>0) {
			str += String.fromCharCode(v);
		}
	}
	formtext.value = str;
}

//------------------------------------------------------------------------------
// テキスト・画像ポップアップ
//------------------------------------------------------------------------------
function popup_img( img_url, evt ) {
	return _popup_text( "<img src=\"" + img_url + "\">", evt );
}
function popup_text( text, evt ) {
	return _popup_text('<div>' + text + "\n</div>", evt);
}
function _popup_text( text, evt ) {
	var div   = document.getElementById( 'popup_' );
	var style = div.style;
	var cx; var cy;
	if (! evt) { evt = event; }
	cx = evt.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
	cy = evt.clientY + (document.body.scrollTop  || document.documentElement.scrollTop);
	style.left = (cx + 16) + 'px';
	style.top  = (cy +  8) + 'px';
	div.innerHTML = text;
	style.zIndex   = 9999;
	style.maxWidth = 240;
	style.position = 'absolute';
	style.display  = 'block';
}

function popdown(id) {
	if (!id) { id='popup_'; }
	document.getElementById( id ).style.display = 'none';
}

//------------------------------------------------------------------------------
// メニューポップアップ
//------------------------------------------------------------------------------
function popup_menu( id ) {
	var bar = document.getElementById("contents-bar");
	var obj = document.getElementById( id );
	var cx = obj.offsetLeft;
	var cy = bar.offsetTop; // + bar.offsetHeight;
	// 表示
	var style = document.getElementById( id + "-div" ).style;
	style.left = cx + 'px';
	style.top  = cy + 'px';
	style.zIndex   = 9999;
	style.position = 'absolute';
	style.display  = 'block';
}

//------------------------------------------------------------------------------
// popup ウィンドウのオープン
//------------------------------------------------------------------------------
function popup(url, width, height) {
	if(!width)  { width  = 400; }
	if(!height) { height = 240; }
	win = window.open(url, 'popup', 'width=' + width + ', height=' + height);
	win.focus();
}
function popup_simple(url, param) {
	if (param == undefined) { param = 'location=yes, menubar=no, resizable=yes'; }
	win = window.open(url, 'popup_simple', param);
	win.focus();
}

//------------------------------------------------------------------------------
// テーマ選択
//------------------------------------------------------------------------------
var now_template;
function set_now_template( template_dir ) {
	var ary = template_dir.split("/");
	now_template = ary.pop();
	if (now_template == "") {
		now_template = ary.pop();
	}
}

function change_theme(base_path, form_name, sample_url, sample_location, doc) {
	var form  = document.getElementById(form_name);
	var value = form.theme.options[form.theme.selectedIndex].value;
	form.theme_name.value = value;
	/* split */
	var ary  = value.split("/");
	var template = ary[0];
	if (now_template == template) {
		/* スタイルを書き換えるだけ */
		var css    = doc.getElementById('theme');
		var readme = document.getElementById('readme');
		var name   = ary[1];
		css.href   = "";
		css.href   = base_path + value + '/' + name  +".css";
		readme.src = base_path + value + '/' + '/README';
	} else {
		/* リロード */
		now_template         = template;
		sample_location.href = sample_url + value;
	}
}

function set_theme(base_path, theme_name, sample_url, sample_location) {
	var form  = document.getElementById(form_name);
	var value = form.theme.options[form.theme.selectedIndex].value;
	form.theme_name.value = value;
	/* split */
	var ary  = value.split("/");
	var template = ary[0];
	if (now_template == template) {
		/* スタイルを書き換えるだけ */
		var css    = doc.getElementById('theme');
		var readme = document.getElementById('readme');
		var name   = ary[1];
		css.href   = base_path + value + '/' + name  +".css";
		readme.src = base_path + value + '/' + '/README';
	} else {
		/* リロード */
		now_template         = template;
		sample_location.href = sample_url + value;
	}
}

//--------------------------------------------------
// 詳細デザイン向けベーステーマの選択
//--------------------------------------------------
function popup_theme_select( form_name ) {
	var theme = get_now_theme( form_name );
	if (theme == "") { theme = 'satsuki/satsuki'; }
	popup_simple("<@v.myself>?theme_select_frame/" + theme);
}

function change_base_theme( theme_idx ) {
	var form = document.getElementById('design_edit');
	form.theme.selectedIndex = theme_idx+1;
}

function get_now_theme_idx( form_name ) {
	var form = document.getElementById(form_name);
	return form.theme.selectedIndex;
}
function get_now_theme( form_name ) {
	var form  = document.getElementById(form_name);
	return form.theme.options[form.theme.selectedIndex].value;
}

//------------------------------------------------------------------------------
// 特定フィールドの値を設定
//------------------------------------------------------------------------------
function set_field_text( id, text ) {
	var field = document.getElementById( id );
	field.value = text;
}

function copy_field( des, src ) {
	des = document.getElementById( des );
	src = document.getElementById( src );
	des.value = src.value;
}

//------------------------------------------------------------------------------
// Textareaのリサイズ
//------------------------------------------------------------------------------

// テキストエリアの横幅を自動調整
function setWidthAuto_on_IE( id ) {
	if (!Is_IE6) { return; }
	var _obj = document.getElementById( id );	// クロージャに登録
	var load_func = function() {
		var obj = _obj;
		setWidthAuto(obj);
		if (typeof resizable != "undefined") resizable.resetpos();
	}
	var resize_func = function() {
		var obj = _obj;
		setWidthAuto(obj);
	}
	addEvent(window, 'load',   load_func);
	addEvent(window, 'resize', resize_func);
}
function setWidthAuto(obj) {
	var parent = obj.parentNode;
	if (!parent) {	// for IE
		parent = obj.parentElement;
	}
	var pwidth  = parent.clientWidth;
	if (!pwidth) {	// for IE
		pwidth  = parent.offsetWidth;
	}
	var width = Math.floor( pwidth*0.95 );
	if (width<50) { width=50; }
	obj.style.width = width + "px";

	// debug
	//dbg = document.getElementById( "edit-excerpt" );
	//dbg.value = "set " + width + "px\n";
}

// IE8 textarea バグ対策 : http://adiary.blog.abk.nu/0247
function IE8_textarea_bug_hack() {
	if (Is_IE != 8) { return; }
    var objs = document.getElementsByTagName('textarea');
    for (var i in objs) {
    	var obj = objs[i];
		if (obj.offsetWidth) {
			obj.style.top   = obj.offsetTop + 'px';
			obj.style.width = obj.offsetWidth + 'px';
			obj.style.position = 'absolute';
		}
    }
}
if (Is_IE==8) {
	addEvent(window, 'load', IE8_textarea_bug_hack);
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// 日記編集画面用スクリプト
////////////////////////////////////////////////////////////////////////////////
// カーソル位置にテキストを挿入
function insert_text( text ) {
	var textarea = document.getElementById("editarea");
	textarea.focus();
	if (document.selection) {
		tmp1 = document.selection.createRange();
		tmp1.text = text;
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		var top = textarea.scrollTop;	// スクロール位置
		var start = textarea.selectionStart;	// カーソル位置
		textarea.value = textarea.value.substring(0, start)
			+ text + textarea.value.substring(start);
		// カーソル移動
		start += text.length;
		textarea.setSelectionRange(start, start);
		// スクロール移動
		textarea.scrollTop = top;
	}
}

// カーソル選択範囲にタグを挿入
function insert_blocktag( start_tag, end_tag ) {
	return insert_tag( start_tag, end_tag, 1);
}
function insert_tag( start_tag, end_tag, is_block ) {
	var textarea = document.getElementById("editarea");
	textarea.focus();
	if (document.selection) {
		tmp1 = document.selection.createRange();
		tmp2 = tmp1.text;
		tmp1.text = start_tag + tmp2 + end_tag;
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		var top = textarea.scrollTop;	// スクロール位置
		var start = textarea.selectionStart;	// 選択開始位置
		var end   = textarea.selectionEnd;	// 選択終了位置
		var prev="";
		var after="";

		var taglen = start_tag.length;
		if(textarea.value.substring(start, start+taglen) != start_tag){
			// ブロックタグの挿入
			if (is_block && textarea.value.substring(start-1, start) != "\n") prev = "\n";
			if (is_block && textarea.value.substring(end, end+1)     != "\n") after= "\n";
			textarea.value = textarea.value.substring(0, start)
				+ prev + start_tag + textarea.value.substring(start, end)
				+ end_tag + after + textarea.value.substring(end);
			// カーソル移動
			textarea.setSelectionRange(start + prev.length, end + prev.length + start_tag.length + end_tag.length );
			// スクロール移動
			textarea.scrollTop = top;
		}
	}
}

// カーソル選択範囲にタグを挿入（毎行）
function insert_listtag( start_tag, end_tag ) {
	return insert_tag_line( start_tag, end_tag, 1);
}
function insert_tag_line( start_tag, end_tag, is_list ) {
	var textarea = document.getElementById("editarea");
	textarea.focus();
	if (document.selection) {
		tmp1 = document.selection.createRange();
		tmp2 = tmp1.text;
		if (tmp2.match(/\x0D\x0A/)) {
			tmp2 = tmp2.replace(/\x0D\x0A/g, end_tag + "\x0D\x0A" + start_tag);
		} else if (tmp2.match(/\x0D/)) {
			tmp2 = tmp2.replace(/\x0D/g, end_tag + "\x0D" + start_tag);
		} else if (tmp2.match(/\x0A/)) {
			tmp2 = tmp2.replace(/\x0A/g, end_tag + "\x0A" + start_tag);
		}
		tmp1.text = start_tag + tmp2 + end_tag;
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		var top = textarea.scrollTop;	// スクロール位置
		var start = textarea.selectionStart;	// 選択開始位置
		var end   = textarea.selectionEnd;	// 選択終了位置
		var before_length = textarea.value.length;

		var pre_text = textarea.value.substring(0, start);
		var post_text = textarea.value.substring(end);
		var selected_text = textarea.value.substring(start, end);
		var replaced_text = '';

		var taglen = start_tag.length;
		var lines = selected_text.match(/[^\n]*[\n]?/g);
		for (l in lines) {
			if(lines[l].substring(0, taglen) != start_tag || is_list ){
				cr = '';
				if(lines[l].match(/\n$/)){
					cr = "\n";
					lines[l] = lines[l].replace(/\n$/g, "");
				}
				if(l == 0 && cr == '')
					replaced_text += start_tag + lines[l] + end_tag + cr;
				else if(lines[l].length)
					replaced_text += start_tag + lines[l] + end_tag + cr;
				else if(cr != '')
					replaced_text += cr;
			}else{
				replaced_text += lines[l];
			}
		}
		textarea.value = pre_text + replaced_text + post_text;

		// カーソル移動
		textarea.setSelectionRange(start, end + (textarea.value.length - before_length));
		// スクロール移動
		textarea.scrollTop = top;
	}
}

// カーソル選択範囲にhttpタグを挿入（毎行）
function insert_tag_http() {
	var textarea = document.getElementById("editarea");
	textarea.focus();
	if (document.selection) {
		start_tag = '[';
		end_tag = ':title]';
		tmp1 = document.selection.createRange();
		tmp2 = tmp1.text;
		if (tmp2.match(/\x0D\x0A/)) {
			tmp2 = tmp2.replace(/\x0D\x0A/g, end_tag + "\x0D\x0A" + start_tag);
		} else if (tmp2.match(/\x0D/)) {
			tmp2 = tmp2.replace(/\x0D/g, end_tag + "\x0D" + start_tag);
		} else if (tmp2.match(/\x0A/)) {
			tmp2 = tmp2.replace(/\x0A/g, end_tag + "\x0A" + start_tag);
		}
		tmp1.text = start_tag + tmp2 + end_tag;
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		var top = textarea.scrollTop;	// スクロール位置
		var start = textarea.selectionStart;	// 選択開始位置
		var end   = textarea.selectionEnd;	// 選択終了位置
		var before_length = textarea.value.length;

		var pre_text = textarea.value.substring(0, start);
		var post_text = textarea.value.substring(end);
		var selected_text = textarea.value.substring(start, end);
		var replaced_text = '';

		var lines = selected_text.match(/[^\n]*[\n]?/g);
		for (l in lines) {
			cr = '';
			if(lines[l].match(/\n$/)){
				cr = "\n";
				lines[l] = lines[l].replace(/\n$/g, "");
			}

			if (lines[l].match(/^\[(https?|ftp):/)){ // skip
				replaced_text += lines[l]+cr;
			}else if (lines[l].match(/^(https?|ftp):/)){
				terms = lines[l].split(" ", 2);
				if(!terms[1])
					terms[1] = 'title';
				replaced_text += '[' + terms[0] + ':' + terms[1] + ']'+cr;
			}else if(lines[l].length){
				replaced_text += '[http://foo.com:' + lines[l] + ']'+cr;
			}else{
				if(l == 0 && cr == '')
					replaced_text += '[http://foo.com:title]'+cr;
				else if(cr != '')
					replaced_text += cr;
			}
		}
		textarea.value = pre_text + replaced_text + post_text;

		// カーソル移動
		textarea.setSelectionRange(start, end + (textarea.value.length - before_length));
		// スクロール移動
		textarea.scrollTop = top;
	}
}

// カーソル選択範囲の文字列を置換
function selection_replace( before_string, after_string ) {
	var textarea = document.getElementById("editarea");
	textarea.focus();
	if (document.selection) {
		tmp1 = document.selection.createRange();
		tmp2 = tmp1.text;
		if (tmp2.match(/\x0D\x0A/)) {
			before_string = before_string.replace(/\n/g, "\x0D\x0A");
		} else if (tmp2.match(/\x0D/)) {
			before_string = before_string.replace(/\n/g, "\x0D");
		} else if (tmp2.match(/\x0A/)) {
			before_string = before_string.replace(/\n/g, "\x0A");
		}
		tmp2 = tmp2.replace(RegExp(before_string, "g"), after_string);
		tmp1.text = tmp2;
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		var top = textarea.scrollTop;	// スクロール位置
		var start = textarea.selectionStart;	// 選択開始位置
		var end   = textarea.selectionEnd;	// 選択終了位置
		var before_length = textarea.value.length;
		textarea.value = textarea.value.substring(0, start)
			+ textarea.value.substring(start, end).replace(RegExp(before_string, "g"), after_string)
			+ textarea.value.substring(end);
		// カーソル移動
		textarea.setSelectionRange(start, end + (textarea.value.length - before_length));
		// スクロール移動
		textarea.scrollTop = top;
	}
}

// RSS向け添付ファイル情報
function insert_file( url, size ) {
	var text_obj = document.getElementById("edit-files");
	url = url.replace(/,/g, "%2c");
	text_obj.value = url;
	// ファイルサイズ付加
	size = size +0;
	if (size > 0) {
		text_obj.value += ", " + size;
	}
}
//------------------------------------------------------------------------------
// 親ノードの表示範囲指定
//------------------------------------------------------------------------------
function set_display_level( checkbox_id, id, classname, max_level ) {
	var css_obj = document.getElementById( id );
	var flag = document.getElementById( checkbox_id );
	var text = "";
	if (flag && flag.checked) { max_level=998; }
	if (Is_IE) {	// IE6-8では動作せず
		return ;
	}
	for(i=max_level+1; i<16; i++) {
		text += classname + i.toString() + " { display: none; }\n";
	}
	css_obj.innerHTML = text;
}

//##############################################################################
//##############################################################################
// ライブラリ（サブルーチン）
//##############################################################################
function addEvent(obj, name, func) {
	if (obj.addEventListener) {
		obj.addEventListener( name, func, true );
	} else {
		obj.attachEvent( 'on' + name, func );
	}
}
function delEvent(obj, name, func){
	if(obj.removeEventListener){
		obj.removeEventListener(name, func, true);
	}else{
		obj.detachEvent( 'on' + name, func );
	}
}

function checkbox_set( checkbox_id, value ) {
	var obj = document.getElementById( checkbox_id );
	obj.checked = value;
}
function checkbox_change( checkbox_id, id, id_false, mode) {
	var flag  = document.getElementById( checkbox_id );
	var style = document.getElementById( id ).style;
	var f_obj = document.getElementById( id_false );
	if ( !mode ) { mode="block" }
	if ( flag.checked ) {
		style.display = mode;
		if (f_obj) { f_obj.style.display="none"; }
	} else {
		style.display = "none";
		if (f_obj) { f_obj.style.display=mode; }
	}
	if (typeof resizable != "undefined") resizable.resetpos();
}

function set_focus( obj_id ) {
	var obj  = document.getElementById( obj_id );
	obj.focus();
}

//------------------------------------------------------------------------------
// 全てのチェックボックスを選択・解除する
//------------------------------------------------------------------------------
function check_all(check) {
	for(var count = 0; count < document.edit.pkey_ary.length; count++) {
		document.edit.pkey_ary[count].checked = check;
	}
}
