/**
 *  author:		Timothy Groves - http://www.brandspankingnew.net
 *	version:	1.3 - 2006-11-02
 *				1.2 - 2006-11-01
 *				1.1 - 2006-09-29
 *				1.0 - 2006-09-25
 *
 *	requires:	nothing
 *
 */

var useBSNns;

if (useBSNns)
{//オブジェクトが生成されている場合
	if (typeof(bsn) == "undefined")
		bsn = {}
	var _bsn = bsn;
}
else
{//オブジェクトが生成されていない場合
	var _bsn = this;
}

_bsn.Crossfader = function (divs, fadetime, delay )
{//コンストラクタ
	
	this.nAct = -1;
	this.aDivs = divs;
	
	try{//まずは全ての要素を非表示に設定する
		for (i=0;i<divs.length;i++)
		{

			this.currentContainer = document.getElementById(divs[i]);
			this.currentContainer.style.position = "absolute";
//YM DEL START
//YM			this.currentContainer.style.left = "195px";
//YM			this.currentContainer.style.top = "140px";
//YM DEL END
			this.currentContainer.style.opacity = 0;
	//		this.currentContainer.style.position = "absolute";
			this.currentContainer.style.filter = "alpha(opacity=0)";
			//this.currentContainer.style.display = "none";
			this.currentContainer.style.visibility = "hidden";
		}
	}catch(e){
		alert(e.message);
	}

	this.nDur = fadetime;
	this.nDelay = delay;
	
	this._newfade();
}


_bsn.Crossfader.prototype._newfade = function()
{
	try{
		if (this.nID1) {
			clearInterval(this.nID1);
			window.status = "interval clear.";
		}
		
		this.nOldAct = this.nAct;
		this.nAct++;
		if (!this.aDivs[this.nAct])	this.nAct = 0;
		
		if (this.nAct == this.nOldAct)
			return false;
		
		document.getElementById( this.aDivs[this.nAct] ).style.visibility = "visible";
		
		this.nInt = 50;
		this.nTime = 0;
		
		this.resize();
		
		var p=this;
		//p.bgContainerFit2ContentsHeight(this.aDivs[this.nAct], this.bgObjectsArr);//表示しようとしているコンテンツの高さを確保(背景領域確保オブジェクトの高さをコンテンツ高さに応じて確保する)

		this.nID2 = setInterval(function() { p._fade() }, this.nInt);
	}catch(e){
		alert(e);
	}
}

_bsn.Crossfader.prototype.resize = function()
{//リサイズ
	try{
		//alert(this.aDivs[this.nAct]);
		
		if (this.bgObjectsArr != null && typeof(this.bgObjectsArr) != "undefined") {
		}else{
			this.bgObjectsArr = new Array();//クロスフェードの背景領域を確保しているGIFや、DIVなどのID群
			this.bgObjectsArr.push("div_back");
			this.bgObjectsArr.push("blank_gif");
			if (this.bgObjectsArr != null && typeof(this.bgObjectsArr) != "undefined") {
				//alert("this.bgObjectsArr empty. but recreated.");
			}
		}
		var divObj = this.aDivs[this.nAct];
		if (divObj != null && typeof(divObj) != "undefined") {
		}else{
			alert("divObj empty");
			divObj = this.aDivs[0];
		}
		this.bgContainerFit2ContentsHeight(divObj, this.bgObjectsArr);//表示しようとしているコンテンツの高さを確保(背景領域確保オブジェクトの高さをコンテンツ高さに応じて確保する)
		//this.bgContainerFit2ContentsHeight(this.aDivs[this.nAct], this.bgObjectsArr);//表示しようとしているコンテンツの高さを確保(背景領域確保オブジェクトの高さをコンテンツ高さに応じて確保する)

	}catch(e){
		alert(e);
		//alert(arguments.callee+"() : "+e.message);
	}
}

_bsn.Crossfader.prototype._fade = function()
{//徐々に消える効果
	try{
		this.nTime += this.nInt;
		
		var ieop = Math.round( this._easeInOut(this.nTime, 0, 1, this.nDur) * 100 );
		var op = ieop / 100;//透明度を計算
		document.getElementById( this.aDivs[this.nAct] ).style.opacity = op;
		document.getElementById( this.aDivs[this.nAct] ).style.filter = "alpha(opacity="+ieop+")";
		
		if (this.nOldAct > -1)
		{
			document.getElementById( this.aDivs[this.nOldAct] ).style.opacity = 1 - op;
			document.getElementById( this.aDivs[this.nOldAct] ).style.filter = "alpha(opacity="+(100 - ieop)+")";
		}
		
		if (this.nTime == this.nDur)
		{
			clearInterval( this.nID2 );
			
			if (this.nOldAct > -1) {
	//			document.getElementById( this.aDivs[this.nOldAct] ).style.display = "none";
				document.getElementById( this.aDivs[this.nOldAct] ).style.visibility = "hidden";
			}
			
			var p=this;
			this.nID1 = setInterval(function() { p._newfade() }, this.nDelay);//インターバル設定
		}
	}catch(e){
		alert(e);
	}
}



_bsn.Crossfader.prototype._easeInOut = function(t,b,c,d)
{
	return c/2 * (1 - Math.cos(Math.PI*t/d)) + b;
}

_bsn.Crossfader.prototype.bgContainerFit2ContentsHeight = function(chgContentId, bgObjectsArr) {
	try{
		this.footerOffsetPixel = 1;//下駄はかせる高さ
		if (chgContentId != null && typeof(chgContentId) != "undefined") {
			var chgContent = document.getElementById(chgContentId);
			var maxWidth = 715, maxHeight = 100;
			var pos = new AbsPos(chgContent);
			if (pos.width > maxWidth) {
				maxWidth = pos.width;
			}
			if (pos.height > maxHeight) {
				maxHeight = pos.height;
			}
			if (bgObjectsArr != null && typeof(bgObjectsArr) != "undefined") {
				var i, len=bgObjectsArr.length;
				for ( i=0; i<len; i++ ) {
					var bgObj = document.getElementById(bgObjectsArr[i]);
					//bgObj.style.width = String(maxWidth) + "px";
					bgObj.style.height = String(maxHeight+this.footerOffsetPixel) + "px";
					//bgObj.style.display="block";//タテサイズ確定したので表示する
				}
			}else{
				//alert("empty");
			}
			
			
			//var i, len= chgContentsArr.length;//保持しているコンテンツの数
			//var maxWidth = 715, maxHeight = 200;
			//for ( i=0; i<len; i++) {
			//	var chgContent = document.getElementById(chgContentsArr[i]);
			//	var pos_width = chgContent.clientWidth;
			//	var pos_height = chgContent.clientHeight;
			//	if (pos_width > maxWidth) {
			//		maxWidth = pos_width;
			//	}
			//	if (pos_height > maxHeight) {
			//		maxHeight = pos_height;
			//	}
			//	var pos = new AbsPos(chgContent);
			//	if (pos.width > maxWidth) {
			//		maxWidth = pos.width;
			//	}
			//	if (pos.height > maxHeight) {
			//		maxHeight = pos.height;
			//	}
			//}
			//var bgObj = document.getElementById(bgObjId);
			//bgObj.style.width = String(maxWidth) + "px";
			//bgObj.style.height = String(maxHeight) + "px";

			//alert(String(maxWidth) + "px "+String(maxHeight) + "px");
			//alert(bgGif);
			//var divBack = document.getElementById("div_back");
			//divBack.style.width = String(maxWidth) + "px";
			//divBack.style.height = String(maxHeight+10) + "px";
			
		}
	}catch(e){
		alert(e.message);
	}
	try{
		//背景オブジェクトを表示する
		if (bgObjectsArr != null && typeof(bgObjectsArr) != "undefined") {
			var i, len=bgObjectsArr.length;
			for ( i=0; i<len; i++ ) {
				var bgObj = document.getElementById(bgObjectsArr[i]);
				bgObj.style.display="block";//タテサイズ確定したので表示する
			}
		}else{
			//alert("empty");
		}
	}catch(e){
		alert(e.message);
	}
}

var AbsPos = function (obj) {
	try{
		//this.left = 0;
		//this.top = 0;
		this.width = obj.clientWidth;
		this.height = obj.clientHeight;
		//this.rewind = function(obj, start) {
		//	if (obj == document.body) {
		//		return;
		//	}
		//	this.left += obj.offsetLeft;
		//	this.top += obj.offsetTop;
		//	if ( !start && (obj.tagName == "TD" || obj.tagName == "TH") ) {
		//		this.left += obj.clientLeft;
		//		this.top += obj.clientTop;
		//	}
		//	this.rewind(obj.offsetParent, false);
		//}
		//this.rewind(obj, true);
	}catch(e){
		alert("AbsPos() : "+ e.message);
	}
}


//var AbsPos = function (obj) {
//	try{
//		this.left = 0;
//		this.top = 0;
//		this.width = obj.clientWidth;
//		this.height = obj.clientHeight;
//		this.rewind = function(obj, start) {
//			if (obj == document.body) {
//				return;
//			}
//			this.left += obj.offsetLeft;
//			this.top += obj.offsetTop;
//			if ( !start && (obj.tagName == "TD" || obj.tagName == "TH") ) {
//				this.left += obj.clientLeft;
//				this.top += obj.clientTop;
//			}
//			this.rewind(obj.offsetParent, false);
//		}
//		this.rewind(obj, true);
//	}catch(e){
//		//alert(e.message);
//	}
//}

//var getElementPosition = function (elem) {
//  var currentPosition = elem.getBoundingClientRect();
//  var pos = {left: 0, top: 0};
//  if (!!(window.attachEvent && !window.opera)) {
//    var html = document.documentElement;
//    var body = document.body;
//    pos.left = currentPosition.left + (body.scrollLeft || html.scrollLeft) - html.clientLeft;
//    pos.top = currentPosition.top + (body.scrollTop || html.scrollTop) - html.clientTop;
//  } else {
//    pos.left = Math.round(window.scrollX + currentPosition.left);
//    pos.top = Math.round(window.scrollY + currentPosition.top);
//  }
//  return pos;
//}

