




Effect.Wait=Class.create();
Object.extend(Object.extend(Effect.Wait.prototype,Effect.Base.prototype),{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
var options=Object.extend({},arguments[1]||{});
this.start(options);
}
});


if(typeof(AC)=="undefined")AC={};


AC.CrossfadeQueue=Class.create();
AC.CrossfadeQueue.prototype={
index:0,queue:null,container:null,scope:null,safetyDiv:null,delay:6.0,
fadeInTime:0.5,fadeOutTime:0.5,
defaultQueueName:"defaultXFadeQueue",
currentNode:null,
stopped:false,
initialize:function(nodes,container,delay,queueName,fadeInTime,fadeOutTime){
this.container=$(container);
this.scope=container;
this.queue=$A(nodes);

if(delay!=null)this.delay=delay;
if(queueName!=null)this.defaultQueueName=queueName;
if(fadeInTime!=null)this.fadeInTime=fadeInTime;
if(fadeOutTime!=null)this.fadeOutTime=fadeOutTime;



if(typeof(this.queue[0])=="string"){
this.container.innerHTML="";
}else{
for(var i=0;i<this.queue.length;i++){
this.queue[i].parentNode.removeChild(this.queue[i]);
}
}

this.next();

},

pauseTimeStamp:null,
pause:function(){
this.pauseTimeStamp=new Date().getTime();
var queue=Effect.Queues.get(this.defaultQueueName);


if(queue.interval)clearInterval(queue.interval);
Element.setOpacity(this.currentNode,1.0);
},

stop:function(){
this.stopped=true;
this.pause();
},

play:function(){
this.stopped=false;
this.resume();
},

resume:function(){

if(this.stopped){
return;
}

var queue=Effect.Queues.get(this.defaultQueueName);


var delay=new Date().getTime()-this.pauseTimeStamp;
queue.each(function(e){
e.startOn+=delay;
e.finishOn+=delay;
});
queue.interval=setInterval(queue.loop.bind(queue),40);
},

remove:function(element){
Element.setStyle(element,{zIndex:'0'});
Element.remove(element);
},

next:function(){
if(this.index>this.queue.length-1){
this.index=0;
}

if(this.currentNode){

Element.setStyle(this.currentNode,{zIndex:'2'});

new Effect.Opacity(this.currentNode,{duration:this.fadeOutTime,
transition:Effect.Transitions.linear,
from:1.0,to:0.0,
afterFinish:this.remove.bind(this,this.currentNode)
});
}

this.currentNode=this.createNode();

new Effect.Wait(this.currentNode,{duration:this.delay,
queue:{position:'end',scope:this.defaultQueueName},
afterFinish:this.next.bind(this)
});

this.index++;
},

createNode:function(){
var node=this.queue[this.index];

if(typeof(node)=='string'){
node=document.createElement('div');
node.innerHTML=this.queue[this.index];
}

Element.setOpacity(node,1.0);
Element.setStyle(node,{position:'absolute'});
Element.addClassName(node,'ACCrossfadeQueueElement');

node.mouseover=this.pause.bind(this);
node.mouseout=this.resume.bind(this);

this.container.appendChild(node);

return node;
}
}



function InitCrossFade(){
if(arguments.length>0){
var nodes=$A(InitCrossFade.arguments);
var objectReference=nodes.shift();
var holdTime=(typeof(nodes[nodes.length-1])=="number")?nodes.pop():Math.floor(Math.random()*5)+3;

new AC.CrossfadeQueue(nodes,objectReference,holdTime);
}
}
