﻿document.write('<style type="text/css">.language-select-dropdown, .language-select-submit {display:none;}</style>');
(function($) {
	var RegionSelector = function(argOpts) {
		var opts = {};
		var defaultOpts = {
			overlayClass: "rs-overlay",
			closeButtonClass: "rs-map-close",
			mapContainerClass: "rs-map-container",
			mapControlClass: "rs-map-control",
			mapProxyClass: "rs-map-proxy",
			langCookieName: "website#lang",
			regionCookieName: "website#region",
			proxyImageSrc: "/styles/images/blank.gif",
			imageMapSelector: "#region-selector-map-coords",

			linkContainerClass: "rs-language-link-container",
			langLinkClass: "rs-language-link",
			languageSelectSelector: ".language-select-dropdown",
			languageListClass: "rs-language-links-list",
			languageListClassPrefix: "rs-language-links-",
			languageListItemClass: "rs-language-links-item",

			linkContainerTimeout: 500
		}
		opts = $.extend(opts, defaultOpts, argOpts);

		// Generate the necessary HTML
		var overlay = this.overlay = $(document.createElement('div'))
			.addClass(opts.overlayClass)
			.insertAfter($('.footer'));

		var mapContainer = this.mapContainer = $(document.createElement('div'))
			.addClass(opts.mapContainerClass)
			.append('<h2 class="rs-map-title">Tecumseh World Map</h2>')
			.append('<a href="#" class="' + opts.closeButtonClass + '"></a>')
			.insertAfter($('.footer'));

		var mapControl = this.mapControl = $(document.createElement('div'))
			.addClass(opts.mapControlClass);
		mapContainer.append(mapControl);

		var mapProxy = $(document.createElement('img'))
			.attr('src', opts.proxyImageSrc)
			.attr('usemap', opts.imageMapSelector)
			.addClass(opts.mapProxyClass);
		mapControl.append(mapProxy);

		var linkContainer = $(document.createElement('div'))
			.addClass(opts.linkContainerClass);
		linkContainer.append('<p class="rs-language-link-label">Select a language:</p>');
		mapControl.append(linkContainer);

		// Generate the link options
		var languageSelect = $(opts.languageSelectSelector);
		var groups = languageSelect.find('optgroup');
		for (var i = 0; i < groups.length; i++) {
			var group = $(groups[i]);
			var groupList = $(document.createElement('ul'))
				.addClass(opts.languageListClass)
				.addClass(opts.languageListClassPrefix + group.attr('id').replace('-group', ''));
			var options = group.find('option');
			for (var j = 0; j < options.length; j++) {
				var option = $(options[j]);
				groupList.append('<li class="' + opts.languageListItemClass + '"><a href="#" class="' + opts.langLinkClass + '" rel="' + option.attr('class') + '" lang="' + option.attr('value') + '">' + option.text() + '</a></li>');
			}
			linkContainer.append(groupList);
		}

		var langLinks = $('.' + opts.langLinkClass);
		var region = '';
		var lastHovered = '';
		var lastSelected = '';
		var hoverEnabled = true;

		var redrawOverlay = (function() {
			var height = $(window).height() > $(document).height() ? $(window).height() : $(document).height();
			overlay.height(height);
		});
		this.redrawOverlay = redrawOverlay;

		// Control ribbon
		var controlRibbon = function(verb) {
			var ribbon = $('.ribbon');
			if (ribbon.length) {
				try {
					window.jQuery('#' + ribbon.attr('id') + ' .slide-show').cycle(verb);
				} catch (ex) { /* shhhh */ }
			}
		}

		// Hide the popup and its overlay
		var hide = (function() {
			reset();
			hoverEnabled = true;
			overlay.hide();
			mapContainer.hide();
			controlRibbon('resume');
		});
		this.hide = hide;

		// Show the popup and its overlay
		var show = (function() {
			controlRibbon('pause');
			// Hide if escape key was pressed
			$(document).keypress(function(e) {
				if (e.keyCode == 27) { hide(); }
			});

			redrawOverlay();
			overlay.show();
			mapContainer.show();
		});
		this.show = show;

		// Get the selected option
		var getSelectedOption = (function() {
			var selectedOption = $(opts.select).find(':selected');
			return selectedOption;
		});
		this.getSelectedOption = getSelectedOption;

		// Get the selected language
		var language = (function() {
			var selectedOption = getSelectedOption();
			if (selectedOption)
				return selectedOption.text();
			return '';
		});
		this.language = language;

		// Get the selected country
		var country = (function() {
			var selectedOption = getSelectedOption();
			if (selectedOption) {
				var optGroup = selectedOption.parent('optgroup');
				if (optGroup)
					return optGroup.attr('label');
			}
			return '';
		});
		this.country = country;

		// Concats the country and language for display
		var textValue = (function() {
			return country() + " (" + language() + ")";
		});
		this.textValue = textValue;

		var reset = (function() {
			mapControl.removeClass(lastHovered);
			mapControl.removeClass(lastSelected + '-selected');
			hoverEnabled = true;
		});

		$(opts.imageMapSelector).find('area').hover(
			function() {
				var areaId = $(this).attr('id');
				if (languageSelect.find("#" + areaId.replace(/-area$/, "-group")).length && hoverEnabled) {
					mapControl.removeClass(lastHovered);
					mapControl.addClass(areaId);
					lastHovered = areaId;
				}
			}, function() { }
		).click(
			function() {
				mapControl.removeClass(lastHovered);
				mapControl.removeClass(lastSelected + '-selected');
				if (languageSelect.find("#" + $(this).attr('id').replace(/-area$/, "-group")).length) {
					region = $(this).attr('id');
					lastSelected = lastHovered = region;
					mapControl.addClass(lastSelected + '-selected');
					mapControl.addClass(lastSelected);
					hoverEnabled = false;
				}
				return false;
			}
		);
		mapContainer.mouseout(function() {
			if (hoverEnabled) {
				mapControl.removeClass(lastHovered);
			}
		});

		var moTimeout;
		linkContainer.mouseout(function() {
			moTimeout = setTimeout(reset, opts.linkContainerTimeout);
		});
		linkContainer.mouseover(function() {
			clearTimeout(moTimeout);
		});

		mapControl.click(reset);
		overlay.click(hide);
		$('.' + opts.closeButtonClass).click(hide);

		langLinks.click(function() {
			$.cookie(opts.langCookieName, $(this).attr('lang'), { path: '/' });
			$.cookie(opts.regionCookieName, $(this).attr('rel'), { path: '/' });
			window.location.href = '/?sc_lang=' + $(this).attr('lang') + '&r='+$(this).attr('rel');
			return false;
		});
	}

	$(document).ready(function() {
		var regionSelector = $('.language-selector');
		if (regionSelector) {
			// setup
			var myRegionSelector = new RegionSelector({ select: '.language-select-dropdown' });
			$('.language-selector-text').text(myRegionSelector.textValue());
			regionSelector.click(function() {
				myRegionSelector.show();
			});
			myRegionSelector.textValue();
		}
	});
})(jQuery);

