﻿// JScript File
    var BrowserFadeType;
    var FirstImageIsActive = true;
    var crossing = false;
    var length = 2000; // 2 seconds
    var resolution = 40;    // 20 changes per second
    var fraction = 1;
    var seqTicks;
    var crossTimer = -1;
    var sequenceTimer = -1;
    var cross1;
    var cross2;
    var cross1PicName;
    var cross2PicName;
    var cross1TextName;
    var cross2TextName;
    var seqIndex = 0;
    function SetBrowserFadeType(anImg)
    {
	    if(typeof anImg.style.opacity != 'undefined')
	    {
		    BrowserFadeType = 'w3c';
	    }
	    else if(typeof anImg.style.MozOpacity != 'undefined')
	    {
		    BrowserFadeType = 'moz';
	    }
	    else if(typeof anImg.style.KhtmlOpacity != 'undefined')
	    {
		    BrowserFadeType = 'khtml';
	    }
	    else if(typeof anImg.filters == 'object')
	    {
		    //weed out win/ie5.0 by testing the length of the filters collection (where filters is an object with no data)
		    //then weed out mac/ie5 by testing first the existence of the alpha object (to prevent errors in win/ie5.0)
		    //then the returned value type, which should be a number, but in mac/ie5 is an empty string
		    BrowserFadeType = (anImg.filters.length > 0 && typeof anImg.filters.alpha == 'object' && typeof anImg.filters.alpha.opacity == 'number') ? 'ie' : 'none';
	    }
	    else
	    {
		    BrowserFadeType = 'none';
	    }
    }
    function CrossFade(Fraction, item1, item2)
    {
        switch(BrowserFadeType)
        {
	        case 'ie' :
		        item1.filters.alpha.opacity = Fraction * 100;
		        item2.filters.alpha.opacity = (1 - Fraction) * 100;
		        break;
    			
	        case 'khtml' :
		        item1.style.KhtmlOpacity = Fraction;
		        item2.style.KhtmlOpacity = (1 - Fraction);
		        break;
    			
	        case 'moz' : 
		        //restrict max opacity to prevent a visual popping effect in firefox
		        item1.style.MozOpacity = (Fraction == 1 ? 0.9999999 : Fraction);
		        item2.style.MozOpacity = (1 - Fraction);
		        break;
    			
	        default : 
		        //restrict max opacity to prevent a visual popping effect in firefox
		        item1.style.opacity = (Fraction == 1 ? 0.9999999 : Fraction);
		        item2.style.opacity = (1 - Fraction);
        }
    }
    function DoCrossFade()
    {
        if (crossTimer != -1)
        {
            clearInterval(crossTimer);
            crossTimer = -1;
        }
        fraction = 1;
        ++seqIndex;
        if (seqIndex >= imgSequence.length)
            seqIndex = 0;
        PrepareFadeToTarget(seqIndex, !FirstImageIsActive);
        if (BrowserFadeType == 'none')
        {
            cross1.style.visibility = FirstImageIsActive ? "hidden" : "visible";
            cross2.style.visibility = FirstImageIsActive ? "visible" : "hidden";
            FirstImageIsActive = !FirstImageIsActive;
        }
        else
        {
            if (FirstImageIsActive)
                CrossFade(fraction, cross1, cross2);
            else
                CrossFade(fraction, cross2, cross1);
            cross1.style.visibility='visible';
            cross2.style.visibility='visible';
            crossTimer = setInterval('CrossTimer()', 50);
        }
        return false;
    }
    function PrepareFadeToTarget(index, firstImage)
    {
        var cross = firstImage ? cross1 : cross2;
        var crossPic = firstImage ? cross1PicName : cross2PicName;
        var crossText = firstImage ? cross1TextName : cross2TextName;
        // set the new picture
        if (imgSequence[index].ImgSrc == null)  // no background picture
        {
            cross.style.backgroundColor = imgSequence[index].BackColour;
            crossPic.src = "Images/spacer.gif";
        }
        else
        {
            crossPic.src = imgSequence[index].ImgSrc;
        }
        crossPic.style.visibility = 'visible';
        if (imgSequence[index].Text != null)
        {
            crossText.style.visibility = 'visible';
            crossText.style.fontFamily = imgSequence[index].Font;
            crossText.innerHTML = imgSequence[index].Text;
            crossText.style.fontSize = imgSequence[index].FontSize;
            crossText.style.top = imgSequence[index].Top;
            crossText.style.left = imgSequence[index].Left;
            crossText.style.width = imgSequence[index].Width;
            crossText.style.height = imgSequence[index].Height;
            crossText.style.textAlign = imgSequence[index].HorzAlign;
            crossText.style.verticalAlign = imgSequence[index].VertAlign;
            crossText.style.color = imgSequence[index].Colour;
            
        }
        else
        {
            crossText.style.visibility = 'hidden';
        }
    }
    function CrossTimer()
    {
        if (fraction < 0.05)
        {
            clearInterval(crossTimer);
            crossTimer = -1;
            cross1.style.visibility = FirstImageIsActive ? 'hidden' : 'visible';
            cross2.style.visibility = FirstImageIsActive ? 'visible' : 'hidden';
            FirstImageIsActive = ! FirstImageIsActive;
            StartSequenceTimer();
            return;
        }
        fraction -= .025;
        if (FirstImageIsActive)
            CrossFade(fraction, cross1, cross2);
        else
            CrossFade(fraction, cross2, cross1);
    }
    function NextInSequence()
    {
        ++seqIndex;
        if (seqIndex >= imgSequence.length)
            seqIndex = 0;
        seqTicks = 0;
        crossing=false;
    }
    function CrossFadeABit()
    {
        fraction -= .1;
        var cross1 = document.getElementById("Cross1");
        var cross2 = document.getElementById("Cross2");
        CrossFade(fraction, cross1, cross2);
    }

    function InitialiseCross()
    {
        SetBrowserFadeType(cross1);
        seqIndex = 0;
        FirstImageIsActive = true;
        PrepareFadeToTarget(0, true);
        StartSequenceTimer();
    }
    function StartSequenceTimer()
    {
        seqTicks = 0;
        sequenceTimer = setInterval('SequenceTimer()', 1000);
    }
    function SequenceTimer()
    {
        if (seqTicks > imgSequence[seqIndex].Seconds)
        {
            clearInterval(sequenceTimer);
            sequenceTimer = -1;
            DoCrossFade();
        }
        ++seqTicks;
    }

/////////////////////////////////////////////////
//      Sequence processing
//
////////////////////////////////////////////////

function SequenceElement(imgSrc, backColour, text, colour, font, fontsize, width, height, top, left, horzAlign, vertAlign, seconds)
{
    this.ImgSrc = imgSrc;
    this.BackColour = backColour;
    this.Colour = colour;
    this.Text = text;
    this.Font = font;
    this.FontSize = fontsize;
    this.Width = width;
    this.Height = height;
    this.Top = top;
    this.Left = left;
    this.HorzAlign = horzAlign;
    this.VertAlign = vertAlign;
    this.Seconds = seconds;
}