/*
 * コミュニティボード用 JS関数
 *
 */

//------------------------------------------------------------------------------
//■ 関数群 ■
//------------------------------------------------------------------------------
//---------------------------------------
//表示モード切替
//---------------------------------------
function viewmode( mode ){
	//メニュー調整
	menuViewChange(_SYS['type'], mode);

	//セット
	_SYS['type'] = mode;

	//キャンバス削除
	delCanvas();

	//書換え
	refresh('view');

	return(false);
}

//表示メニュー切換え(表示モード)
function menuViewChange( now, next ){
	var now_id  = '#menu-view' + now;
	var next_id = '#menu-view' + next;

	$(now_id).css({'color':'#074AB2', 'font-weight':'normal'});
	$(next_id).css({'color':'#666666', 'font-weight':'bold'});
	
	if( next != 'normal' )
		$("#help-medal").css('display', 'none');
	else
		$("#help-medal").css('display', 'block');	


	//$("#canvas-desc").html('<b>ともだちを募集している仲間を新着順に表示します</b>');	

	$("#canvas").css('margin-top', '3px');
	$("#canvas-desc").css('margin-top', '15px');
}

//---------------------------------------
//カテゴリ切替
//---------------------------------------
function categorymode(mode, sort, data_count){
	//メニュー調整
	menuCategoryChange(_SYS['junle'], mode);

	//セット
	_SYS['junle'] = mode;	
	_SYS['start'] = 0;
	_SYS['sort'] = sort;
	_SYS['count'] = data_count;

	//件数表示
	var p_start = 1;
	var p_end = 10;

	if ( p_end > data_count ) {
		p_end = data_count;
	}
	$('#page_count').empty();
	if ( data_count ) {
		$('#page_count').text(data_count + ' 件中 ' + p_start + ' ～ ' + p_end + ' 件目を表示しています');
	}

	//リセット
	delCanvas();
	resetJSONandEOD();

	//書換え
	refresh('update');

	return(false);
}

//表示メニュー切換え(カテゴリ)
function menuCategoryChange( now, next ){
	var now_id  = '#menu-junle' + now;
	var next_id = '#menu-junle' + next;

	$(now_id).css({'color':'#074AB2', 'font-weight':'normal'});
	$(next_id).css({'color':'#666666', 'font-weight':'bold'});
}

//ソート順切換え
function menuSortChange( now, next ){
	var now_id  = '#menu-sort' + now;
	var next_id = '#menu-sort' + next;

//	$(now_id).css({'color':'#074AB2', 'font-weight':'normal'});
//	$(next_id).css({'color':'#666666', 'font-weight':'bold'});
	$(now_id).css({'color':'#074AB2', 'font-weight':'normal'});
	$(next_id).css({'color':'#666666', 'font-weight':'bold', 'background':'none', 'padding-left':'0'});
}

//---------------------------------------
//メモ機能切替
//---------------------------------------
function viewmemo(){
	var mode = 'all';

	//メニュー調整
	//menuMemoChange(_SYS['memo'], mode);

	//モード取得
	if( $("#menu-memoonly").attr("checked") == true )
		mode = 'only';
	

	//セット
	_SYS['memo'] = mode;	

	//リセット
	delCanvas();

	//書換え
	refresh('memo-' + mode);
	
	return(false);
}


//表示メニュー切換え(カテゴリ)
/* 
 * function menuMemoChange( now, next ){
 *	var now_id  = '#menu-memo' + now;
 *	var next_id = '#menu-memo' + next;
 *
 *	$(now_id).css({'color':'#074AB2', 'font-weight':'normal'});
 *	$(next_id).css({'color':'red', 'font-weight':'bold'});
 * }
 *
 */


//---------------------------------------
//描画切り替え
//---------------------------------------
function refresh( mode ){
	$("#wrapper").css('cursor', 'wait');

	//本処理
	switch(mode){
		//表示切換え
		case 'view':
		case 'memo-all':
			paintCanvas(0);		//0番目から描画する
			$("#wrapper").css('cursor', 'auto');
			break;

		//メモだけ表示
		case 'memo-only':
			paintCanvas(0);		//0番目、メモ配列にあるものだけ表示
			$("#wrapper").css('cursor', 'auto');
			break;

		//DB問合せ → 表示
		case 'update':
		default:
			JSONRead();
			break;
	}

	return(false);
}

//---------------------------------------
//リセット
//---------------------------------------
function resetJSONandEOD(){
	JSON    = null;
	JSON    = new Array();
	JSON_I  = -1;
	ENDOFDB = false;
}

//---------------------------------------
//キャンバス書換え
//---------------------------------------
function paintCanvas(start){
	for(var i=start; i<=JSON_I; i++){
		var add_div      = '<div id="viewer' + i + '"></div>';
		var add_div_jqid = '#viewer' + i;
		var buff = getHTML(i);

		if(buff['count'] > 0){
			$("#canvas").append( add_div );
			$(add_div_jqid).html( buff['html'] );
		}
	}

	return(false);
}

//---------------------------------------
//キャンバス削除
//---------------------------------------
function delCanvas(){
	$("#canvas").html(' ');
}

//---------------------------------------
//HTML生成(通常モード)
//---------------------------------------
function getHTML(start){
	var html = '';
	var memo_flag = (_SYS['memo']=='only')?  true:false;

	cnt = 0;
	for( var i in JSON[start] ){
		if( cnt++ == 0 ){
			ENDOFDB = ! (JSON[start][0]['status']);
			continue;
		}
		if( JSON[start][i]['nickname'] == undefined )
			continue;
	
		login_flg = JSON[start][0]['login_flg'];

		var nickname   = JSON[start][i]['nickname'];
		var junle      = JSON[start][i]['junle'];
		var message    = xss(JSON[start][i]['message']);
		var update     = JSON[start][i]['update'];
		var ava_img_m  = JSON[start][i]['avatar_img_m'];
		var ava_img_s  = JSON[start][i]['avatar_img_s'];
		var mypage     = JSON[start][i]['mypage'];
		var rank       = JSON[start][i]['rank'];
		var rank_label = _ranklabel(rank);
		var level      = (JSON[start][i]['level']==null)? 0:JSON[start][i]['level'];
		var lastdate       = JSON[start][i]['lastdate'];
		var hot       = JSON[start][i]['hot'];


		if( memo_flag && ! MEMO_CARD[repCardID(nickname)])
			continue;
		
		switch( _SYS['type'] ){
			case 'normal':
				var divclass = (MEMO_CARD[repCardID(nickname)])? "view-normal-onmemo":"view-normal";
				var memotext = (MEMO_CARD[repCardID(nickname)])? "チェック解除":"チェックする";
				html += '<div class="'+ divclass +'" id="card'+ repCardID(nickname) +'">\n';
				html += '<div class="view-normal-left">\n';
					html += '<a href="' + mypage + '" title="マイページへ">\n';
					html +=     '<img src="' + ava_img_m + '" width="70" height="70" alt="アバター画像" /><br />';
//					html +=     wordBreak(nickname,10);
					html += '</a>\n';
				html += '</div>\n';
				html += '<div class="view-normal-message">\n';
					html += '<h4>' + junle + '</h4>\n';
					html += '<p class=message>' + message + '</p>\n';
					html += '<p class=level>' + rank_label + 'Lv.' + level + '&nbsp;&nbsp;<a href="' + mypage + '" title="マイページへ">'+ nickname + '</a>';
					html += '<span> （最終ログイン：' + lastdate + '）</span></p>\n';
				html += '</div>\n';
				html += '<div class="view-normal-right">\n';
				//チェック機能なしの場合
					html += '<div class="update"><p>最終更新&nbsp;' + update + '&nbsp;';
					if ( hot == 1 ){
						html += '<img src="/jp/common/images/community/circle/icon/icon_hot.gif" alt="Hot!" align="absmiddle" />';
					}
					html += '</p></div>\n';
				//チェック機能ありの場合
//					html += '<div class="tomemo"><p>最終更新&nbsp;' + update + '';
//					if ( hot == 1 ){
//						html += '<img src="/jp/common/images/community/circle/icon/icon_hot.gif" alt="Hot!" />';
//					}
//					html += '</p>\n';
//					html += '<img src="/jp/common/images/community/cbord/icon_memo.gif" width="16" height="15" alt="チェック" align="absmiddle" /><a href="#" id="memo'+ repCardID(nickname) +'" value="'+ repCardID(nickname) +'" onClick="return( checkmemo(\''+ repCardID(nickname) +'\', true))">'+ memotext +'</a></div>\n';
				//未ログイン
				if ( !login_flg ) {
					html += '<div class="btn"><a href="/jp/login/login.php?r=/jp/community/cbord/index.php" class="btn_141x21">ともだち申請する</a></div>\n';
				}else{
					html += '<div class="btn"><a class="btn_141x21" href="' + mypage + 'friend">ともだち申請する</a></div>\n';
				}
				html += '</div>\n';
				html += '</div>\n';
				html += '\n\n';
				break;

			case 'image':
				var divclass = (MEMO_CARD[repCardID(nickname)])? "view-image-onmemo":"view-image";
				html += '<div class="' + divclass + '" id="card'+ repCardID(nickname) +'">\n';
				html += '<a href="' + mypage + '" title="'+ message +'">';
				html +=     '<img src="' + ava_img_m + '" width="70" height="70" alt="アバター画像" /><br />';
				html +=     wordBreak(nickname,10);
				html += '</a>\n';
				html += '</div>\n';
				html += '\n\n';



				break;
			/*
			 * case 'onlyid':
			 *	html += '<div class="view-id" id="card'+ nickname +'">\n';
			 *	html += '<a href="' + mypage + '" target="_blank">' + nickname + '</a>\n';
			 *	html += '</div>\n';
			 *	html += '\n\n';
			 *	break;
			 */

			default:
				break;
		}
	}

	//ページャー作成
	maxpage = 10;	//表示ページ数
	maxline = 10;		//表示件数

	pager_base = Math.floor(_SYS['start'] / maxline) + 1;	//選択ページ
	pager_start = Math.floor(_SYS['start'] / maxline) - 4;	//最小ページ

	//最終ページ数の算出
	if ( _SYS['count'] % maxline == 0 ){
		pager_end = Math.floor(_SYS['count'] / maxline);
	} else {
		pager_end = Math.floor(_SYS['count'] / maxline) + 1;
	}

	if ( pager_start <= 0 ){
		pager_start = 1;
	}else if ( pager_end - 10 <= 0){
		pager_start = 1;
	}else if ( (pager_end - 10) < pager_start){
		pager_start = Math.floor(pager_end - 10);
	}

	html += '<div class="pager">';
	if ( pager_start != 1 ){
		html += '[<a href="#" onClick="return(pagechange(0, ' + maxline + ', ' + _SYS['count'] + '))">' + 1 + '</a>]&nbsp;';
		html += '<a href="#" onClick="return(pagechange(' + (pager_base - 1) + ', ' + maxline + ', ' + _SYS['count'] + '))">&lt;&lt;</a>&nbsp;';
	}

	for(var i=pager_start; i<=(pager_start+maxpage); i++){
		if ( pager_base == i &&  i == 1 ) {
			html += '<span class="select_page">' + i + '</span>';
		}else if ( pager_base == i &&  i != 1 ) {
			html += ' | <span class="select_page">' + i + '</span>';
		} else if ( i == 1 ){
			html += '<a href="#" onClick="return(pagechange(0, ' + maxline + ', ' + _SYS['count'] + '))">' + i + '</a>';
		} else if ( i <= pager_end){
			html += ' | <a href="#" onClick="return(pagechange(' + i + ', ' + maxline + ', ' + _SYS['count'] + '))">' + i + '</a>';
		}
	}

	if ( (pager_end - 10) > pager_start ){
		html += ' | <a href="#" onClick="return(pagechange(' + (pager_base + 1) + ', ' + maxline + ', ' + _SYS['count'] + '))">&gt;&gt;</a>&nbsp;';
		html += '[<a href="#" onClick="return(pagechange(' + pager_end + ', ' + maxline + ', ' + _SYS['count'] + '))">' + pager_end + '</a>]&nbsp;';
	}
	html += '</div>';


	//if(cnt > 1 && ! ENDOFDB)
	//	html += '<br clear="all">';


	return({'html':html, 'count':cnt, 'data_count':_SYS['count']});
}

//---------------------------------------
//XSS対策的な変換
//---------------------------------------
function xss(str){
	str = str.replace('&', '&amp;');
	str = str.replace('<', '&lt;');
	str = str.replace('>', '&gt;');
	str = str.replace("'", '&quot;');
	str = str.replace('"', '&quot;');
	
	return(str);
}

//---------------------------------------
//一部の記号を削除
//---------------------------------------
function repCardID(str){
	str = str.replace('.', '');

	return(str);
}

//---------------------------------------
//チェック
//---------------------------------------
function checkmemo(id, upd){
	var jqid_ln = "#memo" + repCardID(id);
	var jqid_dv = "#card" + repCardID(id);
	
	if( MEMO_CARD[id] == true ){
		if(upd) MEMO_CARD[id] = false;
		$(jqid_dv).attr('class', 'view-normal');
		$(jqid_ln).html('チェックする');
	}
	else{
		if(upd) MEMO_CARD[id] = true;
		$(jqid_dv).attr('class', 'view-normal-onmemo');
		$(jqid_ln).html('チェック解除');
	}

	return(false);
}

//---------------------------------------
//JSON読込み
//---------------------------------------
function JSONRead(){
	if(REQ_LOCK)
		return(false);

	//URL作成
	var url   =	'c_canvas.php';
	var param = {
					  'start' : _SYS['start'] 
					, 'unit'  : _SYS['unit']
					, 'junle' : _SYS['junle']
					, 'sort' : _SYS['sort']
				};
	//通信ロック
	REQ_LOCK = true;
	
	//JSON読込み
	$.getJSON(url, param, function(buff){
		JSON[++JSON_I] = buff;
		paintCanvas(JSON_I);

		//通信ロック解除
		REQ_LOCK = false;

		//ページすすめ
		_SYS['start'] += _SYS['unit'];

		//マウスもどす
		$("#wrapper").css('cursor', 'auto');

	});


	return(false);
}


//---------------------------------------
//Ajax書込み
//---------------------------------------
function ajaxWrite(){
	//-----------------------
	//チェック
	//-----------------------
	var msg     = $("#message").val();
	var msg_len = StrLengthUTF8(msg);
	var msg_max = _SYS['user_msg_max']; 

	if( msg == _SYS['default_msg'] || msg == "" ){
		alert('何かメッセージをお願いいたします。');
		$("#message").focus();

		return(false);
	}

	if(  msg_len > msg_max ){
		if( ! confirm('メッセージは全角'+ (msg_max / 2) + '文字以降はカットされますがよろしいですか？\n(現在は全角' + (msg_len / 2) + '文字です)') ){
			$("#message").focus();
			$("#message").select();

			return(false);
		}
	}
	


	//-----------------------
	//値準備
	//-----------------------
	var param = {
		 'message': $("#message").val()
	  ,    'junle': $("#junle").val()
	};

	$.ajax({
		//-----------------------
		//設定
		//-----------------------
			   url: 'add.php',
			  type: 'POST',
		  dataType: 'html',   //戻り値：xml、 html、script、JSON
			  data: param,
		   timeout: 1000,

		//-----------------------
		//リアクション
		//-----------------------
		 error: function(response){
			alert('** システムエラーが発生しました。\n   申し訳ありませんが、しばらく経ってから再度お試しください。');
		},
		 success: function(response){
				alert('正常に保存されました。');
				location.href='/jp/community/cbord/';
		}
	});
}


//---------------------------------------
//文字列長(バイト数)のカウント - UTF8
//---------------------------------------
function StrLengthUTF8(str) {
	var len = 0;

	for (var i = 0; i < str.length; i++) {
		var c = str.charCodeAt(i);
		if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) 
			len += 1;
		else
			len += 2;
	}

	return( len );
}

//---------------------------------------
//半角文字の折り返し(ニックネーム用)
//---------------------------------------
function wordBreak(str, len){
	var buff = new Array();
	var i = 0;

	while(i <= str.length){
		buff.push( str.substr(i, len) );
		i += len;
	}

	return( buff.join('<wbr />') );
}

//---------------------------------------
//Loading 管理
//---------------------------------------
function _onLoading(){
	//$("#nowloading").html(_getNowLoadingHTML());
	//$("#nowloading").css('display', 'block');
	//$("#content-inner").css('cursor', 'wait');
}

function _offLoading(){
	//$("#nowloading").css('display', 'none');
	//$("#content-inner").css('cursor', 'auto');
}

function _getNowLoadingHTML(){
	return(
			  '<div align="center">\n'
			+ ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="20" height="20" id="gene" align="middle">\n'
			+ ' 	<param name="allowScriptAccess" value="sameDomain" />\n'
			+ '		<param name="movie" value="swf/gene.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#f7fcfd" /><embed src="swf/gene.swf" quality="high" bgcolor="#f7fcfd" width="20" height="20" name="gene" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\n'
			+ '</object>\n'
			+ '<br />\n'
			+ 'Now Loading\n'
			+ '</div>\n'
	);
}

//---------------------------------------
//スクロール残量に関連して読込み
//---------------------------------------
function setNewResult(){
	var mode_memo = _SYS['memo'];

	//DB残があるか、メモモードでないなら
	if(!ENDOFDB && mode_memo != 'only'){

		/*
		 * alert(
		 * 	_scrHeight() + ':' +
		 *	_docHeight() + '=' +
		 *	Math.floor((_scrHeight()/_docHeight()) * 100)
		 * );
		*/

		//40%を超えたら実行
		if( (_scrHeight() >= 1) && (_docHeight() >= 1)){
			var nowpos = Math.floor((_scrHeight()/_docHeight()) * 100);
			if(  nowpos > 40  ){
				//追加
				refresh('update');
			}
		}
	}

	//500m秒ごとに実行
	setTimeout( function(){setNewResult()}, 500 );
}

//---------------------------------------
//ウィンドウの状況を取得する
//---------------------------------------
//ページ高
function _docHeight(){
	return( document.getElementById('tab-2').offsetHeight );
}

//スクロール量
function _scrHeight(){
	return(  document.body.scrollTop || document.documentElement.scrollTop );
}

//---------------------------------------
//rank ラベル
//---------------------------------------
function _ranklabel( rank ){
	var label = new Array(
						   ''		//blank
						, '<img src="image/medal1.gif" width="20" height="20" alt="ブロンズ" align="absmiddle" />'
						, '<img src="image/medal2.gif" width="20" height="20" alt="シルバー" align="absmiddle" />'
						, '<img src="image/medal3.gif" width="20" height="20" alt="ゴールド" align="absmiddle" />'
						, '<img src="image/medal4.gif" width="20" height="20" alt="アルティメット" align="absmiddle" />'
					);

	return( label[rank] );
}

//---------------------------------------
//「メッセージ」入力イベント
//---------------------------------------
//入力開始
function onFocusMSG(){
	//デフォルト文字なら空にする
	if( $('#message').val() == _SYS['default_msg'] )
		$('#message').val('');

	//文字色もどし
	$('#message').css('color', 'black');
}

//入力終了
function onBlurMSG(){
	//空ならデフォルト文字に
	if( $('#message').val() == "" ){
		$('#message').val(_SYS['user_msg']);
	}
		
	//入力内容がデフォルト文字なら色変更
	if( $('#message').val() == _SYS['default_msg'] )
		$('#message').css('color', 'gray');
}

//---------------------------------------
//ページ切替
//---------------------------------------
function pagechange(start, unit, data_count){

	//スタート値算出
	if (start > 1){
		start = (start-1) * unit;
	}else{
		start = 0;
	}

	//セット
	_SYS['start'] = start;
	_SYS['unit'] = unit;
	_SYS['count'] = data_count;

	//件数表示
	var p_start = start + 1;
	var p_end = start + unit;

	if ( p_end > data_count ) {
		p_end = data_count;
	}
	$('#page_count').empty();

	if ( data_count ) {
		$('#page_count').text(data_count + ' 件中 ' + p_start + ' ～ ' + p_end + ' 件目を表示しています');
	}

	//リセット
	delCanvas();
	resetJSONandEOD();

	//書換え
	refresh('update');

	return(false);
}





//---------------------------------------
//デバグ用
//---------------------------------------
//配列alert
function __dbq_alertArray(arr){
	var result = '';
	for(var i in arr)
		result += i + ':' + arr[i] + '\n';

	alert(result);
}

