    function slideshow (containerID, containerWidth, containerHeight){
        //window.addEventListener?window.addEventListener("load",so_init,false):window.attachEvent("onload",so_init);
    
        var d=document, imgs = new Array(), zInterval = null, current=0, pause=false;
        
        var counterValue = 0;
        var bahTwo = true;
        var checkForFunction = true;
        var loadFirstTime = true;
                
        

        this.containerWidth = containerWidth;
        this.containerHeight = containerHeight;
    
        function checkHeights(dodis){
            ih = imgs[current].height;
        
            if (ih > (parseFloat(containerHeight) + 10)) {
                ihd = ih - parseFloat(containerHeight);         
                if (dodis < ihd) {
                    topStr = imgs[current].style.top;
                    pxStart = topStr.indexOf("px");
                    topVal = topStr.substring(0,pxStart);
                    //alert(topStr.substring(0,pxStart))
                    imgs[current].style.top = (topVal - 1) + "px";
                    dodis += 1;
                    bahTwo = false;
                    //the_timeout = setTimeout("parseFloat(containerHeight)(dodis)", 25);
                    the_timeout = setTimeout(function() {checkHeights(dodis);}, 50);
                } else { 
                    bahTwo = true;
                    setTimeout(so_xfade,4000);
                }
            }
            else {
                if (loadFirstTime == true){
                    loadFirstTime = false;
                    setTimeout(so_xfade,0);
                }
                else{
                    setTimeout(so_xfade,4000);
                }
            }
            previousImage = current;
        }
        function checkWidths(dodis){
            this.iw = imgs[current].width;
            if (iw > (parseFloat(containerWidth) + 10)) {
                iwd = iw - parseFloat(containerWidth);          
                if (dodis < iwd) {
                    leftStr = imgs[current].style.left;
                    pxStart = leftStr.indexOf("px");
                    leftVal = leftStr.substring(0,pxStart);
                    imgs[current].style.left = (leftVal - 1) + "px";
                    dodis += 1;
                    bahTwo = false;
                    //this.the_timeout = setTimeout(checkWidths, 25);
                    the_timeout = setTimeout(function() {checkWidths(dodis);}, 50);
                } else {
                    bahTwo = true;
                    setTimeout(so_xfade,4000);
                }
            }
            else {
                if (loadFirstTime == true){
                    loadFirstTime = false;
                    setTimeout(so_xfade,0);
                }
                else{
                    setTimeout(so_xfade,4000);
                }       
            }
            previousImage = current;
        }
        function so_init(containerID) {         
            if(!d.getElementById || !d.createElement)return;
            imgs = d.getElementById(containerID).getElementsByTagName("img");
            for(i=1;i<imgs.length;i++){
                imgs[i].xOpacity = 0;
            }
            //imgs[0].xOpacity = .99;

            var new_height = imgs[current].height/imgs[current].width * parseFloat(containerWidth);
            
            imgs[0].xOpacity = 50;
            if (new_height > parseFloat(containerHeight)) {
                checkHeights(0);
            }
            else {
                checkWidths(0);
            }
            
        }
    
        function so_xfade() {
            cOpacity = imgs[current].xOpacity;
            nIndex = imgs[current+1]?current+1:0;
            nOpacity = imgs[nIndex].xOpacity;
            
            cOpacity-=.05; 
            nOpacity+=.05;
            
            imgs[nIndex].style.display = "inline";
            imgs[current].xOpacity = cOpacity;
            imgs[nIndex].style.top = 0;
            imgs[nIndex].style.left = 0;
            imgs[nIndex].xOpacity = nOpacity;
            
            setOpacity(imgs[current]);
            setOpacity(imgs[nIndex]);
                    
            if(cOpacity<=0) {
                
                imgs[current].style.display = "none";
                current = nIndex;                   
                // check height of image and if falls outside of div then move up.
                x=new Image;
                x.src=imgs[current].src;
                
                iw=x.width;
                ih=x.height;
                ix=imgs[current].style.top;
                iy=imgs[current].style.left;
                
                if (imgs[previousImage]){
                    imgs[previousImage].style.top = "0px";
                    imgs[previousImage].style.left = "0px";
                }

                new_height = imgs[current].height/imgs[current].width * parseFloat(containerWidth);
                if (new_height > parseFloat(containerHeight)) {
                    checkHeights(0);
                }
                else {
                    checkWidths(0);
                }                   
                bahTwo = true;
                
            } else {
                setTimeout(so_xfade,50);
            }
            
            function setOpacity(obj) {
                if(obj.xOpacity>.99) {
                    obj.xOpacity = .99;
                    obj.style.filter = "alpha(opacity=100)";
                    return;
                }
                else {
                    obj.style.filter = "alpha(opacity=" + (obj.xOpacity*100) + ")";
                }
                obj.style.opacity = obj.xOpacity;
                obj.style.MozOpacity = obj.xOpacity;
            }
            
        }
        so_init(containerID);
    }
