(function($){
  $.fn.regionChooser = function() {

      var element = $(this);
      var height = element.height();
      var ie6Closer;

      element.css({ cursor: 'pointer' });



      element.click( function(event) {
        event.preventDefault();

        toggler(this);
      });

      var toggler = function(elem) {
        if($(elem).hasClass('open')) {
          close.apply(elem);
        }
        else {
          open.apply(elem);
        }
      };

      var open = function() {
        var that = this,
            regions = $('div.region_list'),
            params = {height:"238px", opacity:1};

        $(this).addClass('open');


        if(regions.length === 0) {
          regions = $('<div></div>', { 'class': 'region_list' }).insertAfter('div#branding').hide();

          regions.css({height:0, opacity:0, overflow:"hidden"}).animate(params, function() {
            add_loader(regions);
            regions.load('/regions_dropdown?nocache=true', false, function(data) {
              var div = $(this);
              swfobject.embedSWF("/flash/map.swf", "flash_map", "451", "220", "9.0.0", false, false, { wmode: "transparent", allowscriptaccess: "always"});
              regions.find('>*').hide().fadeIn('slow');
              bindFlash(div.find('a'));
              ieClose();
              remove_loader(regions);
            });
          });
        }
        else {
          regions.animate(params, function() {
            regions.find('>*').fadeIn();
          });
        }

      };

      var close = function() {
        var regions = $('div.region_list');

        $(this).removeClass('open');

        regions.find('>*').fadeOut();
        regions.animate({height:0, opacity:0});
      };

      var add_loader = function(element) {
        var padding = parseInt(element.css("padding-left"), 10) + parseInt(element.css("padding-right"), 10),
            center = {x:((element.width() + padding) / 2) - 16, y:(element.height() / 2) - 16};

        $('<img></img>', {
          'class': 'loader',
          src: '/images/white-ajax-loader.gif',
          css: {
            position: "absolute",
            left: center.x,
            top: center.y
          }
        }).appendTo(element);
      };

      var remove_loader = function(element) {
        element.find('img.loader').remove();
      };

      var ieClose = function() {
        if($.browser.msie && $.browser.version === '6.0') {
          ie6Closer = $('<div></div>', {
            'class': 'close',
            css: {
              cursor: 'pointer'
            },
            click: function() {
              toggler(element);
            }
          }).appendTo($('div.region_list'));
        }
      };

      function bindFlash(links) {
        links.each(function(){
          var map = $("object#flash_map")[0];
          if(map) {
            // $(this).click(function() {
            //   $.cookies.set('region', this.id);
            // });
            $(this).hover(function() {
              map.color(regionChooserFlash.sanitize($(this).text()));
            }, function() {
              map.reset(regionChooserFlash.sanitize($(this).text()));
            });
          }
        });
      }

      return this;
  };
})(jQuery);

var regionChooserFlash = {
  flashClick: function(string) {
    var a = this.findA(string);
    window.location = a.attr('href');
  },
  flashOver: function(string) {
    var a = this.findA(string);

    a.addClass('active');
  },
  flashOut: function(string) {
    var a = this.findA(string);

    a.removeClass('active');
  },
  findA: function(string) {
    var scope = this;
    return $('div.region_list a').filter(function() {
      return scope.sanitize($(this).text()) == string;
    });
  },
  sanitize: function(string) {
    return string.replace(/ /g,'_').replace(/&amp;|&/g,'and').toLowerCase();
  }
};

