//==========================================================
//
//	特別パーツ関係
//
//==========================================================
/**
 * 初期化関数.
 */
function onPartsInitialyze(pre, pid, arr) {
	// 設定画面のボタン
	var obj = getPartsObject(pre);
	setSetButton(obj, pre, pid);

	var saveArr = getPartsConfig(pid, pre);
	for( key in arr ){
		if(saveArr[key]){
			arr[key] = saveArr[key];
		}
	}
	
	//setPartsConfig(pid, pre, arr);
	return arr;
}
/**
 * 設定後の設定値情報取得.
 */
function onPartsConfigChanged(pre, pid, arr) {
	setPartsConfig(pid, pre, arr);
	updateCustomize(pid, pre, arr)
	return false;
}
/**
 * パーツ表示完了字に呼ばれる.
 */
function onPartsDisplayChanged(pre, pid, dsp) {
	var obj = getPartsObject(pre);
	// title
	setPartsTitle(obj, eval(pre + '_' + pid + '_getTitle()'));
	// rss
	setRSS(obj, pre, pid, dsp);
	// option
	setSetting(obj, pre, pid, dsp);
	// init
	if ('mypage_menu' == pid) {
		mypage_menu_init(pid);
	}
	return false;
}

/** 読み込み用URL. */
var partsURL = '/parts/dc/customparts?charset=utf-8&data_type=xhtml';
/**
 * パーツを読み込む.
 *
 * @param obj object
 * @param pre prefix
 * @param pid parts id
 */
function loadParts(obj, pre, pid) {
	if (!obj || !pre || !pid) {
		return false;
	}
	// 初期値設定
	var typ = (0 == pre.toUpperCase().indexOf('A')) ? 'large' : 'small';
	var url = new Array(partsURL);
	url.push('&pid=' + pid);
	url.push('&prefix=' + pre);
	url.push('&parts_type=' + typ);
	url.push('&dt=' + new Date().getTime());
	// 通信
	$.ajax({
		url : url.join(''),
		type : 'GET',
		success : function(dat, status) {
			obj.addClass(pid); // 設定
			setPartsContents(obj, dat);
			return true;
		},
		error : function(xml, status, e) {
			setPartsTitle(obj, 'エラー');
			obj.addClass('partErr');
			setPartsContents(obj, getErrorString());
//			alert('ajax error![' + pid + ']:\nxml:' + xml + '\nstts:' + status + '\ne:' + e);
			return false;
		},
		timeout : 30 * 1000
	});
	return false;
}
/**
 * 通信でエラーが発生した時用の文言.
 */
function getErrorString() {
	var rtn = new Array('<div class="contents">');
	rtn.push('データが取得できませんでした。<br>');
	rtn.push('ご迷惑をおかけしますが、しばらく待ってからもう一度アクセスしてください。');
	rtn.push('</div>');
	return rtn.join('');
}
/**
 * RSSを設定する.
 *
 * @param obj object
 * @param pre prefix
 * @param pid parts id
 * @param dsp display flag
 */
function setRSS(obj, pre, pid, dsp) {
	var v = eval(pre + '_' + pid + '_getRSS()');
	var o = $('.button1', obj);
	if (0 < v.length && dsp == '1') {
		//obj.attr('rss', v);
		o.css('display', 'block');
		$('a', o).attr('href', v).attr('target','_blank');
		return false;
	}
	o.css('display', 'none');
	return false;
}
/**
 * 設定を設定する.
 * @param obj object
 * @param pre prefix
 * @param pid parts id
 * @param dsp display flag
 */
function setSetting(obj, pre, pid, dsp) {
	var o = $('.button2', obj);
	if (eval(pre + '_' + pid + '_isSupportConfigMode()') && dsp == '1') {
		obj.attr('option', pre + '_' + pid + '_edit()');
		o.css('display', 'block');
		return false;
	}
	o.css('display', 'none');
	return false;
}
/**
 * 設定ボタンをセットする.
 */
function setSetButton(obj, pre, pid) {
	if (eval(pre + '_' + pid + '_isSupportConfigMode()')) {
		if ($('.option .button', obj)) {
			$('.option', obj).append(setPartsButton(pre, pid));
		}
	}
	return false;
}
function setPartsButton(pre, pid) {
	var str = new Array('<div class="buttons">');
	str.push('<a class="cancel" title="キャンセル" onclick="return cancelButton(\'' + pre + '\',\'' + pid + '\');" href="#"/>');
	str.push('<a class="set" title="保存" onclick="return saveButton(\'' + pre + '\',\'' + pid + '\');" href="#"/>');
	str.push('</div>');
	return str.join('');
}
/**
 * 保存ボタン.
 */
function saveButton(pre, pid) {
	eval(pre + '_' + pid + '_save()');
	return false;
}
/**
 * キャンセルボタン.
 */
function cancelButton(pre, pid) {
	eval(pre + '_' + pid + '_cancel()');
	return false;
}
//----------------------------------------------------------
//
//	特別パーツ用設定値保存配列
//
//----------------------------------------------------------
/** virtual hashArray. */
var globalHashArray = [];
/** virtual function. */
function getPartsConfig(pid, prefix) {
	return globalHashArray[pid + '_' + prefix] || [];
}
/** virtual function. */
function setPartsConfig(pid, prefix, hashArray) {
	globalHashArray[pid + '_' + prefix] = hashArray;
	return;
}

/** カスタマイズ反映. */
function updateCustomize(pid, prefix, hashArray){
	var url = new Array('/mypage/dc/partsconfig');
	url.push('?mode=update');
	if(prefix.indexOf('D') != 0){
		url.push('&pageseq=', $('#tabs').attr('active'));
	}else{
		url.push('&pageseq=' + $('#column3').attr('seq'));
	}
	url.push('&partsseq=', getSeqPrefix(prefix));

	var param = new Array();
	for( key in hashArray){
		param.push('&param=' + key + ',' + encodeURI(hashArray[key]));
	}
	sendDataAPI(url.join('') + param.join('') , nullFnc, nullFnc);
}
/**
 * prefixから該当するパーツsequenceを取得する.
 */
function getSeqPrefix(pre) {
	var seq = '';
	$.each($('.parts'), function(i) {
		if (pre == $(this).attr('pre')) {
			seq = $(this).attr('seq');
			return;
		}
	});
	return seq;
}
