<!--
//global object
var ixf = { 'clock' : null, 'count' : 1 }
ixf.imgs=[];

var ptr_ImageCycle=0;
var ptr_ImageObjectRef=null;
var ptr_ImageHREFRef=null;

function WM_imageSwap(daImage, daSrc){
  var objStr,obj;

  // Check to make sure that images are supported in the DOM.
  if(document.images){
    // Check to see whether you are using a name, number, or object
    if (typeof(daImage) == 'string') {
      // This whole objStr nonesense is here solely to gain compatability
      // with ie3 for the mac.
      objStr = 'document.' + daImage;
      obj = eval(objStr);
      obj.src = daSrc;
//alert('Img src set a la Mac');
    } else if ((typeof(daImage) == 'object') && daImage && daImage.src) {
      daImage.src = daSrc;

//alert('Img src set directly');
    } else {
//    	alert('Image swap parameters were not understood\nImage='+daImage+'\nSrc='+daSrc);
    }
  } else {
//  	alert('No document images available');
  }
}


/**
 * Usage: Cycle_Images(ImageObjectRef,Time_MS'img url','img url','img url',...);
 * generates a WM_Preload_Image('image 1 URL', 'image 2 URL', 'image 3 URL', ...);
 * @access public
 * @return void
 **/
function Cycle_Images(ImageObjectRef,CycleTime,HREFObjectRef){
	var argLength = CycleImages.length;
	if ( document.images && argLength >= 1 ) {
		// set our Image Pointer reference, normally we have only 1 per page.
		ptr_ImageObjectRef=ImageObjectRef;
		ptr_ImageHREFRef=HREFObjectRef;
		// prepare the image cache, rely on the ixf object model.
		ixf.cache = [];
		// Loop through all the images found in the declarations of
		// CycleImages
		// CycleImages_Text
		// CycleImages_URLs

		for(arg=0;arg<argLength;arg++) {
			// For each arg, create a new image.
			if ( CycleImages[arg] != null ) {
				//document.WM.loadedImages[(arg-2)] = new Image();
				ixf.cache[arg] = new Image;
				// Then set the source of that image to the current argument.
				//document.WM.loadedImages[(arg-2)].src = Cycle_Images.arguments[arg];
				ixf.cache[arg].src = CycleImages[arg];
			}
		}
		ixf.imgsLen = ixf.cache.length;

		// Set the first image
		WM_imageSwap(ptr_ImageObjectRef,ixf.cache[0].src);

		// Set the Timer_Interval callback
		try{
			oInterval = window.setInterval("fnCycleImage()",CycleTime);
		} catch(e) {
			// if we get here, we should be looking at an alternative to the
			// cycling of the pictures.
		}

	}
}


/**
 * callBack function that gets summoned every X seconds to cycle the loaded
 * images.
 * @access public
 * @return void
 **/
function fnCycleImage(){
	if (ptr_ImageCycle+1 < ixf.imgsLen ) {
		ptr_ImageCycle=ptr_ImageCycle+1;
	} else {
		ptr_ImageCycle=0;
	}

	try{
		if (ptr_ImageHREFRef.location.value) {
			if (CycleImages_URLs[ptr_ImageCycle]) {
				ptr_ImageHREFRef.location.value=CycleImages_URLs[ptr_ImageCycle];
			} else {
				ptr_ImageHREFRef.location.value='';
			}
		}
	} catch(e) {
		// ai, maybe the HREF is undefined, we don't care.
	}


	if ( CycleImages_Text[ptr_ImageCycle] != undefined ) {
		var textovr=CycleImages_Text[ptr_ImageCycle];
	} else {
		var textovr="Image - rotation";
	}
	crossfade(ptr_ImageObjectRef, ixf.cache[ptr_ImageCycle].src, '1', textovr)

//	alert('Attempting to load '+document.WM.loadedImages[ptr_ImageCycle].src+' in our objectref');
//	WM_imageSwap(ptr_ImageObjectRef,document.WM.loadedImages[ptr_ImageCycle].src);
}




//crossfade setup function
function crossfade()
{
	//if the timer is not already going
	if(ixf.clock == null)
	{
		//copy the image object
		ixf.obj = arguments[0];

		//copy the image src argument
		ixf.src = arguments[1];

		//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];
		}

		//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'));

			//set positioning classname
			ixf.newimg.className = 'idupe';

// testing something
			//set src to new image src
			ixf.newimg.src = ixf.src;

			//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.style.display='block';
			//set src to new image src
//			ixf.newimg.src = ixf.src;
// eof test
			//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;
		}

	}
};


//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;
	}

	//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 duplicate image
		ixf.newimg.parentNode.removeChild(ixf.newimg);
	}
};



//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;
};



//-->
