
// IXF1.11 :: Image cross-fade 
// *****************************************************
// DOM scripting by brothercake -- http://www.brothercake.com/
//******************************************************
//global object
var ixf = { 'clock' : null, 'count' : 1 }
/*******************************************************



/*****************************************************************************
 List the images that need to be cached
*****************************************************************************/

ixf.imgs = [
	'galleryfiles/60/lambert%20wide.jpg',
	'galleryfiles/93/portofino%20wide.jpg',
	'galleryfiles/10/lance%20wide.jpg',
	'galleryfiles/45/wideSH.jpg',
	'galleryfiles/68/flintrock%20showcase%20wide.jpg'	];

ixf.imgs_sq = [
	'galleryfiles/60/Lambert%20square2.jpg',
	'galleryfiles/93/portofino%20square.jpg',
	'galleryfiles/10/lance%20square.jpg',
	'galleryfiles/45/squareSH.jpg',
	'galleryfiles/68/flintrock%20showcase%20square.jpg'	];

ixf.imgs_desc = [
	'LAMBERT',
	'PORTOFINO',
	'LAKE AUSTIN',
	'MAJESTIC HILLS',
	'FLINTROCK FALLS'];

ixf.imgs_longdesc = [
	'Peacefull in Barton Creek...',
	'A pool with a view of Barton Creek...',
	'A modern contemporary pool design on Lake Austin...',
	'modern pool in Majestic Hills. This home is now for sale! Please contact us to set an appointment to view the home.',
	'Peoples Choice in the 2003 Flintrock Parade of Homes...'];

ixf.imgs_id = [
	'60',
	'93',
	'10',
	'45',
	'68'];

ixf.imgs_loc = [
	'AUSTIN TEXAS',
	'AUSTIN TEXAS',
	'AUSTIN TX',
	'AUSTIN TEXAS',
	'AUSTIN TEXAS'];

/*****************************************************************************
*****************************************************************************/


function crossfade_load() {
	setTimeout("crossfade_handler()",0)
}

function crossfade_handler() {

	var imageName = document.getElementById('test').src;
	var theImage = document.getElementById('test');
	var theSmallImage = document.getElementById('test2');
		
	var length = ixf.imgs.length;
	
	var pass = 'n';
	
	for (i=0;i<length;i++) {
		var detector = new RegExp;
		detector = ixf.imgs[i];
				
		if (imageName.match(detector)) {
			var nextImg = ixf.imgs[i+1];
			var nextSmallImg = ixf.imgs_sq[i+1];
						
			var theValue = i+1;
			
			if (i+1 == length) {
				var nextImg = ixf.imgs[0];
				var nextSmallImg = ixf.imgs_sq[0];
				
				var theValue = 0;
			}
			
			pass = 'y';
		}
	}
	
	if (pass == 'n') {
		var nextImg = ixf.imgs[0];
		var nextSmallImg = ixf.imgs_sq[0];
		
		var theValue = 0;
	}

	crossfade(theImage, nextImg, '2', ' ',theSmallImage,nextSmallImg);

	var image_name = document.getElementById("image_info").getElementsByTagName('div');	
	var myLinks = document.getElementById("all_photo").getElementsByTagName('a');
	var galName = ixf.imgs_desc[theValue];
	var galLoc = ixf.imgs_loc[theValue];
	var galDesc = ixf.imgs_longdesc[theValue];
	
	image_name[0].innerHTML = galName;
	image_name[1].innerHTML = galLoc;
	document.getElementById("description").innerHTML = galDesc;
		
	for (i=0;i<myLinks.length;i++) {
		myLinks[i].href = ('gallery.php?gallery=' + galName);
	}
	
	// new image
	var newValue = theValue + 1;
	
	if (!ixf.cache[newValue]) {
		ixf.cache[newValue] = new Image;
		ixf.cache[newValue].src = ixf.imgs[newValue];
	
		ixf.cache_sq[newValue] = new Image;
		ixf.cache_sq[newValue].src = ixf.imgs_sq[newValue];
	}

	setTimeout("crossfade_handler()",10000);

}


//cache the images
ixf.imgsLen = ixf.imgs.length;
ixf.cache = [];
ixf.cache_sq = [];

for(var i=0; i<=1; i++)
{
	ixf.cache[i] = new Image;
	ixf.cache[i].src = ixf.imgs[i];

	ixf.cache_sq[i] = new Image;
	ixf.cache_sq[i].src = ixf.imgs_sq[i];
}


//crossfade setup function
function crossfade()
{
	//if the timer is not already going
	if(ixf.clock == null)
	{
		//copy the image object 
		ixf.obj = arguments[0];
		ixf.obj_sq = arguments[4];
		
		//copy the image src argument 
		ixf.src = arguments[1];
		ixf.src_sq = arguments[5];
				
		//store the supported form of opacity
		if(typeof ixf.obj.style.opacity != 'undefined')
		{
			ixf.type = 'w3c';
		}
		else if(typeof ixf.obj.style.MozOpacity != 'undefined')
		{
			ixf.type = 'moz';
		}
		else if(typeof ixf.obj.style.KhtmlOpacity != 'undefined')
		{
			ixf.type = 'khtml';
		}
		else if(typeof ixf.obj.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
			ixf.type = (ixf.obj.filters.length > 0 && typeof ixf.obj.filters.alpha == 'object' && typeof ixf.obj.filters.alpha.opacity == 'number') ? 'ie' : 'none';
		}
		else
		{
			ixf.type = 'none';
		}
		
		
		//change the image alt text if defined
		if(typeof arguments[3] != 'undefined' && arguments[3] != '')
		{
			ixf.obj.alt = arguments[3];
			ixf.obj_sq.alt = arguments[3];
		}
		
		//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.getElementsByTagName('body')[0].appendChild((typeof document.createElementNS != 'undefined') ? document.createElementNS('http://www.w3.org/1999/xhtml', 'img') : document.createElement('img'));
			ixf.newimg_sq = document.getElementsByTagName('body')[0].appendChild((typeof document.createElementNS != 'undefined') ? document.createElementNS('http://www.w3.org/1999/xhtml', 'img') : document.createElement('img'));

			//move it to superimpose original image
			ixf.newimg.style.left = ixf.getRealPosition(ixf.obj, 'x') + 'px';
			ixf.newimg.style.top = ixf.getRealPosition(ixf.obj, 'y') + 'px';
			ixf.newimg_sq.style.left = ixf.getRealPosition(ixf.obj_sq, 'x') + 'px';
			ixf.newimg_sq.style.top = ixf.getRealPosition(ixf.obj_sq, 'y') + 'px';

			//set positioning classname
			ixf.newimg.className = 'idupe';
			ixf.newimg_sq.className = 'idupe';
			
			//set src to new image src
			ixf.newimg.src = ixf.src;
			ixf.newimg_sq.src = ixf.src_sq;
						
			//copy and convert fade duration argument 
			ixf.length = parseInt(arguments[2], 10) * 1000;
			
			//create fade resolution argument as 20 steps per transition
			ixf.resolution = parseInt(arguments[2], 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.obj_sq.src = ixf.src_sq;
		}
		
	}
};


//crossfade timer function
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))
	{
		//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;
		ixf.obj_sq.src = ixf.src_sq;
	}
	
	//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;

			ixf.obj_sq.filters.alpha.opacity = ixf.count * 100;
			ixf.newimg_sq.filters.alpha.opacity = (1 - ixf.count) * 100;

			break;
			
		case 'khtml' :
			ixf.obj.style.KhtmlOpacity = ixf.count;
			ixf.newimg.style.KhtmlOpacity = (1 - ixf.count);

			ixf.obj_sq.style.KhtmlOpacity = ixf.count;
			ixf.newimg_sq.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);

			ixf.obj_sq.style.MozOpacity = (ixf.count == 1 ? 0.9999999 : ixf.count);
			ixf.newimg_sq.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);

			ixf.obj_sq.style.opacity = (ixf.count == 1 ? 0.9999999 : ixf.count);
			ixf.newimg_sq.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';
	ixf.newimg_sq.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';
	ixf.newimg_sq.style.left = ixf.getRealPosition(ixf.obj_sq, 'x') + 'px';
	ixf.newimg_sq.style.top = ixf.getRealPosition(ixf.obj_sq, 'y') + 'px';
	
	//if the counter is at the top, which is just after the timer has finished
	if(ixf.count == 1)
	{
		//remove the duplicate image
		ixf.newimg.parentNode.removeChild(ixf.newimg);
		ixf.newimg.style.background = '';
		ixf.newimg_sq.parentNode.removeChild(ixf.newimg_sq);
		ixf.newimg_sq.style.background = '';
	}
};



//get real position method
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;
};
