//Code written by Ran Zafrir

function isArray(obj)
{
    return (obj.constructor.toString().indexOf("Array") != -1);
}

function makeClosure(execute)
{
    return function() {eval(execute);};
}

var isIE = document.all;

function ClickableImage(
    imageURL,
    imageClickedURL,
    imageMouseOverURL,
    imageAlt,
    imageClickedAlt,
    imageMouseOverAlt
    )
{
    this.image = imageURL.toLowerCase();
    this.imageClicked = imageClickedURL.toLowerCase();
    this.imageMouseOver = imageMouseOverURL.toLowerCase();
    this.alt = imageAlt;
    this.altClicked = imageClickedAlt;
    this.altMouseOver = imageMouseOverAlt;
}

function changeImages(
    imageIDs,
    images
    )
{
    if (!isArray(imageIDs))
    {
        imageID = imageIDs;
        imageIDs = new Array();
        imageIDs[0] = imageID;
    }
    for (externalCounter = 0; externalCounter < imageIDs.length; externalCounter++)
    {
        currentImage = document.getElementById(imageIDs[externalCounter]);
        
        if (currentImage.tagName == 'IMG')
        {
            for (internalCounter = 0; internalCounter < images.length; internalCounter++)
            {
                imageFound = false;
                nextCounter = (internalCounter + 1 == images.length) ? 0 : internalCounter + 1;
                nextAlt = ((typeof (images[nextCounter].alt) == 'string') ? images[nextCounter].alt : '');
                nextAltMouseOver = ((typeof (images[nextCounter].altMouseOver) == 'string') ? images[nextCounter].altMouseOver : '');
                nextAltClicked = ((typeof (images[nextCounter].altClicked) == 'string') ? images[nextCounter].altClicked : '');
                
                switch (currentImage.src.toLowerCase())
                {
                    case images[internalCounter].image:
                    {
                        currentImage.setAttribute('src', images[nextCounter].image);
                        currentImage.setAttribute('alt', nextAlt);
                        imageFound = true;
                        break;
                    }
                    case images[internalCounter].imageClicked:
                    {
                        currentImage.setAttribute('src', images[nextCounter].imageClicked);
                        currentImage.setAttribute('alt', nextAltClicked);
                        imageFound = true;
                        break;
                    }
                    case images[internalCounter].imageMouseOver:
                    {
                        currentImage.setAttribute('src', images[nextCounter].imageMouseOver);
                        currentImage.setAttribute('alt', nextAltMouseOver);
                        imageFound = true;
                        break;
                    }
                }
                
                if (imageFound)
                {
                    if (isIE)
                    {
                        currentImage.setAttribute('onmouseover', makeClosure('this.src = \'' + images[nextCounter].imageMouseOver + '\'; this.alt = \'' + nextAltMouseOver + '\';'));
                        currentImage.setAttribute('onmouseout', makeClosure('this.src = \'' + images[nextCounter].image + '\'; this.alt = \'' + nextAlt + '\';'));
                        currentImage.setAttribute('onmousedown', makeClosure('this.src = \'' + images[nextCounter].imageClicked + '\'; this.alt = \'' + nextAltClicked + '\';'));
                        currentImage.setAttribute('onmouseup', makeClosure('this.src = \'' + images[nextCounter].imageMouseOver + '\'; this.alt = \'' + nextAltMouseOver + '\';'));
                    }
                    else
                    {
                        currentImage.setAttribute('onmouseover', 'this.src = \'' + images[nextCounter].imageMouseOver + '\'; this.alt = \'' + nextAltMouseOver + '\';');
                        currentImage.setAttribute('onmouseout', 'this.src = \'' + images[nextCounter].image + '\'; this.alt = \'' + nextAlt + '\';');
                        currentImage.setAttribute('onmousedown', 'this.src = \'' + images[nextCounter].imageClicked + '\'; this.alt = \'' + nextAltClicked + '\';');
                        currentImage.setAttribute('onmouseup', 'this.src = \'' + images[nextCounter].imageMouseOver + '\'; this.alt = \'' + nextAltMouseOver + '\';');
                    }
                    
                    break;
                }
            }
        }
    }
}

function cycleImages(
    imageIDs,
    images
    )
{
    changeImages(
        imageIDs,
        images
        );
}

function startCyclingImages(
    interval,
    imageIDsParameter,
    imagesParameter
    )
{
    intervalID = setInterval('cycleImages(' + imageIDsParameter + ', ' + imagesParameter + ');', interval);
    return intervalID;
}