﻿var jurisdictionSelector = {
	create: function(selector, headingText) {
		$(selector).each(function() {

			var container = $('<div id="changeJurisBox" class="changeJurisBox"><span class="changeJurisHeading">' + headingText + '</span><div style="clear:both;"></div></div>');

			$(this).prepend(container);

			$.get('services/jurisdictionSelectorService.asmx/GetBaseSelections', function(data) {
				jurisdictionSelector.mainSelectionsLoaded(container, data);
			}, 'xml');
		});
	},

	mainSelectionsLoaded: function(container, data) {
		$(data).children('ArrayOfSelection').children('Selection').each(function() {

			var categoryName = $(this).children('Name').first().text();
			var categoryId = $(this).children('CategoryId').first().text();

			$('<span class="changeJurisCountryHeading"></span>')
				.text(categoryName)
				.click(function() { jurisdictionSelector.loadNewSelection(container, categoryId, false) })
				.appendTo(container);
		});
	},

	loadNewSelection: function(container, selection, subNav) {
		$.get('services/jurisdictionSelectorService.asmx/GetSubSelections', { categoryId: selection }, function(data) {
			jurisdictionSelector.subSelectionsLoaded(container, data, subNav);
		}, 'xml');
	},

	subSelectionsLoaded: function(container, data, subNav) {
		// Create a panel to hold the selections
		var panel = $('<div class="changeJurisSelectionPanel"></div>');

		// Fill it with data
		$(data).children('ArrayOfSelection').children('Selection').each(function() {

			var categoryName = $(this).children('Name').first().text();
			var categoryId = $(this).children('CategoryId').first().text();
			var navigateUrl = $(this).children('NavigateUrl').first().text();

			var selection = $('<a href="#" class="changeJurisSelection"></a>')
				.appendTo(panel);

			if(navigateUrl == null || navigateUrl == '') {
				selection
					.text(categoryName)
					.click(function() { jurisdictionSelector.loadNewSelection(container, categoryId, true); });
			}
			else {
				selection
					.text(categoryName)
					.attr('href', navigateUrl);
			}

		});

		// Animate it
		if(subNav == false) {
			$(container).siblings('.changeJurisSelectionPanel').remove();
			panel.hide().insertAfter(container).slideDown();
		}
		else {
			var existingPanel = $(container).siblings('.changeJurisSelectionPanel');
			panel.insertAfter(container);
			existingPanel.fadeOut(function() {
				existingPanel.remove();
			});
		}

		// Hide it if the user moves the mouse away
		$(panel).add(container).mouseleave(function() {
			panel.data('mouseOutTimer', setTimeout(function() { panel.fadeOut(); }, 3000));
		});

		panel.mouseenter(function() {
			clearTimeout(panel.data('mouseOutTimer'));
		});
	}
};
