var adminPopups = { };
var openAdminPopup = [ null, null ];

function toggleAdminPopup( e ) {
	var oldPopup = openAdminPopup;
	var newPopup = [ this, getAdminPopup( this ) ];
	
	if( oldPopup[0] != newPopup[0] ) {
		if( oldPopup[1] ) {
			oldPopup[1].removeClass( 'show' );
		}
		openAdminPopup = newPopup;
	}
	
	if( newPopup[1].hasClass( 'show' ) ) {
		newPopup[1].removeClass( 'show' );
	}
	else {
		newPopup[1].position( {
			  position: 'upperLeft'
			, offset: { x: e.client.x + 10, y: e.client.y - newPopup[1].getSize( ).y + 35 }
		} );
		newPopup[1].addClass( 'show' );
		track( 'Listing Pop-up Window', 'open', loc_uri( )+' ('+this.retrieve( 'adminPopupID' )+')' );
	}
}

function closeAdminPopup( ) {
	getAdminPopup( this ).removeClass( 'show' );
}

function getAdminPopup( outlet ) {
	return adminPopups[ outlet.retrieve( 'adminPopupID' ) ];
}

function addAdminPopup( outlet ) {
	// Different buttons may target the same popup layer. Both should reference the same layer.
	var id = outlet.get( 'class' ).match( /id:(\d+)/ )[1];
	
	if( !adminPopups[ id ] ) {
		adminPopups[ id ] = outlet.getElements( '.adminTagPopup' )[0];
	}
	
	// Default to "hide" so toggle starts off on the right foot.
//	adminPopups[ id ].fade( 'hide' );  // Don't fade because two links can reference the same popup and how do you fade between the same popup in two different locations without cloning it and inject a bunch of duplicate IDs? Not sure what the implication is of changing the IDs.
	
	outlet.store( 'adminPopupID', id );
	
	outlet.getElements( '.adminTagScroll a' ).append(
		outlet.getElements( '.viewAll a' )
	).addClass( 'uvt_click uvk_search_popup' );
	uv_attach_links.attempt( outlet, outlet );
}

//attachHandler( window , 'onload', initializeAdminPopLinks );

if( !isIE6( ) ) {
	window.addEvent( 'domready', function( ) {
		var outlets = $$( '.listingOutlet' );
		
		outlets.each( function( outlet, i ) {
			addAdminPopup( outlet );
			
			outlet.getElements( 'a.searchPop' ).each( function( a ) {
				a.set( 'title', 'Listings appear in a floating layer.' );
				a.addEvent( 'click', function( e ) {
					e.stop( );
					toggleAdminPopup.attempt( e, outlet );
				} );
			} );
			
			getAdminPopup( outlet )
				.getElements( 'a.closeAdminPop' )
				.each( function( a ) {
					a.addEvent( 'click', function( e ) {
						e.stop( );
						closeAdminPopup.attempt( e, outlet );
					} );
				 } );
		} );
	} );
}
