// Containerで指定した領域の中にClassNameで指定する領域を複数つくる。
// Containerで指定した領域の外には、窓になるOuterContainerを作りoverflow:hidden
// 指定をする。
// なお、横スクロールの場合にはContainerの横幅を各アイテムの幅を足したものよりも
// 大きな幅に設定する。
// scrollItemsに渡す変数は、
// Container　= スクロールさせる領域
// ClassName　= 各アイテム
// Interval　 = 時間（間隔）--- 秒
// Offset　　 = border などがある場合の各アイテムの高さに足す数字（ピクセル数）
// Direction  = 方向
// prototype.jsとscriptaculous.js?load=effects,builderが必要(Draggableを使用する場合はdragdropも)
//
// 2010/08/17 作成 
// 2010/08/19 バグフィックス・仕様変更
// By YasushiAmano




//-----------------------------------------------------------------------------
// 各アイテムづつ縦スクロール。　最初のアイテムは最後のアイテムのあとに挿入。
//
// オプション (コンテナ,クラス名,間隔（秒）,オフセット,方向（0=up,1=down）)
//-----------------------------------------------------------------------------

function scrollItemsRepertY (Container,ClassName,Interval,Offset,Direction){

var sib_list = $(Container).getElementsByClassName(ClassName);
var sib = $A(sib_list);
var i = 0;
var itemObject;
Interval = Interval * 1000;
var stopEventFlag = 0;
var objContainer = $(Container);

Element.setStyle(objContainer, {'position':'relative'}); //コンテナのポジション指定

for ( i = 0 ; i < sib.length ; i++ ){
Element.setStyle(sib[i], {'position':'relative'});
} //各アイテムのポジション指定

//イベントを監視---コンテナにマウスが乗ったらフラッグを立てる
Event.observe( objContainer , 'mouseover', function(){stopEventFlag = 1;});
Event.observe( objContainer , 'mouseout', function(){stopEventFlag = 0;});

//イベントを監視---Loadイベント発生時に下記を実行
Event.observe( window, "load", 
setInterval(function(){ //Intervalの秒数ごとに繰り返し処理

var topPos = objContainer.offsetTop; // Draggable用トップポジション記録

if (stopEventFlag == 0){ //コンテナにマウスが乗ったら実行中止

if (!Direction){          //Direction=0で上スクロール

itemObject = sib.shift(); //アイテムをスタックから取り出し
var itemHeightTemp = itemObject.offsetHeight + Offset; //アイテムの高さを算出
new Effect.Move( objContainer, {
y: 0 - itemHeightTemp ,                            //コンテナを上にアイテムの高さ分移動
queue:{scope:'myscope', position:'end'},           //スコープの最後に動作を貼り付け
afterFinish: function(){                           //アイテム移動後
objContainer.appendChild(itemObject);              //アイテムを移動
Element.setStyle(itemObject, {'display':'block'}); //消したアイテムを表示
                                                   //コンテナの移動を元に戻す
sib.push(itemObject);                              //アイテムをスタックの最後に追加
if (topPos != 0){objContainer.morph('top:0');}     //Draggable用ずれてたら戻す
else {Element.setStyle(objContainer, {'top':'0'});}//処理順対策でここで指定
} // end function
}); //end Effect.Move

} else {          //Direction=1で下スクロール

itemObject = sib.pop(); //アイテムの最後から取り出し
Element.setStyle(itemObject, {'display':'none'}); //アイテムを非表示（前準備）
objContainer.insertBefore(itemObject,objContainer.firstChild); //コンテナの直後にノードを追加
Effect.SlideDown(itemObject,{queue:{scope:'myscope', position:'end'}});//エフェクト
sib.unshift(itemObject);                           //アイテムをスタックの最初に追加
if (topPos != 0){objContainer.morph('top:0');}     //Draggable用ずれてたら戻す
                                                   //処理順対策でここで指定
}


} // end if
}, Interval) // end setInterval
); // end Event.observe window

}



//-----------------------------------------------------------------------------
// 各アイテムづつ横スクロール。　最初のアイテムは最後のアイテムのあとに挿入。
//
// オプション (コンテナ,クラス名,間隔（秒）,オフセット,方向（0=left,1=right）)
//-----------------------------------------------------------------------------

function scrollItemsRepertX (Container,ClassName,Interval,Offset,Direction){

var sib_list = $(Container).getElementsByClassName(ClassName);
var sib = $A(sib_list);
var i = 0;
var itemAllwidth = 0;
var itemObject;
Interval = Interval * 1000;
var stopEventFlag = 0;
var objContainer = $(Container);

Element.setStyle(objContainer, {'position':'relative'}); //コンテナのポジション指定
if (Direction){                                          //Directionが1なら右スクロール用スタイル
Element.setStyle(objContainer, {'float':'right'})
} else {
Element.setStyle(objContainer, {'float':'left'})
}

for ( i = 0 ; i < sib.length ; i++ ){
	Element.setStyle(sib[i], {'position':'relative'}); //各アイテムのポジション指定
	if (Direction){                                    //Directionが1なら右スクロール用スタイル
	Element.setStyle(sib[i], {'float':'right'})
	} else {
	Element.setStyle(sib[i], {'float':'left'})
	}
}

//イベントを監視---コンテナにマウスが乗ったらフラッグを立てる
Event.observe( objContainer, "mouseover", function(){stopEventFlag = 1;});
Event.observe( objContainer, "mouseout", function(){stopEventFlag = 0;});

//イベントを監視---Loadイベント発生時に下記を実行
Event.observe( window, "load", 
setInterval(function(){ //Intervalの秒数ごとに繰り返し処理

var leftPos = objContainer.offsetLeft;     //Draggable用左位置記録

if (stopEventFlag == 0){ //コンテナにマウスが乗ったら実行中止

itemObject = sib.shift(); //アイテムをスタックから取り出し
var itemWidthTemp = itemObject.offsetWidth + Offset; //アイテムの幅を算出

if (!Direction){itemWidthTemp = 0 - itemWidthTemp} //Directionが0なら左スクロール
new Effect.Move( objContainer, {
x: itemWidthTemp ,                            //コンテナを上にアイテムの高さ分移動
queue:{scope:'myscope', position:'end'},           //スコープの最後に動作を貼り付け
afterFinish: function(){                           //アイテム移動後

objContainer.appendChild(itemObject);              //アイテムの最後に消したアイテムを追加
Element.setStyle(itemObject, {'display':'block'}); //消したアイテムを表示
sib.push(itemObject);                              //アイテムをスタックの最後に追加

if (leftPos != 0){objContainer.morph('left:0');}     //コンテナの移動を元に戻す
else {Element.setStyle( objContainer, {'left':'0'});}//Draggable用ずれてたら戻す
                                                     //処理順対策でここで指定
} // end function
}); //end Effect.Move

} // end if
}, Interval) // end setInterval
); // end Event.observe window

}

//-----------------------------------------------------------------------------
// IEのMarqueeの代わり。
//
// オプション (コンテナ,クラス名,デュレーション)
// コンテナの幅分、先に右に移動させておいてから、各アイテムにEffect.Moveを設定
// Effect.Parallelで同時実行
//-----------------------------------------------------------------------------

function marqueeJV (Container,ClassName,Dura){
var sib_list = $(Container).getElementsByClassName(ClassName);
var sib = $A(sib_list);
var effectSib = new Array();
var AllOffsetWidth = $(Container).offsetWidth;
for ( i = 0 ; i < sib.length ; i++ ){
Element.setStyle(sib[i], {'position':'relative', 'left': AllOffsetWidth + 'px'});
effectSib.push(new Effect.Move( sib[i], {sync: true, scope:'marqueeJV', x: 0 - AllOffsetWidth }));
}
new Effect.Parallel(effectSib,{duration: Dura});
}


