/**
 * Extend jQuery
 */

(function($){

  $.fn.wrapTo = function(to,wrap,options)
  {
    // defaults
    var opts = $.extend({}, $.fn.wrapTo.defaults, options);
    // do wrapping
    $(this).each(function ()
      {
        var to_wrap = [];
        if (opts.is_inside) to_wrap.push(this);
        var element = $(this).next();
        while (element.length>0 && !element.is(to)) {
          to_wrap.push(element.get(0));
          element = element.next();
        }
        $(to_wrap).wrapAll(wrap);
      });
  }

  // defaults
  $.fn.wrapTo.defaults = {
    is_inside: false   // whether to include the element being acted upon in the wrap
  }

})(jQuery);

/**
 * wrap chunk of text in div hidden
 */

var Partner = {

  regions: Array('europe','latin','pacific','middle','north','caribbean','africa'),

  init: function()
  {
    if ($('.partner').length==0) return;
    // enhance structure
    $('h2').wrapTo('h2','<div class="region clearfix"></div>');
    $('h3').wrapTo('h3','<div class="type"></div>',{is_inside: true});
    $('h4').wrapTo('h4','<div class="company"></div>');
    // create people links and pop-ups
    $('div.company').hide();
    $('h4').each(function() {
        var link = $('<a href="#"></a>');
        $(this).wrapInner(link);
        var country = $(this).next('div').find('em');
        if (country.length>0) {
          country = country.eq(0).text();
          $(this).prepend('<span class="ctry">'+country+': </span>');
        }
      });
    $('h4 a').click(Partner.open);
    // create map hover effect
    $('#banner').append('<div id="map-links"></div>');
    $('h2').each(function() {
                  var text = $(this).text();
                  var id = '';
                  // get ID if known (this relate to hard-coded map areas in css)
                  for (var i in Partner.regions) {
                    if (text.match(new RegExp(Partner.regions[i],'i'))) id = Partner.regions[i];
                  }
                  if (id) $(this).addClass(id);
                  $('div#map-links').append('<a href="#" class="'+id+'">'+text+'</a>');
                });
    // attach click events
    $('#map-links a').click(Partner.toRegion);
  },

  open: function()
  {
    // close all others
    $('h4 a').each(Partner.close);
    // open
    element = $(this).parent('h4').addClass('active').next('div');
    element.prepend($('<a class="c-close" href="#">close</a>').click(Partner.close));
    var pos = $(this).position();
    element.addClass('c-active')
           .css({ position: "absolute",
                  top: pos.top,
                  left: pos.left+$(this).width()+5 })
           .show();
    return false;
  },

  close: function ()
  {
    var h4 = $(this).parent('h4');
    var is_click = false;
    if (h4.length==0) {
      is_click = true;
      h4 = $(this).parent('div.company').prev('h4');
    }
    h4.removeClass('active')
      .next('div').removeClass('c-active').hide()
      .children('a.c-close').remove();
    if (is_click) return false;
  },

  toRegion: function()
  {
    var region = $(this).attr('class');
    $('div.region').hide();
    $('div.region div.other-regions').remove();
    $('h2').hide();
    // compile other regions
    var other = $('<div class="other-regions"><h3>Other Regions</h3></div>');
    for (var i in Partner.regions) {
      if (!region.match(new RegExp(Partner.regions[i],'i'))) {
        var link = $('<a href="#">'+$('h2.'+Partner.regions[i]).text()+'</a>');
        link.addClass(Partner.regions[i]).click(Partner.toRegion);
        other.append($('<p></p>').append(link));
      }
    }
    $('h2.'+region).show()
      .next('div').show()
      .append(other)
    return false;
  }

};

$(document).ready(Partner.init);
