/* sync.js
(C) 2009-2011 digitalstage inc.
v 20111017
--------------------------------------------------------- */

var PRTCL = document.location.protocol;
if (PRTCL == 'file:') PRTCL = 'http:';
var SYNC2_SERVER = 'http://sync2-cnsl.digitalstage.jp/';
var SYNC3_SERVER = PRTCL + '//sync3-cnsl.digitalstage.jp/';
var SYNC5_SERVER = PRTCL + '//sync5-cnsl.digitalstage.jp/';
var SYNC_RES_SERVER = PRTCL + '//sync5-res.digitalstage.jp/';
var DISQUS_LOCAL_TEST = false;

jQuery.noConflict();
jQuery.ajaxSetup({scriptCharset:'utf-8'});
jQuery.fnbind = function(t, fn){ return function() { return fn.apply(t, arguments);}};

var currentBlogId;
var currentYm = null;
var currentPage = 1;
var mainJson = null;
var catList = [];
var blogOption;
var partsId = 0;
var currentNewsIdx = {};
var feedManager = null;

jQuery(document).ready(function() {
	syncDig(document);

	if (feedManager!=null) {
		if (typeof(BlockEdit) == 'undefined') {
			SWFAddress.addEventListener(SWFAddressEvent.CHANGE, jQuery.fnbind(feedManager, feedManager.load));
		} else {
			feedManager.load();
		}
	}
});

function syncDig(p) {
	var cl = p.childNodes;
	for (var i=0; i<cl.length; i++) {
		var c = cl[i];
		var nm = c.nodeName;
		var cls = c.className;

		if (nm == '#text') continue;
		else if (nm == 'DIV' || nm == 'SPAN') {
			if (cls.indexOf('sync') > -1) {
				loadService(cls, c);
			}
		}

		if (c.hasChildNodes()) {
			syncDig(c);
		}
	}
	//つんでおいたLikeboxの表示処理を実行
	tid = setTimeout(display,1000);
}

function loadService(cls, c) {
	var ary = cls.split(' ');
	var type = ary[1];
	var did = ary[2];

	var buf = jQuery(c).text();
	ary = buf.split(',');
	var gid = ary[0];
	var sid = ary[1];
	var did = ary[2];
	var option = null;

	if (buf.indexOf('{') > -1 && buf.indexOf('}') > -1) {
		var startidx = buf.indexOf('{');
		var endidx = buf.lastIndexOf('}');
		option = jQuery.parseJSON(buf.substring(startidx,endidx+1));
	}

	if (type == 'blog') {
		if (option == null) {
			dispSync1Error(c);
			return;
		}
		if (feedManager == null) feedManager = new FeedManager();
		feedManager.addFeed(option.site, option.blogid, did, option, c, sid);

	} else if (type == 'video') {
		dispVideo(c, sid, did, option);

	} else if ((type == 'form') || (type == 'form3') || (type == 'form5')) {
		// TODO:複数フォームへの対応
		// var url = (type=='form3'?SYNC3_SERVER:SYNC2_SERVER) + 'sync/form.action';
		var baseurl = (type=='form5')?SYNC5_SERVER:((type=='form3')?SYNC3_SERVER:SYNC2_SERVER);
		var url = baseurl + 'sync/form.action';
		var form_load_tm = setTimeout(function() {
			dispSync1Error(c);
		}, 10000);
		ajaxFlg = true;
		jQuery.ajax({
			url: url,
			type: 'GET',
			dataType: 'jsonp',
			async: false,
			data: {
				's': sid
			},
			success: function(json) {
				clearTimeout(form_load_tm);
				dispForm(c, sid, json, type);
				ajaxFlg = false;
			},
			error: function(req, stat, e) {
				ajaxFlg = false;
				//alert('フォームの基本情報の取得に失敗しました。');
			}
		});

	} else if (type == 'docs') {
		dispDoc(c, sid);

	} else if ((type == 'news') || (type == 'news3') || (type == 'news5')) {
		if (sid=='1')
			dispNews(c, option, type);
		else
			dispBookmark(c, option, type);

	} else if ((type == 'map') || (type == 'map5')) {
		new SyncYMap(sid, c, type);

	} else if (type == 'twitter') {
		dispTwitter(c, sid, option);

	} else if (type == 'ustream') {
		dispUstream(c, sid, did, option);

	} else if (type == 'search') {
		dispSearch(c, sid, option);

	} else if (type == 'translate') {
		dispTranslate(c, sid);

	} else if (type == 'likebtn') {
		dispLikeButtom(c, sid, option);

	} else if (type == 'twitbatch') {
		dispTwitbatch(c, sid, option);

	} else if (type == 'bbs') {
		if(sid == 'facebook'){
			dispFacebook(c, sid, option);
		}else if(sid == 'disqus'){
			dispDisqus(c, sid, option);
		}
	} else if(type == 'likebox'){
		//dispLikebox(c, sid, option);
		stackLikebox(c, sid, option);
		//すべてスタックにつんで置き、後ほど実行
	}
}

function LikeboxTag(c, sid, option) {
    this.comp = c;
    this.sid = sid;
    this.option = option;
}

function stackLikebox(c, sid, option){
	likeboxTags.push(new LikeboxTag(c, sid, option));
	//timer = setInterval(display,500);
}
var likeboxTags = new Array();
var ajaxFlg = false;
var tid = null;
function display(){
	if (!ajaxFlg) {
		var tmp = likeboxTags.shift();
		if(tmp == null || tmp.comp == null) {clearTimeout(tid);tid=null;return;}
		dispLikebox(tmp.comp, tmp.sid, tmp.option);
		if (tid && likeboxTags.length == 0) {clearTimeout(tid);tid=null;}
	}
}

function dispSync1Error(c) {
	try {
		c.innerHTML = '<div class="kakomi"><p class="kakomi ac"><i><span class="fsize_l" style="color:#6C6C6C;">ここに貼られたBiND2のSYNCウィジェットは、BiND4では表示できません。</span></i><br />' +
			'<i><span class="fsize_l" style="color:#6C6C6C;">一度このパーツを削除し、新規にパーツを作成してください。</span></i><br />' +
			'<br />' +
			'<span class="fsize_s" style="color:#6C6C6C;"><a href="http://www2.digitalstage.jp/support/bind3/trouble/16/">SYNCのトラブルシューティングを開く</a></span></p></div>';
		c.style.display = '';
	} catch (err) {}
}

/**********
N E W S
********/
function dispNews(c, opt, type) {
	var baseurl = (type=='news5')?SYNC5_SERVER:((type=='news3')?SYNC3_SERVER:SYNC2_SERVER);
	var rssUrl = '';
	if (opt.newsSourceType=='typeRssDirect')
		rssUrl = baseurl + 'sync/rss?url=' + encodeURIComponent(opt.rssUrl);
	else
		rssUrl = baseurl + 'sync/news.json/' + opt.bindNewsId + '/?dm=1';

	jQuery.getJSON(rssUrl + '&callback=?', function(json) {
		c.innerHTML = '';
		var isStandard = (getSkinClass(c).indexOf('standard') > -1);
		var titleStr = '<a href="' + json.url + '" target="_blank">' + json.title + '</a>';

		// 通常
		if (opt.designId == 'design1') {
			if (isStandard) {
				var mc = nineSlice('slice h3', c);
				mc.append('<h3>' + titleStr + '</h3>');
			} else {
				var h3div = jQuery('<div class="h3"/>').appendTo(c);
				jQuery('<h3></h3>').appendTo(h3div).append(titleStr);
			}

			var div = jQuery('<div class="indent tabular"></div>');
			var table = jQuery('<table class="table"></table>').appendTo(div);
			for (var i=0,l=json.entries.length; i<l; i++) {
				var e = json.entries[i];
				var ds = '';
				if (e.news_date)
					ds = e.news_date;
				else
					ds = e.updated_date;
				var d = parseFeedDate(ds);
				var dt = d.year + '/' + d.month + '/' + d.day;

				var tr = jQuery('<tr></tr>');
				var th = jQuery('<th><div class="th">' + dt + '</div></th>').appendTo(tr);
				var td = jQuery('<td></td>').appendTo(tr);
				var a = jQuery('<a href="' + e.url + '">' + e.subject + '</a>');
				var balloon = (isStandard) ? nineSlice('balloon', td) : jQuery('<div class="balloon"></div>').appendTo(td);
				balloon.append(a);

				table.append(tr);
			}

			div.appendTo(c);

		// ティッカー
		} else if (opt.designId == 'design2') {
			var ptid = getSyncPartsId();
			var div = jQuery('<div class="indent tabular"></div>');
			var table = jQuery('<table class="table"></table>').appendTo(div);
			var tr = jQuery('<tr></tr>');
			var th = jQuery('<th><div class="th">' + titleStr + '</div></th>').appendTo(tr);
			var td = jQuery('<td></td>').appendTo(tr);
			var area = jQuery('<div id="' + ptid + '" class="sync_news_ticker"></div>');
			var balloon = (isStandard) ? nineSlice('balloon', td) : jQuery('<div class="balloon"></div>').appendTo(td);
			balloon.append(area);
			table.append(tr);
			div.appendTo(c);

			// 入れ替えの処理
			var ents = json.entries;
			if (ents.length > 0) {
				doNewsTicker(ents[0], ptid);

				if (ents.length > 1) {
					currentNewsIdx[ptid] = 1;
					setInterval(function(){
						var e = ents[currentNewsIdx[ptid]];
						doNewsTicker(e, ptid);

						currentNewsIdx[ptid]++;
						if (currentNewsIdx[ptid] >= ents.length) currentNewsIdx[ptid] = 0;
					}, 10000);
				}
			}
		}

		c.style.display = '';
		bdRefresh();
		Bindfooter.set();
	});
}

function doNewsTicker(e, ptid) {
	jQuery('#' + ptid + ' span').fadeOut(1000, function() {
		this.parentNode.removeChild(this);
	});

	var pt = jQuery('#' + ptid);
	var w = pt.parent().width();
	if (w == 0) w = 500;

	var ds = '';
	if (e.news_date)
		ds = e.news_date;
	else
		ds = e.updated_date;
	var d = parseFeedDate(ds);
	var dt = d.year + '.' + d.month + '.' + d.day;
	var a = jQuery('<a href="' + e.url + '" class="no_linkeffect">' + dt + ' ' + e.subject + '</a>');
	var csso = {
		left: (w - 100) + 'px', position:'absolute'//, width: '100%'
	};
	if (bindobj.ie70) csso.width = '100%';
	if (!bindobj.vista && !bindobj.win7) csso.opacity = 0;
	var n = jQuery('<span></span>').css(csso).append(a).appendTo(pt);

	var o = {
		left: 0
	};
	if (!bindobj.vista && !bindobj.win7) o.opacity = 1;
	n.animate(o, 2000, 'easeOutExpo');
}

function dispBookmark(c, option, type) {
	var services = option.services;
	var linkNm = document.title;
	var addr = (option.urlType == 'urlTypeOwn') ? option.ownUrl:location.href;
	var isLocal = (addr.indexOf('file://') == 0);

	var hdr = '';
	var buf = '';
	var url = '';
	if (option.buttons.bookmark) {
		hdr += '<a href="javascript:;" onclick="showPanel(this, \'bookmark-area\'); return false" class="tab-bookmark">ブックマーク</a>';
		buf += '<div class="bookmark-area">';
		buf += '<h3 class="newstype">ソーシャルブックマークへ登録する<a href="javascript:;" onclick="closePanel(this)" class="close-area"></a></h3>';
		buf += '<p class="newsinfo">現在あなたがご覧のページを、ソーシャルブックマークに登録できます。<br />ソーシャルブックマークをまだ利用していない方は、それぞれの項目の「？」をクリックしてみましょう。すでに各種ブックマークサービスをお使いの方は、ご自分が利用されているサービス名をクリックしてください。人数が表示されている場合は人数をクリックでコメントなどを読むことができます。</p>';

		var oddEven = new OddEven();
		for (var k in services) {
			if (services[k]) {
				switch (k) {
				case 'bmYahoo':
					var odd = oddEven.getNext();
					var yid = getSyncPartsId();
					buf += '<div class="bookmark-panel ' + odd + '">';
					buf += '<div class="bookmark-title">';
					buf += '<a href="javascript:void window.open(\'http://bookmarks.yahoo.co.jp/bookmarklet/showpopup?t=' + escape(linkNm) + '&u=' + encodeURIComponent(addr) + '&opener=bm&ei=UTF-8\',\'popup\',\'width=550,height=480,left=100,top=50,scrollbars=1,resizable=1\',0);" title="Yahoo!ブックマークへ追加">';
					buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/ybm16.gif" />Yahoo!ブックマーク</a>';
					buf += '</div>';
					buf += '<div id="' + yid + '"></div>';
					if (isLocal==false) {
						var baseurl = (type=='news5')?SYNC5_SERVER:((type=='news3')?SYNC3_SERVER:SYNC2_SERVER);
						jQuery.getJSON(baseurl + 'sync/yahoobm.action?u=' + encodeURIComponent(addr) + '&callback=?', function(json) {
							jQuery('#' + yid).html('<a href="http://bookmarks.yahoo.co.jp/url?url=' + encodeURIComponent(addr) + '" target="_blank">' + json.ybm_cnt + '人</a>');
						});
					}
					buf += '<a href="http://bookmarks.yahoo.co.jp/promo-about" target="_blank" class="help">Yahoo!ブックマークって何？</a>';
					buf += '</div>';
					break;
				case 'bmGoogle':
					var odd = oddEven.getNext();
					buf += '<div class="bookmark-panel ' + odd + '">';
					var url = PRTCL + '//www.google.com/bookmarks/mark?op=add&bkmk=' + encodeURIComponent(addr) + '&title=' + escape(linkNm);
					buf += '<div class="bookmark-title">';
					buf += '<a href="javascript:wordOfMouse(\'' + url + '\')" title="Googleブックマークへ追加">';
					buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/google.png" />Googleブックマーク</a>&nbsp;';
					buf += '</div>';
					buf += '<a href="http://www.google.com/support/toolbar/bin/answer.py?answer=43305&topic=15364&hl=ja" target="_blank" class="help">iGoogleって何？</a>';
					buf += '</div>';
					break;
				case 'bmHatena':
					var odd = oddEven.getNext();
					buf += '<div class="bookmark-panel ' + odd + '">';
					var hid = getSyncPartsId();
					var url = 'http://b.hatena.ne.jp/add?mode=confirm&title=' + escape(linkNm) + '&url=' + encodeURIComponent(addr);
					buf += '<div class="bookmark-title">';
					buf += '<a href="javascript:wordOfMouse(\'' + url + '\')" title="はてなブックマークへ追加">';
					buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/hatena.gif" style="vertical-align:middle" />はてなブックマーク</a>';
					buf += '</div>';
					buf += '<span id="' + hid + '"></span>&nbsp;';
					if (isLocal==false) {
						jQuery.getJSON('http://api.b.st-hatena.com/entry.count?url=' + encodeURIComponent(addr) + '&callback=?', function(json) {
							jQuery('#' + hid).html('<a href="http://b.hatena.ne.jp/entry/' + addr + '" target="_blank">' + json + '人</a>');
						});
					}
					buf += '<a href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B7%A5%E3%A5%EB%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF" target="_blank" class="help">はてなブックマークって何？</a>';
					buf += '</div>';
					break;
				}
			}
		}
		buf += '</div>';
	}

	if (option.buttons.rss) {
		var baseurl = (type=='news5')?SYNC5_SERVER:((type=='news3')?SYNC3_SERVER:SYNC2_SERVER);
		var rssAddr = (option.newsSourceType == 'typeRssDirect') ? option.rssUrl : baseurl + 'sync/news.atom/' + option.bindNewsId + '/';
		hdr += '<a href="#" onclick="showPanel(this, \'rss-area\'); return false;" class="tab-rss">RSSを購読</a>';
		buf += '<div class="rss-area">';
		buf += '<h3 class="newstype">RSSを購読する<a href="javascript:;" onclick="closePanel(this)" class="close-area"></a></h3>';
		buf += '<p class="newsinfo">このページ（サイト）に関する最新情報をRSSリーダーを使って購読することができます。RSSリーダーをまだ利用していない方は、それぞれの項目の「？」をクリックしてみましょう。すでに各種RSSリーダーをお使いの方は、ご自分が利用されているサービス名をクリックしてください。人数が表示されている場合は人数をクリックでコメントなどを読むことができます。</p>';
		var oddEven = new OddEven();
		for (var k in services) {
			if (services[k]) {
				switch (k) {
				case 'rssYahoo':
					var odd = oddEven.getNext();
					buf += '<div class="bookmark-panel ' + odd + '">';
					var url = 'http://rd.yahoo.co.jp/myyahoo/rss/addtomy/users/*http://add.my.yahoo.co.jp/rss?url=' + encodeURIComponent(rssAddr);
					buf += '<div class="bookmark-title">';
					buf += '<a href="javascript:wordOfMouse(\'' + url + '\')" title="My Yahoo!へ追加">';
					buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/addtomy2.gif" width="62" height="17" border="0" />My Yahoo!</a>';
					buf += '</div>';
					buf += '<a href="http://my.yahoo.co.jp/st/rss/" target="_blank" class="help">MyYahoo!って何？</a>';
					buf += '</div>';
					break;
				case 'rssGoogle':
					var odd = oddEven.getNext();
					buf += '<div class="bookmark-panel ' + odd + '">';
					var url = 'http://fusion.google.com/add?feedurl=' + encodeURIComponent(rssAddr);
					buf += '<div class="bookmark-title">';
					buf += '<a href="javascript:wordOfMouse(\'' + url + '\')" title="Googleリーダーへ追加">';
					buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/plus_google.gif" border="0" />Googleリーダー</a>&nbsp;';
					buf += '</div>';
					buf += '<a href="http://www.google.co.jp/reader/" target="_blank" class="help">Googleリーダーって何？</a>';
					buf += '</div>';
					break;
				}
			}
		}
		buf += '<div class="rss-direct">';
		buf += '<a href="' + rssAddr + '" target="_blank">RSSを直接開く</a>';
		buf += '</div>';
		buf += '</div>';
	}

	if (option.buttons.twitter) {
		var tid = getSyncPartsId();
		var rtid = getSyncPartsId();

		hdr += '<a href="#" onclick="showPanel(this, \'twitter-area\'); return false;" class="tab-twitter">Twitterでつぶやく</a>';
		buf += '<div class="twitter-area">';
		buf += '<h3 class="newstype">Twitterでつぶやく<a href="javascript:;" onclick="closePanel(this)" class="close-area"></a></h3>';
		buf += '<p class="newsinfo">Twitterを使ってこのページ（サイト）に関する「つぶやき」をすることができます。<br />つぶやきはURL付きのRT(Retweet）として表示されます。</p>';
		buf += '<div class="bookmark-panel">';
		buf += '<div class="bookmark-title">';

		if (isLocal==false) {
			var tg = PRTCL + '//twitter.com/home/?status=RT+%40' + services.twitterId + '+' + encodeURIComponent(linkNm) + '+' + encodeURIComponent(addr);
			buf += '<span id="' + tid + '"><a href="' + tg + '" title="retweet" target="_blank"><img src="' + SYNC_RES_SERVER + '_modules/images/newsres/tweet.png" />つぶやく</a></span>';
			jQuery.getJSON(PRTCL + '//search.twitter.com/search.json?q=' + encodeURIComponent(addr) + '&callback=?', function(json){
				var twid = getSyncPartsId();
				var retwBuf = '';
				var retwNum = json.results.length;
				if (retwNum > 0) {
					for (var i=0; i<retwNum; i++) {
						var r = json.results[i];
						retwBuf += '<p><img src="' + r.profile_image_url + '" width="20" style="margin-right:2px"/>';
						retwBuf += r.text;
						var dt = new Date(r.created_at);
						var twurl = PRTCL + '//twitter.com/' + r.from_user + '/statuses/' + r.id;
						retwBuf += '&nbsp;<a href="' + twurl + '" target="_blank">'
							+ String(dt.getMonth()+1) + '/' + String(dt.getDay()) + ' '
							+ String(dt.getHours()) + ':' + String(dt.getMinutes()) + "</a>";
						retwBuf += '</p>';
					}
					var retwPanel = jQuery('<div id="' + twid + '" class="rt-wrapper"></div>').append('<div class="close-btn"></div>').click(function(e){
						jQuery(this).fadeOut(200);
					}).appendTo(document.body).hide();
					jQuery('<div class="retweeter-panel">' + retwBuf + '</div>').appendTo(retwPanel);
				}

				var a = jQuery('<a href="' + PRTCL + '//search.twitter.com/search?q=' + encodeURIComponent(addr) + '" target="_blank">' + retwNum + '人</a>');
				if (retwNum > 0) {
					a.hover(function(e){
						retwPanel.css({'left': e.pageX, 'top': e.pageY});
						retwPanel.fadeIn(200);
					});
				}
				jQuery('#' + rtid).append('').append(a).append('');
			});
		} else {
			buf += '<span id="' + tid + '"></span>';
		}

		buf += '</div>';
		buf += '<span id="' + rtid + '"></span>&nbsp;';

		buf += '<a href="http://twitter.com/" target="_blank" class="help">Twitterって何？</a>';
		buf += '</div>';
		buf += '<div class="followme">';
		buf += '<a href="http://twitter.com/' + services.twitterId + '/" target="_blank">このサイトのオーナーをfollowする</a>';
		buf += '</div>';
		buf += '</div>';
	}

	hdr = '<div class="bookmark-toolbar">' + hdr + '</div>';
	jQuery(c).html(hdr + buf).show();
	bdRefresh();
	Bindfooter.set();
}

function OddEven() {
	this.initialize.apply(this, arguments);
}
OddEven.prototype = {
	initialize: function() {
		this.oddCnt = 0;
	},
	getNext: function() {
		this.oddCnt++;
		return (this.oddCnt % 2 == 0) ? 'even':'odd';
	}
};

function closePanel(a) {
	var anc = jQuery(a);
	var pnl = anc.parent().parent();
	pnl.slideUp(200);
	pnl.parent().find('div.bookmark-toolbar').children('a').removeClass('sel');
}

function showPanel(a, cls) {
	var anc = jQuery(a);
	var prt = anc.parent();
	prt.children('a').each(function(i, e) {
		if (e != a)	jQuery(e).removeClass('sel');
	});
	anc.toggleClass('sel');

	var bmtop = prt.parent();
	bmtop.children('div.dispnow:not(.' + cls + ')').hide();
	bmtop.children('div.' + cls).slideToggle(200).addClass('dispnow');
}

function wordOfMouse(url) {
	var win = window.open(url, 'bind_wordOfMouse', 'width=800,height=500,resizable=yes,scrollbars=yes,menubar=no,toolbar=no,location=no,status=no');
	win.focus();
}

/**********
 D O C S
********/
function dispDoc(c, sid) {
	var tv = sid.split(':');
	var type = tv[0];
	var docid = tv[1];
	if (type.indexOf('document') == 0) {
		var url = SYNC5_SERVER + 'sync/docs.action?callback=?';
		jQuery.getJSON(url, {'s': sid}, function(json) {
			if (json.csspart && json.csspart.length > 0)
				jQuery('<style type="text/css">' + json.csspart + '</style>').appendTo('head');
			c.innerHTML = json.content;
			jQuery('#report-abuse-button').hide();
			jQuery('a.google-small-link').attr('href', 'http://docs.google.com/');
			jQuery(c).fadeIn(500);
			bdRefresh();
			Bindfooter.set();
		});
	} else if (type.indexOf('spreadsheet') == 0) {
		c.innerHTML = '<iframe id="sheet_frame" src="' + PRTCL + '//spreadsheets.google.com/pub?key=' + docid + '" frameborder="0" width="620" height="560"></iframe>';
		jQuery(c).fadeIn(500);
		bdRefresh();
		Bindfooter.set();

	} else if (type.indexOf('presentation') == 0) {
		c.innerHTML = '<iframe src="' + PRTCL + '//docs.google.com/EmbedSlideshow?docid=' + docid + '&amp;size=m" frameborder="0" width="555" height="451"></iframe>';
		jQuery(c).fadeIn(500);
		bdRefresh();
		Bindfooter.set();

	}
}

/**********
 F O R M
********/
//form.jsにあるDetailDatと同じにしてください。
var DetailDat = {
		fields: [
			{id: 'txt_required', place: '※は必須入力です。', deflabel: 'は必須入力です。', label: ''},
			{id: 'txt_confirm', place: '送信確認', deflabel: 'この内容で送信します。よろしいですか？', label: ''},
			{id: 'btn_confirm', place: '確認ボタンの文言', deflabel: '確認', label: ''},
			{id: 'btn_transmit', place: '送信ボタンの文言', deflabel: '送信', label: ''},
			{id: 'btn_correct', place: '内容を修正ボタンの文言', deflabel: '内容を修正', label: ''},
			{id: 'chk_sel_required', place: '未選択エラー', deflabel: '選択してください。', label: ''},
			{id: 'chk_txt_required', place: '未入力エラー', deflabel: '入力してください。', label: ''},
			{id: 'chk_txt_format', place: '書式エラー', deflabel: '正しい書式で入れてください。', label: ''},
			{id: 'chk_txt_limit', place: '送信制限エラー', deflabel: '送信できるテキストは５００文字以内です。', label: ''},
			{id: 'chk_txt_conflict', place: '不一致確認エラー', deflabel: 'と一致しません。', label: ''},
			{id: 'msg_send_success', place: '送信成功の文言', deflabel: '送信を完了しました。', label: ''},
			{id: 'msg_send_error', place: '送信失敗の文言', deflabel: '送信に失敗しました。', label: ''},
			{id: 'msg_send_failed', place: 'タイムアウト時の文言', deflabel: 'フォームの送信に失敗した可能性があります。\n再送信してください。', label: ''}
		]
	};

var forms = null;
function dispForm(c, formId, json, type) {

	c.innerHTML = '';

	// for error check
	var sync_form_id = 'sync_form_' + formId;
	if (forms == null) forms = {};
	var fields = {
		'form_id' : formId,
		'back_url' : ((!json.back_url)?'':json.back_url),
		'back_txt' : ((!json.back_txt)?'':json.back_txt),
		'last_msg' : breakToTag(json.last_msg)
	};
	//var dtltxt = {};
	var total = DetailDat.fields.length;
	for (var i=0; i<total; i++) {
		fields[DetailDat.fields[i].id] = DetailDat.fields[i].deflabel;
		if (json.dtls) {
			var dtllen = json.dtls.length;
			for (var j=0; j<dtllen; j++) {
				if (DetailDat.fields[i].id == json.dtls[j].id) {
					fields[DetailDat.fields[i].id] = json.dtls[j].label;
				}
			}
		}
	}

	forms[sync_form_id] = fields;

	var required = jQuery('<span class="required" id="warningA" style="display:visibility">＊</span>');

	var skin = getSkinClass(c);
	if (skin.indexOf('standard') > -1) {
		var mc = nineSlice('slice h3', c);
		mc.append('<h3>' + json.title + '</h3>');
	} else {
		var h3div = jQuery('<div class="h3"/>').appendTo(c);
		jQuery('<h3></h3>').appendTo(h3div).append(json.title);
	}

	var subt = json.subtitle;
	if (subt.length > 0)
		jQuery('<p class="lead"></p>').append(breakToTag(subt)).appendTo(c);

	//jQuery('<p class="note" id="warningA2" style="display:visibility">').append(required.clone()).append('は必須入力です。').appendTo(c);
	jQuery('<p class="note" id="warningA2" style="display:visibility">').append(required.clone()).append(fields.txt_required).appendTo(c);

	var frm = jQuery('<form id="' + sync_form_id + '"></form>');
	var inpA = jQuery('<div id="inputA" style="display:visibility"></div>');
	var cfmA = jQuery('<div id="confirmA" style="display:none">Confirm Area<table class="table sync_form"></table></div>');
	var tbl = jQuery('<table class="table sync_form">');

	// comps
	jQuery.each(json.comps, function(i, c) {
		var tr = jQuery('<tr>');
		var th = jQuery('<th>').appendTo(tr).append(c.label);

		var td = jQuery('<td>');
		var fcnt = c.fields.length;

		var err_area = 'err_' + sync_form_id + c.id;

		// fields
		var has_required = false;
		jQuery.each(c.fields, function(j, f) {
			var id = f.id;
			fields[id] = f;
			f['err_area'] = err_area;

			if (f.req) has_required = true;

			var sep = (id.indexOf('postal2') > -1
				|| id.indexOf('tel2') > -1 || id.indexOf('tel3') > -1) ? '':
					(getByFieldId(c.id)=='name' || getByFieldId(c.id)=='name_kana'
					|| id.indexOf('date_m') > -1 || id.indexOf('date_d') > -1) ? '　':'<br />';

			if (j > 0) td.append(sep);
			if (fcnt > 1 && id.indexOf('date_') == -1) jQuery('<label for="' + id + '">' + f.label + '</label>').appendTo(td);

			if (f.type == 'テキスト') {
				var txt = jQuery('<input type="text" />').attr('id', id).attr('name', id);
				if (f.size > 0) txt.attr('size', f.size);
				txt.appendTo(td);
				txt.focus(chkInput).keyup(chkInput);

			} else if (f.type == '複数行テキスト') {
				var txt = jQuery('<textarea cols="40" rows="7"></textarea>').attr('id', id).attr('name', id).appendTo(td);
				txt.focus(chkInput).keyup(chkInput);

			} else if (f.type == '選択リスト') {
				var sel = jQuery('<select></select>').attr('id', id).attr('name', id).appendTo(td);
				jQuery.each(f.choices, function(i, cho) {
					sel.append(jQuery('<option></option>').append(cho).attr('value', cho));
				});

			} else if (f.type == 'チェックボックス') {
				jQuery.each(f.choices, function(i, cho) {
					var cssId = id + '_' + i;
					jQuery('<input type="checkbox" id="' + cssId + '" name="' + id + '" value="' + cho + '" />').appendTo(td);
					jQuery('<label for="' + cssId + '">' + cho + '</label>').appendTo(td);
				});

			} else if (f.type == 'ラジオボタン') {
				jQuery.each(f.choices, function(i, cho) {
					var cssId = id + '_' + i;
					jQuery('<input type="radio" id="' + cssId + '" name="' + id + '" value="' + cho + '" />').appendTo(td);
					jQuery('<label for="' + cssId + '">' + cho + '</label>').appendTo(td);
				});

			} else if (f.type == '数値テキスト') {
				var txt = jQuery('<input type="text" />').attr('id', id).attr('name', id);
				if (f.size > 0) txt.attr('size', f.size);
				txt.appendTo(td);
				txt.focus(chkInput).keyup(chkInput).blur(function(e){chgHankaku(this.form,this.id,'2');});

			} else if (f.type == 'メールアドレス') {
				var txt = jQuery('<input type="text" />').attr('id', id).attr('name', id);
				if (f.size > 0) txt.attr('size', f.size);
				txt.appendTo(td);
				txt.focus(chkInput).keyup(chkInput);
			}

			if ((f.type == '数値テキスト') || (f.type == 'テキスト')) {
				if (id.indexOf('postal1') > -1 || id.indexOf('postal2') > -1) {
					txt.blur(function(e){setZipAddress(this.form,this.id);});
				}
			}

			if (f.suffix) {
				if (f.suffix.length>0) {
					jQuery('<label for="' + id + '">&nbsp;' + f.suffix + '</label>').appendTo(td);
				}
			}

		});

		if (has_required) {
			th.append(required.clone());
		}

		td.append('<div id="' + err_area + '"></div>');
		tr.append(td);
		tr.append(td);
		tr.appendTo(tbl);
	});

	var footer = jQuery('<p class="ac">');
	//jQuery('<button class="sync_form_button" type="submit">').append('確認').appendTo(footer);
	jQuery('<button class="sync_form_button" type="submit">').append(fields.btn_confirm).appendTo(footer);
	frm.submit(function(e){
		var flds = forms[this.id];
		var hasError = false;
		jQuery.each(flds, function(i, f) {
			if (!chkOne(f, flds, frm)) hasError = true;
		});
		// 更新
		if (hasError == false) {
			confirmForm(c, formId, json, type, frm);
		}
		return false;
	});

	tbl.appendTo(inpA);
	footer.appendTo(inpA);
	inpA.appendTo(frm);
	cfmA.appendTo(frm);
	var div = jQuery('<div class="indent tabular">').append(frm);
	div.appendTo(c);

	jQuery(c).fadeIn(500);

	bdRefresh();
	Bindfooter.set();
}

function confirmForm(c, formId, json, type, frm) {

	c.style.display = 'none';
	var wrnA = jQuery('#warningA', c);
	var wrnA2 = jQuery('#warningA2', c);
	var inpA = jQuery('#inputA', frm);
	var cfmA = jQuery('#confirmA', frm);
	cfmA.html('');

	// for error check
	var sync_form_id = 'sync_form_' + formId;
	if (forms == null) forms = {};
	var fields = {
		'form_id' : formId,
		'back_url' : ((!json.back_url)?'':json.back_url),
		'back_txt' : ((!json.back_txt)?'':json.back_txt),
		'last_msg' : breakToTag(json.last_msg)
	};

	//var dtltxt = {};
	var total = DetailDat.fields.length;
	for (var i=0; i<total; i++) {
		fields[DetailDat.fields[i].id] = DetailDat.fields[i].deflabel;
		if (json.dtls) {
			var dtllen = json.dtls.length;
			for (var j=0; j<dtllen; j++) {
				if (DetailDat.fields[i].id == json.dtls[j].id) {
					fields[DetailDat.fields[i].id] = json.dtls[j].label;
				}
			}
		}
	}

	forms[sync_form_id] = fields;

	var required = jQuery('<span class="required"></span>');

	jQuery('<p class="note">').append(required.clone()).append(fields.txt_confirm).appendTo(cfmA);

	var frm = jQuery('<div></div>');
	var tbl = jQuery('<table class="table sync_form">');
	// comps
	jQuery.each(json.comps, function(i, c) {
		var tr = jQuery('<tr>');
		var th = jQuery('<th>').appendTo(tr).append(c.label);

		var td = jQuery('<td>');
		var fcnt = c.fields.length;

		// fields
		var has_required = false;
		jQuery.each(c.fields, function(j, f) {
			var id = f.id;
			fields[id] = f;

			//if (getByFieldId(id)=='email_check') { return false; }
			if (id.match(/.*email_check$/i)) { return false; }
			var sep = (id.indexOf('postal2') > -1 || id.indexOf('tel2') > -1 || id.indexOf('tel3') > -1) ? '':
				(getByFieldId(c.id)=='name' || getByFieldId(c.id)=='name_kana') ? '　':'<br />';
			if (j > 0) td.append(sep);
			if (fcnt > 1) {
				var cap = f.label;
				//if (cap != '−') cap += '：';
				if ((cap != '−') && (cap != '-')) cap += '：';
				jQuery('<label for="' + id + '">' + cap + '</label>').appendTo(td);
			}

			switch (f.type) {
			case 'テキスト':
			case '数値テキスト':
			case 'メールアドレス':
			case '複数行テキスト':
			case '選択リスト':
			case 'チェックボックス':
			case 'ラジオボタン':
				value = getValue(id, jQuery('#' + sync_form_id));
				if (f.type=='複数行テキスト') {
					var CR = String.fromCharCode(13);
					var LF = String.fromCharCode(10);
					workVal = '';
					for (i=0; i<value.length; i++) {
						if (value.charAt(i)==CR) {
						} else if (LF==value.charAt(i)) {
							workVal += "<br>";
						} else {
							workVal += value.charAt(i);
						}
					}
					value = workVal;
				}
				var txt = jQuery('<span>' + value + '</span>');
				txt.appendTo(td);
				break;
			default:
			}
		});
		tr.append(td);
		tr.appendTo(tbl);
	});

	var footer = jQuery('<p class="ac">');

	//jQuery('<button class="sync_form_button">').append('内容を修正').click(function() {
	jQuery('<button class="sync_form_button">').append(fields.btn_correct).click(function() {
		pageBack(c, wrnA, wrnA2, inpA, cfmA);
		return false;
	}).appendTo(footer);

	//jQuery('<button class="sync_form_button">').append('送信').click(function() {
	jQuery('<button class="sync_form_button">').append(fields.btn_transmit).click(function() {
		var flds = forms[this.form.id];
		var hasError = false;
		var frm = this.form;
		jQuery.each(flds, function(i, f) {
			if (!chkOne(f, flds, frm)) hasError = true;
		});

		// 更新
		if (hasError == false) {
			tbl.hide();
			footer.hide();
			jQuery('#confirmA p.note', frm).hide();
			var sending = jQuery('<div class="loading">').height(tbl.height()).width(tbl.width()).appendTo(c);

			fdata = {};
			jQuery.each(flds, function(key, f) {
				if (key == 'form_id')
					fdata['form_id'] = f;
				else if (key == 'last_msg' && key.indexOf('email_check')>=0) {
				}
				else {
					//fdata[f.id] = getValue(f.id, this.form);
					fdata[f.id] = getValue(f.id, frm);
				}
			});

			var form_tm = setTimeout(function() {
				sending.removeClass('loading');
				sending.height(0);
				tbl.show();
				footer.show();
				//alert('フォームの送信に失敗した可能性があります。\n再送信してください。');
				alert(flds.msg_send_failed);
			}, 20000);
			var baseurl = (type=='form5')?SYNC5_SERVER:((type=='form3')?SYNC3_SERVER:SYNC2_SERVER);
			jQuery.ajax({
				//url: SYNC2_SERVER + 'sync/form_save.action',
				url: baseurl + 'sync/form_save.action',
				type: 'GET',
				dataType: 'jsonp',
				data: fdata,
				async: false,
				success: function(json) {
					clearTimeout(form_tm);

					// 終了メッセージの表示
					sending.removeClass('loading');
					//jQuery('<h3 class="ac"></h3>').append('<span class="sent_msg"></span>').append('送信を完了しました。').appendTo(sending);
					jQuery('<h3 class="ac"></h3>').append('<span class="sent_msg"></span>').append(flds.msg_send_success).appendTo(sending);
					sending.append('<br />');
					var endmsg = jQuery('<p class="lead ac">').hide().append(flds.last_msg).appendTo(sending);
					tbl.hide();
					footer.hide();
					endmsg.fadeIn(500);

					if (flds.back_txt!='') {
						var btnarea = jQuery('<p class="lead ac">').appendTo(sending);
						var btnback = jQuery('<button class="sync_form_button">').append(flds.back_txt).appendTo(btnarea);
						btnback.click(function () {
							location.href = (flds.back_url=='')?location.href:flds.back_url;
							return false;
						});
					}
				},
				error: function(xhr, status) {
					clearTimeout(form_tm);
					//alert('送信に失敗しました。');
					alert(flds.msg_send_error);
					pageBack(c, wrnA, wrnA2, inpA, cfmA);
				}
			});
		}
		return false;
	}).appendTo(footer);

	tbl.appendTo(frm);
	footer.appendTo(frm);
	var div = jQuery('<div class="indent tabular">').append(frm);
	div.appendTo(cfmA);

	wrnA.attr('style','display: none');
	wrnA2.attr('style','display: none');
	inpA.attr('style','display: none');
	cfmA.attr('style','display: visibility');
	jQuery(c).fadeIn(500);
}

function strchange_h2z(str,flg) {
	var han=new Array("1","2","3","4","5","6","7","8","9","0","-","^","\\",
		"q","w","e","r","t","y","u","i","o","p","@","[","a","s","d",
		"f","g","h","j","k","l",";",":","]","z","x","c","v","b","n"
		,"m",",",".","/","\\","!","\"","#","$","%","&","'","(",")","=",
		"~","|","Q","W","E","R","T","Y","U","I","O","P","`","{","A",
		"S","D","F","G","H","J","K","L","+","*","}","Z","X","C","V",
		"B","N","M","<",">","?","_","ｶﾞ","ｷﾞ","ｸﾞ","ｹﾞ","ｺﾞ","ﾀﾞ","ﾁﾞ","ﾂﾞ",
		"ﾃﾞ","ﾄﾞ","ﾊﾞ","ﾋﾞ","ﾌﾞ","ﾍﾞ","ﾎﾞ","ﾊﾟ","ﾋﾟ","ﾌﾟ","ﾍﾟ","ﾎﾟ","ｳﾞ","ｱ","ｲ",
		"ｳ","ｴ","ｵ","ｶ","ｷ","ｸ","ｹ","ｺ","ｻ","ｼ","ｽ","ｾ","ｿ","ﾀ","ﾁ",
		"ﾂ","ﾃ","ﾄ","ﾅ","ﾆ","ﾇ","ﾈ","ﾉ","ﾊ","ﾋ","ﾌ","ﾍ","ﾎ","ﾏ","ﾐ",
		"ﾑ","ﾒ","ﾓ","ﾔ","ﾕ","ﾖ","ﾗ","ﾘ","ﾙ","ﾚ","ﾛ","ﾜ","ｦ","ﾝ","ｧ",
		"ｨ","ｩ","ｪ","ｫ","ｯ","ｬ","ｮ","｡","､","･"," ");
	var zen=new Array("１","２","３","４","５","６","７","８","９","０","－","＾","￥",
		"ｑ","ｗ","ｅ","ｒ","ｔ","ｙ","ｕ","ｉ","ｏ","ｐ","＠","［","ａ","ｓ","ｄ",
		"ｆ","ｇ","ｈ","ｊ","ｋ","ｌ","；","：","］","ｚ","ｘ","ｃ","ｖ","ｂ","ｎ",
		"ｍ","，","．","／","￥","！","”","＃","＄","％","＆","’","（","）","＝",
		"〜","｜","Ｑ","Ｗ","Ｅ","Ｒ","Ｔ","Ｙ","Ｕ","Ｉ","Ｏ","Ｐ","‘","｛","Ａ",
		"Ｓ","Ｄ","Ｆ","Ｇ","Ｈ","Ｊ","Ｋ","Ｌ","＋","＊","｝","Ｚ","Ｘ","Ｃ","Ｖ",
		"Ｂ","Ｎ","Ｍ","＜","＞","？","＿","ガ","ギ","グ","ゲ","ゴ","ダ","ヂ","ヅ",
		"デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ヴ","ア","イ",
		"ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ",
		"ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ",
		"ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン","ァ",
		"ィ","ゥ","ェ","ォ","ッ","ャ","ョ","。","、","・","　");

	var wk="";
	var ch=0;
	for (i=0;i<str.length;i++){
		for(j in han){
			ch=1;
			if(flg==1){
				if (str.substr(i,2)==han[j]){
					wk+=String(zen[j]);
					ch=0;
					break;
				}
				if (str.substr(i,1)==han[j]){
					wk+=String(zen[j]);
					ch=0;
					break;
				}
			}
			if(flg==2){
				if (str.substr(i,1)==zen[j]){
					wk+=String(han[j]);
					ch=0;
					break;
				}
			}
		}
		if ((ch==1) && (str.substr(i,1)!="ﾞ" && str.substr(i,1)!="ﾟ")) {
			wk+=String(str.substr(i,1));
		}
	}
	return(wk);
}

function chgHankaku(frm,id,flg) {
	var obj = jQuery("[name="+id+"]", frm);
	var val = strchange_h2z(obj.val(),flg);
	obj.val(val);

}

function setZipAddress(frm, id) {
	//とりあえずさんぷるです。
	if (id.match(/^(.*)ps_postal([12])$/i)) {
		var prestr = RegExp.$1;
		var prefix = '';
		var suffix = '';
		if (jQuery('#'+prestr+'ps_postal1',frm).size() > 0){
			prefix = jQuery('#'+prestr+'ps_postal1',frm).val();
			if (jQuery('#'+prestr+'ps_postal2',frm).size() > 0){
				suffix = jQuery('#'+prestr+'ps_postal2',frm).val();
			}
			if (prefix.length>=3) {
				zip2addrs(frm,prestr,prefix,suffix);
			}
		}
	}
}

function zip2addrs(frm,prestr,prefix,suffix) {
	jQuery.ajax({
		url: SYNC5_SERVER + 'sync/addrs.action',
		type: 'GET',
		dataType: 'jsonp',
		data: {
			'prefix':prefix,
			'suffix':suffix
		},
		async: false,
		success: function(json) {
			if (json.pref.length>0) {
				if (jQuery('#'+prestr+'prefs',frm).size() > 0) {
					jQuery('#'+prestr+'prefs',frm).val(json.pref);
				}
				if (jQuery('#'+prestr+'street1',frm).size() > 0) {
					jQuery('#'+prestr+'street1',frm).val(json.addr1);
				}
			}
		},
		error: function(xhr, status) {
			//alert('送信に失敗しました。');
		}
	});
}

function chkInput(e) {
	var flds = forms[this.form.id]
	var f = flds[this.id];
	chkOne(f, flds, this.form);
}
function chkOne(f, flds, frm) {
	if (typeof(f) == 'string') return true;

	var msg = '';
	var val = getValue(f.id, frm);

	if (f.type == '数値テキスト') {
		chgHankaku(frm,f.id,'2');
	}
	if (f.req) {
		if (f.type == 'チェックボックス' || f.type == 'ラジオボタン') {
			if (f.req && val.length == 0) {
				//msg = '選択してください。';
				msg = flds.chk_sel_required;
			}
		} else {
			if (f.req && val.length == 0) {
				//msg = '入力してください。';
				msg = flds.chk_txt_required;
			}
		}
	}

	if (f.re.length > 0 && val.length > 0) {
		if (f.re.length > 0 && !val.match(eval(f.re))) {
			if (msg.length > 0) msg += '<br />';
			//msg += (f.err.length > 0) ? f.err:'正しい書式で入れてください。';
			msg += (f.err.length > 0) ? f.err: flds.chk_txt_format;
		}

	}

	if (f.type == 'テキスト' || f.type == '複数行テキスト' || f.type == '数値テキスト') {
		if (val.length > 500) {
			if (msg.length > 0) msg += '<br />';
			//msg += '送信できるテキストは５００文字以内です。';
			msg += flds.chk_txt_limit;
		}
	}

	// 確認用項目
	var pos = f.id.indexOf('_check');
	if (pos > -1) {
		var o = flds[f.id.substring(0, pos)];
		if (o) {
			if (jQuery('#' + o.id, frm).val() != val) {
				if (msg.length > 0) msg += '<br />';
				//msg += o.label + 'と一致しません。';
				msg += o.label + flds.chk_txt_conflict;
			}
		}
	}

	// エラー表示
	var msgArea = jQuery('#' + f.err_area, frm);
	if (msg.length == 0) {
		msgArea.slideUp();
		return true;
	} else {
		var dp = msgArea[0].style.display;
		if (dp == '' || dp == 'none') {
			msgArea.hide();
			//msgArea.removeClass('success_msg');
			msgArea.addClass('err_msg');
			msgArea.html(msg);
			msgArea.slideDown();
		} else {
			msgArea.addClass('err_msg');
			msgArea.html(msg);
		}
		return false;
	}

	return true;
}

function getValue(id, frm) {
	var value = "";
	var ctl = jQuery("[name="+id+"]", frm);
	if (ctl.attr("type")=="radio" || ctl.attr("type")=="checkbox") {
		var obj = jQuery("input:checked[name=" + id + "]", frm);
		for (i=0 ; i<obj.length ; i++) {
			if (i!=0) { value += ","; }
			value += obj.get(i).value;
		}
	} else {
		value = ctl.val();
	}
	return value;
}

function pageBack(c, wrnA, wrnA2, inpA, cfmA) {
	c.style.display = 'none';
	wrnA.attr('style','display: visibility');
	wrnA2.attr('style','display: visibility');
	inpA.attr('style','display: visibility');
	cfmA.attr('style','display: none');
	jQuery(c).fadeIn(500);
}


/**********
B L O G
********/
/*
 * ブログのパーツレンダラー
 */
function BlogHandler() {
	this.initialize.apply(this, arguments);
}
BlogHandler.prototype = {
	initialize: function(service, blogId, designId, option, c, sid) {
		this.service = service;
		this.blogId = blogId;
		this.designId = designId;
		this.option = option;
		this.oldId = sid;

		this.container = jQuery(c).empty();
		this.container.append('<span class="loading"></span>').show();

		this.rendered1st = false;
		// sideは最初のみ読み込み
		this.loadOnly1st = (this.designId.indexOf('side') > -1) ? true : false;
	},
	attachFeedLoader: function(loader) {
		this.feedLoader = loader;
	},
	loadStart: function() {
		if (this.rendered1st && this.designId.indexOf('side') == -1) {
			var wrap = this.container.children('#blogWrapper');
			wrap.empty();
			wrap.attr('className', 'loading');
		}
	},
	render: function(json) {
		this.json = json;
		var skin = getSkinClass(this.container[0]);
		this.skin = skin;

		switch (this.designId) {
		case 'title':
			this.renderTitle(json, skin);
			break;
		case 'table':
			this.renderTable(json, skin);
			break;
		case 'standard':
			this.renderStandard(json, skin);
			break;
		case 'paging':
			this.renderPaging(json, skin);
			break;
		case 'accordion':
			this.renderAccordion(json, skin);
			break;
		case 'tab':
			this.renderTab(json, skin);
			break;
		case 'main01':
			this.renderMain01(json, skin);
			break;
		case 'side01':
			if (this.rendered1st == false) this.renderBlogSide(json, skin);
			break;
		}

		if (typeof(this.labelArea) != 'undefined') {
			this.labelArea.html(json.headerGuide);
			this.labelArea.show();
		}

		this.rendered1st = true;

		bdRefresh();
		Bindfooter.set();
	},
	getHtmlLink: function(links) {
		var url = '';
		for (var i=0,l=links.length; i<l; i++) {
			var ln = links[i];
			if (ln.rel == 'alternate') {
				url = ln.href;
				break;
			}
		}
		return url;
	},
	renderHeaderV2: function(json, skin) {
		var url = this.getHtmlLink(json.feed.link);

		// タイトル
		var h3div = null;
		if (skin.indexOf('standard') > -1) {
			h3div = nineSlice('slice h3', this.container);
		} else {
			h3div = jQuery('<div class="h3"/>').appendTo(this.container);
		}

		var h3 = jQuery('<h3/>').appendTo(h3div);
		jQuery('<a href="' + url + '"></a>').append(json.feed.title.$t).appendTo(h3);

		// サブタイトル
		var subt = json.feed.subtitle;
		if (subt && subt.$t.length > 0)
			jQuery('<p class="lead"></p>').text(subt.$t).appendTo(this.container);
	},
	renderDetailV2: function(e, wrapper, skin) {
		var url = this.getHtmlLink(e.link);

		var h2 = null;
		if (skin.indexOf('standard') > -1) {
			h2 = jQuery('<span class="mc"></span>');
			var h2core = jQuery('<span class="mm"></span>').append(h2);
			var h2div = jQuery('<h2></h2>').append(h2core)
			jQuery('<div class="h2"></div>').append(h2div).appendTo(wrapper);
		} else {
			h2 = jQuery('<h2></h2>');
			jQuery('<div class="h2"></div>').append(h2).appendTo(wrapper);
		}
		var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t).appendTo(h2);

		var bodyWrapper = jQuery('<div></div>').appendTo(wrapper);

		jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(bodyWrapper);

		if (e.content)
			bodyWrapper.append(e.content.$t).append('<br class="clear" />');
		else if (e.summary)
			bodyWrapper.append(e.summary.$t).append('<br class="clear" />');

		// for IE
		this.normalizeObj(bodyWrapper);

		if (this.option.link_words != '') {
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi ar"></p>').append(anc);
			jQuery('<div class="kakomi"></div>').append(p).appendTo(bodyWrapper);
		}

		jQuery('<div class="hr"></div>').appendTo(bodyWrapper);
	},
	cutBody: function(str) {
		var pos = str.indexOf('<br');
		var cutPt = 0;
		if (pos==-1) {
			pos = str.indexOf('</p>');
			cutPt = 4;
		}
		if (pos==-1) {
			pos = str.indexOf('</div>');
			cutPt = 6;
		}
		if (pos > -1) return str.substring(0, pos + cutPt);
		return str;
	},
	renderStandard: function(json, skin) {
		var clazz = this;

		jQuery.each(json.feed.entry, function(i, e) {
			clazz.renderDetailV2(e, clazz.container, skin);
		});
	},
	renderTitle: function(json, skin) {
		// タイトル、サブタイトル表示
		this.renderHeaderV2(json, skin);

		var dl = jQuery('<dl></dl>');
		jQuery('<div class="indent lined"></div>').append(dl).appendTo(this.container);

		// 記事一覧
		var ents = json.feed.entry;
		for (var i=0, l=ents.length; i<l; i++) {
			var e = ents[i];
			jQuery('<dt></dt>').append(this.formatBlogDate(e.published.$t)).appendTo(dl);
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t);
			jQuery('<dd></dd>').append(a).appendTo(dl);
		}

		// more
		if (this.option.link_words != '') {
			var url = this.getHtmlLink(json.feed.link);
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi"></p>').append(anc);
			jQuery('<div class="kakomi"></div>').append(p).appendTo(this.container);
		}
	},
	renderTable: function(json, skin) {
		// タイトル、サブタイトル表示
		this.renderHeaderV2(json, skin);

		var div = jQuery('<div class="indent tabular"></div>');
		var table = jQuery('<table class="table"></table>').appendTo(div);

		// 記事一覧
		var ents = json.feed.entry;
		for (var i=0, l=ents.length; i<l; i++) {
			var e = ents[i];
			var tr = jQuery('<tr></tr>');
			var th = jQuery('<th><div class="th">' + this.formatBlogDate(e.published.$t) + '</div></th>').appendTo(tr);
			var td = jQuery('<td></td>').appendTo(tr);
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '">' + e.title.$t + '</a>');
			var balloon = (skin.indexOf('standard') > -1) ? nineSlice('balloon', td) : jQuery('<div class="balloon"></div>').appendTo(td);
			balloon.append(a);

			var affix = jQuery('<p class="affix"></p>').append(e.content.$t).appendTo(td);
			// forIE
			this.normalizeObj(affix);

			// more
			if (this.option.link_words != '') {
				var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
				jQuery('<p class="affix"></p>').append(anc).appendTo(td);
			}

			table.append(tr);
		}

		div.appendTo(this.container);

	},
	renderPaging: function(json, skin) {
		var prev = jQuery('<a href="#" class="prev"></a>').append('前のエントリーへ').click(jQuery.fnbind(this, this.pagePrev));
		var next = jQuery('<a href="#" class="next"></a>').append('次のエントリーへ').click(jQuery.fnbind(this, this.pageNext));
		jQuery('<p class="ac"></p>').append(prev).append('|').append(next).appendTo(this.container);
		jQuery('<div class="hr"></div>').appendTo(this.container);

		blogWrapper = jQuery('<div id="blogWrapper"></div>').appendTo(this.container);

		// more
		if (this.option.link_words != '') {
			var url = this.getHtmlLink(json.feed.link);
			var anc = jQuery('<a href="' + url + '"></a>').append(this.option.link_words + ' &gt;&gt;&gt;');
			var p = jQuery('<p class="kakomi ar"></p>').append(anc);
			jQuery('<div class="kakomi"></div>').append(p).appendTo(this.container);
		}

		jQuery('<div class="hr"></div>').appendTo(this.container);
		var prevB = jQuery('<a href="#" class="prev"></a>').append('前のエントリーへ').click(jQuery.fnbind(this, this.pagePrev));
		var nextB = jQuery('<a href="#" class="next"></a>').append('次のエントリーへ').click(jQuery.fnbind(this, this.pageNext));
		jQuery('<p class="ac"></p>').append(prevB).append('|').append(nextB).appendTo(this.container);

		this.pageDisp(0);
	},
	pageNext: function() {
		if (this.pageIndex < this.json.feed.entry.length) this.pageDisp(this.pageIndex + 1);
	},
	pagePrev: function() {
		if (this.pageIndex > 0) this.pageDisp(this.pageIndex - 1);
	},
	pageDisp: function(idx) {
		var ents = this.json.feed.entry;
		if (ents.length > idx) {
			var e = ents[idx];
			blogWrapper = jQuery(this.container).children('#blogWrapper');
			blogWrapper.html('');

			var h2 = null;
			if (this.skin.indexOf('standard') > -1) {
				h2 = jQuery('<span class="mc"></span>');
				var h2core = jQuery('<span class="mm"></span>').append(h2);
				var h2div = jQuery('<h2></h2>').append(h2core)
				jQuery('<div class="h2"></div>').append(h2div).appendTo(blogWrapper);
			} else {
				h2 = jQuery('<h2></h2>');
				jQuery('<div class="h2"></div>').append(h2).appendTo(blogWrapper);
			}
			var ary = e.id.$t.split('-');
			var eid = ary[ary.length-1];
			var url = this.getHtmlLink(e.link);
			var a = jQuery('<a href="' + url + '"></a>').append(e.title.$t).appendTo(h2);

			jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(blogWrapper);
			blogWrapper.append(e.content.$t + '<br /><br class="clear" />');

			// for IE
			this.normalizeObj(blogWrapper);

			if (idx == 0) {
				jQuery('a.prev').css('visibility', 'hidden');
			} else {
				jQuery('a.prev').css('visibility', 'visible');
			}

			if (idx == ents.length-1) {
				jQuery('a.next').css('visibility', 'hidden');
			} else {
				jQuery('a.next').css('visibility', 'visible');
			}

			this.pageIndex = idx;
		}
	},
	normalizeObj: function(dest) {
		if ( !jQuery.support.opacity ) {
			jQuery('object', dest).each(function(i, obj) {
				var jqObj = jQuery(obj);
				var ah = jqObj.attr('altHtml');
				if (ah.length > 0) jqObj.replaceWith(ah);
			});
		}
	},
	renderAccordion: function(json, skin) {
		this.container.html('アコーディオン！');
	},
	renderTab: function(json, skin) {
		this.container.html('タブ！');
	},
	// ブログのメイン部の書き出し処理
	//
	renderMain01: function(json, skin) {
		var blogWrapper = null;

		// まだ初期描画をしていない時
		if (this.rendered1st == false && json.feed) {
			// タイトル
			var h3div = null;
			if (skin.indexOf('standard') > -1) {
				h3div = nineSlice('slice h3', this.container);
			} else {
				h3div = jQuery('<div class="h3"/>').appendTo(this.container);
			}

			var h3 = jQuery('<h3/>').appendTo(h3div);
			jQuery('<a href="javascript:;"></a>').append(json.feed.title.$t).bind('click', function(e) {
				SWFAddress.setValue('');
			}).appendTo(h3);
			this.labelArea = jQuery('<span id="blog-pwd"></span>').appendTo(h3);

			// サブタイトル
			var subt = json.feed.subtitle;
			if (subt && subt.$t.length > 0)
				jQuery('<p class="lead"></p>').text(subt.$t).appendTo(this.container);

			blogWrapper = jQuery('<div id="blogWrapper"></div>').appendTo(this.container);

		} else {
			blogWrapper = jQuery(this.container).children('#blogWrapper');
			blogWrapper.removeClass('loading');

		}

		if (json.feed) {
			var clazz = this;
			jQuery.each(json.feed.entry, function(i, e) {
				clazz.renderDetail(e, blogWrapper, skin);
			});
		} else {
			this.renderDetail(json.entry, blogWrapper, skin);
		}

	},
	renderDetail: function(e, blogWrapper, skin) {
		var wrapper = jQuery('<div class="entryWrapper"></div>').appendTo(blogWrapper);

		var h2 = null;
		//if (skin.indexOf('standard') > -1) {
		//	h2 = jQuery('<span class="mc"></span>');
		//	var h2core = jQuery('<span class="mm"></span>').append(h2);
		//	var h2div = jQuery('<h2></h2>').append(h2core)
		//	jQuery('<div class="h2"></div>').append(h2div).appendTo(wrapper);
		//} else {
			h2 = jQuery('<h2></h2>');
			jQuery('<div class="h2"></div>').append(h2).appendTo(wrapper);
		//}
		var ary = e.id.$t.split('-');
		var eid = ary[ary.length-1];
		var a = jQuery('<a href="javascript:;"></a>').append(e.title.$t).bind('click', {blogId: this.blogId, entryId: eid}, function(e) {
			SWFAddress.setValue('detail/' + e.data.entryId);
		}).appendTo(h2);

		jQuery('<address class="ar"></address>').append(this.formatBlogDate(e.published.$t)).appendTo(wrapper);
		wrapper.append(e.content.$t).append('<br class="clear" />');

		// for IE
		this.normalizeObj(wrapper);

		// 投稿者が取得できるのはBloggerのみ
		if (this.service == 'google') {
			var link = this.findCommentLink(e.link);
			var footer = jQuery('<p class="kakomi ar"></p>').append('投稿者：');
			if (skin.indexOf('standard') > -1) {
				var mm = nineSlice('slice kakomi', wrapper);
				mm.append(footer);
			} else {
				jQuery('<div class="kakomi"></div>').append(footer).appendTo(wrapper);
			}
			for (var i=0; i<e.author.length; i++) {
				if (i > 0) footer.append(', ');
				var auth = e.author[i];
				if (auth.uri)
					jQuery('<a target="_blank"></a>').text(auth.name.$t).attr('href', auth.uri.$t).appendTo(footer);
				else
					footer.append(auth.name.$t);
			}

			footer.append('&nbsp;&nbsp;&nbsp;');

			a = jQuery('<a></a>').attr({href: link.href, title: link.title});
			a.text(link.text);
			a.appendTo(footer);
		}

		jQuery('<div class="hr"></div>').appendTo(wrapper);

	},
	renderBlogSide: function(json, skin) {
		var clazz = this;

		if (this.rendered1st == false) {
			// カレンダー
			var calWrap = jQuery('<div class="calWrapper"></div>').appendTo(this.container);
			jQuery('<h3 class="ac" id="blog-calendar-ym"></h3>').appendTo(calWrap);
			var calHdr = jQuery('<div class="calHdr"></div>').appendTo(calWrap);
			jQuery('<a href="javascript:;" class="prevM">&lt;&lt;</a>').appendTo(calHdr).click(function(e) {
				clazz.moveMonth(-1);
			});
			jQuery('<a href="javascript:;" class="nextM">&gt;&gt;</a>').appendTo(calHdr).click(function(e) {
				clazz.moveMonth(1);
			});
			jQuery('<div class="hr clear"></div>').appendTo(calWrap);
			this.calArea = jQuery('<div id="blog-calendar-area"></div>').appendTo(calWrap);

			jQuery('<div class="hr"></div>').appendTo(this.container);
		}

		// カレンダー読み込み
		this.loadCalendar();

	},

	loadCalendar: function(ym) {
		this.calArea.empty();
		this.calArea.attr('className', 'loading');

		var y, m;
		if (ym == null) {
			var d = new Date();
			y = d.getFullYear();
			m = d.getMonth() + 1;
		} else {
			y = new Number(ym.substring(0, 4));
			sm = ym.substring(4);
			if (sm.substring(0, 1) == '0') sm = sm.substring(1);
			m = new Number(sm);
		}

		jQuery('#blog-calendar-ym').text(y + '年 ' + m + '月');

		var st = new Date(y, m - 1, 1);
		var ed = new Date(y, m, 0, 23, 59, 59);	//月末
		var published_min = formatFeedDate(st);
		var published_max = formatFeedDate(ed);

		var url = '';
		copyOpt = {};
		if (this.service == 'google') {
			if (this.oldId != '') {
				url = PRTCL + '//www.blogger.com/feeds/' + this.oldId + '/posts/default';
			} else if (this.blogId.length > 0) {
				url = 'http://' + this.blogId + '.blogspot.com/feeds/posts/default';
			}
			url += '?redirect=false' +
				'&published-min=' + published_min +
				'&published-max=' + published_max +
				'&alt=json-in-script&callback=?';
		} else {
			url = SYNC5_SERVER + "blog/rss/json?callback=?";
			copyOpt = objClone(this.option);
			copyOpt.published_min = published_min;
			copyOpt.published_max = published_max;
		}

		var clazz = this;
		jQuery.getJSON(url, copyOpt, function(json) {
			// カテゴリ
			// amebaはカテゴリーが取得できないので
			if (clazz.service != 'ameba') {
				var ul = clazz.container.children('#category-list');
				if (ul.length == 0) {
					jQuery('<h4>ラベル</h4>').appendTo(clazz.container);
					ul = jQuery('<ul id="category-list" class="disc"></ul>').appendTo(clazz.container);

					jQuery('<div class="hr"></div>').appendTo(clazz.container);
				}

				// カテゴリ表示
				catList = [];
				clazz.renderCategory(ul, json);
			}

			// カレンダー描画
			clazz.calArea.removeAttr('className');
			var list = [];
			if (json.feed.entry) {
				jQuery.each(json.feed.entry, function(i, e) {
					var o = {
						title: e.title.$t,
						pubdate: parseFeedDate(e.published.$t)
					};
					list.push(o);
				});
			}

			var calTbl = jQuery('<table id="blog-calendar"></table>').appendTo(clazz.calArea);

			var tr  = jQuery('<tr></tr>').appendTo(calTbl);
			for (var i=0; i<7; i++) {
				var d = '';
				switch (i) {
					case 0: d = '日'; break;
					case 1: d = '月'; break;
					case 2: d = '火'; break;
					case 3: d = '水'; break;
					case 4: d = '木'; break;
					case 5: d = '金'; break;
					case 6: d = '土'; break;
				}
				jQuery('<th>' + d + '</th>').appendTo(tr);
			}

			var day = 1;
			var dt = st;
			var stw = dt.getDay();
			var iniMon = dt.getMonth();
			var inCal = false;
			for (var i=0; i<6; i++) {
				tr = jQuery('<tr></tr>').appendTo(calTbl);
				for (var j=0; j<7; j++) {
					if (i==0 && !inCal && j==stw) inCal = true;

					if (inCal) {
						var e = clazz.findEntry(dt, list);

						if (e != null) {
							var td = jQuery('<td></td>').appendTo(tr);
							var a = jQuery('<a href="javascript:;"></a>').attr('title', e.title).text(dt.getDate()).appendTo(td).click(function(evt) {
								SWFAddress.setValue('list/' + this.rel);
							});
							a.attr('rel', e.pubdate.ymd);
						} else {
							jQuery('<td></td>').appendTo(tr).text(dt.getDate());
						}
						day++;
						dt.setDate(day);
						if (dt.getMonth() != iniMon) inCal = false;
					} else {
						jQuery('<td></td>').appendTo(tr).html('&nbsp;');
					}
				}
				if (i > 1 && inCal == false) break;
			}
		});

	},

	renderCategory: function(wrapper, json) {
		wrapper.empty();
		if (json.feed.entry) {
			jQuery.each(json.feed.entry, function(i, e) {
				if (e.category) {
					for (var i=0; i<e.category.length; i++) {
						var nm = e.category[i].term;
						if (nm != '' && jQuery.inArray(nm, catList) == -1) {
							var a = jQuery('<a href="javascript:;"></a>').text(nm).click(function() {
								SWFAddress.setValue('label/' + nm);
							});
							jQuery('<li></li>').append(a).appendTo(wrapper);
							catList.push(nm);
						}
					}
				}
			});
		}
	},

	moveMonth: function(amont) {
		if (!this.currentYm) this.currentYm = getYm();
		this.currentYm.setMonth(this.currentYm.getMonth() + amont);
		var ym = String(this.currentYm.getFullYear()) + zeroPad(String(this.currentYm.getMonth() + 1));
		this.loadCalendar(ym);
	},

	formatBlogDate: function(srcString) {
		var d = parseFeedDate(srcString);
		return d.year + '年' + d.month + '月' + d.day + '日&nbsp;&nbsp;' + d.tm;
	},

	findCommentLink: function(links) {
		var o = {};
		for (var i=0; i<links.length; i++) {
			var link = links[i];
			if (link.rel == 'replies') {
				if (link.type == 'text/html') {
					o.href = link.href;
					o.text = link.title;
				} else {
					o.title = link.title;
				}
			}
		}
		return o;
	},

	findEntry: function(dt, list) {
		for (var i=0; i<list.length; i++) {
			var o = list[i];
			var pub = o.pubdate;
			if (dt.getFullYear() == pub.year
				&& dt.getMonth() + 1 == pub.month
				&& dt.getDate() == pub.day) {
				return o;
			}
		}
		return null;
	}
};

/*
 * ブログのFeed管理クラス
 */
function FeedManager() {
	this.initialize.apply(this, arguments);
}
FeedManager.prototype = {
	initialize: function() {
		this.db = {};
		this.gfeeds = [];
	},
	addFeed: function(service, blogId, designId, option, container, sid) {
		var handler = new BlogHandler(service, blogId, designId, option, container, sid);
		if (service=='google') {
			this.gfeeds.push(new FeedLoader(service, blogId, option, handler, sid));
		} else {
			var key = service + ':' + blogId;
			if (!(key in this.db)) {
				this.db[key] = new FeedLoader(service, blogId, option, handler, sid);
			} else {
				var ldr = this.db[key];
				ldr.addFeed(handler);
			}
		}
	},
	load: function(evt) {
		var path = '/';
		if (typeof(evt) != 'undefined') {
			path = evt.path;
		}

		if (path == 'page') return;

		var args = path.split('/');
		var type = (args.length > 1) ? args[1] : '';
		var param1 = (args.length > 2) ? args[2] : '';
		var param2 = (args.length > 3) ? args[3] : '';

		for (var i=0,l=this.gfeeds.length; i<l; i++) {
			var ldr = this.gfeeds[i];
			ldr.load(type, param1, param2);
		}

		for (var key in this.db) {
			var ldr = this.db[key];
			ldr.load(type, param1, param2);
		}
	}
};

/*
 * ブログのFeed読み込みクラス
 */
function FeedLoader() {
	this.initialize.apply(this, arguments);
}
FeedLoader.prototype = {
	initialize: function(service, blogId, option, handler, sid) {
		this.service = service;
		this.blogId = blogId;
		this.option = option;
		this.oldId = sid;
		this.loaded1st = false;
		this.detailTopMode = false;
		this.addFeed(handler);
	},
	addFeed: function(handler) {
		handler.attachFeedLoader(this);
		if (!this.handlers) this.handlers = [];
		this.handlers.push(handler);
	},
	load: function(type, param1, param2) {
		// ローディング表示
		this.doLoading();

		// ブックマークなどで、詳細ページが最初から読まれた場合の対処
		if (this.loaded1st == false && type == 'detail') {
			this.detailTopMode = true;
			this.getDetailTopFeed(type, param1, param2);
			return;
		}

		// 通常の読み込み
		var url = '';
		var loadOpt = {};
		var guide = '';
		var published_min = '';
		var published_max = '';

		if (type == 'label') {
			guide = ' − ラベル：「' + decodeURI(param1) + '」のリスト';

		} else if (type == 'list') {
			var y = param1.substring(0, 4);
			var m = new Number(omitZero(param1.substring(4, 6)));
			var d = omitZero(param1.substring(6));
			var st = new Date(y, m - 1, d);
			var ed = new Date(y, m - 1, d, 23, 59, 59);
			published_min = formatFeedDate(st);
			published_max = formatFeedDate(ed);

			guide = ' − ' + y + '年' + m + '月' + d + '日のリスト';
		}

		if (this.service == 'google') {
			var dt_condition = '';
			if (this.oldId != '') {
				url = PRTCL + '//www.blogger.com/feeds/' + this.oldId + '/posts/default';
			} else if (this.blogId.length > 0) {
				url = 'http://' + this.blogId + '.blogspot.com/feeds/posts/default';
			}

			if (type == 'detail') {
				url += '/' + param1;

			} else if (type == 'label') {
				url += '/-/' + param1;

			} else if (type == 'list') {
				dt_condition = '&published-min=' + published_min +
							'&published-max=' + published_max;

			}

			url += '?redirect=false';
			url += dt_condition;
			if (type != 'label' && type != 'detail') url += '&max-results=' + this.option.max_results;
			url += '&alt=json-in-script&callback=?';

		} else {
			url = SYNC5_SERVER + "blog/rss/json?callback=?";
			loadOpt = objClone(this.option);
			if (type == 'detail') loadOpt.entryid = param1;
			else if (type == 'label') loadOpt.category = param1;
			else if (type == 'list') {
				loadOpt.published_min = published_min;
				loadOpt.published_max = published_max;
			}
		}

		var clazz = this;

		jQuery.getJSON(url, loadOpt, function(json) {
			json.headerGuide = guide;

			if (clazz.detailTopMode && clazz.detailTopFeed != null) {
				clazz.detailTopFeed.feed.entry = [];
				clazz.detailTopFeed.feed.entry[0] = json.entry;
				json = clazz.detailTopFeed;
				clazz.detailTopMode = false;
			}

			clazz.feed = json;
			clazz.doCallback(json);
			clazz.loaded1st = true;
		});
	},
	getDetailTopFeed: function(type, param1, param2) {
		var url = '';
		var loadOpt = {};
		if (this.service == 'google') {
			if (this.option==null && this.oldId != '') {
				url = PRTCL + '//www.blogger.com/feeds/' + this.oldId + '/posts/default';
			} else {
				url = 'http://' + this.blogId + '.blogspot.com/feeds/posts/default';
			}
			url += '?redirect=false&max-results=1&alt=json-in-script&callback=?';

		} else {
			url = SYNC5_SERVER + "blog/rss/json?callback=?";
			loadOpt = objClone(this.option);
		}

		jQuery.getJSON(url, loadOpt, jQuery.fnbind(this, function(json) {
			this.detailTopFeed = json;
			this.loaded1st = true;
			this.load(type, param1, param2);
		}));

	},
	doLoading: function() {
		for (var i=0,l=this.handlers.length; i<l; i++) this.handlers[i].loadStart();
	},
	doCallback: function(json) {
		for (var i=0,l=this.handlers.length; i<l; i++) this.handlers[i].render(json);
	}
};

/**********
Yahoo! Map
********/
function SyncYMap() {
	this.initialize.apply(this, arguments);
}
SyncYMap.prototype = {
	countDown: 2,
	initialize: function(sid, c, tp) {
		this.mapId = sid;
		this.cnt = c;
		this.type = tp;

		if (ymapLoader == null) {
			ymapLoader = new YMapLoader();
		}
		ymapLoader.addMap(this);

		jQuery.getJSON(this.getServer() + 'sync/ymap?callback=?', {s : this.mapId}, jQuery.fnbind(this, function(json) {
			this.mapdata = eval('(' + json.mapdata + ')');
			this.countDown--;
			this.render();
		}));
	},
	getServer: function() {
		return (this.type=='map') ? SYNC3_SERVER:SYNC5_SERVER;
	},
	onApiLoaded: function() {
		this.countDown--;
		this.render();
	},
	render: function() {
		if (this.countDown == 0) {
			this.dispMap();
		}
	},
	dispMap: function() {
		var div = jQuery('<div></div>').width(this.mapdata.w).height(this.mapdata.h);
		jQuery(this.cnt).html('').append(div).show();

		this.map = new Y.Map(div, {
			configure: {
				continuousZoom:true
			}
		});
		this.map.addControl(new Y.LayerSetControl());
		this.cmark = new Y.CenterMarkControl({ visibleButton: true, visible: this.mapdata.centerMark });
		this.map.addControl(this.cmark);
		this.map.addControl(new Y.SliderZoomControlVertical(),
			new Y.ControlPosition(Y.ControlPosition.TOP_LEFT, new Y.Size(0, 28)) );
		this.map.addControl(new Y.ScaleControl());
		this.map.removeLayerSet(Y.LayerSetId.B1);
		this.map.drawMap(new Y.LatLng(this.mapdata.lat, this.mapdata.lng), this.mapdata.zoom, this.mapdata.layer);

		for (var k in this.mapdata.markers) {
			var mkdt = this.mapdata.markers[ k ];
			if (mkdt.url.indexOf('/pics/') == 0)
				mkdt.url = this.getServer() + mkdt.url.substring(1);
			var mk = new Y.Marker(new Y.LatLng(mkdt.lat, mkdt.lng), {
				icon: new Y.Icon(mkdt.url)
			});

			mk.id = k;
			this.map.addFeature(mk);

			this.setMarkerCaption(mk, mkdt.title, mkdt.body);

		}

		this.cnt.style.display = '';
		bdRefresh();
		Bindfooter.set();
	},
	setMarkerCaption: function(mk, ttl, body) {
		var buff = '';
		if (ttl != '') buff += '<h3>' + ttl + '</h3>';
		if (body != '') buff += body;
		if (ttl != '' || body != '') mk.bindInfoWindow( buff );

		mk.setTitle(ttl);
	}
};

var ymapLoader = null;
function YMapLoader() {
	this.initialize.apply(this, arguments);
}
YMapLoader.prototype = {
	isLoaded: false,
	maps: [],
	initialize: function() {
		var script_tag = document.createElement('script');
		script_tag.type = 'text/javascript';
		script_tag.src = 'http://js.api.olp.yahooapis.jp/OpenLocalPlatform/V1/jsapi?appid=iSiHwv2xg66mcy5bW_maWJ0rQ2AebH2VxFHFOhZRjSOhe0ZcN_.bjwW9z3oduzc-';
		document.body.appendChild(script_tag);

		this.tm = setInterval(jQuery.fnbind(this, this.checkLoaded), 100);
	},
	checkLoaded: function() {
		if (typeof(Y) != 'undefined') {
			clearInterval(this.tm);
			this.isLoaded = true;

			for (var i=0; i<this.maps.length; i++) {
				var map = this.maps[ i ];
				map.onApiLoaded();
			}
		}
	},
	addMap: function(ymap) {
		if (this.isLoaded) {
			ymap.onApiLoaded();
		} else {
			this.maps.push(ymap);
		}
	}
};

/**********
V I D E O
********/
function getYTHeight(w) {
	return Math.floor(w / 16 * 9 + 25);
}
var ivideo = 0;
var arrayOpt = new Array;

function onYouTubePlayerStateChange (state,playerId,quality) {
	var pid = '#' + playerId;
	var ytPlayer = jQuery(pid)[0];
	if (state == -1){				// 未開始
	} else if (state == 0) {		// 終了
	} else if (state == 1) {		// 再生中
			if (arrayOpt[playerId]['flg'] == false) {
				ytPlayer.setPlaybackQuality(quality);
				arrayOpt[playerId]['flg'] = true;
			}
	} else if (state == 2) {		// 一時停止中
	} else if (state == 3) {		// バッファリング中
	} else if (state == 5) {		// 頭出し済み
	}
}
function onYouTubePlayerReady(playerId) {
	if(playerId.length > 0){
		var pid = '#' + playerId;
		var ytPlayer = jQuery(pid)[0];
		var func1 = '(function(state){ onYouTubePlayerStateChange(state, "' + playerId + '","' + arrayOpt[playerId]['quality'] + '"); })';
		ytPlayer.addEventListener('onStateChange',func1,false);				//イベント追加 '状態変更'
//		ytPlayer.addEventListener('onPlaybackQualityChange',func2,false);	//イベント追加 '画質変更後'
	}
}
function dispVideo(c, sid, did, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	var tm = new Date().getTime();
	var buf = '';
	if (did == 'standard') {
		var pos = sid.lastIndexOf('/');
		var vid = sid.substring(pos+1);

		var h = getYTHeight(opt.playerWidth);
		var a = '';
		ivideo += 1;
		if (typeof(Value)=="undefined" || Value.preview) {
			a = '/v/' + vid;
			a += '&autoplay=' + ((opt.autoPlay) ? '1':'0');
			a += '&loop=' + ((opt.autoLoop) ? '1':'0');
			a += '&enablejsapi=1';
			a += '&playerapiid=ytPlayer' + ivideo;
		}

		if (sid.indexOf('playlists') > -1) {
			opt.playerWidth = '480';
			h = '385';
			a = '/p/' + vid;
			a += '&enablejsapi=1';
			a += '&playerapiid=ytPlayer' + ivideo;
		}
		var quality = 'default';
		if (opt.quality){
			if (opt.quality.match(/^small$/i) || opt.quality.match(/^medium$/i) || opt.quality.match(/^large$/i) || opt.quality.match(/^hd720$/i)) {
				quality = opt.quality;
			}
		}
		c.innerHTML = '';
		jQuery('<div id=videoDiv' + ivideo + '>Loading...</div>').appendTo(c);
		arrayOpt['ytPlayer' + ivideo] = {id:'ytPlayer' + ivideo,
																		 vid:vid,
																		 quality:quality,
																		 flg:false
																		};
		var params = { allowScriptAccess: 'always',allowFullScreen:'true', wmode:'opaque' };
		var atts1 = { id: 'ytPlayer' + ivideo};
		var url = SYNC_RES_SERVER + '_modules/js/swfobject.js';
		var tmpid = ivideo;
		jQuery.getScript(url, function(){
			swfobject.embedSWF(PRTCL + '//www.youtube.com' + a,'videoDiv'+tmpid, opt.playerWidth, h, '10', null, null, params, atts1);
		});

	} else if (did.indexOf('simple') > -1) {
		var fvars = '';
		if (typeof(Value)=="undefined" || Value.preview) {
			fvars += 'autoPlay=' + opt.autoPlay
				+ '&autoLoop=' + opt.autoLoop + '&autoNext=' + opt.autoNext;
		}
		fvars += '&feedURL=' + sid;
		if (typeof(opt.quality)!='undefined') fvars += '&quality=' + opt.quality;

		var h = Math.floor(opt.playerWidth / 16 * 9);
		//var swf = 'http://sync3-res.digitalstage.jp/_modules/swf/' + did + '.swf?tm=' + tm;
		var swf = SYNC_RES_SERVER + '_modules/swf/' + did + '.swf?tm=' + tm;
		buf = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'
			+ ' codebase="' + PRTCL + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"';

		buf += ' width="' + opt.playerWidth + '" height="' + h + '" ';
		buf += '>';

		buf += '<param name="movie" value="' + swf + '" />';
		buf += '<param name="allowFullScreen" value="true" />';
		buf += '<param name="allowScriptAccess" value="always" />';
		buf += '<param name="align" value="middle" />';
		buf += '<param name="scale" value="showall" />';
		buf += '<param name="bgcolor" value="#000000" />';
		buf += '<param name="quality" value="high" />';
		buf += '<param name="wmode" value="opaque" />';
		buf += '<param name="flashVars" value="' + fvars + '" />';

		if (!bindobj.ie) {
			buf += '<embed src="' + swf + '" type="application/x-shockwave-flash"'
			buf += ' width="' + opt.playerWidth + '" height="' + h + '" ';

			buf += ' allowFullScreen="true"';
			buf += ' allowScriptAccess="always"';
			buf += ' align="middle"';
			buf += ' scale="showall"';
			buf += ' quality="high"';
			buf += ' bgcolor="#000000"';
			buf += ' wmode="opaque"';
			buf += ' flashVars="' + fvars + '"';
			buf += ' pluginspage="' + PRTCL + '//www.adobe.com/go/getflashplayer_jp"></embed>';
		}

		buf += '</object>';
		buf += '<br /><br />';

	} else {
		var fvars = '';
		if (opt != null && (typeof(Value)=="undefined" || Value.preview)) {
			fvars += 'autoPlay=' + opt.autoPlay
				+ '&autoLoop=' + opt.autoLoop + '&autoNext=' + opt.autoNext;
		}
		fvars += '&feedURL=' + sid;
		if (typeof(opt.quality)!='undefined') fvars += '&quality=' + opt.quality;

		var swf = SYNC_RES_SERVER + '_modules/swf/ytplayer.swf?tm=' + tm;
		buf = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'
			+ ' codebase="' + PRTCL + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"';

		buf += ' width="746" height="430" ';
		buf += '>';

		buf += '<param name="movie" value="' + swf + '" />';
		buf += '<param name="allowFullScreen" value="true" />';
		buf += '<param name="allowScriptAccess" value="always" />';
		buf += '<param name="align" value="middle" />';
		buf += '<param name="scale" value="showall" />';
		buf += '<param name="quality" value="high" />';
		buf += '<param name="wmode" value="transparent" />';
		buf += '<param name="flashVars" value="' + fvars + '" />';

		if (!bindobj.ie) {
			buf += '<embed src="' + swf + '" type="application/x-shockwave-flash"'
			buf += ' width="746" height="430" ';

			buf += ' allowFullScreen="true"';
			buf += ' allowScriptAccess="always"';
			buf += ' align="middle"';
			buf += ' scale="showall"';
			buf += ' quality="high" wmode="transparent"';
			buf += ' flashVars="' + fvars + '"';
			buf += ' pluginspage="' + PRTCL + '//www.adobe.com/go/getflashplayer_jp"></embed>';
		}

		buf += '</object>';
		buf += '<br /><br />';
	}

	if (did != 'standard') {
		c.innerHTML = buf;
	}
	c.style.display = '';
	c.style.textAlign = 'center';

	bdRefresh();
	Bindfooter.set();

}

var Utils = function() {
};
Utils.prototype = {
};

/*******
 * Utils
 ********/
//cにアペンドして、mcを返す
function nineSlice(cls, c) {
	var mc = jQuery('<div class="mc"></div>');
	var mm = jQuery('<div class="mm"></div>').append('<div class="ml"></div>').append('<div class="mr"></div>').append(mc);
	var h3 = jQuery('<div class="' + cls + '"></div>')
		.append('<div class="tl"></div>').append('<div class="tr"></div>').append('<div class="tc"></div>').append(mm);
	h3.append('<div class="bl"></div>').append('<div class="br"></div>').append('<div class="bc"></div>').appendTo(c);
	return mc;
}

function getSkinClass(c) {
	var p = c.parentNode;
	while(true) {
		if (p.tagName && p.tagName=='body') return;
		var cls = p.className;
		if (cls.indexOf('simple')==0 || cls.indexOf('standard')==0) return cls;
		p = p.parentNode;
	}
}

function getYm() {
	var d = new Date();
	d.setDate(1);
	d.setHours(0);
	d.setMinutes(0);
	d.setSeconds(0);
	d.setMilliseconds(0);
	return d;
}

// feed 日付変換
function formatFeedDate(dt) {
	var y = String(dt.getFullYear());
	var m = zeroPad(String(dt.getMonth() + 1));
	var d = zeroPad(String(dt.getDate()));
	var h = zeroPad(String(dt.getHours()));
	var mi = zeroPad(String(dt.getMinutes()));
	var s = zeroPad(String(dt.getSeconds()));
	return y + '-' + m + '-' + d + 'T' + h + ':' + mi + ':' + s + '%2b09:00';
}

// feed 日付解析
function parseFeedDate(s) {
	var local = s.substring(0, s.length - 6);
	var ary = local.split('T');
	var dary = ary[0].split('-');
	var wk = ary[1].split('.');
	var tary = wk[0].split(':');
	var ms = wk[1];
	var o = {
		year: dary[0],
		month: omitZero(dary[1]),
		day: omitZero(dary[2]),
		hour: omitZero(tary[0]),
		min: omitZero(tary[1]),
		sec: omitZero(tary[2]),
		tm: omitZero(tary[0]) + ':' + tary[1]
	};
	o['ymd'] = o.year + zeroPad(o.month) + zeroPad(o.day);
	return o;
}

function zeroPad(s) {
	if (s.length==1) return '0' + s;
	return s;
}

// ゼロ除去。先頭のみ
function omitZero(s) {
	if (s.substring(0, 1) == '0') return s.substring(1);
	return s;
}

function breakToTag(str) {
	rtn = str.replace(/\r\n/ig, '<br />');
	rtn = rtn.replace(/\n/ig, '<br />');
	rtn = rtn.replace(/\r/ig, '<br />');
	return rtn;
}

function bdRefresh() {
	if (typeof(BlockEdit) != 'undefined') {
		BlockEdit.resize();
	}
}

/* オブジェクトコピー */
function objClone(obj) {
	var func = function(){};
	func.prototype = obj;
	return new func;
}

function getByFieldId(id) {
	if (id.indexOf('__')>0) {
		return id.substring(0,id.indexOf('__'));
	}
	return id;
}

function findWord(id,word) {
	res = false;
	if (id.indexOf(word)>=0) {
		res = true;
	}
	return res;
}

function getParameters(params) {

	if (params.indexOf('{')>=0 && params.indexOf('}')>=0) {
		var startidx = params.indexOf('{');
		var endidx = params.indexOf('}');
		option = jQuery.parseJSON(params.substring(startidx,endidx+1));
	}
	return option;
}

function getSyncPartsId() {
	partsId++;
	return 'syncpt-' + String(partsId);
}




var load = function(src, check, next) {
	check = new Function('return !!(' + check + ')');
	if (!check()) {
		var script = document.createElement('script')
		script.src = src;
		document.body.appendChild(script);
		setTimeout(function() {
			if (!check()) setTimeout(arguments.callee, 100);
			else next();
		}, 100);
	}
	else next();
}



/*************
T W I T T E R
*************/
function dispTwitter(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'center';

	opt.theme.shell.background = '#'+opt.theme.shell.background;
	opt.theme.shell.color = '#'+opt.theme.shell.color;
	opt.theme.tweets.background = '#'+opt.theme.tweets.background;
	opt.theme.tweets.color = '#'+opt.theme.tweets.color;
	opt.theme.tweets.links = '#'+opt.theme.tweets.links;

	new TwitterLoader(c, sid, opt).start();

	/*
	//var widgeturl = 'http://twitter.com/javascripts/widgets/widget.js';
	//var widgeturl = 'http://widgets.twimg.com/j/2/widget.js';
	var widgeturl = SYNC_RES_SERVER + '_modules/js/widget.js';
	jQuery.getScript(widgeturl, function(){
		opt.id = 'widget-' + sid + '';
		jQuery('<div id="' + opt.id + '"></div>').appendTo(c);
		new TWTR.Widget(opt).render().setUser(sid).start();
		bdRefresh();
		Bindfooter.set();
	});
	*/
	bdRefresh();
	Bindfooter.set();
}
function TwitterLoader() {
	this.initialize.apply(this, arguments);
}
TwitterLoader.prototype = {
	twid: null,
	opt: null,
	tw: null,
	twuser: null,
	twtmln: null,
	twlist: null,
	running: false,
	waittime: 10000,
	twnum: 0,
	tweetid: 0,
	tweet: [],

	initialize: function(c, sid, opt) {
		c.innerHTML = '';
		c.style.display = '';
		c.style.textAlign = 'left';
		this.twid = sid;
		this.opt = opt;
		this.tw = jQuery('<div><span>loading... </span></div>').appendTo(c);
	},
	start: function() {
		var that = this;
		if(this.tw){
			this.loading();
			this.getTwitter();
			this.waiter();
			this.tw.click(function(e) {
				that.handleIntent(e);
			});
		}
	},
	loading: function(){
		this.tw.html("<span>Loading Twitter </span>");
		var wimg = new Image();
		wimg.src = PRTCL + '//twitter-widgets.s3.amazonaws.com/j/1/spinner.gif';
		this.tw.append(wimg);

		bdRefresh();
		Bindfooter.set();
	},
	getTwitter: function(){
		var that = this;
		var userurl = PRTCL + '//api.twitter.com/1/users/show.json?screen_name='+this.twid;
		jQuery.getJSON(userurl + '&callback=?', jQuery.fnbind(this, this.userCallback));
	},
	userCallback: function(json) {
		if (json) {
			if (json.protected == true) {
				this.tw.html("<span>Twitter protected </span>");
				this.twuser = {'statuses_count':0};
			} else {
				this.tw.html("");
				this.twuser = json;
				this.conectaTwitter(0);
			}
			bdRefresh();
			Bindfooter.set();
		}
		if (this.twuser.statuses_count > 0) {
			var that = this;
			this.tlTimer = setInterval(function() {
				clearInterval(that.tlTimer);
				that.tlLoad();
			}, 500);
		}
	},
	tlLoad: function() {
		var tlurl = PRTCL + '//api.twitter.com/1/statuses/user_timeline.json?screen_name='+this.twid;
			tlurl += '&count='+this.opt.rpp+'&include_rts=1';
		var that = this;
		jQuery.ajax({
			url: tlurl,
			type: 'GET',
			dataType: 'jsonp',
			//D dataType: 'json',
			timeout: 2000,
			async: true,
			error: function() {
				that.tw.html("<span>Twitter Error </span>");
			},
			success: function(twjson){
				if (twjson) {
					that.twtmln = (twjson.slice(0,that.opt.rpp)).reverse();
					that.conectaTwitter(1);
					if(!that.running) {
						that.temporizador();
					}
				} else {
					that.tw.html("<span>Twitter Error </span>");
				}
			}
		});
	},
	tlCallback: function(json) {
	},
	waiter: function(){
		var that = this;
		if(!that.twtmln){
			setTimeout(function() {
				if(!that.twtmln){
					that.tw.html("<span>Cannot get Tweet Data </span>");
					bdRefresh();
					Bindfooter.set();
				}
			},that.waittime);
		}
	},
	temporizador: function(){
		var that = this;
		this.running=true;
		if (that.opt.features.live) {
			if (that.twnum<that.opt.rpp) {
				setTimeout(function() {
					that.conectaTwitter(1);
					that.temporizador();
				},that.opt.interval);
			}
			else {
				bdRefresh();
				Bindfooter.set();
			}
		}
		else {
			bdRefresh();
			Bindfooter.set();
		}
	},
	textFormat: function(texto){
		var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
		texto = texto.replace(exp,"<a href='$1' class='twlink' target='_blank'>$1</a>");
		var exp = /[\@]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"@<a href='http://twitter.com/intent/user?screen_name=$1' class='twlink' target='_blank'>$1</a>");
		var exp = /[\#]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"<a href='http://twitter.com/search?q=%23$1' class='twlink' target='_blank'>#$1</a>");
		return texto;
	},
	timeAgo: function(dateString) {
		var rightNow = new Date();
		var then = new Date(dateString);
		if (navigator.userAgent.match(/MSIE\s([^;]*)/)) {
			// IE can't parse these crazy Ruby dates
			then = Date.parse(dateString.replace(/( \+)/, ' UTC$1'));
		}
		var diff = rightNow - then;
		var second = 1000,
		minute = second * 60,
		hour = minute * 60,
		day = hour * 24,
		week = day * 7;
		if (isNaN(diff) || diff < 0) {
			return ""; // return blank string if unknown
		}
		if (diff < second * 7) {
		// within 7 seconds
			return "right now";
		}
		if (diff < minute) {
			return Math.floor(diff / second) + " seconds ago";
		}
		if (diff < minute * 2) {
			return "about 1 minute ago";
		}
		if (diff < hour) {
			return Math.floor(diff / minute) + " minutes ago";
		}
		if (diff < hour * 2) {
			return "about 1 hour ago";
		}
		if (diff < day) {
			return  Math.floor(diff / hour) + " hours ago";
		}
		if (diff > day && diff < day * 2) {
			return "yesterday";
		}
		if (diff < day * 365) {
			return Math.floor(diff / day) + " days ago";
		}
		else {
			return "over a year ago";
		}
	},
	conectaTwitter: function(e){
		var that = this;
		if(e==0) {
			var item = {'user':that.twuser};
			//var item = that.twtmln[0];
			that.tw.html("")
				.attr('style','width: '+that.opt.width+'px;'
					+'position: relative;'
					+'font-size: 12px!important;'
					+'font-family: "lucida grande",lucida,tahoma,helvetica,arial,sans-serif!important;'
					+'text-align: left;'
					+'background: '+that.opt.theme.shell.background+';'
					+'color: '+that.opt.theme.shell.color+';'
					+'padding: 1px;'
					+'-webkit-border-radius: 5px;'
					+'-moz-border-radius: 5px;'
					+'border-radius: 5px;');

			// head
			var head = jQuery("<div></div>")
				.attr('style','margin:5px;')
				.appendTo(that.tw);
			var twurl = PRTCL + '//twitter.com/intent/user?screen_name='+item.user.screen_name;
			var upico = "<img src='"+item.user.profile_image_url+"' alt='"+item.user.screen_name+"' style='float:left;padding:4px;width:32px;height:32px;vertical-align:top;text-align:left;' />";
			var upimg = jQuery("<a href='"+twurl+"' border='0' style='border:none;' target='_blank'>"+upico+"</a>");
			var uname = jQuery("<div style='color:"+that.opt.theme.shell.color+";padding: 2px 0px 0px 48px;font-size:12px;vertical-align:top;text-align:left;'>"+item.user.name+"</div>");
			var auser = jQuery("<a href='"+twurl+"' target='_blank'>"+item.user.screen_name+"</a>")
				.attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;')
				.hover(
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:underline;background:transparent;border:none;');
					},
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;');
					});
			var utwid = jQuery("<div style='padding: 0px 0px 2px 48px;font-size:16px;font-weight:bold;vertical-align:top;text-align:left;'></div>");
			utwid.append(auser);

			head.append(upimg);
			head.append(uname);
			head.append(utwid);
			head.append(jQuery("<span style='clear:both;'></span>"))

			// body
			that.twlist = jQuery("<div></div>")
				.attr('style','margin:0px;padding:0px;background:'+that.opt.theme.tweets.background+';clear:both;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;')
				.appendTo(that.tw);
			if (that.opt.features.scrollbar) {
				that.twlist.css("height",that.opt.height+"px");
				that.twlist.css("overflow-y","auto");
			}
			else if (that.opt.features.live) {
				that.twlist.css("height",that.opt.height+"px");
				that.twlist.css("overflow-y","hidden")
			}

			// foot
			var alogo = jQuery('<a href="http://twitter.com/" target="_blank"><img height="15" src="' + SYNC_RES_SERVER + '_modules/images/twitter-widget-logo.png" style="float:left;" /></a>')
				.attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;')
				.hover(
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:underline;background:transparent;border:none;');
					},
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;');
					});
			var ajoin = jQuery("<a href='http://twitter.com/"+item.user.screen_name+"' target='_blank'>Join the conversation</a>")
				.attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;text-align:right;')
				.hover(
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:underline;background:transparent;border:none;');
					},
					function () {
						jQuery(this).attr('style','color:'+that.opt.theme.shell.color+';text-decoration:none;background:transparent;border:none;');
					});
			var utwid = jQuery("<div style='font-size:10px;vertical-align:bottom;text-align:right;'></div>").append(ajoin);
			jQuery("<div></div>")
				.attr('style','margin:0;padding:10px;vertical-align:bottom;clear:both;')
				.append(alogo)
				.append(utwid)
				.append(jQuery("<span style='clear:both;'></span>"))
				.appendTo(that.tw)
		}
		if(e!=0) {
			// tweets
			var itw = 0;
			jQuery.each(that.twtmln,function(i,item) {
				// one tweet
				if ((itw==0) && (that.opt.features.live==false || (that.twnum<that.opt.rpp && item.id_str>that.tweetid))){

					if (item.text != "undefined") {
						var tmlink = "http://twitter.com/"+item.user.screen_name+"/status/"+item.id_str;
						var rplink = "http://twitter.com/intent/tweet?in_reply_to="+item.id_str;
						var rtlink = "http://twitter.com/intent/retweet?tweet_id="+item.id_str;
						var fvlink = "http://twitter.com/intent/favorite?tweet_id="+item.id_str;
						var strtweet = that.textFormat(item.text);
						var mHTML="<div style='word-break:break-all;overflow:hidden'>"+strtweet+"</div>";
						mHTML+="<div style='word-break:break-all;font-size:10px'>";
						mHTML+="<a class='twtr-timestamp' href='" + tmlink + "' target='_blank'>"+that.timeAgo(item.created_at)+"</a>";
						mHTML+=" · <a class='twtr-reply' href='"+rplink+"' target='_blank'>reply</a>";
						mHTML+=" · <a class='twtr-rt' href='"+rtlink+"' target='_blank'>retweet</a>";
						mHTML+=" · <a class='twtr-fav' href='"+fvlink+"' target='_blank'>favorite</a>";
						mHTML+="</div>";
						var twclass = 'tw_'+item.user.screen_name+(new Date/1);
						that.tweet[that.twnum] = jQuery("<div class='"+twclass+"'></div>")
							.html(mHTML)
							.attr('style','color:'+that.opt.theme.tweets.color+';line-height:1.1;list-style:none;background:transparent;margin:4px;padding:4px;border-bottom:dotted 1px '+that.opt.theme.tweets.color+';clear:both;opacity:0;')
							.hide()
							.prependTo(that.twlist);
						jQuery('.'+twclass+' a').attr('style','color:'+that.opt.theme.tweets.links+';text-decoration:none;background:transparent;border:none;');
						jQuery('.'+twclass+' a').hover(
							function () {
								jQuery(this).attr('style','color:'+that.opt.theme.tweets.links+';text-decoration:underline;background:transparent;border:none;');
							},
							function () {
								jQuery(this).attr('style','color:'+that.opt.theme.tweets.links+';text-decoration:none;background:transparent;border:none;');
							}
						);
						that.tweet[that.twnum].fadeTo(0, 0);
						that.tweet[that.twnum].slideDown(1000);
						that.tweet[that.twnum].show();
						that.tweet[that.twnum].fadeTo(500, 1);
						that.tweetid=item.id_str;
						that.twnum++;
						if (that.opt.features.live) {
							itw++;
						}
					}
				}
			});
		}
	},
	handleIntent: function(e) {
		var intentRegex = /twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,
		shortIntents = { tweet: true, retweet:true, favorite:true },
			windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes',
			winHeight = screen.height,
			winWidth = screen.width;

		e = e || window.event;
		var target = e.target || e.srcElement,
		m, width, height, left, top;
		while (target && target.nodeName.toLowerCase() !== 'a') {
			target = target.parentNode;
		}
		if (target && target.nodeName.toLowerCase() === 'a' && target.href) {
			m = target.href.match(intentRegex);
			if (m) {
				width = 550;
				height = (m[2] in shortIntents) ? 420 : 560;
				left = Math.round((winWidth / 2) - (width / 2));
				top = 0;
				if (winHeight > height) {
					top = Math.round((winHeight / 2) - (height / 2));
				}
				window.open(target.href, 'intent', windowOptions + ',width=' + width + ',height=' + height + ',left=' + left + ',top=' + top);
				e.returnValue = false;
				e.preventDefault && e.preventDefault();
			}
		}
	}
}


/*******
 * Google Translate
 ********/
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'ja'
  }, 'google_translate_element');
}
function dispTranslate(c, sid) {
	if (jQuery("#google_translate_element").size() >= 1) return;
	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'left';

	var div = jQuery('<div id="google_translate_element"></div>');
	jQuery(c).append(div);
	if (bindobj.ie && location.protocol == 'file:') {
		div.append('<div class="kakomi"><p class="kakomi ac">サイトをアップロードすると、ここに翻訳パーツが表示されます。</p></div>');
	} else {
		jQuery.getScript(PRTCL + "//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit", function(){
			div.find("a").attr('style','text-decoration:none;background:transparent;border:none;');
			div.find("a").hover(
				function () {
					jQuery(this).attr('style','text-decoration:none;background:transparent;border:none;');
				},
				function () {
					jQuery(this).attr('style','text-decoration:none;background:transparent;border:none;');
				}
			);
		});
	}
	bdRefresh();
	Bindfooter.set();
}

/*******
 * Site Search
 ********/
function dispSearch(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'center';

	var buf = '';
	if (opt.designid == 'yahoo01') {
		buf += '<div class="search-div-normal">';
		buf += '<form action="http://search.yahoo.co.jp/search" method="get" target="_self" style="margin:0;padding:0;">';
		buf += '<p style="margin:0;padding:0;">';
		buf += '<a href="http://www.yahoo.co.jp/" target="_blank">';
		buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/ysearch_logo_85_22.gif" alt="Yahoo! JAPAN" style="border:none;vertical-align:middle;padding:0;border:0;" width="85" height="22">';
		buf += '</a>';
		buf += '<input type="text" name="p" id="p" maxlength="2048" size="28" style="font-size:12pt;margin:0 3px;width:60%;border-width:1px 1px 1px 1px;border-style:solid;vertical-align:middle" />';
		buf += '<input type="hidden" name="fr" value="ysiw">';
		buf += '<input type="hidden" name="ei" value="utf-8">';
		buf += '<input name="vs" type="hidden" value="' + opt.domeignval + '">';
		buf += '<input type="submit" value="検索" style="vertical-align:middle">';
		buf += '</p>';
		buf += '</form>';
		buf += '</div>';
	} else if (opt.designid == 'yahoo02') {
		buf += '<div class="search-div-short">';
		buf += '<form method="get" action="http://search.yahoo.co.jp/search" target="_self" style="margin:0;padding:0;">';
//		buf +='	<h4 style="font-size:10pt;font-weight:normal;margin:0 0 0 0px;text-align:left">このサイト内を検索</h4>';
		buf += '<p style="margin:0;padding:0;">';
		buf += '<a href="http://www.yahoo.co.jp/" target="_blank">';
		buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/yjapan_logo_110_29.gif" alt="Yahoo! JAPAN" style="border:none;padding:0;" width="110" height="29">';
		buf += '</a>';
		buf += '</p>';
		buf += '<p style="margin:0;padding:2px 0 0 0;">';
		buf += '<input type="text" name="p" id="p" size="20" maxlength="2048" style="font-size:12pt;margin:0 3px;width:140px;border-width:1px 1px 1px 1px;border-style:solid;">';
		buf += '</p>';
		buf += '<p style="margin:0;padding:0 0 2px 0;">';
		buf += '<input type="hidden" name="fr" value="ysin">';
		buf += '<input type="hidden" name="ei" value="utf-8">';
		buf += '<input type="hidden" name="vs" value="' + opt.domeignval + '">';
		buf += '<input type="submit" value="検索" style="vertical-align:middle;margin:5px 0px;">';
		buf += '</p>';
		buf += '</form>';
		buf += '</div>';

	} else if (opt.designid == 'google01') {
		buf += '<div class="search-div-normal">';
		buf += '<form action="http://www.google.co.jp/search" method="get" target="_self" style="margin:0;padding:0;">';
//		buf +='	<h4 style="font-size:10pt;font-weight:normal;margin:0 0 0 0px;text-align:left">このサイト内を検索</h4>';
		buf += '<p style="margin:0;padding:0;">';
		buf += '<a href="http://www.google.co.jp/" target="_blank">';
		buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/google-Logo_40wht.gif" alt="Google" style="border:none;vertical-align:middle;padding:0;border:0;" width="85" height="36">';
		buf += '</a>';
		buf += '<input type="text" name="q" id="q" maxlength="2048" size="28" style="font-size:12pt;margin:0 3px;width:60%;border-width:1px 1px 1px 1px;border-style:solid;vertical-align:middle" />';
		buf += '<input type="hidden" name="ie" value="UTF-8">';
		buf += '<input type="hidden" name="oe" value="UTF-8">';
		buf += '<input type="hidden" name="hl" value="ja">';
		buf += '<input type=hidden name=domains value="' + opt.domeignval + '">';
		buf += '<input type=hidden  name=sitesearch value="' + opt.domeignval + '">';
		buf += '<input type="submit" name="btnG" value="検索" style="vertical-align:middle">';
		buf += '</p>';
		buf += '</form>';
		buf += '</div>';
	} else if (opt.designid == 'google02') {
		buf += '<div class="search-div-short">';
		buf += '<form method="get" action="http://www.google.co.jp/search" target="_self" style="margin:0;padding:0;">';
		buf += '<p style="margin:0;padding:0;">';
		buf += '<a href="http://www.google.co.jp/" target="_blank">';
		buf += '<img src="' + SYNC_RES_SERVER + '_modules/images/google-Logo_40wht.gif" alt="Yahoo! JAPAN" style="border:none;padding:0;margin:0" width="85" height="36">';
		buf += '</a>';
		buf += '</p>';
		buf += '<p style="margin:0;padding:2px 0 0 0;">';
		buf += '<input type="text" name="q" id="q" maxlength="2048" size="20" style="font-size:12pt;margin:0 3px;width:140px;border-width:1px 1px 1px 1px;border-style:solid;">';
		buf += '</p>';
		buf += '<p style="margin:0;padding:0 0 2px 0;">';
		buf += '<input type="hidden" name="ie" value="UTF-8">';
		buf += '<input type="hidden" name="oe" value="UTF-8">';
		buf += '<input type="hidden" name="hl" value="ja">';
		buf += '<input type=hidden name=domains value="' + opt.domeignval + '">';
		buf += '<input type=hidden  name=sitesearch value="' + opt.domeignval + '">';
		buf += '<input type="submit" name="btnG" value="検索" style="vertical-align:middle;margin:5px 0px;">';
		buf += '</p>';
		buf += '</form>';
		buf += '</div>';

	}
//	c.innerHTML = buf;
	jQuery(buf).appendTo(c);

	var txtid = '';
	if (opt.designid == 'yahoo01' || opt.designid == 'yahoo02') {
		txtid = '#p';
	} else if (opt.designid == 'google01' || opt.designid == 'google02') {
		txtid = '#q';
	}
	if(jQuery(txtid,c).val()!=''){
		jQuery(txtid,c).addClass('search-nohint');
	}else{
		jQuery(txtid,c).addClass('search-hint');
	}
	jQuery(txtid,c).focus(function(){
		jQuery(txtid,c).removeClass('search-hint').addClass('search-nohint');
	}).blur(function(){
		if(jQuery(txtid,c).val()=='') jQuery(txtid,c).removeClass('search-nohint').addClass('search-hint');
	});

	bdRefresh();
	Bindfooter.set();
}

/*************
U S T R E A M
*************/
function dispUstream(c, sid, did, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	//var locale = 'ja_JP';
	var locale = 'en_US';

	var buf = '';
	switch(did){
	case 'channel-live':
		buf+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
		buf+=' width="'+opt.width+'" height="'+opt.height+'" id="'+opt.prmid+'">';
		buf+='<param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid='+opt.id+'&amp;locale='+locale+'"/>';
		buf+='<param name="allowfullscreen" value="true"/>';
		buf+='<param name="allowscriptaccess" value="always"/>';
		buf+='<param name="wmode" value="opaque" />';
		buf+='<param name="movie" value="'+opt.src+'"/>';
		buf+='<embed flashvars="autoplay=false&amp;brand=embed&amp;cid='+opt.id+'&amp;locale='+locale+'"';
		buf+=' width="'+opt.width+'" height="'+opt.height+'"';
		buf+=' allowfullscreen="true" allowscriptaccess="always"';
		buf+=' id="'+opt.prmid+'" name="'+opt.prmnm+'"';
		buf+=' src="'+opt.src+'"';
		buf+=' type="application/x-shockwave-flash" />';
		buf+='</object>';
		break;
	case 'channel-media':
		buf+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
		buf+=' width="'+opt.width+'" height="'+opt.height+'" id="'+opt.prmid+'">';
		buf+='<param name="flashvars" value="autoplay=false&amp;brand=embed&amp;cid='+opt.id+'&amp;locale='+locale+'"/>';
		buf+='<param name="bgcolor" value="#000000"/>';
		buf+='<param name="allowfullscreen" value="true"/>';
		buf+='<param name="allowscriptaccess" value="always"/>';
		buf+='<param name="wmode" value="opaque" />';
		buf+='<param name="movie" value="http://www.ustream.tv/flash/mediastream/'+opt.id+'"/>';
		buf+='<embed flashvars="autoplay=false&amp;brand=embed&amp;cid='+opt.id+'&amp;locale='+locale+'"';
		buf+=' bgcolor="#000000"';
		buf+=' width="'+opt.width+'"';
		buf+=' height="'+opt.height+'"';
		buf+=' allowfullscreen="true"';
		buf+=' allowscriptaccess="always"';
		buf+=' id="'+opt.prmid+'"';
		buf+=' name="'+opt.prmnm+'"';
		buf+=' src="http://www.ustream.tv/flash/mediastream/'+opt.id+'"';
		buf+=' type="application/x-shockwave-flash" />';
		buf+='</object>';
		break;
	case 'channel-social':
	case 'recorded-social':
		buf+='<iframe width="'+opt.width+'" height="'+opt.height+'" scrolling="no" frameborder="0"';
		buf+='style="border: 0px none transparent;" src="http://www.ustream.tv/socialstream/'+opt.id+'"></iframe>';
		break;
	case 'recorded-video':
		buf+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"';
		buf+=' width="'+opt.width+'" height="'+opt.height+'" id="'+opt.prmid+'" name="'+opt.prmnm+'">';
		buf+='<param name="flashvars" value="autoplay=false" />';
		buf+='<param name="allowfullscreen" value="true" />';
		buf+='<param name="allowscriptaccess" value="always" />';
		buf+='<param name="wmode" value="opaque" />';
		buf+='<param name="src" value="http://www.ustream.tv/flash/video/'+opt.id+'"/>';
		buf+='<embed flashvars="autoplay=false"';
		buf+=' width="'+opt.width+'"';
		buf+=' height="'+opt.height+'"';
		buf+=' allowfullscreen="true"';
		buf+=' allowscriptaccess="always"';
		buf+=' id="'+opt.prmid+'"';
		buf+=' name="'+opt.prmnm+'"';
		buf+=' src="http://www.ustream.tv/flash/video/'+opt.id+'"';
		buf+=' type="application/x-shockwave-flash" />';
		buf+='</object>';
 		break;
 	default:
 		break;
 	}

	c.innerHTML = buf;
	c.style.display = '';
	c.style.textAlign = 'center';

	bdRefresh();
	Bindfooter.set();

}


/*******
 * Like Buttom
 ********/
function dispLikeButtom(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;
	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'left';

	new LikeBtnLoader(c, sid, opt).start();

	bdRefresh();
	Bindfooter.set();
}
function LikeBtnLoader() {
	this.initialize.apply(this, arguments);
}
LikeBtnLoader.prototype = {
	initialize: function(c, sid, opt) {
		c.innerHTML = '';
		this.area = jQuery(c);
		this.sid = sid;
		this.opt = opt;

		var div = jQuery('<div class="likebtn_area" style="display:inline-block;"></div>');
		if (opt.twitter) {
			div.append(jQuery('<div class="tw_likebtn" style="float:left; margin-right:8px"></div>'));
		}
		if (opt.facebook) {
			div.append(jQuery('<div class="fb_likebtn" style="float:left; margin-right:8px"></div>'));
		}
		if (opt.mixi) {
			div.append(jQuery('<div class="mx_likebtn" style="float:left; margin-right:10px"></div>'));
		}
		if (opt.google) {
			if (navigator.userAgent.indexOf('Win') >= 0 &&
					location.href.indexOf('file:') == 0){
				div.append("<img src='"+SYNC5_SERVER+"_modules/images/likebtn/gplus.png'>");
			}else{
				div.append(jQuery('<div class="gp_likebtn" style="float:left; margin-right:8px"></div>'));
			}
		}
		div.append('<div style="clear:both;"></div>');
		jQuery(c).append(div);
	},
	start: function() {
		var that = this;
		(function() {
			var url = SYNC_RES_SERVER + '_modules/js/jquery.socialbutton.js';
			jQuery.getScript(url, function(){
				if (that.opt.twitter) {
					that.area.find('.tw_likebtn').socialbutton('twitter', {button: 'horizontal'})
				}
				if (that.opt.facebook) {
					that.area.find('.fb_likebtn').socialbutton('facebook_like',{button: 'button_count'});
				}
				if (that.opt.mixi) {
					that.area.find('.mx_likebtn').socialbutton('mixi_check', {key: that.opt.mixikey});
				}
				if (that.opt.google) {
					that.area.find('.gp_likebtn').socialbutton('google_plusone',{size: 'medium'});
				}
				that.area.find("a").attr('style','text-decoration:none;background:transparent;border:none;');
				that.area.find("a").hover(
					function () {
						jQuery(this).attr('style','text-decoration:none;background:transparent;border:none;');
					},
					function () {
						jQuery(this).attr('style','text-decoration:none;background:transparent;border:none;');
					}
				);
				bdRefresh();
				Bindfooter.set();
			});
		}());
	}
}

/*******
 * twitter follow badge
 ********/
function dispTwitbatch(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;
	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'left';
	jQuery.getScript('http://www.go2web20.net/twitterfollowbadge/1.0/badge.js', function(){
		tfb.account = opt.account;
		tfb.label = opt.label;
		tfb.color = '#' + opt.color;
		tfb.side = opt.side;
		tfb.top = opt.top;
		tfb.showbadge();

		bdRefresh();
		Bindfooter.set();
	});
	bdRefresh();
	Bindfooter.set();
}


/*******
 * Facebook Comments
 ********/
function dispFacebook(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	//c.innerHTML = '';
	if (c.hasChildNodes()) {
		for (i=c.childNodes.length;i>0;i--) {
			if (c.childNodes[i-1].nodeName == '#text') {
				c.removeChild(c.childNodes[i-1]);
			}
		}
	}
	c.style.display = '';
	c.style.textAlign = 'left';

	new FacebookLoader(c, opt).start();

	bdRefresh();
	Bindfooter.set();
}
function FacebookLoader() {
	this.initialize.apply(this, arguments);
}
FacebookLoader.prototype = {
	initialize: function(c,opt) {
		//c.innerHTML = '';
		this.target = opt.commentTarget;
		this.pageUrl = opt.pageUrl;
		this.toukouNum = opt.toukouNum;
		this.bbsWidth = opt.bbsWidth;
		this.colorType = opt.colorType;
		//必要なタグ
		//jQuery("<div id='fb-root'></div>").appendTo(c);
		this.tw = jQuery('<div>Making Facebook Comments </div>').appendTo(c);
	},
	loading: function(){
		this.tw.html("<div>Loading Facebook </div>");
		var wimg = new Image();
		wimg.src = PRTCL + '//twitter-widgets.s3.amazonaws.com/j/1/spinner.gif';
		this.tw.append(wimg);
	},
	start: function() {
		this.loading();
		window.fbAsyncInit = function() {
			FB.init({
				status : true, // check login status
				cookie : true, // enable cookies to allow the server to access the session
				xfbml  : true  // parse XFBML
			});
		};
		(function() {
//			var e = document.createElement("script");
//			e.src = "http://connect.facebook.net/ja_JP/all.js";
			//e.src = "http://static.ak.fbcdn.net/connect/en_US/core.debug.js";
//			e.async = true;
//			document.getElementById("fb-root").appendChild(e);
		}());

		if(this.tw){
			var TYPE_URL_TARGET = 'pageUrl';
			var urlOp = '';
			//if(this.pageUrl != ''){
			if (this.target == TYPE_URL_TARGET){
				//pageUrlのある場合
				urlOp = " href='" + this.pageUrl +"'";
			}else{
				//pageUrlの無い場合
				urlOp = " href='" + location.href +"'";
			}
			if (navigator.userAgent.indexOf('Win') >= 0 &&
					location.href.indexOf('file:') == 0){
				this.tw.html("<div class='kakomi'><p class='kakomi ac'>サイトをアップロードすると、ここにFacebook Commentsパーツが表示されます。</p></div>");
			}else{
				this.tw.html("<fb:comments"+ urlOp +" num_posts='"+this.toukouNum+"' width='"+this.bbsWidth+"' colorscheme='"+this.colorType+"'></fb:comments>");
			}
		}
	}
}

/*******
 * Disqus Comments
 ********/
function dispDisqus(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	c.innerHTML = '';
	c.style.display = '';
	c.style.textAlign = 'left';

	new DisqusLoader(c, opt.shortname).start();

	bdRefresh();
	Bindfooter.set();
}
function DisqusLoader() {
	this.initialize.apply(this, arguments);
}
DisqusLoader.prototype = {
	initialize: function(c,shortname) {
		c.innerHTML = '';
		this.shortname = shortname;
		this.tw = jQuery('<div><span>Making Disqus Comments </span></div>').appendTo(c);
	},
	loading: function(){
		this.tw.html("<span>Loading Disqus </span>");
		var wimg = new Image();
		wimg.src = PRTCL + '//twitter-widgets.s3.amazonaws.com/j/1/spinner.gif';
		this.tw.append(wimg);
	},
	start: function() {
		this.loading();

		if(this.tw){
			//testing the system on an inaccessible website
			var dev = '';
			if(DISQUS_LOCAL_TEST){
				dev = "var disqus_developer = 1;";
			}
			if (navigator.userAgent.indexOf('Win') >= 0 &&
					location.href.indexOf('file:') == 0){
				this.tw.html("<div class='kakomi'><p class='kakomi ac'>サイトをアップロードすると、ここにDisqusパーツが表示されます。</p></div>");
			}else{
				var disqus_str= "<div id='disqus_thread'></div>";
				disqus_str += "<script type='text/javascript'>";
				disqus_str += " var disqus_shortname = '"+this.shortname+"';";
				disqus_str += dev;
				disqus_str += "(function() {";
				disqus_str += "var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;";
				disqus_str += "dsq.src = '" + PRTCL + "//' + disqus_shortname + '.disqus.com/embed.js';";
				disqus_str += "(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);";
				disqus_str += "})();";
				disqus_str += "</script>";
				disqus_str += "<noscript>Please enable JavaScript to view the <a href='http://disqus.com/?ref_noscript'>comments powered by Disqus.</a></noscript>";
				disqus_str += "<a href='http://disqus.com' class='dsq-brlink'>blog comments powered by <span class='logo-disqus'>Disqus</span></a>";
				this.tw.html(disqus_str);
			}
		}
	}
}

/*******
 * Facebook Likebox
 ********/
function dispLikebox(c, sid, opt) {
	if (c.innerHTML.substring(0, 1) == '<') return;

	jQuery(c).text('');
	c.style.display = '';
	c.style.textAlign = 'left';

	new LikeboxLoader(c, opt).start();

	bdRefresh();
	Bindfooter.set();
}
function LikeboxLoader(likeBox,followConfig) {
	this.initialize.apply(this,arguments);
}
LikeboxLoader.prototype = {
	initialize: function(c,followConfig) {
		//c.innerHTML = '';
		this.facebookPageUrl = followConfig.facebookPageUrl;
		this.boxWidth = followConfig.boxWidth;
		this.colorType = followConfig.colorType;
		this.dispFace = followConfig.dispFace;
		this.dispUpdate = followConfig.dispUpdate;
		this.dispHeader = followConfig.dispHeader;
		//必要なタグ
		//jQuery("<div id='fb-root'></div>").appendTo(c);
		this.tw = jQuery('<div>Making Facebook LikeBox </div>').appendTo(c);
	},
	loading: function(){
		this.tw.html("<div>Loading Facebook </div>");
		var wimg = new Image();
		wimg.src = PRTCL + '//twitter-widgets.s3.amazonaws.com/j/1/spinner.gif';
		this.tw.append(wimg);
	},
	start: function() {
		this.loading();
		window.fbAsyncInit = function() {
			FB.init({"appId":113869198637480,"xfbml":true});
			if (window.onloadRegister) {
				onloadRegister(function() {
					if (window.Arbiter) {Arbiter.inform("connect_sdk_loaded");
					}
				});
			}
		};(function() {
			var e = document.createElement("script");
			e.src = PRTCL + "//connect.facebook.net/ja_JP/all.js";
			//e.src = "http://static.ak.fbcdn.net/connect/en_US/core.debug.js";
			e.async = true;
			document.getElementById("fb-root").appendChild(e);
		}());

		if(this.tw){
			if (navigator.userAgent.indexOf('Win') >= 0 &&
					location.href.indexOf('file:') == 0){
				this.tw.html("<div class='kakomi'><p class='kakomi ac'>サイトをアップロードすると、ここにFacebook Likeboxパーツが表示されます。</p></div>");
			}else{
				this.tw.html("<fb:like-box href='"+this.facebookPageUrl+"' width="+this.boxWidth+"' colorscheme='"+this.colorType+"'  show_faces='"+this.dispFace+"' border_color=''  stream='"+this.dispUpdate+"' header='"+this.dispHeader+"'></fb:like-box>");
			}
		}
	}
}
