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'
					};
				
				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;
					
					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>';
				}
			}
		}
	}
}

function uvflash_prompt() {
	obj = getObj( 'uvPromptFlash' )
	
	if( !obj )
		return;
	
	obj.style.display = 'block';
}
	
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(	
					 'new ActiveXObject('
					+'"ShockwaveFlash.ShockwaveFlash.' + ii + '"'
					+');'
					) ) {
					_flashVersion = ii;
					break;
					}
				}
			catch( e ) { }
			}
		}
		
	_flashVersion = parseInt( _flashVersion );
	return _flashVersion;
	}

function uvqt_attach( video ) {
    if( video ) {
        qtUpshift = video;
    }
    
	if( typeof( qtUpshift ) != 'undefined' ) {
		for( var ii = 0; ii < qtUpshift.length; ii++ ) {
			var d			= qtUpshift[ii];
			var hardpoint	= d[0];
			var qtObj		= d[1];
			var dx			= d[2];
			var dy			= d[3];
			
			var obj = getObj( hardpoint );
			
			if( obj ) {
				classid = ( isIE() ) ? 'classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"' : '';
				
				obj.innerHTML
					=	'<object	' + classid +
						'			data="' + qtObj + '" ' +
						'			width="' + dx + '" ' +
						'			height="' + dy + '">' + "\n" +
						'	<param	name="src" ' +
						'			value="' + qtObj + '" />' +
						'</object>';
			}
		}
	}
	
}
	

function uvhoverable_attach( ) {
	var imgArr	= document.getElementsByTagName( 'img' );
	var inptArr	= document.getElementsByTagName( 'input' );
	
	arr = new Array( imgArr, inptArr );
	
	if( arr ) {
		for( var ii = 0; ii < arr.length; ii++ ) {
			
			for( var kk = 0; kk < arr[ ii ].length; kk++ ) {
				if( arr[ ii ][ kk ].className
				&&	arr[ ii ][ kk ].className.indexOf( 'uvHoverable' ) != -1 ) {
	
					var p = arr[ ii ][ kk ].src.split( '.' );
					if( p.length > 1 ) {
						p[ p.length - 2 ] += '_h';
						}
					l = p.join( '.' );
	
					arr[ ii ][ kk ].uvhoverable_off	= arr[ ii ][ kk ].src;
					arr[ ii ][ kk ].uvhoverable_on	= l;
					
					arr[ ii ][ kk ]._preload			= new Image( );
					var _t = arr[ ii ][ kk ]._preload;

					arr[ ii ][ kk ]._preload.onerror	= bind(
						 null
						,function( _t ) {
							uv_error(
								'Unable to load image: ' + _t.src
								);
							}
						,arr[ ii ][ kk ]
						);
					
					arr[ ii ][ kk ]._preload.src 	= l;
	
					arr[ ii ][ kk ].onmouseover =
						chainHandlers(
							 uvhoverable_activate
							,arr[ ii ][ kk ].onmouseover
							);
	
					arr[ ii ][ kk ].onmouseout =
						chainHandlers(
							 uvhoverable_deactivate
							,arr[ ii ][ kk ].onmouseout
							);
					}
				}
			}
		}
	}
	
function uvhoverable_activate( ) {
	this.src = this.uvhoverable_on;
	}
	
function uvhoverable_deactivate( ) {
	this.src = this.uvhoverable_off;
	}
	
function uv_error( err ) {
/*	uv_log(
		 'error'
		,err
		,window.location
		);
*/	}

function uv_log( what, which, where ) {
	if( typeof( uvUniq ) == "undefined" ) {
		uvUniq = null;
		}
	
	if( typeof( uvWho ) == 'undefined' )
		uvWho = null;
	
/*	AJAX ready
	uri =
		 AURI
		+'resource/ultraviolet/'
		+'?which='+escape( which )
		+'&what='+escape( what )
		+'&where='+escape( where )
		+'&referrer='+escape( document.referrer )
		+'&agent='+escape( navigator.userAgent )
		+'&uniq='+escape( uvUniq )
		;
	
	XMLReq.pullURI( uri, function( xml ) { } );
*/		
	(new Image()).src = s =
		 AURI
		+'resource/ultraviolet/'
		+Math.random()
		+'/?who='+escape( uvWho )
		+'&which='+escape( which )
		+'&what='+escape( what )
		+'&where='+escape( where )
		+'&referrer='+escape( document.referrer )
		+'&uniq='+escape( uvUniq )
		;
	
	setCookie( '_uv', uvUniq );
	}
	
function uv_attach_links( ) {
	
	if( typeof( uvUniq ) == "undefined" ) {
		uv_error( 'No uvUniq.' );
		}
		
	if( typeof( AURI ) == "undefined" ) {
		uv_error( 'No AURI.' );
		}
	
	var formArr = document.getElementsByTagName( 'form' );
	if( formArr ) {
		
		for( var ii = 0; ii < formArr.length; ii++ ) {
			var _f = formArr[ ii ];
			
			_uvf = new Object();
			
			_uvf.what = 'form';
			
			_uvf.which = _f.name
			if( !_uvf.which )
				_uvf.which = 'form[ ' + ii + ' ]';
			
			_uvf.where = _f.action;
			
			_f.onsubmit = chainHandlers(
				 bind(
				 	 null
				 	,function( _uvf ) {
				 	 	uv_log(
				 	 		 _uvf.what
				 	 		,_uvf.which
				 	 		,_uvf.where
				 	 		)
				 	 	}
				 	,_uvf
				 	)
				,_f.onsubmit
			);
		}
		
	}
	
	var linkArr = document.getElementsByTagName( 'a' );
	if( linkArr ) {
		
		server	= window.location.toString().split( '/' )[2];
		regtyp	= new RegExp( 'uvt_([a-z]+)', 'i' );
		regkey	= new RegExp( 'uvk_([a-z0-9]+)', 'i' );
		regloc	= new RegExp( '^(javascript:|http(s)?://'+server+')', 'i' );
		
		for( var ii = 0; ii < linkArr.length; ii++ ) {
			if( linkArr[ii].href && !linkArr[ii].onclick ) {
				var _t = linkArr[ii];
				
				if( what = _t.className.match( regtyp ) ) {
					what = what[1];
					}
				else {
					what = regloc.test( _t.href )
						? 'link'
						: 'exit'
						;
					}
					
				where = _t.href;
				
				_t.uv_log = uv_log;
				_t.uv_what = what;
				_t.uv_where = where;

				if( which = _t.className.match( regkey ) ) {
					_t.uv_which = which[1];
					}
				else
				if( !_t.innerText || !(_t.uv_which = _t.innerText.trim( )) ) {

					if( n = _t.firstChild ) {
						do {
							if( n.alt ) {
								_t.uv_which = n.alt;
								break;
								}
							else
							if( n.nodeType == 3 ) {
								if( n.nodeValue ) {
									if( x = n.nodeValue.toString().trim( ) ) {
										_t.uv_which = x;
										break;
										}
									}
								}
							} while( n = n.nextSibling );
						}
					
					if( !_t.uv_which ) {
						_t.uv_which = '?';
						}

					}
				
				_t.onclick = bind(
					 null
					,function( _t ) {
					 	return _t.uv_log(
					 		 _t.uv_what
					 		,_t.uv_which
					 		,_t.uv_where
					 		);
					 	}
					,_t
					);
				}
			}
		}
	}
/*
function uvAttachReports( ) {
	var linkArr = document.getElementsByTagName( 'a' );
	if( linkArr ) {
		for( var ii = 0; ii < linkArr.length; ii++ ) {
			var div = document.createElement( 'div' );
			div.className = 'uvLinkReport';
			div.style.left = (getObjWidth( linkArr[ ii ] ) + 5) + 'px';
			
			var key = 'h_' + hex_md5( linkArr[ii].href );
			var N = 0;
			var P = 0;
			
			if( uvExit
			&&	uvExit[ key ] ) {
				var N = uvExit[ key ][ 0 ];
				var P = parseInt((parseFloat( uvExit[ key ][ 1 ] ) * 100));
				}
			
			setHTML( div, '&laquo; (' + N + '; ' + P + '%)' );
			linkArr[ii].insertBefore( div, linkArr[ii].firstChild );
			linkArr[ii].style.position = 'relative';
			}
		}
	}
*/

document.onload = chainHandlers( uvflash_attach, document.onload );
document.onload	= chainHandlers( uvqt_attach, document.onload );
document.onload = chainHandlers( uvhoverable_attach, document.onload );
document.onload = chainHandlers( document.onload, uv_attach_links );

