	////////////////////////////////////////////////////////////
	//mp3がすべて読み込まれたら呼ばれる
	function startXFaderBox()
	{
		//スクロールイベントを監視
		$(window).scroll(function () {
			setXFaderBox();
		});

		setXFaderBox();
	}

	function doMute()
	{
		$('#xfaderbox')[0].setMute(1);
	}

	function deMute()
	{
		$('#xfaderbox')[0].setMute(0);
		setXFaderBox();
	}
	////////////////////////////////////////////////////////////
	//クロスフェードさせる
	function setXFaderBox()
	{
		//現在のスクロール位置を求める
		var positionY = $('html').exScrollHeight() - $('html').exClientHeight();
		if( positionY == 0 ) positionY = 1;
		var percentY = $('html').exScrollTop() / positionY * 100;
		var positionX = $('html').exScrollWidth() - $('html').exClientWidth();
		if( positionX == 0 ) positionX = 1;
		var percentX = $('html').exScrollLeft() / positionX * 100;

		//debug(percentY+":"+percentX);

		//各mp3の音量を割り当てる
		for(i=0, len = mp3files.length; i < len; i++ )
		{
			//音を出す範囲
			var point1 = (contentsX * (i%7)); 
			var point2 = (contentsX * ((i%7)+1));
			var subflg = (i/7 >= 1);

			if( percentX >= point1 && percentX <= point2 )
			{
				var point3 = (100 - (percentX-point1)/point2*100 );
				if( subflg )
					point3 = point3 - (100-percentY);
				else
					point3 = point3 - percentY;
				//debug("コンテンツ:"+i+" / " + point1 +" - "+ point2 + " = " + point3 );
				if( point3 < 3.5 || point3 > 200 )
				{
					$('#xfaderbox')[0].setVolume(i,0);
				}
				else
				{
					$('#xfaderbox')[0].setVolume(i,point3);
				}
			}
			else
			{
				var point3 = 100 - ((point1 - percentX) / (contentsX) * 100);
				if( percentX >= (point1-contentsX) && percentX <= (point2+contentsX) )
				{
					if( point3 < 3.5 || point3 > 200 )
					{
						$('#xfaderbox')[0].setVolume(i,0);
					}
					else
					{
						if( subflg )
							point3 = point3 - (100-percentY);
						else
							point3 = point3 - percentY;
						if( point3 < 3.5 || point3 > 200 )
						{
							$('#xfaderbox')[0].setVolume(i,0);
						}
						else
						{
							//debug("対象外:"+i+" / " + point1 +" - "+ point2 + " = " + point3 );
							$('#xfaderbox')[0].setVolume(i,point3);
						}
					}
				}
				else
				{
					//debug("消音:"+i+" / " + point1 +" - "+ point2 + " = " + point3 );
					$('#xfaderbox')[0].setVolume(i,0);
				}
			}
		}
	}
	
	////////////////////////////////////////////////////////////
	function debug( _obj )
	{
		if( window.console )
		{
			console.log( _obj );
		}
	}

	////////////////////////////////////////////////////////////
	//スクロールの位置を取得
	$.fn.exScrollTop = function(){
	    return this.attr('tagName')=='HTML' ? $(window).scrollTop() : this.scrollTop();
	}

	$.fn.exScrollLeft = function(){
	    return this.attr('tagName')=='HTML' ? $(window).scrollLeft() : this.scrollLeft();
	}

	//スクロールバー有無、サイズ取得
	var isDisplayScrollBar=function(target,key){
		var val=target.css('overflow-'+key)
		if(val=='scroll')return true;
		if(val=='hidden')return false;
		if(val=='auto'||target.attr('tagName')=='HTML'){
			var method=(key=='y'?'Height':'Width');
			return target['exClient'+method]()< target['exScroll'+method]()
		}
		return false
	}

	$.fn.isDisplayScrollBar=function(key){
		return isDisplayScrollBar(this,key)
	}

	var scrollBarWidth=function(target){
		var w=jQuery.browser.msie?16:jQuery.browser.safari?15:17;
		return {
			x : target.isDisplayScrollBar('x')?w:0,
			y : target.isDisplayScrollBar('y')?w:0
		}
	}

	$.fn.scrollBarWidth=function(){
		return scrollBarWidth(this)
	}

	//非表示要素でも採寸できるようにする
	$.fn.measur=function(f){
		var o=this,ret;
		var hide=o.is(":hidden");
		if(hide)o.show();
		ret=f();	
		if(hide)this.hide();
		return ret;
	}

	//こっからがメイン
	$.fn.exClientHeight = function(){
		var o=(this[0]==window?$j('html'):this)
		return o.attr('clientHeight');
	}

	$.fn.exClientWidth = function(){
		var o=(this[0]==window?$j('html'):this)
		var s=o.measur(function(){return o.attr('clientWidth')});
		if(o.attr('tagName')!='HTML')return s;
		if(jQuery.browser.msie && jQuery.browser.version==7)
			return o.width();
		return s;
	}

	$.fn.exScrollHeight = function(){
		var o=this;
		var s=Math.max(
			o.measur(function(){return o.attr('scrollHeight')}),
			o.exClientHeight());
		if(o.attr('tagName')!='HTML')return s;
		if(jQuery.browser.msie && jQuery.browser.version==6)
			return $j(document).height();
		return s;
	}

	$.fn.exScrollWidth = function(){
		var o=this;
		return Math.max(
			o.measur(function(){return o.attr('scrollWidth')}),
			o.exClientWidth());
	}

	$.fn.exOffsetHeight = function(){
		var o=this;
		var s=o.measur(function(){return o.attr('offsetHeight')});
		if(o.attr('tagName')!='HTML')return s;
		if(jQuery.browser.msie && jQuery.browser.version==6)
			return s;
		return o.exClientHeight()+o.scrollBarWidth().x

	}

	$.fn.exOffsetWidth = function(){
		var o=this;
		var s=o.measur(function(){return o.attr('offsetWidth')});
		if(o.attr('tagName')!='HTML')return s;
		if(jQuery.browser.msie && jQuery.browser.version==6)
			return s;
		return o.exClientWidth()+o.scrollBarWidth().y
	}


