//-------------------------------
//textMax用JavaScript
//
//-------------------------------


//---------------------------------------------------
//関数名	function changeImage(element,filename)
//機能		イメージを変える
//---------------------------------------------------
function changeImage(element,filename){
	element.setAttribute("src",filename);
}
function changeImagB(element,opt){
	name = element.getAttribute("id");
	strTmp = name + opt + ".jpg";
	element.setAttribute("src",strTmp);
}

function moveTop(){
	window.scrollTo(0,0);
	return false;
}

//---------------------------------------------------
//関数名	function A(tagId,nameID)
//機能		属性を取る
//例 <div id="userID" value="keizi" /> →　A("userID","value"); → keizi
//---------------------------------------------------
function A(tagId,nameID)
{
	return document.getElementById(tagId).getAttribute(nameID);
}

function setA(tagId,nameID,value)
{
	return document.getElementById(tagId).setAttribute(nameID,value);
}

//---------------------------------------------------
//関数名	function getHtml(strURL,strParam,strResultID,method)
//機能		HTML取得
//---------------------------------------------------
function getHtml(strURL,strParam,strResultID,method)
{
	var url = strURL;
	var pars = '';

	if(method != 'post') method = 'get';

	var myAjax = new Ajax.Updater(
		{success:strResultID}, 
		strURL, {
			method: method, 
			parameters: strParam + "&cache="+(new Date()).getTime()
		});
	return;
}

//---------------------------------------------------
//関数名	function loadingStart()
//機能		ロード表示開始
//---------------------------------------------------
function loadingStart()
{
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();
	var objLoadingImage = $('loadingImage');

	$("loadingLayer").style.height = arrayPageSize[1] + 'px';
	$("loadingLayer").style.width = arrayPageSize[0] + 'px';
	if (objLoadingImage) {
		objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
		objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
	}
}

function loadingEnd()
{
	$("loadingLayer").style.visibility="hidden";

	var objLoadingImage = $('loadingImage');

	$("loadingLayer").style.height = '0px';
	$("loadingLayer").style.width = '0px';
	if (objLoadingImage) {
		objLoadingImage.style.top = '0px';
		objLoadingImage.style.left = '0px';
	}
}

//---------------------------------------------------
//関数名	function getHtml2(strURL,strParam,strResultID,method)
//機能		HTML取得（ロード画面を出す。）
//---------------------------------------------------
function getHtml2(strURL,strParam,strResultID,method,idChange,funcName)
{
	var url = strURL;
	var pars = '';
	var m_idChange = idChange;
	if(method != 'post') method = 'get';

	loadingStart();
	function httpGetClass(parent,strURL,strParam,strResultID){
		this.parent = parent;
	    this.strURL = strURL;
	    this.strParam = strParam;
	    this.strResultID = strResultID;
		this.showResponse = function(originalRequest) {
			parent.loadingEnd();
			parent.$(strResultID).innerHTML = originalRequest.responseText;
			if(m_idChange != undefined && m_idChange) {
				setA(strResultID,"id",m_idChange);
			}
			if(funcName != undefined) {
				funcName();
			}
		}
		this.error = function(originalRequest) {
			parent.loadingEnd();
			alert("データを受信出来ませんでした。");
		}
	}
	httpGetClass.prototype.Repuest = function() {
		this.parent.$("loadingLayer").style.visibility="visible";
		var myAjax = new Ajax.Request(
			this.strURL,
			{
				method: method, 
				parameters:this.strParam + "&cache="+(new Date()).getTime(), 
				onSuccess :this.showResponse,
				onFailure :this.error
			});
	}

	var request = new httpGetClass(this,strURL,strParam,strResultID);
	request.Repuest();

	return;
}

//---------------------------------------------------
//関数名	function getHtml3(strURL,strParam,strResultID,method)
//機能		HTML取得(引数の関数を実行する)
//---------------------------------------------------
function getHtml3(strURL,strParam,strResultID,method,funcName)
{
	var url = strURL;
	var pars = '';
	if(method != 'post') method = 'get';

	function httpGetClass(parent,strURL,strParam,strResultID,funcName){
		this.parent = parent;
	    this.strURL = strURL;
	    this.strParam = strParam;
	    this.strResultID = strResultID;
		this.showResponse = function(originalRequest) {
			parent.$(strResultID).innerHTML = "";
			parent.$(strResultID).innerHTML = originalRequest.responseText;
			funcName();
		}
		this.error = function(originalRequest) {
			alert("データを受信出来ませんでした。");
		}
	}
	httpGetClass.prototype.Repuest = function() {
		var myAjax = new Ajax.Request(
			this.strURL,
			{
				method: method, 
				parameters:this.strParam + "&cache="+(new Date()).getTime(), 
				onSuccess :this.showResponse,
				onFailure :this.error
			});
	}

	var request = new httpGetClass(this,strURL,strParam,strResultID,funcName);
	request.Repuest();

	return;
}

//---------------------------------------------------
//関数名	moveText(in_strMode,in_nThreadID,in_nTextID,method)
//機能		テキスト移動
//in_strMode:prev、first、last、next
//---------------------------------------------------
function moveText(in_strMode,in_nThreadID,in_nTextID)
{
	var strResultID = "TEXT_TR" + in_nThreadID;
	var strUserID = A("initData","user");
	var strParam = "m=3&user=" + strUserID + "&thid=" + in_nThreadID + "&tid=" + in_nTextID;

	if(in_strMode == "prev" || in_strMode == "first" || in_strMode == "last" || in_strMode == "next") {
		getHtml3(A("initData","script"),strParam + "&mode=" + in_strMode,strResultID,"get",
			function (){
				startScroll("THREAD_TABLE" + in_nThreadID);
			}
		);
//		startScroll("THREAD_TABLE" + in_nThreadID);
		return false;
	}
}

//---------------------------------------------------
//関数名	moveThread(in_nThreadID)
//機能		スレッド移動
//---------------------------------------------------
function moveThread(in_nThreadID,in_nTargetThreadID)
{
	//移動先がすでに表示されてないか調べる。あったら、そこに飛ぶ
	if(checkSameThread(in_nTargetThreadID)) {
		return false;
	}
	var strResultID = "THREAD_TABLE" + in_nThreadID;
	var strReplaceID = "THREAD_TABLE" + in_nTargetThreadID;
	var strUserID = A("initData","user");

	var strParam = "m=2&user=" + strUserID + "&thid=" + in_nTargetThreadID;
	getHtml2(A("initData","script"),strParam,strResultID,"get",strReplaceID);

	return false;
}

//<span id="THREAD_TABLE20061207150440"></span>
//---------------------------------------------------
//関数名	checkSameThread(in_nTargetThreadID)
//機能		移動先のスレッドがすでに表示されてるかチェック
//---------------------------------------------------
function checkSameThread(in_nTargetThreadID) {
	var aTag = document.getElementsByTagName('span');
	var strTargetID = "THREAD_TABLE" + in_nTargetThreadID;

	for (var i=0; i < aTag.length; i++) {
		if (aTag.item(i).id == strTargetID) {
			startScroll(strTargetID);
			return true;
		}
	}
	return false;
}

//<span class="text_title" id="baseID20070111190056" firstID="20070316144015" endID="20070316144015">
//---------------------------------------------------
//関数名	checkSameText(in_nTargetThreadID,in_nTargetTextID,)
//機能		移動先のスレッドがすでに表示されてるかチェック
//---------------------------------------------------
function checkSameText(in_nTargetThreadID,in_nTargetTextID) {
	var aTag = document.getElementsByTagName('span');
	var strTargetID = "baseID" + in_nTargetThreadID;

	if(in_nTargetTextID == 0) {
		if(checkSameThread(in_nTargetThreadID)) return false;
	}
	else {
		for (var i=0; i < aTag.length; i++) {
			if (aTag.item(i).id == strTargetID && aTag.item(i).firstID == in_nTargetTextID) {
				startScroll(strTargetID);
				return false;
			}
		}
	}
	return true;
}


//---------------------------------------------------
//関数名	startScroll(targetID)
//機能		スムーススクロール開始
//---------------------------------------------------
function startScroll(targetID){
    element = $(targetID);
    var endPos = Position.cumulativeOffset(element);
	var nowPos = getPageScroll();
	var moveValueY = 0;

	moveValueY = Math.abs(endPos[1] - nowPos[1]) / 50;

	if(endPos[1] < nowPos[1]) {
		moveValueY = moveValueY * -1;
	}
	else if(endPos[1] == nowPos[1])
		return;

	smoothScroll(nowPos,endPos,moveValueY,false);
}

//---------------------------------------------------
//関数名	smoothScroll(nowPos,endPos,moveValueY)
//機能		スムーススクロール　タイマーで再呼び出し
//---------------------------------------------------
function smoothScroll(nowPos,endPos,moveValueY,isSlow){
	window.scrollTo(nowPos[0], nowPos[1]);

	if(moveValueY > 0) {
		if(nowPos[1] < endPos[1]) {
			nowPos[1] += moveValueY;
			if(!isSlow && endPos[1] - nowPos[1] > moveValueY) {
				if(moveValueY >= 200) moveValueY = 200;
				else moveValueY += moveValueY / 10;
			}
			else {
				if(!isSlow) {
					nowPos[1] -= moveValueY;
					moveValueY = moveValueY / 5;
				}
				else {
					moveValueY -= moveValueY / 10 + 1;
				}
				if(moveValueY < 5) moveValueY = 5;
				isSlow = true;
			}
		}
		if(nowPos[1] >= endPos[1]) {
			window.scrollTo(nowPos[0], endPos[1]);
			return;
		}
	}
	else {
		if(nowPos[1] > endPos[1]) {
			nowPos[1] += moveValueY;
			if(!isSlow && endPos[1] - nowPos[1] < moveValueY) {
				if(moveValueY <= -200) moveValueY = -200;
				else moveValueY -= Math.abs(moveValueY) / 10;
			}
			else {
				if(!isSlow) {
					nowPos[1] -= moveValueY;
					moveValueY = moveValueY / 5;
				}
				else {
					moveValueY -= moveValueY / 10 + 1;
				}
				if(moveValueY > -5) moveValueY = -5;
				isSlow = true;
			}
		}
		if(nowPos[1] <= endPos[1]) {
			window.scrollTo(nowPos[0], endPos[1]);
			return;
		}
	}
	setTimeout(function (){smoothScroll(nowPos,endPos,moveValueY,isSlow);},5);
}



//---------------------------------------------------
//関数名	viewThread(in_nThreadID)
//機能		スレッド移動
//---------------------------------------------------
function viewThread(in_nThreadID)
{
	//移動先がすでに表示されてないか調べる。あったら、そこに飛ぶ
	if(checkSameThread(in_nThreadID)) {
		return false;
	}
	var strResultID = "INDEX_THREAD_CONTENTS";
	var strUserID = A("initData","user");
	var strParam = "m=2&user=" + strUserID + "&thid=" + in_nThreadID;
	window.scrollTo(0,0);
	getHtml2(A("initData","script"),strParam,strResultID);
	return false;
}


//---------------------------------------------------
//関数名	moreSister(mode,in_ThreadID)
//機能		姉妹スレッド一覧を取ってくる
//---------------------------------------------------
function moreSister(mode,in_ThreadID)
{
	var strResultID = "THREAD_SISTER" + in_ThreadID;
	var strUserID = A("initData","user");
	if(in_ThreadID != "") {
		var strParam = "m=4&user=" + strUserID + "&thid=" + in_ThreadID + "&mode=" + mode;
		getHtml(A("initData","script"),strParam,strResultID);
	}
	return false;
}

//---------------------------------------------------
//関数名	viewAllThread(mode)
//機能		スレッド一覧を取ってくる
//---------------------------------------------------
function viewAllThread(mode)
{
	var strResultID = "INDEX_THREAD_LIST";
	var strUserID = A("initData","user");
	if(mode == "all" || mode == "part") {
		var strParam = "m=5&user=" + strUserID + "&thid=0&mode=" + mode;
		getHtml(A("initData","script"),strParam,strResultID);
	}
	return false;
}
//---------------------------------------------------
//関数名	changeText(in_ThreadID)
//機能		SELECTBOXのテキスト移動
//---------------------------------------------------
function changeText(selection,in_nThreadID)
{
	var strResultID = "TEXT_TR" + in_nThreadID;
	var strUserID = A("initData","user");

	//SELECTの選択値を取る
	var selectIndex = selection.selectedIndex;
	var SelectValue = selection.options[selectIndex].value;

	if(SelectValue == "five_prev" || SelectValue == "ten_prev" || SelectValue == "all") {
		var strParam = "m=3&user=" + strUserID + "&thid=" + in_nThreadID + "&tid=" + A("baseID" + in_nThreadID,"firstID");
		getHtml2(A("initData","script"),strParam + "&mode=" + SelectValue,strResultID);
	}
	else if(SelectValue == "five_next" || SelectValue == "ten_next") {
		var strParam = "m=3&user=" + strUserID + "&thid=" + in_nThreadID + "&tid=" + A("baseID" + in_nThreadID,"endID");
		getHtml2(A("initData","script"),strParam + "&mode=" + SelectValue,strResultID);
	}
	else if(SelectValue != "") {
		strParam = "m=3&user=" + strUserID + "&thid=" + in_nThreadID + "&tid=" + SelectValue;
		getHtml(A("initData","script"),strParam + "&mode=this",strResultID);
	}
	selection.selectedIndex = 0;
	return;
}

// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}


//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}
