var maps = [];
maps['main']                = new Image();
maps['East']                = new Image();
maps['North']               = new Image();
maps['Reykjanes_Peninsula'] = new Image();
maps['Reykjavik_Area']      = new Image();
maps['South']               = new Image();
maps['West']                = new Image();
maps['Westfjords']          = new Image();
maps['Highland']            = new Image();

for (i in maps) {
	var map_name;
	map_name = '../images/Iceland_map_'+i+'.png';
	maps[i].src    = map_name;
	maps[i].useMap = '#map';
}

// ThomasK, almost completely rewritten...
var sidebarFormDebug = false;
var xmlURL = "tellmemore_options.xml";

$(document).ready( function(){
/*
	// previous version
	$('.sidebar-wrapper a.submit').click(function(event){
		event.preventDefault();
		$('.sidebar-wrapper form').submit();
	});
*/
	// fill in more_shadow from .xml
	fillInShadow();
	
	// Prepare shadow, then submit
	$('.sidebar-wrapper form').submit(function() {
		copyGuiToShadow();
		return true;
	});

	$('.sidebar-wrapper select.what').change(getRelatedList);
	
	var areas = $('area');
	for ( var i=0; i<areas.length; i++ ) {
		// $(areas[i]).bind('mouseenter mouseleave click', mapHilight);
		$(areas[i]).bind('mouseenter mouseleave mousedown', mapHilight);	// ThomasK, IE-bug
	};
	
	$('select.where').change(mapHilight);
});

function fillInShadow() {
	// Fill the more_shadow field if not yet done
	if ($('.sidebar-wrapper select.more_shadow option').length == 0) {
		$.get(xmlURL, function(xmlDoc) {
			var all_items = xmlDoc.getElementsByTagName('list')[0].getElementsByTagName('item');
			for (var i = 0; i < all_items.length; i++) {
				var node_value = all_items[i].firstChild.nodeValue;
				if (node_value != "All") {
					$('.sidebar-wrapper select.more_shadow').append(
						$('<option></option>').val(node_value).html(node_value)
					);
				}
			}
			// Debug		
			if (sidebarFormDebug) alert("fillInShadow: " + $('.sidebar-wrapper select.more_shadow option').length);
		}, "xml");
	}
}

function copyGuiToShadow() {
	// 1. what
	// clear shadow
	$('.sidebar-wrapper select.what_shadow').each(function(){
		$('option', this).each(function() {
			$(this).attr("selected",false)
		})
	});
	var selected = $('.sidebar-wrapper select.what').val();
	if (selected == "All") {
		// select all
		$('.sidebar-wrapper select.what_shadow').each(function(){
			$('option', this).each(function() {
				$(this).attr("selected","selected")
			})
		});
	} else {
		// only one
		$('.sidebar-wrapper select.what_shadow').val(selected);
	}
	// Debug
	if (sidebarFormDebug) alert("What: " + $('.sidebar-wrapper select.what_shadow option:selected').length);

	// 2. more
	// clear shadow
	$('.sidebar-wrapper select.more_shadow').each(function(){
		$('option', this).each(function() {
			$(this).attr("selected",false)
		})
	});
	// copy to shadow
	var selected = $('.sidebar-wrapper select.more').val();
	if (selected == "All") {
		// special case, is what also "All"?
		if ($('.sidebar-wrapper select.what').val() == "All") {
			// all values from all selects
			if (sidebarFormDebug) alert("jackpot");
			// select all 
			$('.sidebar-wrapper select.more_shadow').each(function(){
				$('option', this).each(function() {
					$(this).attr("selected","selected")
				})
			});
		} else {
			// all values from current select
			$('.sidebar-wrapper select.more').each(function(){
				$('option', this).each(function() {
					$('.sidebar-wrapper select.more_shadow option[value="' + $(this).text() + '"]').attr("selected","selected")
				})
			});
		}
	} else {
		// only one
		$('.sidebar-wrapper select.more_shadow option[value="' + selected + '"]').attr("selected","selected")
	}
	// Debug
	if (sidebarFormDebug) alert("More: " + $('.sidebar-wrapper select.more_shadow option:selected').length);
}

function setWhatAndMoreToAll() {
	// Reset more field
	$('.sidebar-wrapper select.more').find('option').remove();
	$('.sidebar-wrapper select.more').append(
		$('<option></option>').val('All').html('All').attr('selected', 'selected')
	);
	// now set "All"
	$('.sidebar-wrapper select.what option[value="All"]').attr('selected', 'selected');
}

function mapHilight(event) {
	var place;
	if ( event.target.tagName == 'AREA' ) {
		place = $(event.target).attr('alt');
		if ( event.type == 'mouseleave' ) {
			place = 'main';
		// } else if ( event.type == 'click' ) {
		} else if ( event.type == 'mousedown' ) {	// ThomasK, IE-bug
			var places = $('.sidebar-wrapper select.where option');
			for ( var i=0; i<places.length; i++ ) {
				if ( $(places[i]).val().indexOf(place) != -1 ) {
					$('area').unbind('mouseenter mouseleave');
					$(places[i]).attr('selected', 'selected');

					setWhatAndMoreToAll();

					break;
				}
			}
		}
	} else if ( event.target.tagName == 'SELECT' ) {
		$('area').unbind('mouseenter mouseleave');
		var value = $(event.target).val();
		
		setWhatAndMoreToAll();

		switch (value) {
		case "Reykjavík Area":
		case "Reykjavík":
			place = 'Reykjavik Area';
			break;
			
		case "Reykjanes Peninsula":
		case "Westfjords":
		case "Highland":
			place = value;
			break;
			
		case "South":
		case "Hveragerði":
		case "Selfoss":
		case "Hvolsvöllur":
		case "Vík":
			place = 'South';
			break;
			
		case "East":
		case "Eskifjörður":
			place = 'East';
			break;
			
		case "North":
		case "Akureyri":
			place = 'North';
			break;
			
		case "West":
		case "Borgarnes":
			place = 'West';
			break;
			
		default:
			place = 'main';
			break;
		}
	}
	
	var sidebar_form = document.getElementById('mini-search');
	
	var img_wrapper;
	var sidebar_divs = sidebar_form.getElementsByTagName('DIV');
	for (var i = 0; i < sidebar_divs.length; i++) {
		if (sidebar_divs[i].className == 'img-wrapper') {
			img_wrapper = sidebar_divs[i];
			break;
		}
	}
	var mapImage = img_wrapper.getElementsByTagName('IMG')[0];
	
	// if clicked on map, ThomasK
	place = place.replace(/í/, 'i');
	
	img_wrapper.removeChild(mapImage);
	img_wrapper.appendChild(maps[place.replace(/ /, '_')]);
}

function getRelatedList(event) {
	if (!event.target.value || event.target.value == '') return false;

	$.get(xmlURL, function(xmlDoc) {
		// Fill the more field

		// Delete all entries
		$('.sidebar-wrapper select.more').find('option').remove();
		// Fill in new entries
		if (event.target.value == "All") {
			// Found "All" as category
			// only one entry
			$('.sidebar-wrapper select.more').append(
				$('<option></option>').val('All').html('All')
			);
		} else {
			// Find category for gui field
			var category;
			var categories = xmlDoc.getElementsByTagName('category');
			for (var i = 0; i < categories.length; i++) {
				if (categories[i].getAttribute('id') == event.target.value) {
					category = categories[i];
					break;
				}
			}
		
			if (category) {
				// Fill in gui field
	/*
				// default value
				$('.sidebar-wrapper select.more').append(
					$('<option></option>').val('').html('-- Select '+event.target.value+' --')
				);
	*/
				// items
				var items = category.getElementsByTagName('item');
				for (var i = 0; i < items.length; i++) {
					var node_value = items[i].firstChild.nodeValue;
					$('.sidebar-wrapper select.more').append(
						$('<option></option>').val(node_value).html(node_value)
					);
				}
			} else {
				// no category, probably "what?" or similar...
				$('.sidebar-wrapper select.more').append(
					$('<option></option>').val('').html('Tell me more ...')
				);
			}
		}
		// select "All" entry
		$('.sidebar-wrapper select.more option[value="All"]').attr('selected', 'selected');

		// Debug		
		if (sidebarFormDebug) alert("getRelatedList: " + $('.sidebar-wrapper select.more option').length);
	}, "xml");

}

