/*function uvflash_attach( ) {
	if( typeof( flashUpshift ) != "undefined" ) {
		for( var ii = 0; ii < flashUpshift.length; ii++ ) {
			var d			= flashUpshift[ii];
			var hardpoint	= d[0];
			var flashObj	= d[1];
			var version		= d[2];
			var dx			= d[3];
			var dy			= d[4];
			if( getFlashVersion( ) >= version ) {
				var obj = getObj( hardpoint );
				if( obj ) {
					clearNode( obj );

					var params = {
						 allowScriptAccess	: 'sameDomain'
						,movie				: flashObj
						,quality			: 'high'
						,bgcolor			: '#FFFFFF'
						};
					
					if( !isIE() && !isOpera() ) {
						var fbase = obj.appendChild(
							document.createElement( 'object' )
							);
	
						fbase.classid
							= 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
	
						fbase.codebase
							= 'http://fpdownload.macromedia.com/'
							+ 'pub/shockwave/cabs/flash/swflash.cab'
							+ '#version=7,0,0,0'
							;
	
						fbase.width 	= dx;
						fbase.height	= dy;
						
						var p;
	
						var emb	= document.createElement( 'embed' )
	
						for( var k in params ) {
							p = fbase.appendChild(
								document.createElement( 'param' )
								);
							p.name	= k;
							p.value	= params[ k ];
							}
						
						fbase.appendChild( emb );
						
						emb.src			= flashObj;
						emb.quality		= 'high';
						emb.bgcolor		= '#FFFFFF';
						emb.type		= 'application/x-shockwave-flash';
						emb.pluginspage	= 
							'http://www.macromedia.com/go/getflashplayer';
						emb.width		= dx;
						emb.height		= dy;
						}
					else {
						
						phtml = '';
						for( var k in params ) {
							phtml = phtml + '<param name="' + k
								+ '" value="' + params[k] + '" />'
								;
							}
					
						obj.innerHTML =
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version="' + version +',0,0,0" width="' + dx + '" height="' + dy + '">' + phtml + '<embed src="' + flashObj + '" quality="high" width="' + dx + '" height="' + dy + '" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
						}
					}
				}
			}
		}
	}*/

function uvflash_attach( ) {
	if( typeof( flashUpshift ) != "undefined" ) {
		for( var ii = 0; ii < flashUpshift.length; ii++ ) {
			var d			= flashUpshift[ii];
			var hardpoint	= d[0];
			var flashObj	= d[1];
			var version		= d[2];
			var dx			= d[3];
			var dy			= d[4];
			
			if( getFlashVersion( ) < version )
				return uvflash_prompt();
				
			var obj = getObj( hardpoint );
			
			if( obj ) {
				clearNode( obj );
				
				var params = {
					 allowScriptAccess	: 'sameDomain'
					,movie				: flashObj
					,quality			: 'high'
					,bgcolor			: '#FFFFFF'
					/**
					 *	@browser IE
					 *	Allows drop-downs to work.
					 */
					,wmode				: 'transparent'
					};
				
/*				This approach doesn't work so well for FF3. Might as well just use innerHTML for everything (even though it's not in the standard).
				
				if( !isIE() && !isOpera() ) {
					var fbase = obj.appendChild(
						document.createElement( 'object' )
					);

					fbase.classid
						= 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';

					fbase.codebase
						= 'http://fpdownload.macromedia.com/'
						+ 'pub/shockwave/cabs/flash/swflash.cab'
						+ '#version=7,0,0,0'
						;

					fbase.width 	= dx;
					fbase.height	= dy;
					fbase.wmode		= 'transparent';
					
					var p;
					
					for( var k in params ) {
						p = fbase.appendChild(
							document.createElement( 'param' )
							);
						p.name	= k;
						p.value	= params[ k ];
					}
					
					var emb = fbase.appendChild(
						document.createElement( 'embed' )
					);
					
					emb.src			= flashObj;
					emb.quality		= 'high';
					emb.bgcolor		= '#FFFFFF';
					emb.type		= 'application/x-shockwave-flash';
					emb.pluginspage	= 
						'http://www.macromedia.com/go/getflashplayer';
					emb.width		= dx;
					emb.height		= dy;
					emb.wmode		= 'transparent';
				} else {*/
					
					phtml = '';
					for( var k in params ) {
						phtml = phtml + '<param name="' + k
							+ '" value="' + params[k] + '" />'
							;
						}
				
					obj.innerHTML =
'<object	classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' +
'			codebase="http://download.macromedia.com/pub/shockwave/cabs/flash' +
		   '/swflash.cab#version="' + version +',0,0,0"' +
'			width="' + dx + '"' +
'			height="' + dy + '">' +
'	' + phtml +
'	<embed	src="' + flashObj + '"' +
'			quality="high"' +
'			width="' + dx + '"' +
'			height="' + dy + '"' +
'			type="application/x-shockwave-flash"' +
'			pluginspage="http://www.macromedia.com/go/getflashplayer"' +
'			wmode="transparent" />' +
'</object>';
//				}
			}
		}
	}
}
	
var _flashVersion  = null;
function getFlashVersion( ) {
	if( _flashVersion != null ) return _flashVersion;
	
	if( navigator.plugins
	&&	navigator.plugins.length ) {
		var p = navigator.plugins;
		for( var ii = 0; ii < p.length; ii++ ) {
			if( p[ ii ].name.indexOf( 'Shockwave Flash' ) != -1 ) {
				_flashVersion = p[ ii ].description.split(
					'Shockwave Flash' )[1];
				break;
				}
			}
		}
	else
	if( window.ActiveXObject ) {
		for( var ii = 12; ii--; ) {
			try {
				if( eval( s =	
					 'new ActiveXObject('
					+'"ShockwaveFlash.ShockwaveFlash.' + ii + '"'
					+');'
					) ) {
					_flashVersion = ii;
					break;
					}
				}
			catch( e ) { }
			}
		}
		
	_flashVersion = parseInt( _flashVersion );
	return _flashVersion;
	}
	

function bind( f, g ) {
	return function( ) { return f( g ); }
	}

function uvhoverable_attach( ) {
	var imgArr = document.getElementsByTagName( 'img' );
	if( imgArr ) {
		for( var ii = 0; ii < imgArr.length; ii++ ) {
			if( imgArr[ii].className
			&&	imgArr[ii].className.indexOf( 'uvHoverable' ) != -1 ) {

				var p = imgArr[ii].src.split( '.' );
				if( p.length > 1 ) {
					p[ p.length - 2 ] += '_h';
					}
				l = p.join( '.' );

				imgArr[ii].uvhoverable_off	= imgArr[ii].src;
				imgArr[ii].uvhoverable_on	= l;
				
				imgArr[ii]._preload			= new Image( );
				var _t = imgArr[ii]._preload;
				imgArr[ii]._preload.onload	= bind(
					function( _t ) {
						if( !_t.height ) {
//							ultraviolet_error(
//								'Unable to load image: ' + _t.src
//								);
							}
						}
					,_t
					);
				imgArr[ii]._preload.src 	= l;

				imgArr[ii].onmouseover =
					chainHandlers(
						 uvhoverable_activate
						,imgArr[ii].onmouseover
						);

				imgArr[ii].onmouseout =
					chainHandlers(
						 uvhoverable_deactivate
						,imgArr[ii].onmouseout
						);
				}
			}
		}
	}
	
function uvhoverable_activate( target ) {
	switch( typeof(target) ) {
		case 'string':	target = getObj( target );				break;
		default:		target = this;							break;
	}
	
	target.src = target.uvhoverable_on;
	}
	
function uvhoverable_deactivate( target ) {
	switch( typeof(target) ) {
		case 'string':	target = getObj( target );				break;
		default:		target = this;							break;
	}
	
	target.src = target.uvhoverable_off;
	}
	
function ultraviolet_error( err ) {
	new Image().src =
		 'http://enigma.portlandwebworks.com/ultraviolet/?'
		+'uri=' + escape( window.location )
		+'&'
		+'e=' + escape( err )
		;
	}


function uvlog( type, uri ) {
	(new Image()).src =
		 AURI
		+'resource/ultraviolet/?op=track'
		+'&'
		+'type='	+ escape( type )
		+'&'
		+'uri=' 	+ escape( uri )
		+'&'
		+'subterfuge=' + Math.random( )
		;
	}



/* To use, attach a class called 'uvTransparent' to each png transparency
** To prevent IE from initially showing the unfiltered image, define a class style ('.uvTransparent{ visibility: hidden; }') in the stylesheet.
** The function will toggle images back to visible for all browerser. */
function uvtransparent_attach() {
	var imgArr			= document.getElementsByTagName( 'img' );
	var new_imgArr		= new Array();
	
	if( imgArr ) {
		for( var ii = 0; ii < imgArr.length; ii++ ) {
	
			if( imgArr[ii].className
			&&	imgArr[ii].className.indexOf( 'uvTransparent' ) != -1 ) {
	
				if( !isIE() ) {
					imgArr[ii].style.visibility = 'visible';
					continue;
				}
				
				var t = document.createElement( 'span' );
				
				if( imgArr[ii].id )
					t.setAttribute( 'id', imgArr[ii].id );
				
				if( imgArr[ii].className )
					t.setAttribute( 'className', imgArr[ii].className );
				
				if( imgArr[ii].title )
					t.setAttribute( 'title', imgArr[ii].title );
				
				
				t.style.display = 'inline-block';
				
				if( imgArr[ii].src )
					t.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader( src='" + imgArr[ii].src + "', sizingMethod='image' )";
				
				if( imgArr[ii].width )
					t.style.width = imgArr[ii].width + 'px';
				
				if( imgArr[ii].height )
					t.style.height = imgArr[ii].height + 'px';
				
				if( imgArr[ii].border )
					t.style.border = imgArr[ii].border + 'px';
				
				if( imgArr[ii].align )
					t.style.cssFloat = imgArr[ii].align;
				
				if( imgArr[ii].parentNode.href )
					t.style.cursor = 'pointer';
				
				if( imgArr[ii].style.cssText ) {
					var css = imgArr[ii].style.cssText;
					
					css = css.toLowerCase();
					css = css.replace( /\s/g, '' );
					css = css.split( /;/ );
					
					for( kk = 0; kk < css.length; kk++ ) {
						style = css[kk].split( /:/ );
						
						if( style[0] == 'float' )
							style[0] = 'cssFloat';
						
						if( style[0].search(/-/) != -1 ) {
							style[0] = style[0].match( /^(\w*)-(\w)(\w*)$/ );
							style[0] = style[0][1] + style[0][2].toUpperCase() + style[0][3];
						}
						
						eval( 'imgArr[ii].style.' + style[0] + ' = "' + style[1] + '"' );
					}
				}
				
				new_imgArr.push(
					[ imgArr[ii], t ]
				);
				
			}
		}
		
		if( !isIE() )
			return;
		
		var new_imgArrLength = new_imgArr.length;
		
		for( var ii = 0; ii < new_imgArrLength; ii++ ) {
			new_imgArr[ii][1].style.visibility = 'visible';
			
			replaceNode( new_imgArr[ii][0], new_imgArr[ii][1] );
		}
	}
}
	

	document.onload = chainHandlers( uvhoverable_attach, document.onload );
	document.onload = chainHandlers( document.onload, uvflash_attach );
	document.onload = chainHandlers( document.onload, uvtransparent_attach );
