/**************************************************
 * ロード時にイベント定義
 **************************************************/
j$(function() {
	//========================================
	// ポップアップリンク
	//========================================
	$('link_list_pulldown_cover').hide();
	$('link_list_pulldown').hide();
	$('link_list_pulldown_text').hide();
	$('link_list').hide();
	//========================================
	// 文字列の長さ確認用
	//  truncateTailInWidth、getExtent使用前に定義すること
	//========================================
	document.body.innerHTML = '<span id="ruler" style="visibility:hidden;position: absolute; left: 0px; top: 0px; background-color:#666666; color:#ffffff;"></span>' + document.body.innerHTML;
	//========================================
	// イベント設定
	//========================================
	Event.observe('container', 'mousemove', handler);				// イベントを監視
	// click 以外に次のイベントがハンドリング可能
	// blur(フォーカスを失った)
	// change(変更があった)
	// click(クリックされた)
	// dblclick(ダブルクリックされた)
	// error(エラーがあった)
	// focus(フォーカスされた)
	// keydown(キーがダウンされた)
	// keypress(キーが押された)
	// keyup(キーがアップされた)
	// load(読み込まれた)
	// mousedown(マウスダウンされた)
	// mousemove(マウスが動いた)
	// mouseout(マウスが外れた)
	// mouseover(マウスオーバーした)
	// mouseup(マウスがアップされた)
	// reset(リセットされた)
	// submit(サブミットされた)
	// unload(アンロードされた)
	//========================================
	// トップページのみ
	//========================================
	if(-1==window.location.href.indexOf('detail', 0)){
		//========================================
		// ここからトップページの広告関連
		//========================================
		objScrollTo('adTop_right');
	}else{
		bodyInit();
		
		var objTable = j$('table.sub_list');
		objTable.css("width", "180%");
	}
	//========================================
	// divの墨を丸める
	//========================================
	j$("div.divCover").corner('round');
//	j$("div#link_list").corner();
});
/**************************************************
 * 指定のＵＲＬを開く
 **************************************************/
function execLocation(url){
	window.location.href = url;
}
/**************************************************
 * マウス座標取得及び保管
 * @param event
 * @return
 **************************************************/
var mouseInfo = {
	x	:	0,
	y	:	0,
	xep	:	0,
	yep	:	0
};
function handler(event){
	var item	= Event.element(event);
	var ep		= Element.cumulativeOffset(item);
	var x	= Event.pointerX(event);
	var y	= Event.pointerY(event);
	var xep	= ep[0];
	var yep	= ep[1];
	mouseInfo['x']		= x;
	mouseInfo['y']		= y;
	mouseInfo['xep']	= xep;
	mouseInfo['yep']	= yep;
};
function handlerPullOn(event, objName){
	var obj = $(objName);
	alert(event +"\n" + objName);
	obj.innerHTML = 'TEST - Start';
}
function handlerPullOff(event, objName){
	var obj = $(objName);
	obj.innerHTML = 'TEST - End';
}

/**************************************************
 * マウスイベント取得
 * @param event
 * @return
 **************************************************/
function handlerOn(event){
	var item	= Event.element(event);
	var ep		= Element.cumulativeOffset(item);
	var x	= Event.pointerX(event);
	var y	= Event.pointerY(event);
	var xep	= ep[0];
	var yep	= ep[1];

	var str = "";
	str += "ID = " + item.id	+ "<br>\n";
	str += "X  = " + x			+ "<br>\n";
	str += "Y  = " + y			+ "<br>\n";
	str += "Xp = " + xep		+ "<br>\n";
	str += "Yp = " + yep		+ "<br>\n";

	// debug
	$('debug').style.left = x + 50;
	$('debug').style.top  = y - 30;
	debugHtml(str);
}
/**************************************************
 * イベント解除
 * @return
 **************************************************/
function execute() {
	Event.stopObserving('container', 'mousemove', handler);
}
/**************************************************
 * 文字の幅を返す
 * @param ruler
 * @return
 **************************************************/
String.prototype.getExtent = function(ruler) {
	var e = $(ruler);
	var c;
	while (c = e.lastChild) e.removeChild(c);
	var text = e.appendChild(document.createTextNode(this));
	var width = e.offsetWidth;
	e.removeChild(text);
	return width;
};
/**************************************************
 * 指定の幅を超えていたら「...」をつける
 * @param maxWidth
 * @param ruler
 * @return
 **************************************************/
String.prototype.truncateTailInWidth = function(maxWidth, ruler) {
	if (this.length == 0) return '';
	if (this.getExtent(ruler) <= maxWidth) return this;
	for (var i=this.length-1; i>=1; --i) {
		var s = this.slice(0, i) + '...';
		if (s.getExtent(ruler) <= maxWidth) return s;
	}
	return '';
};
/**************************************************
 * ウィンドウ表示
 * @return
 **************************************************/
var pwindow = {};
var flgPwindow = false;
var cntPwindow = 0;
var titlePwindow = "";
function openWin(flgDisp){
	var winInfo;
	var url = '';
	
	var vp = document.viewport.getScrollOffsets();
	var windowWH = new Array(600, 400);
	var windowXYWH = new Array(300, vp.top, windowWH[0], windowWH[1]);
	
	// フラグわけ
	switch(flgDisp){
		case 'join':
			// 会員登録
			winInfo = { title: '会員登録',		url: '/join' };
			break;
		case 'unnei':
			// 運営会社
			winInfo = { title: '運営会社',		url: '/unnei' };
			break;
		case 'kiyaku':
			// 利用規約
			winInfo = { title: '利用規約',		url: '/kiyaku' };
			break;
		case 'prive':
			// プライバシーポリシー
			winInfo = { title: 'プライバシーポリシー', url: '/prive' };
			break;
		case 'tokutei':
			// 「特定商取引法に関する法律」に基づく表示
			winInfo = { title: '「特定商取引法に関する法律」に基づく表示', url: '/tokutei' };
			break;
		case 'leave':
			// 退会
			winInfo = { title: '退会', url: '/leave' };
			break;
		default: return;
	}
	// ウィンドウオープン
	if(pwindow[winInfo.title]==null || !pwindow[winInfo.title]){
		pwindow[winInfo.title] = new Window(winInfo.title, {
			url:			winInfo.url,
			left:			windowXYWH[0] -50,
			top:			windowXYWH[1],
			width:			windowXYWH[2] +100,
			height:			windowXYWH[3],
			minimizable:	false,
			maximizable:	false,
			zIndex:			999
		});
//		pwindow[winInfo.title].setDestroyOnClose();
	}else{
		pwindow[winInfo.title].setLocation(windowXYWH[1], windowXYWH[0]);
	}
	// 表示
	pwindow[winInfo.title].setTitle(winInfo.title);
	pwindow[winInfo.title].toFront();
	pwindow[winInfo.title].showCenter(true);
}
function writeWin(win, str){
	if(win==null){ return; }
	if(str==null){ return; }
	win.setHTMLContent(str);
}

/**************************************************
 * マウスオーバー時にの処理
 * @param obj
 * @return
 **************************************************/
function ItemOver(obj){
	if(! obj){ return; }
	// ベースＩＤ取得
	var baseID = obj.id;
	// pulldown 描画
	if($(baseID)){
		resetPulldown();
		// 対象の背景色変更
		$(obj.id).setStyle({backgroundColor: '#ddddff'});

		// リンク書き換え
		var itemData = listArray[baseID];
		var pushAtag = new Array();
		pushAtag.push('<a href="mailto:?body=' + 'http://oopstore.net' + itemData.url + '" onclick="$(\'link_list\').hide();">友達に教える</a>');
		pushAtag.push('<a href="' + itemData.url + '" onclick="$(\'link_list\').hide();">詳細を見る</a>');
		pushAtag.push('<a href="' + itemData.url + '" onclick="$(\'link_list\').hide();">購入する ' + itemData.price + ' pt</a>');
		var cnt = 0;
		j$('div#link_list > div').each(function(){
			j$(this).html(pushAtag[cnt++]);
		});
		// マウスアウト取得用画像
		var obj_llpd = $('link_list_pulldown_cover');
		obj_llpd.setStyle({left: obj.offsetLeft + 'px'});
		obj_llpd.setStyle({top: obj.offsetTop + 'px'});
		obj_llpd.show();
		// マウスアウト取得用イベント登録
		Event.observe('link_list_pulldown_cover', 'mouseout', function(e){outPulldown(e, baseID);});				// イベントを監視
		Event.observe('link_list_pulldown_cover', 'click', function(e){clickPulldownCover(e, baseID);});					// イベントを監視
		// プルダウン描画
		var obj_llpd = $('link_list_pulldown');
		var retParent = Element.getDimensions($(baseID + '_a'));
		var ret = Element.getDimensions(obj_llpd);
		obj_llpd.setStyle({left: (obj.offsetLeft + retParent.width - ret.width - 5) + 'px'});
		obj_llpd.setStyle({top: obj.offsetTop + ((retParent.height - ret.height) / 2) + 'px'});
		obj_llpd.show();
		// プルダウンテキスト描画
		var obj_llpdt = $('link_list_pulldown_text');
		obj_llpdt.setStyle({left: (obj.offsetLeft + retParent.width - ret.width - 5) + 'px'});
		obj_llpdt.setStyle({top: obj.offsetTop + ((retParent.height - ret.height) / 2) + 'px'});
		obj_llpdt.innerHTML = '<a href="javascript:void(0);"><span style="color:white;font-size:10px;font-weight:bold;padding-left:5px;padding-bottom:3px;">' + listArray[baseID].price + ' pt</span></a>';
		obj_llpdt.show();
		// プルダウン用イベント登録
		if(evClickPulldown==null){
			evClickPulldown = Event.observe('link_list_pulldown', 'click', function(e){clickPulldown(e, baseID);});				// イベントを監視
		}
		if(evClickPulldown_text==null){
			evClickPulldown_text = Event.observe('link_list_pulldown_text', 'click', function(e){clickPulldown(e, baseID);});				// イベントを監視
		}
	}
	// 文字を短くする
	$(baseID + '_span_t').innerHTML = $(baseID + '_span_t').innerHTML.truncateTailInWidth(LIST1_WIDTH, 'ruler');
	$(baseID + '_span_c').innerHTML = $(baseID + '_span_c').innerHTML.truncateTailInWidth(LIST1_WIDTH, 'ruler');
	return false;
}
function resetPulldown(){
	for(var loid in listArray){
		try { outPulldown(null, loid); }catch(e){};
		// イベント解除
		try { Event.stopObserving('link_list_pulldown_cover', 'mouseout', function(e){outPulldown(e, baseID);}); }catch(e){};
		try { Event.stopObserving('link_list_pulldown_cover', 'click', function(e){outPulldown(e, baseID);}); }catch(e){};
		try { Event.stopObserving('link_list_pulldown', 'click', function(e){clickPulldown(e, baseID);}); }catch(e){};
		evClickPulldown = null;
		evClickPulldown_text = null;
	}
};
function clickPulldownCover(event, baseID){
	execLocation(listArray[baseID].url);
};
function outPulldown(event, baseID){
	// 対象の背景色変更
	$(baseID).setStyle({backgroundColor: '#ffffff'});
	// 文字を元に戻す
	$(baseID + '_span_t').innerHTML = listArray[baseID].title;
	$(baseID + '_span_c').innerHTML = listArray[baseID].body;
	// pulldown 除去
	if(Element.visible($('link_list_pulldown_cover'))){ $('link_list_pulldown_cover').hide(); }
	if(Element.visible($('link_list_pulldown'))){ $('link_list_pulldown').hide(); }
	if(Element.visible($('link_list_pulldown_text'))){ $('link_list_pulldown_text').hide(); }
	// リンクリスト除去
	if(Element.visible($('link_list'))){ $('link_list').hide(); }
};
var flgOnece = false;
var evClickPulldown = null;
var evClickPulldown_text = null;
function clickPulldown(event, baseID){
	if(flgOnece){ return; }
	flgOnece = true;
	var item	= Event.element(event);
	var ep		= Element.cumulativeOffset(item);

	var targetPosition = Position.cumulativeOffset($("link_list_pulldown"));
	var ret = Element.getDimensions($("link_list_pulldown"));		// エレメントのサイズを持つオブジェクトをretに入れる
	var xywh = new Array(
		targetPosition[0],
		targetPosition[1],
		ret.width,
		ret.height
	);
	// 右端クリックでプルダウン
	var x	= Event.pointerX(event);
	var y	= Event.pointerY(event);
	if(x>(xywh[0] + xywh[2] -15)){
		$('link_list').setStyle({left: ep[0] + 'px'});
		$('link_list').setStyle({top: (ep[1] - 10) + 'px'});
		$('link_list').show();
		// 範囲を外れたら閉じる為のイベント登録
		Event.observe('link_list', 'mousemove', function(e){outLinkList(e, baseID);});				// イベントを監視
	}else{
		execLocation(listArray[baseID].url);
	}
	flgOnece = false;
};
function outLinkList(event, baseID){
	// エレメント参照を引数にして、X座標、Y座標を取得する
	var targetPosition = Position.cumulativeOffset($("link_list"));
	var ret = Element.getDimensions($("link_list"));		// エレメントのサイズを持つオブジェクトをretに入れる
	var xywh = new Array(
		targetPosition[0] + 5,
		targetPosition[1] + 5,
		ret.width - 10,
		ret.height - 10
	);
	// 指定範囲外になったら消す
	var x	= Event.pointerX(event);
	var y	= Event.pointerY(event);
	if(
			xywh[0]>x || x>(xywh[0]+xywh[2])
			||
			xywh[1]>y || y>(xywh[1]+xywh[3])
	){
		$('link_list').hide();
		try { Event.stopObserving('link_list', 'mousemove', function(e){outLinkList(e, baseID);}); }catch(e){};
	}
}
/**************************************************
 * マウスアウト時にの処理
 * @param obj
 * @return
 **************************************************/
function ItemOut(obj){
	if(! obj){ return; }
	return false;
}
/**************************************************
 * 指定ＩＤに対し書込みを行う
 * @param id
 * @param str
 * @return
 **************************************************/
function drawText(id, str){
	document.getElementById( id ).innerHTML = str;
}

/**************************************************
 * 指定したオブジェクトの要素名を配列にして返す
 * @param obj
 * @return
 **************************************************/
function h2a(obj) {
	if(obj==null){ return; }
	var ary = new Array();
	for(var i in obj){
		ary.push(i);
	}
	return ary.sort();
}
/**************************************************
 * 配列をテーブルにして返す
 * @param array
 * @return
 **************************************************/
function a2html_table(array, obj){
	var resString = "";
	resString += '<table border="1">\n';
	for(var i=0; i<array.length; i++){
		resString += '	<tr>\n';
		resString += '		<th align="left" style="color:white">' + array[i] + '</th>\n';
		resString += '		<td style="color:white">\n';
		resString += '			<pre>' + obj[array[i]] + '</pre>\n';
		if(array[i] && obj[array[i]] && typeof(obj[array[i]])=="object"){
			resString += '<table border="1">\n';
			var objectArray = h2a(obj[array[i]]);
			for(var i2=0; i2<objectArray.length; i2++){
				resString += '	<tr>' + "\n";
				resString += '		<th align="left" style="color:white">' + objectArray[i2] + '</th>\n';
				resString += '		<td style="color:white"><pre>' + obj[array[i]][i2] + '</pre></td>\n';
				resString += '	</tr>\n';
			}
			resString += "</table>\n";
		}
		resString += '		</td>\n';
		resString += '	</tr>\n';
	}
	resString += "</table>\n";
	return resString;
}
/**************************************************
 * 配列をテキストで返す
 * @param array
 * @return
 **************************************************/
function a2text(array, obj){
	var resString = "";
	for(var i=0; i<array.length; i++){
		resString += "[" + array[i] + "]" + obj[array[i]] + "\n";
	}
	return resString;
}
/**************************************************
 * debug 用
 * @param str
 * @return
 **************************************************/
function debugHtml(str){
	drawText( "debug", str);
}


/**************************************************
 **************************************************
 **************************************************
 * ここから広告関連
 **************************************************
 **************************************************
 **************************************************/
function objScrollTo(id) {
	// 広告スクロール
	adTopLeft();	// ページ上部左側の広告(切替)
	adTopRight();	// ページ上部右側の広告(縦スクロール)
}

var cnt_adTop_left = 0;
var thread = null;
function adTopLeft(){
	var cnt = 0;
	var cntTmp = cnt_adTop_left;
	j$('span#adTop_left > div').each(function(){
		if(cnt==cntTmp){
			this.show();
		}else{
			this.hide();
		}
		cnt++;
	});
	cnt_adTop_left++;
	if(cnt_adTop_left>(cnt - 1)){
		cnt_adTop_left = 0;
	}
	setTimeout('adTopLeft()', 5000);
	return true;
};
function adTopLeftGetImage(){

}

function adTopRight() {
	var carrousel = jQuery("#adTop_right").carrousel( {
//		effects		: 'reflection',		//反射効果
//		easing		: 'easeOutBounce',	//別途jquery.easing.1.3.jsが必要
		speed 		: 1000,				//切り替えスピード
		dispTimeout : 5000,				//停止時間
		dispNumber	: 3,				//表示数
//		auto		: true,				//自動再生
		direction	: 'top',
		htmlPrevButton	: '',
		htmlNextButton	: ''
	});
}

