JSFX.Layer.prototype.getPageX = function(el)
{
if(el == null)
el = this.elem;
return el.offsetLeft + (el.offsetParent ? this.getPageX(el.offsetParent) : 0);
}
JSFX.Layer.prototype.getPageY = function(el)
{
if(el == null)
el = this.elem;
return el.offsetTop + (el.offsetParent ? this.getPageY(el.offsetParent) : 0);
}
if(ns4)
{
JSFX.Layer.prototype.getPageX = function() { return this.elem.pageX; }
JSFX.Layer.prototype.getPageY = function() { return this.elem.pageY; }
}
/*************************************************************************************/
/*******************************************************************
*
* Function : VerticalScroller (Constructor)
*
* returns : a newly constructed News Scroller object
*
* Description : Constructs and initialises a VerticalScroller object.
* You can use addMessage() or addDiv BUT NOT BOTH
*
*****************************************************************/
JSFX.VerticalScroller = function()
{
this.isMessageScroller=true;
this.sx = 0;
this.sy = 0;
this.w = 100;
this.h = 100;
this.op = 0;
this.outerLayer = null;
this.scrollLayer = null;
this.bgColor = null;
this.bgImage = null;
this.theStyleStr = null;
this.messages = new Array();
this.currMessage = -1;
this.step = 2;
this.id = "JSFXScroll" + JSFX.VerticalScroller.no++;
this.holder = this.id + "_h";
this.content = this.id + "_c";
this.showTime = 1000;
this.animateIn = this.animateIn_StartScrollUp;
this.animateOut = this.animateOut_FadeDown;
this.animate = this.animateIn;
window[this.id] = this;
}
JSFX.VerticalScroller.no = 0;
JSFX.VerticalScroller.prototype.setAnimation = function(inAni, outAni)
{
if(inAni == 0)
this.animateIn = this.animateIn_StartScrollUp;
else if (inAni == 1)
this.animateIn = this.animateIn_StartScrollDown;
else
this.animateIn = this.animateIn_StartFadeUp;
if(outAni == 0)
this.animateOut = this.animateOut_ScrollUp;
else if (outAni == 1)
this.animateOut = this.animateOut_ScrollDown;
else
this.animateOut = this.animateOut_FadeDown;
this.animate = this.animateIn;
}
JSFX.VerticalScroller.prototype.toHtml = function(width, height)
{
this.w = width;
this.h = height;
var str = "";
if(ns4)
{
str = ''
+ ''
+ '';
}
else
{
str = '
';
}
return str;
}
JSFX.VerticalScroller.prototype.setShowTime = function(theInterval)
{
this.showTime = theInterval * 1000;
}
JSFX.VerticalScroller.prototype.setBgColor = function(color)
{
this.bgColor = color;
if(this.outerLayer != null)
this.outerLayer.setBgColor(color);
}
JSFX.VerticalScroller.prototype.setBgImage = function(theImage)
{
this.bgImage = theImage;
if(this.outerLayer != null)
this.outerLayer.setBgImage(theImage);
}
JSFX.VerticalScroller.prototype.setStyle = function(theStyleStr)
{
this.styleStr = theStyleStr;
}
JSFX.VerticalScroller.prototype.addMessage = function(message)
{
if(!this.isMessageScroller)
{
alert("Cannot add messages to a 'Div Scroller'");
return;
}
this.messages[this.messages.length] = message;
}
JSFX.VerticalScroller.prototype.addDiv = function(message)
{
if(this.isMessageScroller && this.messages.length >0)
{
alert("Cannot add Divs to a 'Message Scroller'");
return;
}
this.isMessageScroller = false;
this.messages[this.messages.length] = message;
}
JSFX.VerticalScroller.prototype.start = function()
{
//Initialise the DIV/Layer if not already done so
if(this.scrollLayer == null)
{
this.outerLayer = new JSFX.Layer(JSFX.findLayer(this.holder));
this.scrollLayer = new JSFX.Layer(JSFX.findLayer(this.content));
if(this.bgImage != null)
this.outerLayer.setBgImage(this.bgImage);
else if(this.bgColor != null)
this.outerLayer.setBgColor(this.bgColor);
}
this.animate();
}
JSFX.VerticalScroller.prototype.moveContent = function(x, y)
{
var px=0;
var py=0;
if(! this.isMessageScroller)
{
px=this.outerLayer.getPageX();
py=this.outerLayer.getPageY();
}
this.scrollLayer.moveTo(px + x, py + y);
if(! this.isMessageScroller)
{
if(this.sy > 0)
this.scrollLayer.clip(0,0,this.w, this.h - this.sy);
else
this.scrollLayer.clip(0, -this.sy,this.w, this.h);
}
}
JSFX.VerticalScroller.prototype.setNextMessage = function(x, y, o)
{
this.currMessage = (this.currMessage + 1) % this.messages.length;
this.sx=x;
this.sy=y;
this.op=o;
this.scrollLayer.hide();
if(this.isMessageScroller)
{
var str = "";
if(this.styleStr != null)
str += '';
str += this.messages[this.currMessage];
if(this.styleStr != null)
str += '';
this.scrollLayer.setContent(str);
}
else
{
this.scrollLayer = new JSFX.Layer(JSFX.findLayer(this.messages[this.currMessage]));
}
this.moveContent(this.sx, this.sy);
this.scrollLayer.setOpacity(this.op);
this.scrollLayer.show();
}
JSFX.VerticalScroller.prototype.animateIn_StartScrollUp = function()
{
this.setNextMessage(0, this.h, 100);
this.animate = this.animateIn_ScrollUp
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateIn_ScrollUp = function()
{
this.sy -= this.step;
this.moveContent(this.sx, this.sy);
if(this.sy <= 0)
{
this.animate=this.animateOut;
this.setTimeout("animate()", this.showTime);
}
else
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateIn_StartScrollDown = function()
{
this.setNextMessage(0, -this.h, 100);
this.animate = this.animateIn_ScrollDown
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateIn_ScrollDown = function()
{
this.sy += this.step;
this.moveContent(this.sx, this.sy);
if(this.sy >= 0)
{
this.animate=this.animateOut;
this.setTimeout("animate()", this.showTime);
}
else
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateIn_StartFadeUp = function()
{
this.setNextMessage(0, 0, 0);
this.animate = this.animateIn_FadeUp
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateIn_FadeUp = function()
{
this.op += 10;
this.scrollLayer.setOpacity(this.op);
if(this.op == 100)
{
this.animate = this.animateOut;
this.setTimeout("animate()", this.showTime);
}
else
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateOut_ScrollUp = function()
{
this.sy -= this.step;
this.moveContent(this.sx, this.sy);
if(this.sy <= -this.h)
this.animate=this.animateIn;
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateOut_ScrollDown = function()
{
this.sy += this.step;
this.moveContent(this.sx, this.sy);
if(this.sy >= this.h)
this.animate=this.animateIn;
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.animateOut_FadeDown = function()
{
this.op -= 10;
this.scrollLayer.setOpacity(this.op);
this.moveContent(this.sx, this.sy);
if(this.op == 0)
this.animate = this.animateIn;
this.setTimeout("animate()", 40);
}
JSFX.VerticalScroller.prototype.setTimeout = function(f, t)
{
setTimeout("window."+this.id+"."+f, t);
}
/*** If no other script has added it yet, add the ns resize fix ***/
if(navigator.appName.indexOf("Netscape") != -1 && !document.getElementById)
{
if(!JSFX.ns_resize)
{
JSFX.ow = outerWidth;
JSFX.oh = outerHeight;
JSFX.ns_resize = function()
{
if(outerWidth != JSFX.ow || outerHeight != JSFX.oh )
location.reload();
}
}
window.onresize=JSFX.ns_resize;
}