if (typeof(VIEWZI) === 'undefined' || !VIEWZI)
{
	VIEWZI		= {};
	VIEWZI.view	= {};
}

if (!VIEWZI.initterm)
{
	VIEWZI.initterm = 'news';
}

(function() /* Closure. */
{
	/* YUI shorthand. */
	var D = YAHOO.util.Dom;
	var E = YAHOO.util.Event;
	var K = YAHOO.util.KeyListener;

	/* Search term. */
	var search_term = VIEWZI.initterm;
	
	var inline = false;

	/* Data source. */
	var data_src = 'goog';

	/* Set some flags. */
	var key_pg		= false;
	var try_again	= false;
	var first_pass	= true;
	var input_focus	= true;

	/* Grid dimensions. */
	var grid_width	= 0;
	var grid_height	= 0;

	var one_sz = 43200;		/* 1 <li> px area. */
	var the_li = null;		/* For <li> hover. */
	var num_li = 0;			/* Visible # <li>. */
	var num_ct = 0;			/* Init # counter. */
	var data_i = 0;			/* Data increment. */
	var page_i = 0;			/* Page increment. */
	var spacer = 0;			/* Remaining slug. */
	var cur_li = -1;		/* Keyboard press. */
	var TOP_HEIGHT = 50;
	var BOTTOM_HEIGHT = 30;

	/* Check the user's preferences. */
	VIEWZI.view.processGridPrefs = function(str, arr)
	{
		var haveResults = false;
		var flip = true;
		var screens = false;
		var pg = document.getElementById('power_grid');
		var tg = document.getElementById('power_grid_toggle');
		var fl = document.getElementById('power_grid_flip_check');
		for (var i = 0, j = arr[0].dataresult.length; i < j; i++)
		{
			haveResults = true;
			if (arr[0].dataresult[i].name === 'flip'){
				if (arr[0].dataresult[i].value === 'yes'){
					flip = true;
				}
				else if (arr[0].dataresult[i].value === 'no'){
					flip = false;
				}
			}
			if (arr[0].dataresult[i].name === 'toggle'){
				if (arr[0].dataresult[i].value === 'text'){
					screens = false;
				} else if(arr[0].dataresult[i].value === 'screens'){
					screens = true;
				}
			}
		}
		
		if(haveResults){
			if(flip){
				fl.className = '';
				if(screens){
					tg.className = '';
					pg.className = 'power_grid_show_screens_swap';
				} else {
					tg.className = 'alt';
					pg.className = 'power_grid_hide_screens_swap';
				}				
			} else {
				fl.className = 'alt';
				if(screens){
					tg.className = '';
					pg.className = 'power_grid_show_screens_noswap';
				} else {
					tg.className = 'alt';
					pg.className = 'power_grid_hide_screens_noswap';
				}
			}
		}
	};

	/* Is the mix open or closed? */
	if (VIEWZI.shell.viewmixstate === 0)
	{
		var mix_collapsed = true;
	}

	/* Resize the grid width. */
	VIEWZI.view.resizeGrid = function()
	{
		/* Reset counter. */
		num_ct = 0;
		cur_li = -1;
		spacer = VIEWZI.footerHeight + TOP_HEIGHT + BOTTOM_HEIGHT;
		/* Mix toggle? */
		if (VIEWZI.shell.viewmixstate == 0){
			spacer += VIEWZI.headerHeightClosed;
		} else {
			spacer += VIEWZI.headerHeight;
		}
		
		if(inline){
            grid_width = 240*3;
            grid_height = 180*3;
            var contentWrapper = D.get('viewzi_page_wrapper');
            var region = D.getRegion(contentWrapper);
            var viewziTop = region.top;
            var grid_botom = viewziTop + grid_height + 50;
            var extra_width	= Math.floor(((region.right - region.left) - grid_width) / 2);
        } else {

		    var page_ratio	= D.getRegion(document.body);
    			grid_width	= Math.floor((page_ratio.right - 60) / 240) * 240;
    			grid_height	= Math.floor((page_ratio.bottom - spacer) / 180) * 180;

    		/* Min-width. */
    		if (grid_width < 720)
    		{
    			grid_width = 720;
    		}

    		/* Min-height. */
    		if (grid_height < 180)
    		{
    			grid_height = 180;
    		}

    		var grid_bottom	= page_ratio.bottom - grid_height - spacer + BOTTOM_HEIGHT;
    		/* Remainder on each side of screen. */
    		var extra_width	= Math.floor((page_ratio.right - grid_width) / 2);
		}

		/* How many <li> fit on-screen?. Offset [0]. */
		num_li = ((grid_width * grid_height) / one_sz);

		/* Pagination. */
		page_i = num_li - 1;

		/* Visible pixel count. */
		vis_px = grid_width * grid_height;

		/* All available <li>. */
		var all_li = D.get('power_grid').getElementsByTagName('li');

		if (all_li)
		{
			D.setStyle(all_li, 'display', 'block');
		}

		D.setStyle(['power_grid', 'power_grid_extra_l', 'power_grid_extra_r'], 'height', grid_height + 'px');
		D.setStyle(['power_grid_extra_l', 'power_grid_extra_r'], 'width', extra_width + 'px');
		D.setStyle(['power_grid', 'power_grid_nav','power_grid_bottom'], 'width', grid_width + 'px');
		D.setStyle('power_grid_bottom', 'height', grid_bottom + 'px');
		D.setStyle('power_grid_nav_arrow_l', 'display', 'none');

		D.get('power_grid_result_count').getElementsByTagName('strong')[0].innerHTML = 1;
		D.get('power_grid_result_count').getElementsByTagName('strong')[1].innerHTML = num_li;

		if (parseInt(YAHOO.env.ua.ie, 10) === 6){
			D.setStyle('power_grid_extra_l', 'left', '-' + extra_width + 'px');
		}

		if (D.get('power_grid_active'))
		{
			D.get('power_grid_active').className	= '';
			D.get('power_grid_active').id			= '';
		}
	};

	/* Fill in the difference. */
	VIEWZI.view.refillGrid = function()
	{
		var all_li = document.getElementById('power_grid').getElementsByTagName('li');

		if(all_li.length <= 0){
			// this might get called before we're rendered anything.  Ignore it.
			return;
		}
		if (all_li.length < num_li)
		{
			data_i +=	all_li.length;
			diff_i =	num_li - all_li.length - 1;

			VIEWZI.datapull.getData(search_term, data_src, '', data_i, data_i + diff_i, data_src);
		}
	};

	/* Run when browser resized. */
	VIEWZI.shell.resizeEvent.subscribe(function()
	{
		function doIt()
		{
			VIEWZI.view.resizeGrid();
			VIEWZI.view.refillGrid();
		}

		setTimeout(doIt, 100);
	});

	/* Run when HTML is loaded. */
	VIEWZI.view.pageLoad = function()
	{
	    if(VIEWZI.inline){
	        inline = true;
	        D.get('power_grid_keys').innerHTML = '';
	    }
	    
	    if(!inline){
		/* Remove fo    cus from text field. */
    		D.get('viewziViewsearchinput').blur();
    		input_focus = false;
		}

		/* Button to open star links. */
		var open_b = D.get('power_grid_open_all').getElementsByTagName('strong')[0];

		/* Fixes initial mis-calculation. */
		D.setStyle(document.body, 'overflow', 'hidden');

		/* Pagination to the left. */
		VIEWZI.view.pageLeft = function()
		{
			num_ct--;

			var the_total	= num_li * num_ct;
			var all_li		= D.get('power_grid').getElementsByTagName('li');

			D.setStyle(all_li, 'display', 'block');

			for (var i = 0, j = the_total; i < j; i++)
			{
				D.setStyle(all_li[i], 'display', 'none');
			}

			if (num_ct === 0)
			{
				D.setStyle('power_grid_nav_arrow_l', 'display', 'none');
			}

			if (key_pg && D.get('power_grid').getElementsByTagName('li')[cur_li])
			{
				D.get('power_grid').getElementsByTagName('li')[cur_li].className	= 'hover';
				D.get('power_grid').getElementsByTagName('li')[cur_li].id			= 'power_grid_active';

				key_pg = false;
			}

			if ((all_li.length - the_total) > num_li)
			{
				D.setStyle('power_grid_nav_arrow_r', 'display', 'block');
			}

			D.get('power_grid_result_count').getElementsByTagName('strong')[0].innerHTML = num_ct * num_li + 1;
			D.get('power_grid_result_count').getElementsByTagName('strong')[1].innerHTML = (num_ct * num_li) + num_li;
		};

		/* Pagination to the right. */
		VIEWZI.view.pageRight = function()
		{
			num_ct++;

			var the_total	= num_li * num_ct;
			var all_li		= D.get('power_grid').getElementsByTagName('li');

			for (var i = 0, j = the_total; i < j; i++)
			{
				D.setStyle(all_li[i], 'display', 'none');
			}

			if (num_ct > 0)
			{
				D.setStyle('power_grid_nav_arrow_l', 'display', 'block');
			}

			if (key_pg && D.get('power_grid').getElementsByTagName('li')[cur_li])
			{
				D.get('power_grid').getElementsByTagName('li')[cur_li].className	= 'hover';
				D.get('power_grid').getElementsByTagName('li')[cur_li].id			= 'power_grid_active';

				key_pg = false;
			}

			if (all_li.length - the_total <= num_li)
			{
				data_i += num_li;

				VIEWZI.datapull.getData(search_term, data_src, '', data_i, data_i + page_i, data_src);

				D.setStyle('power_grid_nav_arrow_r', 'display', 'none');
			}

			D.get('power_grid_result_count').getElementsByTagName('strong')[0].innerHTML = num_ct * num_li + 1;
			D.get('power_grid_result_count').getElementsByTagName('strong')[1].innerHTML = (num_ct * num_li) + num_li;
		};

		/* Shove in screenshots! */
 		VIEWZI.view.screenPush = function(evtId, evt)
	    {
			/* Count down pending shots. */
			D.get(evt[0].id).onload = function()
			{
				var pending_count = 1 * D.get('power_grid_pending').getElementsByTagName('span')[0].innerHTML;

				D.removeClass(evt[0].id, 'transparent');

				pending_count--;

				if (pending_count <= 0)
				{
					D.get('power_grid_pending').getElementsByTagName('span')[0].innerHTML = 0;

					D.setStyle('power_grid_pending', 'display', 'none');
				}
				else
				{
					D.get('power_grid_pending').getElementsByTagName('span')[0].innerHTML = pending_count;
				}
			};

			/* Did a screen actually load? */
			if (evt[0].src.match('unavailable') || evt[0].src.match('loading'))
			{
				D.get(evt[0].id).style.background = 'none';
			}
			else
			{
				D.get(evt[0].id).src = evt[0].src;
			}
	    };

		/* Process data. */
		VIEWZI.view.processData = function(evtId, evt)
		{
			if (!evt[0].data.length && !try_again)
			{
				try_again = true;

				data_src = 'yhoo';

				VIEWZI.datapull.getData(search_term, data_src, '', data_i, data_i + page_i, data_src);
			}
			else if (!evt[0].data.length && try_again && document.getElementById('power_grid').getElementsByTagName('li').length === 0)
			{
				D.get('power_grid').innerHTML = '<li id="power_grid_error"><span>Bummer. No results found.</span></li>';
			}
			else if (evt[0].data.length)
			{
				var pending_count = D.get('power_grid_pending').getElementsByTagName('span')[0].innerHTML;

				D.get('power_grid_pending').getElementsByTagName('span')[0].innerHTML = parseInt(pending_count, 10) + evt[0].data.length;

				var	html = '';

				for (var i = 0, j = evt[0].data.length; i < j; i++)
				{
					var site_domain = evt[0].data[i].url.split('//')[1].split('/')[0].replace('www.', '');

					html += '<li>';
					html += 	'<div>';
					html += 		'<p>';
					html += 			'<img src="http://www.google.com/s2/favicons?domain=' + site_domain + '" class="power_grid_favicon" />' + site_domain;
					html += 		'</p>';
					html += 		'<h6>' + evt[0].data[i].title + '</h6>';
					html += 		'<p>' + evt[0].data[i].summary + '</p>';
					html += 		'<img src="' + VIEWZI.CODEBASE + 'img/spacer.gif" class="power_grid_screenshot transparent" id="power_grid_id_' + evt[0].data[i].id + '" />';
					html += 	'</div>';

					if (parseInt(YAHOO.env.ua.ie, 10) === 6){
						html +=	'<span class="power_grid_selected" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + VIEWZI.CODEBASE + 'img/selected_bg.png\', sizingMethod=\'scale\');">';
						html += 	'<img src="' + VIEWZI.CODEBASE + 'img/selected_star.gif" />';
					}
					else
					{
						html +=	'<span class="power_grid_selected">';
						html += 	'<img src="' + VIEWZI.CODEBASE + 'img/selected_star.png" />';
					}

					html += 	'</span>';
					html += 	'<div class="power_grid_frame">';
					html += 		'<a href="' + evt[0].data[i].url + '"></a>';
					html += 		'<span class="power_grid_button_x"><span>Hide</span></span>';
					html += 		'<span class="power_grid_button_star"><span>Star</span></span>';
					html += 	'</div>';
					html += '</li>';

					VIEWZI.screenshot.addScreen('power_grid_id_' + evt[0].data[i].id, evt[0].data[i].url, 0, 0, 'large', false);
				}

				D.get('power_grid').innerHTML += html;
				D.setStyle(['power_grid_pending', 'power_grid_toggle', 'power_grid_flip_check', 'power_grid_bottom', 'power_grid_reset', 'power_grid_open_all'], 'display', 'block');

				if ((D.get('power_grid').getElementsByTagName('li').length - (num_li * num_ct)) >= num_li)
				{
					D.setStyle('power_grid_nav_arrow_r', 'display', 'block');
				}

				VIEWZI.screenshot.flushScreens();

				if (key_pg && !D.get('power_grid_active'))
				{
					D.get('power_grid').getElementsByTagName('li')[cur_li].className	= 'hover';
					D.get('power_grid').getElementsByTagName('li')[cur_li].id			= 'power_grid_active';

					key_pg = false;
				}

				if (first_pass)
				{
					if (evt[0].data[0].source === 'goog')
					{
						D.get('power_grid_attribution').innerHTML = 'Results from <a href="http://www.google.com/search?q=' + encodeURIComponent(search_term) + '"><img src="' + VIEWZI.CODEBASE +'img/' + data_src + '.gif" alt="Google" /></a>';
					}
					else if (evt[0].data[0].source === 'yahoo')
					{
						D.get('power_grid_attribution').innerHTML = 'Results from <a href="http://search.yahoo.com/search?p=' + encodeURIComponent(search_term) + '"><img src="' + VIEWZI.CODEBASE +'img/' + data_src + '.gif" alt="Yahoo" /></a>';
					}

					first_pass = false;
				}

				if (parseInt(YAHOO.env.ua.ie, 10) === 6){
					document.recalc();
				}
			}
		};

		/* Request data. */
		VIEWZI.view.requestData = function()
		{
			VIEWZI.getprefsresult.subscribe(VIEWZI.view.processGridPrefs);
			
			if (VIEWZI.viewprefs.getViewPrefs)
			{
				VIEWZI.viewprefs.getViewPrefs();
			}
			VIEWZI.view.resizeGrid();
			VIEWZI.screenresult.subscribe(VIEWZI.view.screenPush, VIEWZI.view);
			VIEWZI.dataresult.subscribe(VIEWZI.view.processData);
			VIEWZI.datapull.getData(search_term, data_src, '', data_i, data_i + page_i, data_src);
		};
		
		// Resize grid when mix is toggled
		VIEWZI.shell.mixToggleEvent.subscribe(function(e){
			VIEWZI.view.resizeGrid();
			VIEWZI.view.refillGrid();
		}, VIEWZI.view);

		/* Start this party. */
		VIEWZI.view.requestData();

		/* Star or mute a search result. */
		E.on('power_grid', 'click', function(e)
		{
			/* What was clicked? */
			var the_target = E.getTarget(e);

			/* Which one was clicked? */
			if (D.hasClass(the_target, 'power_grid_button_star'))
			{
				E.stopEvent(e);

				var the_li		= the_target.parentNode.parentNode;
				var div_wrap	= the_li.getElementsByTagName('div')[0];
				var star_span	= the_li.getElementsByTagName('span')[0];
				var site_link	= the_li.getElementsByTagName('a')[0];

				/* Restore opacity. */
				if (D.hasClass(div_wrap, 'power_grid_mute'))
				{
					D.removeClass(div_wrap, 'power_grid_mute');
				}

				/* Star or un-star it.*/
				if (D.getStyle(star_span, 'display') === 'none')
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count++;
					open_b.innerHTML = star_count;

					if (star_count > 0)
					{
						D.removeClass('power_grid_open_all', 'dimmed');
					}

					D.addClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'block');
				}
				else
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count--;
					open_b.innerHTML = star_count;

					if (star_count === 0)
					{
						D.addClass('power_grid_open_all', 'dimmed');
					}

					D.removeClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'none');
				}
			}
			else if (D.hasClass(the_target, 'power_grid_button_x'))
			{
				E.stopEvent(e);

				var the_li		= the_target.parentNode.parentNode;
				var div_wrap	= the_li.getElementsByTagName('div')[0];
				var star_span	= the_li.getElementsByTagName('span')[0];
				var site_link	= the_li.getElementsByTagName('a')[0];

				/* Remove star status.*/
				if (D.getStyle(star_span, 'display') === 'block')
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count--;
					open_b.innerHTML = star_count;

					if (star_count === 0)
					{
						D.addClass('power_grid_open_all', 'dimmed');
					}

					D.removeClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'none');
				}

				/* Mute or un-mute it.*/
				if (D.hasClass(div_wrap, 'power_grid_mute'))
				{
					D.removeClass(div_wrap, 'power_grid_mute');
				}
				else
				{
					D.addClass(div_wrap, 'power_grid_mute');
				}
			}

			/* Dim the reset button? */
			if (D.getElementsByClassName('power_grid_mute', 'div', 'power_grid').length !== 0 || !D.hasClass('power_grid_open_all', 'dimmed'))
			{
				if (D.hasClass('power_grid_reset', 'dimmed'))
				{
					D.removeClass('power_grid_reset', 'dimmed');
				}
			}
			else if (D.getElementsByClassName('power_grid_mute', 'div', 'power_grid').length === 0 && D.hasClass('power_grid_open_all', 'dimmed'))
			{
				if (!D.hasClass('power_grid_reset', 'dimmed'))
				{
					D.addClass('power_grid_reset', 'dimmed');
				}
			}

		});

		/* Flip screenshots checkbox. */
		E.on('power_grid_flip_check', 'click', function(e)
		{
			E.stopEvent(e);

			/* Change button state. */
			if (D.hasClass(this, 'alt'))
			{
				D.removeClass(this, 'alt');
				
				if (VIEWZI.viewprefs.setViewPref)
				{
					VIEWZI.viewprefs.setViewPref('flip', 'yes');
				}
			}
			else
			{
				D.addClass(this, 'alt');
				
				if (VIEWZI.viewprefs.setViewPref)
				{
					VIEWZI.viewprefs.setViewPref('flip', 'no');
				}
			}

			/* Change hover state. */
			if (!D.hasClass('power_grid_flip_check', 'alt') && !D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_show_screens_swap';
			}
			else if (D.hasClass('power_grid_flip_check', 'alt') && !D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_show_screens_noswap';	
			}
			else if (!D.hasClass('power_grid_flip_check', 'alt') && D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_hide_screens_swap';
			}
			else if (D.hasClass('power_grid_flip_check', 'alt') && D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_hide_screens_noswap';
			}

			if (parseInt(YAHOO.env.ua.ie, 10) === 6){
				document.recalc();
			}
		});

		/* Toggle screenshots or text. */
		E.on('power_grid_toggle', 'click', function(e)
		{
			E.stopEvent(e);

			/* Change button state. */
			if (D.hasClass(this, 'alt'))
			{
				D.removeClass(this, 'alt');
				
				if (VIEWZI.viewprefs.setViewPref)
				{
					VIEWZI.viewprefs.setViewPref('toggle', 'screens');
				}
			}
			else
			{
				D.addClass(this, 'alt');
				
				if (VIEWZI.viewprefs.setViewPref)
				{
					VIEWZI.viewprefs.setViewPref('toggle', 'text');
				}
			}

			/* Change button state. */
			if (!D.hasClass('power_grid_flip_check', 'alt') && !D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_show_screens_swap';
			}
			else if (D.hasClass('power_grid_flip_check', 'alt') && !D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_show_screens_noswap';	
			}
			else if (!D.hasClass('power_grid_flip_check', 'alt') && D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_hide_screens_swap';
			}
			else if (D.hasClass('power_grid_flip_check', 'alt') && D.hasClass('power_grid_toggle', 'alt'))
			{
				D.get('power_grid').className = 'power_grid_hide_screens_noswap';
			}
			if (parseInt(YAHOO.env.ua.ie, 10) === 6){
				document.recalc();
			}
		});

		/* Open star links. */
		E.on('power_grid_open_all', 'click', function(e)
		{
			E.stopEvent(e);

			/* If greater than zero. */
			if (open_b.innerHTML !== '0')
			{
				var star_links = D.getElementsByClassName('power_grid_link', 'a', 'power_grid');

				function blastOff()
				{
					for (var i = 0, j = star_links.length; i < j; i++)
					{
						window.open(star_links[i].href);
					}
				}

				/* More than ten links? */
				if (star_links.length > 10)
				{
					if (confirm('Open ' + star_links.length + ' new links?'))
					{
						blastOff();
					}
				}
				else
				{
					blastOff();
				}
			}
		});
		
		/* Pagination arrow buttons. */
		E.on(['power_grid_nav_arrow_l', 'power_grid_nav_arrow_r'], 'click', function(e)
		{
			E.stopEvent(e);

			/* Left pagination button. */
			if (E.getTarget(e).id === 'power_grid_nav_arrow_l' || E.getTarget(e).parentNode.id === 'power_grid_nav_arrow_l')
			{
				VIEWZI.view.pageLeft();
			}

			/* Right pagination button. */
			if (E.getTarget(e).id === 'power_grid_nav_arrow_r' || E.getTarget(e).parentNode.id === 'power_grid_nav_arrow_r')
			{
				VIEWZI.view.pageRight();
			}

			cur_li = num_li * num_ct - 1;
		});

		/* Clear pagination ID. */
		E.on('power_grid', 'mouseover', function(e)
		{
			if (D.get('power_grid_active'))
			{
				D.get('power_grid_active').className	= '';
				D.get('power_grid_active').id			= '';
			}

			cur_li = num_li * num_ct - 1;
		});

		/* Reset star + muted tiles. */
		E.on('power_grid_reset', 'click', function()
		{
			var muted_tiles = D.getElementsByClassName('power_grid_mute', 'div', 'power_grid');

			/* Muted tiles. */
			if (muted_tiles.length !== 0)
			{
				D.removeClass(muted_tiles, 'power_grid_mute');
			}

			/* Starred tiles. */
			if (!D.hasClass('power_grid_open_all', 'dimmed'))
			{
				D.addClass('power_grid_open_all', 'dimmed');

				var starred_tiles = D.getElementsByClassName('power_grid_selected', 'span', 'power_grid');

				D.setStyle(starred_tiles, 'display', 'none');

				var active_links = D.getElementsByClassName('power_grid_link', 'a', 'power_grid');

				D.removeClass(active_links, 'power_grid_link');

				open_b.innerHTML = 0;
			}

			if (!D.hasClass(this, 'dimmed'))
			{
				D.addClass(this, 'dimmed');
			}
		});

		/* Is the text field focused? */
		E.on('viewziViewsearchinput', 'focus', function()
		{
			input_focus = true;
		});
		E.on('viewziViewsearchinput', 'blur', function()
		{
			input_focus = false;
		});

		/* Listen for arrow keys. */
		new K(document, {keys: [37, 38, 39, 40]}, function()
		{
			/* If input focused, don't listen to keys. */
			if (input_focus)
			{
				return;
			}

			if (D.get('power_grid_active'))
			{
				D.get('power_grid_active').className	= '';
				D.get('power_grid_active').id			= '';
			}

			var key_pressed	= arguments[1][0];
			var row_width	= grid_width / 240;
			var all_li		= D.get('power_grid').getElementsByTagName('li');

			/* Left arrow. */
			if (key_pressed === 37 && cur_li !== 0)
			{
				if (cur_li < num_li * num_ct)
				{
					cur_li = num_li * num_ct;
				}
				else
				{
					cur_li--;
				}
			}
			/* Right arrow. */
			else if (key_pressed === 39)
			{
				cur_li++;
			}
			/* Up arrow. */
			else if (key_pressed === 38)
			{
				if (cur_li < num_li * num_ct)
				{
					cur_li = num_li * num_ct;
				}
				else
				{
					cur_li -= row_width;

					if (cur_li <= 0)
					{
						cur_li = 0;
					}
				}
			}
			/* Down arrow. */
			else if (key_pressed === 40)
			{
				if (cur_li < num_li * num_ct)
				{
					cur_li = num_li * num_ct;
				}
				else
				{
					cur_li += row_width;
				}
			}

			/* Pagination needed? */
			if ((key_pressed === 37 || key_pressed === 38) && cur_li < num_li * num_ct)
			{
				key_pg = true;

				VIEWZI.view.pageLeft();
			}
			else if ((key_pressed === 39 || key_pressed === 40) && cur_li > (num_li * num_ct) + num_li - 1)
			{
				key_pg = true;

				VIEWZI.view.pageRight();
			}
			else
			{
				D.get('power_grid').getElementsByTagName('li')[cur_li].className	= 'hover';
				D.get('power_grid').getElementsByTagName('li')[cur_li].id			= 'power_grid_active';
			}
		}).enable();

		/* Listen for [Enter, S, X] keys. */
		new K(document, {keys: [13, 83, 88]}, function()
		{
			/* If input focused, don't listen to keys. */
			if (input_focus || !D.get('power_grid_active'))
			{
				return;
			}

			var key_pressed	= arguments[1][0];

			/* S key pressed. */
			if (key_pressed === 83)
			{
				var the_li		= D.get('power_grid_active');
				var div_wrap	= the_li.getElementsByTagName('div')[0];
				var star_span	= the_li.getElementsByTagName('span')[0];
				var site_link	= the_li.getElementsByTagName('a')[0];

				/* Restore opacity. */
				if (D.hasClass(div_wrap, 'power_grid_mute'))
				{
					D.removeClass(div_wrap, 'power_grid_mute');
				}

				/* Star or un-star it.*/
				if (D.getStyle(star_span, 'display') === 'none')
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count++;
					open_b.innerHTML = star_count;

					if (star_count > 0)
					{
						D.removeClass('power_grid_open_all', 'dimmed');
					}

					D.addClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'block');
				}
				else
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count--;
					open_b.innerHTML = star_count;

					if (star_count === 0)
					{
						D.addClass('power_grid_open_all', 'dimmed');
					}

					D.removeClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'none');
				}
			}
			/* X key pressed. */
			else if (key_pressed === 88)
			{
				var the_li		= D.get('power_grid_active');
				var div_wrap	= the_li.getElementsByTagName('div')[0];
				var star_span	= the_li.getElementsByTagName('span')[0];
				var site_link	= the_li.getElementsByTagName('a')[0];

				/* Remove star status.*/
				if (D.getStyle(star_span, 'display') === 'block')
				{
					var star_count = parseInt(open_b.innerHTML, 10);

					star_count--;
					open_b.innerHTML = star_count;

					if (star_count === 0)
					{
						D.addClass('power_grid_open_all', 'dimmed');
					}

					D.removeClass(site_link, 'power_grid_link');
					D.setStyle(star_span, 'display', 'none');
				}

				/* Mute or un-mute it.*/
				if (D.hasClass(div_wrap, 'power_grid_mute'))
				{
					D.removeClass(div_wrap, 'power_grid_mute');
				}
				else
				{
					D.addClass(div_wrap, 'power_grid_mute');
				}
			}
			/* Enter key pressed. */
			else if (key_pressed === 13)
			{
				/* If Safari. */
				if (YAHOO.env.ua.webkit)
				{
					/* Use blur event as a pseudo click event. */
					D.get('power_grid_active').getElementsByTagName('a')[0].onblur = function()
					{
						VIEWZI.launchUrl(this.href);
					};

					/* Cancel default event, unreliable cross-browser. */
					D.get('power_grid_active').getElementsByTagName('a')[0].onfocus = function()
					{
						return false;
					};

					/* Focus the link. */
					D.get('power_grid_active').getElementsByTagName('a')[0].focus();

					/* Fire off. */
					function blurLink()
					{
						D.get('power_grid_active').getElementsByTagName('a')[0].blur();
					}

					/* Sleep + blur. */
					setTimeout(blurLink, 0);
				}
				else
				{
					D.get('power_grid_active').getElementsByTagName('a')[0].focus();
				}
			}
		}).enable();

	}; /* End VIEWZI.view.pageLoad */

})(); /* End closure. */