
	var strImageObjectName = '' ;
   var intImageNumber = 0;
   var images = new Array();
	var ixf = { 'clock' : null, 'count' : 1 };

    //-------------------------------------------------------------------
	function DisplayImageDetails( pintImageIndex )
	{
	   document.getElementById('Counter').innerHTML = (pintImageIndex + 1) + '/' + images.length ;
	   document.getElementById('Caption').innerHTML = images[ pintImageIndex ].alt ;
	}

    //-------------------------------------------------------------------
	function DisplayImage( pintImageIndex )
	{
	   intImageNumber = pintImageIndex	 ;
	   document.getElementById( strImageObjectName ).src = images[ pintImageIndex ].src ;		
	   DisplayImageDetails( pintImageIndex );
	   
	}
    
	//-------------------------------------------------------------------
	function AddImageThumbNail( pintImageNumber, pobjImage )
    {
		var newThumb = null ;

		newThumb = document.getElementById('ThumbNails').appendChild((typeof document.createElementNS != 'undefined') ? document.createElementNS('http://www.w3.org/1999/xhtml', 'div') : document.createElement('div'));
		newThumb.id= "Thumb" + pintImageNumber;
		newThumb.className = "ThumbNail";
		newThumb.innerHTML = '<a onmouseup="DisplayImage(' + (pintImageNumber - 1) + ')">' + pintImageNumber + '</a>';	
	}
	
    //-------------------------------------------------------------------
    function AddImage( pstrImageReference, pstrImageCaption )
    {
       var newImage = null ;
		
		 newImage = new Image();
		
	    newImage.src = pstrImageReference ;
		 newImage.alt = pstrImageCaption ;
       images[images.length]= newImage ;
		
		AddImageThumbNail( images.length, newImage ) ;		
	}
    
    //-------------------------------------------------------------------
    function GetNextintImageNumber( currentintImageNumber )
    {
       var nextintImageNumber = 0 ;
        
       if( currentintImageNumber < images.length - 1 )
       {
           nextintImageNumber = currentintImageNumber + 1 ;
       }
       
       return nextintImageNumber ;        
    }
    
    //-------------------------------------------------------------------
    function GetBrowserType( pObject ) 
    {    
        var strBrowserType = 'none' ;
        
	    //store the supported form of opacity
	    if (typeof pObject.style.opacity != 'undefined')
		{ 
			strBrowserType = 'w3c' ;
			 
		} else if( typeof pObject.style.MozOpacity != 'undefined') 
		{ 		
			strBrowserType = 'moz' ;
			
		} else if( typeof pObject.style.KhtmlOpacity != 'undefined') 
		{ 
			strBrowserType ='khtml' ;
			
		} 
		else if(typeof pObject.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            
        	strBrowserType = (pObject.filters.length > 0 ) && ( typeof pObject.filters.alpha == 'object' ) && ( typeof pObject.filters.alpha.opacity == 'number') ? 'ie' : 'none' ;
	    }
	    
	    return strBrowserType ;
    }
    
    //--------------------------------------------------------------------
    function crossfade( pDestination, pImageURL, pDuration, pCaption )
    {
		var parentDIV = null ;

	    //if the timer is not already going
	    if(ixf.clock === null)
	    {
		    //copy the image object 
		    ixf.obj = document.getElementById( pDestination ) ;
        
          ixf.type = GetBrowserType( ixf.obj ) ;
            
		    //copy the image src argument 
		    ixf.src = pImageURL ; 		
    		    		
		    //change the image alt text if defined
		    if(typeof pCaption !== 'undefined' && pCaption !== '')
		    {
			    ixf.obj.alt = pCaption;
		    }
    		
		    //if any kind of opacity is supported
		    if(ixf.type != 'none')
		    {
			    //create a new image object and append it to body
			    //detecting support for namespaced element creation, in case we're in the XML DOM
			    ixf.newimg = document.getElementById(ixf.obj.parentNode.id).appendChild((typeof document.createElementNS != 'undefined') ? document.createElementNS('http://www.w3.org/1999/xhtml', 'img') : document.createElement('img'));
    			
			    ixf.newimg.id = 'PhotoFade' ;
    	        		
			    //set src to new image src
			    ixf.newimg.src = ixf.src ;
    			
			    //move it to superimpose original image
				ixf.newimg.style.position = 'absolute';			    
				ixf.newimg.style.left = ixf.getRealPosition(ixf.obj, 'x') + 'px';
				ixf.newimg.style.width = ixf.obj.width + 'px';
            ixf.newimg.style.height = ixf.obj.height + 'px';
				
			    //copy and convert fade duration argument 
			    ixf.length = parseInt( pDuration, 10) * 1000;
    			
			    //create fade resolution argument as 20 steps per transition
			    ixf.resolution = parseInt( pDuration, 10) * 20;
    			
			    //start the timer
			    ixf.clock = setInterval('ixf.crossfade()', ixf.length/ixf.resolution);
		    }
    		
		    //otherwise if opacity is not supported
		    else
		    {
			    //just do the image swap
			    ixf.obj.src = ixf.src;
		    }    		
	    }
    }

    //--------------------------------------------------------------------
    ixf.crossfade = function()
    {
       //decrease the counter on a linear scale
	    ixf.count -= (1 / ixf.resolution);
    	
	    //if the counter has reached the bottom
	    if(ixf.count < (1 / ixf.resolution))
	    {
          //alert ("counter") ;
		    //clear the timer
		    clearInterval(ixf.clock);
		    ixf.clock = null;
    		
		    //reset the counter
		    ixf.count = 1;
    		
		    //set the original image to the src of the new image

          ixf.obj.src = ixf.src;

       }

       //set new opacity value on both elements
	    //using whatever method is supported
	    switch(ixf.type)
	    {
		    case 'ie' :
             ixf.obj.filters.alpha.opacity = ixf.count * 100;
			    ixf.newimg.filters.alpha.opacity = (1 - ixf.count) * 100;
			    break;

		    case 'khtml' :
			    ixf.obj.style.KhtmlOpacity = ixf.count;
			    ixf.newimg.style.KhtmlOpacity = (1 - ixf.count);
			    break;

		    case 'moz' :
			    //restrict max opacity to prevent a visual popping effect in firefox
			    ixf.obj.style.MozOpacity = (ixf.count == 1 ? 0.9999999 : ixf.count);
			    ixf.newimg.style.MozOpacity = (1 - ixf.count);
			    break;

		    default :
			    //restrict max opacity to prevent a visual popping effect in firefox
			    ixf.obj.style.opacity = (ixf.count == 1 ? 0.9999999 : ixf.count);
			    ixf.newimg.style.opacity = (1 - ixf.count);
	    }
        
	    //now that we've gone through one fade iteration 
	    //we can show the image that's fading in
	    ixf.newimg.style.visibility = 'visible';
    	
	    //keep new image in position with original image
	    //in case text size changes mid transition or something
	    ixf.newimg.style.left = ixf.getRealPosition(ixf.obj, 'x') + 'px';
	    ixf.newimg.style.top = ixf.getRealPosition(ixf.obj, 'y') + 'px';
    	
	    //if the counter is at the top, which is just after the timer has finished
	    if(ixf.count == 1)
	    {
          // remove the new image as now completely 'faded''
          ixf.newimg.parentNode.removeChild(ixf.newimg);
	    }
    };

    //--------------------------------------------------------------------
    ixf.getRealPosition = function()
    {
	    this.pos = (arguments[1] == 'x') ? arguments[0].offsetLeft : arguments[0].offsetTop;
	    this.tmp = arguments[0].offsetParent;
	    while(this.tmp !== null)
	    {
		    this.pos += (arguments[1] == 'x') ? this.tmp.offsetLeft : this.tmp.offsetTop;
		    this.tmp = this.tmp.offsetParent;
	    }
    	
	    return this.pos;
    };

    //-------------------------------------------------------------------
    function SlideShow( pstrImageObjectName )
    {
        var nextintImageNumber = 0 ;
        
		  strImageObjectName = pstrImageObjectName ;

        nextintImageNumber = GetNextintImageNumber( intImageNumber ) ;
        crossfade( pstrImageObjectName, images[ nextintImageNumber ].src, 1, '' );
	   	
		  DisplayImageDetails( nextintImageNumber );
        intImageNumber = nextintImageNumber ;
		
		  setTimeout("SlideShow('" + strImageObjectName + "')",8000);
    }

    //-------------------------------------------------------------------
    
