/**
 * @author Peter Slagter
 * @email peter@procurios.nl
 */

var qsTimeOut;

document.observe("dom:loaded", function()
{
	/* Toggle QuickSearch defaultvalue */
	if ($('searchfield') && $('quick-search')) {
		
		// First: build a multi-search quicksearch bar
		var ul = new Element('ul', {'id': 'qs-switcher'});
		
		var actions = ['/k/searchengine', '/k/googlemaps/search', 'http://recepten.keurslager.nl/recipebase/view/31406?'];
		var names = ['q', 'address', 'search[text]'];
		var values = [PbLib.g('Search in this website'), PbLib.g('Enter city or postal code'), PbLib.g('Search a recipe')];
		var actionTitles = [PbLib.g('Search in this website'), PbLib.g('Find your Keurslager'), PbLib.g('Search a recipe')];
		
		var li = new Element('li', {'class': 'qs-selected'});
		var span = new Element('span', {'class': 'site'});
		var spanText = document.createTextNode(actionTitles[0]);
		span.appendChild(spanText);
		li.appendChild(span);
		
		var ul2 = new Element('ul');
		li.appendChild(ul2);
		
		actions.each( function(action, i) {
			var li = new Element('li')
			var liText = document.createTextNode(actionTitles[i]);
			
			li.appendChild(liText);
			ul2.appendChild(li);
			
			li.observe('click', function(event) {
				ul2.setStyle({'left' : '-999em'});
				$('quick-search').writeAttribute('action', actions[i]);
				$('searchfield').writeAttribute('name', names[i]);
				
				if (i == 1) {
					var input = new Element('input', {
						'type': 'hidden',
						'name': 'map',
						'value': 'vvk',
						'id': 'qs-maps-input'
					});
					
					$('quick-search').insert({'top': input});
				} else if ($('qs-maps-input')) {
					$('qs-maps-input').remove();
				}
				
				$('searchfield').value = $('searchfield').defaultValue = values[i];
			});
		});
		
		ul.appendChild(li);
		
		$('quick-search').insert({'top': ul});
		
		ul.observe('mouseenter', function(event) {
			if (typeof qsTimeOut == "number") {
				window.clearTimeout(qsTimeOut);
				delete qsTimeOut;
			}
			ul2.setStyle({'left' : '-1px'});
		});
		
		ul.observe('mouseleave', function(event) {
			qsTimeOut = Element.setStyle.delay(0.4, ul2, {'left' : '-999em'});
		});
		
		// Second: Insert quick-search default value and make sure users can't submit an empty searchbox or the default value
		$('searchfield').value = $('searchfield').defaultValue = values[0];

		$('quick-search').observe('submit', function(event) {
			if ($F('searchfield').empty() || $F('searchfield') == $('searchfield').defaultValue) {
				$('searchfield').value = '';
				$('searchfield').focus();
				Event.stop(event);
			}
		});

		$('searchfield').observe('focus', function(event) {
			if (Event.element(event).value == Event.element(event).defaultValue) {
				Event.element(event).value = '';
			}
		});

		$('searchfield').observe('blur', function(event) {
			if (Event.element(event).value.empty()) {
				Event.element(event).value = Event.element(event).defaultValue;
			}
		});
	}
	
	// Add has-js classname to home variant
	if ($('home')) {
		$('home').addClassName('has-js');
		
		// Make all portal articles clickable and navigate to the href of first a-elem found
		if ($('portal')) {
			$('portal').select('div.article').each( function(element) {
				element.setStyle({
					'cursor' : 'pointer'
				});
				
				var href = element.select('a').first().href;
				
				element.observe('click', function(event) {
					Event.stop(event);
					window.location.href = href;
				});
			});
		}
	}
	
	// Set ARIA roles
	addARIARole('content', 'main');
	if ($('home')) {
		addARIARole('content', 'main widget');
		addARIARole('search-store', 'search');
		addARIARole('portal', 'navigation');
	}
	addARIARole('quick-search', 'search');
	addARIARole('nav', 'navigation');
	addARIARole('subnav', 'navigation');
	addARIARole('nav', 'navigation');
	addARIARole('sidebarright', 'complementary');
	addARIARole('header', 'banner');
	addARIARole('shortcuts', 'navigation');
	
	// Get required form fields and add an ARIA role
	$$('span.req').each( function(elem) {
		elem.up().next().down('input, textarea').setAttribute('aria-required', 'true');
	});
	
	// Get invalid form fields
	$$('div.formfielderror').each( function(elem) {
		elem.next('input, textarea').setAttribute('aria-invalid', 'true');
	});

});

function addARIARole(strID, strRole) {
    // Find the element to add a role property to
    if ($(strID)) {
        // Add the role property to the element
        $(strID).setAttribute('role', strRole);
    }
}