

	function O3_Rollover(xi_Image, xi_Qual)
	{
		var	SplitName = new Array();
		SplitName = xi_Image.src.match(/^(.+)\.(.+)/);
		if(!xi_Qual) xi_Qual = 'Over';
		O3_ImageSwap(xi_Image, SplitName[1] + xi_Qual + '.' + SplitName[2], 1);
		//O3_ImageSwap(xi_Image, '///file:TabWizGroupIconActiveOver.gif', 1);
	}


	function O3_ImageSwap(xi_Image, xi_AltImage_name, xi_Capture, xi_TranID)
	{
		var	O3_TranSets;
		var	O3_Tran;
		var	Image_obj;
		
		//	Check either a name or object has been passed and locate object if required
		if(typeof(xi_Image) == 'string')
		{
			Image_obj = ALTFP_getObjectByID(xi_Image);
		}
		else if(typeof(xi_Image) == 'object')
		{
			Image_obj = xi_Image;
		}
		else
		{
			alert('O3_ImageSwap : Called with Image of type ' + typeof(xi_Image));
		}
		
		
		//	Check we have an object
		if(Image_obj == null)
		{
			return;
		}
		
		if(xi_Capture)
		{
			O3_Tran = O3_TranGet(xi_TranID);
			O3_Tran[O3_Tran.length] = new Array('IMG', Image_obj, Image_obj.src);
		}
		Image_obj.src = xi_AltImage_name;
		return true;
	}

	function O3_TranGet(xi_TranID)
	{
		if(!(O3_TranSets = document.O3_TranSets))
		{
			O3_TranSets = document.O3_TranSets = new Array(new Array(null));
		}

		if(xi_TranID)
		{
			if(!(O3_Tran = O3_TranFind(O3_TranSets, xi_TranID)))
			{
				O3_Tran = O3_TranSets[O3_TranSets.length] = new Array(xi_TranID);
			}
		}
		else
		{
			O3_Tran = O3_TranSets[0];
		}
		return O3_Tran;
	}

	function O3_TranFind(xc_TranSets, xi_TranID, xi_Clear)
	{
		var	O3_Tran;
		for(i = 1; i < xc_TranSets.length; i++)
		{
			O3_Tran = xc_TranSets[i];
			if(O3_Tran[0] == xi_TranID)
			{
				if(xi_Clear)
				{
					xc_TranSets.splice(i, 1);
				}
				return O3_Tran;
			}
		}
		return null;
	}

	
	function O3_Revert(xi_TranID)
	{
		var	O3_TranSets = document.O3_TranSets;
		var O3_Tran;
		if(O3_TranSets)
		{
			if(xi_TranID)
			{
				O3_Tran = O3_TranFind(O3_TranSets, xi_TranID, 1);
			}
			else
			{
				O3_Tran = O3_TranSets[0];
			}
			if(O3_Tran)
			{
				for(i = O3_Tran.length - 1; i > 0; i--)
				{
					     if(O3_Tran[i][0] == 'IMG')  O3_Tran[i][1].src = O3_Tran[i][2];
					else if(O3_Tran[i][0] == 'DISPLAY') O3_Tran[i][1].style.display = O3_Tran[i][2];
					else if(O3_Tran[i][0] == 'VISIBILITY')
						{
							//alert("Setting vis to >" + O3_Tran[i][2] + "<");
							O3_Tran[i][1].style.visibility = O3_Tran[i][2];
						}
					else if(O3_Tran[i][0] == 'OPACITY') O3_SetOpacity(O3_Tran[i][1], O3_Tran[i][2]);
				}
				O3_Tran.length = 1;
			}
		}
		return true;
	}

	function O3_SetDisplay(xi_Item, xi_Display, xi_Capture, xi_TranID)
	{
		var Item_obj; 
		var	O3_Tran;

		//	Check either a name or object has been passed and locate object if required
		if(typeof(xi_Item) == 'string')
			Item_obj = ALTFP_getObjectByID(xi_Item);
		else if(typeof(xi_Item) == 'object')
			Item_obj = xi_Item;
		else
			alert('O3_SetDisplay : Called with Item of type ' + typeof(xi_Item));

		//	Check we have an object
		if(Item_obj == null)
			return;

		if(xi_Display != null)
		{
			if(xi_Capture)
			{
				O3_Tran = O3_TranGet(xi_TranID);
				O3_Tran[O3_Tran.length] = new Array('DISPLAY', Item_obj, Item_obj.style.display);
			}
			Item_obj.style.display = xi_Display;
	    }
	    	
	    return true;
	}

	function O3_SetVisibility(xi_Item, xi_Visibility, xi_Capture, xi_TranID)
	{
		var Item_obj; 
		var	O3_Tran;

		//	Check either a name or object has been passed and locate object if required
		if(typeof(xi_Item) == 'string')
			Item_obj = ALTFP_getObjectByID(xi_Item);
		else if(typeof(xi_Item) == 'object')
			Item_obj = xi_Item;
		else
			alert('O3_SetVisibility : Called with Item of type ' + typeof(xi_Item));

		//	Check we have an object
		if(Item_obj == null)
		{
			return;
		}
		if(xi_Visibility != null)
		{
			//if(xi_Visibility == '')
			//	xi_Visibility = 'visible';
				
			if(xi_Capture)
			{
				O3_Tran = O3_TranGet(xi_TranID);
				O3_Tran[O3_Tran.length] = new Array('VISIBILITY', Item_obj, Item_obj.style.visibility);
			}
			Item_obj.style.visibility = xi_Visibility;
			//setTimeout("O3_SetVisibility('" + Item_obj.id + "', '" + xi_Visibility + "')", 5);
	    }	
	    else
	    {
	    	alert("set vis called with null vis");
	    }
	    return true;
	}
	
	function O3_SetOpacity(xi_Item, xi_Opacity, xi_Capture, xi_TranID)
	{
		//	First 2 params mandatory others optional or may be null
		var Item_obj; 
		var	O3_Tran;
		var	O3_Fader;


		//	Check either a name or object has been passed and locate object if required
		if(typeof(xi_Item) == 'string')
			Item_obj = ALTFP_getObjectByID(xi_Item);
		else if(typeof(xi_Item) == 'object')
			Item_obj = xi_Item;
		else
			alert('O3_SetOpacity : Called with Item of type ' + typeof(xi_Item));

		//	Check we have an object
		if(Item_obj == null)
			return;
		O3_Fader = Item_obj.O3_Fader;
		if(O3_Fader && O3_Fader[5])
		{
			clearTimeout(O3_Fader[5]);
			Item_obj.O3_Fader = null;
		}
			

		if(xi_Capture)
		{
			O3_Tran = O3_TranGet(xi_TranID);
			O3_Tran[O3_Tran.length] = new Array('OPACITY', Item_obj, O3_GetOpacity(Item_obj));
		}
			
	    if(Item_obj.style.opacity != null)				Item_obj.style.opacity = (xi_Opacity); 
	    else if(Item_obj.style.filter != null)			{
	    													if(xi_Opacity != 1)
	    														Item_obj.style.filter = "alpha(opacity=" + xi_Opacity*100 + ")";
	    													else
	    														Item_obj.style.filter = "";
	    												 }
	    else if(Item_obj.style.MozOpacity != null)		Item_obj.style.MozOpacity = (xi_Opacity);
	    else if(Item_obj.style.KhtmlOpacity != null)	Item_obj.style.KhtmlOpacity = (xi_Opacity); 
	    
	    return true;
	}
	
	function O3_FadeOpacity(xi_Item, xi_To, xi_millisec, xi_From, xi_Display, xi_Visibility, xi_Capture, xi_TranID)
	{ 
		//	xi_Item		Name or reference			Mandatory
		//	xi_To		Target opacity as .n		Mandatory
		//	xi_millisec	Number of ms for fade		Mandatory
		//	xi_From		Initial opacity as .n		Optional or null
		//	xi_Display	Final Display setting		Optional or null
		//	xi_Visibility	Final Visibility setting		Optional or null
		//	xi_Capture	Capture change true/false	Optional defaults to false if null or omitted
		//	xi_TranID	Named transaction			Optional defaults to unnamed transaction if null or omitted
		
	    //speed for each frame 
	    var	To_Perc;
		var	From_Perc;
		var	Step = 2;
		var	Direction = 1;
	    var Interval; 
	    
		var	Item_obj;
		
		if(typeof(xi_Item) == 'string')
			Item_obj = ALTFP_getObjectByID(xi_Item);
		else if(typeof(xi_Item) == 'object')
			Item_obj = xi_Item;
		else
			alert('O3_FadeOpacity : Called with Item of type ' + typeof(xi_Item));

		
		if(Item_obj == null)	return;

		if(!Item_obj.id)
		{
			alert('O3_SetOpacity : Object must have an ID ');
			return;
		}
		
		//	Work out the from either as the current or requested
		if(xi_From == null)
		{
			From_Perc = O3_GetOpacity(Item_obj) * 100;
		}
		else
		{
			From_Perc = xi_From * 100;
		}

		//	Clean up the from and to to whole percs and normalise to 0 - 100
		From_Perc = Math.round(From_Perc);
		if(From_Perc > 100)
			From_Perc = 100;
		else if(From_Perc < 0)
			From_Perc = 0;
			
	    To_Perc = xi_To * 100;
		To_Perc = Math.round(To_Perc);
		if(To_Perc > 100)
			To_Perc = 100;
		else if(To_Perc < 0)
			To_Perc = 0;

		
		//	Calculate the step and interval
		if(To_Perc < From_Perc)
			Direction *= -1;
	    Interval = Math.round( xi_millisec / (To_Perc - From_Perc) * Step * Direction); 
		if(Item_obj.style.display != '')
		{
			O3_SetDisplay(Item_obj, '', xi_Capture, xi_TranID);
		}
		if(Item_obj.style.visibility != '')
		{
			O3_SetVisibility(Item_obj, '', xi_Capture, xi_TranID);
		}
		//	Set the initial opacity capturing the old if we are capturing (also cancels any in prog fade)
		O3_SetOpacity(Item_obj, From_Perc/100, xi_Capture, xi_TranID);
		
		// If the item isn't displayed or visible, make it both and capture if capturing
		//alert("display : " + Item_obj.style.display +"visibility : " + Item_obj.style.visibility);
		//	Attach a fader to the object
		Item_obj.O3_Fader = new Array(From_Perc, To_Perc, Step, Direction, Interval, null, xi_Display, xi_Visibility, xi_Capture, xi_TranID);
		//alert("Step " + Step + "\nInterval " + Interval);

		//	Schedule the first step
	    Item_obj.O3_Fader[5] = setTimeout("O3_FadeStep('" +  Item_obj.id + "')", Interval); 
	} 

	function O3_FadeStep(xi_Item)
	{ 
		var	Item_obj;
		var	O3_Fader;
		var	remaining;		
		
		Item_obj = ALTFP_getObjectByID(xi_Item);
		if(Item_obj == null)	return;

		O3_Fader = Item_obj.O3_Fader;
		if(O3_Fader == null)	return;

		O3_Fader[0] += (O3_Fader[2] * O3_Fader[3]);
		O3_Fader[5] = null;

					
		O3_SetOpacity(Item_obj, O3_Fader[0]/100);

		if((remaining = (O3_Fader[1] - O3_Fader[0]) * O3_Fader[3]) < O3_Fader[2])
			O3_Fader[2] = remaining;

		if(remaining > 0)
		{
			//	More to go
	    	O3_Fader[5] = setTimeout("O3_FadeStep('" +  Item_obj.id + "')", O3_Fader[4]); 
	    	;
		}
		else
		{
			//alert("Step Finished");
			//	Finished fade
			//	Do the final settings if they have been specified
		    if(O3_Fader[6] != null)
		    {
		    	O3_SetDisplay(Item_obj.id, O3_Fader[6], O3_Fader[8], O3_Fader[9]);
		    }
		    if(O3_Fader[7] != null)
		    {
		    	O3_SetVisibility(Item_obj.id, O3_Fader[7], O3_Fader[8], O3_Fader[9]);
		    }
			//	Clear the fader
			Item_obj.O3_Fader = null;
		}
	} 
	
	
	function O3_GetOpacity(xi_Item)
	{
		var	Item_obj = xi_Item;
		var	Opacity;
		// alert("in GetOpacity");
	    if((Opacity = Item_obj.style.opacity) != null) ;
		else if((filter = Item_obj.style.filter) != null)
	    {
	    	var	regex = /opacity=(\d+)/;
	    	var	extract = regex.exec(filter);
	    	// alert("filter " + filter);
	    	if(extract)
	    		Opacity = extract[1] / 100;
	    	// alert("extracted " + Opacity);
	    }
	    else if((Opacity = Item_obj.style.MozOpacity) != null); 
	    else if((Opacity = Item_obj.style.KhtmlOpacity) != null) ;

	    if((Opacity == null) || (Opacity + "" == ""))
	    {
	    	Opacity = 1;
		}
		
	    return Opacity; 
	}

	function O3_PreloadImgs(xi_Array, xi_Base)
	{
		var DocArray = 0;
		
		if(xi_Base)
		{
			if(xi_Base.match(/^(.*)\/$/))
				xi_Base = xi_Base.match(/^(.*)\/$/)[1];
		}
		else
			xi_Base = '';
		
		if(!document.O3_imgs)
			document.O3_imgs=new Array();
		else
			DocArray=document.O3_imgs.length
			
		for(var i=0; i < xi_Array.length; i++)
		{
			document.O3_imgs[DocArray]=new Image;
			document.O3_imgs[DocArray].src= xi_Base + '/' + xi_Array[i];
			DocArray++;		
		}
	}
	
	function BOH_InnerText(xi_Object, xi_innerText)
	{
		if(document.all)
		{
			// IE
			xi_Object.innerText = xi_innerText;
		}
		else
		{
			// Mozilla
			xi_Object.childNodes[0].nodeValue = xi_innerText;
		}
	}

function ALTFP_getObjectByID(id,o) {//v1.0
 var c,el,els,f,m,n; if(!o)o=document; if(o.getElementById) el=o.getElementById(id);
 else if(o.layers) c=o.layers; else if(o.all) el=o.all[id]; if(el) return el;
 if(o.id==id || o.name==id) return o; if(o.childNodes) c=o.childNodes; if(c)
 for(n=0; n<c.length; n++) { el=ALTFP_getObjectByID(id,c[n]); if(el) return el; }
 f=o.forms; if(f) for(n=0; n<f.length; n++) { els=f[n].elements;
 for(m=0; m<els.length; m++){ el=ALTFP_getObjectByID(id,els[n]); if(el) return el; } }
 return null;
}

function ALTFP_preloadImgs() {//v1.0
 var d=document,a=arguments; if(!d.FP_imgs) d.FP_imgs=new Array();
 for(var i=0; i<a.length; i++) { d.FP_imgs[i]=new Image; d.FP_imgs[i].src=a[i]; }
}

function ALTFP_changeProp() {//v1.0
 var args=arguments,d=document,i,j,id=args[0],o=ALTFP_getObjectByID(id),s,ao,v,x;
 d.$cpe=new Array(); if(o) for(i=2; i<args.length; i+=2) { v=args[i+1]; s="o"; 
 ao=args[i].split("."); for(j=0; j<ao.length; j++) { s+="."+ao[j]; if(null==eval(s)) { 
  s=null; break; } } x=new Object; x.o=o; x.n=new Array(); x.v=new Array();
 x.n[x.n.length]=s; eval("x.v[x.v.length]="+s); d.$cpe[d.$cpe.length]=x;
 if(s) eval(s+"=v"); }
}

function ALTFP_changePropRestore() {//v1.0
 var d=document,x; if(d.$cpe) { for(i=0; i<d.$cpe.length; i++) { x=d.$cpe[i];
 if(x.v=="") x.v=""; eval("x."+x.n+"=x.v"); } d.$cpe=null; }
}


function ALTFP_swapImg()
{//v1.0
 var doc=document,args=arguments,elm,n;
 doc.$imgSwaps=new Array();
 for(n=2; n<args.length; n+=2)
 {
 	elm=ALTFP_getObjectByID(args[n]);
 	if(elm)
 	{
 		doc.$imgSwaps[doc.$imgSwaps.length]=elm;
 		elm.$src=elm.src; elm.src=args[n+1];
 	}
 }
}

function ALTFP_swapImgRestore()
{//v1.0
	 var doc=document,i;
	 if(doc.$imgSwaps)
	 {
	 	for(i=0;i<doc.$imgSwaps.length;i++)
	 	{
  			var elm=doc.$imgSwaps[i];
  			if(elm)
  			{
  				elm.src=elm.$src;
  				elm.$src=null;
  			}
  		} 
  		doc.$imgSwaps=null;
  	}
}


