// StyleInit
document.write('\
<style type="text/css">\
table.mainitembox td.body {\
	visibility: hidden;\
}\
table.mainitembox td.body div {\
	line-height: 1.5em;\
}\
table.mainitembox td.body div.hid {\
	max-height: 15.0em;\
	_height: 15.0em;\
	overflow: hidden;\
}\
table.mainitembox td.body div#dummy {\
	visibility: hidden;\
}\
</style>\
');

var _emptyRow = false;
if (navigator.userAgent.toLowerCase().match(/msie (\d\.\d+)/)) {
	if (RegExp.$1 <= 7)
		_emptyRow = true;
}


$.fn.expander = function(options) {

	// 設定の初期化
	options = options || {};

	var _execFunc;

	// 行指定の場合
	if (options.line) {
		_execFunc = limitLine;
		options.limit = null;

	// 文字数185の場合、10行指定とする
	} else if (options.limit == 185) {

		_execFunc = limitLine;
		options.line  = 10;
		options.limit = null;

	// 文字数指定の場合
	} else {
		if (!options.limit) {
			options.limit = 100;
		}

		_execFunc = limitDefault;
		options.line = null;
	}

	if (!options.expTxt)
		options.expTxt = '続きを読む';
	if (!options.preTxt)
		options.preTxt = '';
	if (!options.extTxt)
		options.extTxt = '&nbsp;&#8250;';
	if (!options.block)
		options.block = 'p';
	if (!options.blockCls)
		options.blockCls = 'continue';

	//debugOption(options);

	// 件数分Loop
	this.each(function() {
		_execFunc(this);
	});

	// 行数による制御
	function limitLine(target) {
		var _div, _wrap, _a, _dummy;
		var _txt = $(target).html() + '';
		var _hid = false;

		var _dummyRow = _emptyRow?'':'l';

		var _h  = $(target).height();

		_dummy = $('<div id="dummy"></div>');

		for (var i=0; i<options.line; i++)
			if (i==0)
				_dummy.append(_dummyRow);
			else
				_dummy.append('<br>' + _dummyRow);

		$(target).append(_dummy);
		if (_h > _dummy.height())
			_hid = true;

		//alert(_h + ' :: ' + _dummy.height() + ' :: ' + _dummy.innerHeight());
		_dummy.remove();
		if (_hid) {
			_div = $('<div class="hid"></div>');
			_div.html(_txt);

			_a = $('<a>').attr('href', 'javascript:void(0);');
			_a.html(options.preTxt + options.expTxt + options.extTxt);
			_a.click(function(e) {
				$('div.hid', target).attr('class', '');
				$('div.detail', target).css('display', 'none');
			});

			_wrap = $('<' + options.block + '>').attr('class', options.blockCls);
			_wrap.append(_a);

			$(target).empty();
			$(target).append(_div);
			$(target).append(_wrap);
		}

		$(target).css('visibility', 'visible');
	}

	// 文字数による制御（Default)
	function limitDefault(target) {
		var _txtNone   = trim($(target).text()) + '';
		var _txt       = trim($(target).html()) + ''; // 元データ

		_txtNoen = _txtNone.replace(/(\r\n|\r|\n)/ig, '');
		_txt = _txt.replace(/<(br|br \/)>/ig, '<br>');
		_txt = _txt.replace(/(\r\n|\r|\n)/ig, '');

		var _opn  = '';
		var _hid  = '';
		var _wrap = '';
		var _a    = '';
		var _div  = '';

		var _brOnlyTxt = '';
		var _brTempTxt = '';
		var _brList;
		var _count=0;

		// 文字数が指定されて文字数を超えている場合のみ処理する
		if (_txtNone.length > options.limit) {

			// BRタグのみを残したテキストを取得
			_brList = _txt.split('<br>');

			for (var i=0; i<_brList.length; i++) {

				if (_brOnlyTxt.length > 0)
					_brOnlyTxt += '<br>';

				_brTempTxt = _brList[i].replace(/<[^<]+>/g, '');
//					_brTempTxt = trim(_brTempTxt);

				if ((_count + _brTempTxt.length) > options.limit) {
					_brOnlyTxt += _brTempTxt.substr(0, options.limit-_count-1);
					break;
				} else {

					_brOnlyTxt += _brTempTxt;
					_count     += _brTempTxt.length;
				}
			}

			_a = $('<a>').attr('href', 'javascript:void(0);');
			_a.html(options.preTxt + options.expTxt + options.extTxt);
			_a.click(function(e) {
				$('.expOpn', $(target).parent().parent().parent()).css('display', 'none');
				$('.expHid', $(target).parent().parent().parent()).css('display', 'block');
			});
			_wrap = $('<' + options.block + '>').attr('class', options.blockCls);
			_wrap.append(_a);

			_opn = $('<p>').attr('class', 'expOpn');
			_opn.append(_brOnlyTxt);
			_opn.append(_wrap);

			_hid = $('<p>').attr('class', 'expHid');
			_hid.css('display', 'none');
			_hid.append(_txt);

			$(target).empty();
			$(target).append(_opn);
			$(target).append(_hid);

		}
	}

	function debugOption(options) {
		var _code = '';
		for (var _k in options)
			_code += _k + '\t :: ' + options[_k] + '\n';

		alert(_code);
	}

};

function trim (src) {
	return (src)?src.replace(/(^[\s　]+)|([\s　]+$)/g, ''):'';
}

