var EmailPage = {

		_formObj: {},
		_sending: false,

    initialize: function() {
      var $form_container = jq$('#email-form');
      this._formObj.container = $form_container;
		  this._formObj.form = $form_container.children('form');
		  this._formObj.response = jq$('#email-status-container');
      this._initEventHandlers();
    },

		_initEventHandlers: function() {
			var _this = this,
			    fo = _this._formObj;

      fo.container.find('.send-email').click(function() {
        fo.form.submit();
        return false;
      });

      fo.form.submit(function() {
        _this._sendEmail();
        return false;
      });

      fo.form.find('input[type="text"]').each(function() {
        jq$(this).placeholder();
      });

    },

    _validate: function() {

			var valid = true,
			validator = {
	      "toName": {
	        re: new RegExp("[a-zA-Z0-9\- ]$"),
	        msg: "Please enter the recipient's name" },
	      "toEmail": {
	        re: new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)"),
	        msg: "Enter a valid email address" },
	      "replyToAddress": {
	        re: new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)"),
	        msg: "Enter a valid email address" },
	      "fromName": {
	        re: new RegExp("[a-zA-Z0-9\- ]$"),
	        msg: "Please enter your name" }
	    },
	    fo = this._formObj;

			var $messageArea = fo.form.find('textarea[name="message"]');
			if ($messageArea.val().length > 500){
				$messageArea.html("Your message must be less than 500 characters");
				$messageArea.addClass('invalid')
				valid = false;
			} else {
			  $messageArea.removeClass('invalid');
			};

			fo.form.find('.validate').each(function(index, element) {
        var val = validator[element.name];
        $el = jq$(element);
        if (!val.re.test(jq$.trim(element.value)) || element.value === element.title) {
          $el.val(val.msg)
          $el.attr('title', val.msg);
          $el.attr('placeholder', val.msg);
          $el.placeholder();
  				$el.addClass('invalid');
          valid = false;
        } else {
          $el.removeClass('invalid');
        };
			});

	    return valid;

		},

		_sendEmail: function() {
      var fo = this._formObj;
      var _this = this;

      if (!_this._validate()) {
				omniture.emailPage('error');
				googleAnalytics.trackEmailThisPage("Email Page Error", location.href);
				return;
			}

      if (_this._sending) return;

      _this._sending = true;

      fo.form.find('.send-email span').text('Sending');

      jq$.ajax({
        type: 'POST',
        url: window.location.href,
        data: fo.form.serialize(),
        success: function(data, textStatus, jqXHR) {
          _this._sending = false;
          omniture.emailPage('success');
    			googleAnalytics.trackEmailThisPage("Email Page Success", location.href);
    			fo.form[0].reset();
    			_this._showPopup('Your email has been sent!',true);
        },
        error: function() {
          _this._sending = false;
          _this._showPopup('There was an error sending this email.',false);
        }
      });

     },

		_showPopup: function(text,autoUp) {
			var fo = this._formObj;

			fo.response.find('.message').html(text);
			fo.form.hide();
			fo.response.show();

		}

};

var mmat = {
  services: 'twitter,email,facebook,linkedin',
  override: {
    email: function() {
      jq$('#mmat_shareModal').jqmHide();
      jq$('#email-form')
        .find('.init-hide').hide().end()
        .find('.init-show').show().end()
        .jqm({closeClass: "email-close"}).jqmShow();
    }
  },
  popupTitle: 'Share this page'
};

if (!Object.keys) {
  Object.keys = function(o){
    if (o !== Object(o)) throw new TypeError('Object.keys called on non-object');
    var ret=[], p;
    for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
    return ret;
  }
}

(function($) {

  $(document).ready(function() {

    EmailPage.initialize();

    var $shareModal = (typeof mmat !== 'undefined' && typeof mmat.popupId !== 'undefined') ? $('#'+mmat.popupId) : $('#mmat_shareModal'),
        trigger = (typeof mmat !== 'undefined' && typeof mmat.triggerClass !== 'undefined') ? '.'+mmat.triggerClass : '.mmat_shareModal_open',
        validServices = ['twitter', 'facebook', 'email', 'linkedin'],
        requestedServices = (typeof mmat !== 'undefined' && typeof mmat.services !== 'undefined') ? mmat.services : validServices.join(','),
        overrideServices = (typeof mmat !== 'undefined' && typeof mmat.override !== 'undefined') ? mmat.override : {},
        validateServices = function(arr) {
          return $.map(arr, function(val, i) {
            var service = val.toLowerCase();
            if (service && $.inArray(service, validServices) > -1) return service;
          });
        },
        userServices = validateServices(requestedServices.split(',')),
        customServices = validateServices(Object.keys(overrideServices)),
        userTitle = (typeof mmat !== 'undefined' && typeof mmat.popupTitle !== 'undefined') ? mmat.popupTitle : 'Pick one of the destinations below to share this page:',
        maxWidth = 204,
        lrPadding = 25,
        serviceMargin = 25,
        serviceWidth = 32;

    if (userServices.length === 0) {
      $shareModal.remove();
      return;
    }

    // Create title
    if (userTitle) {
      $shareModal.append('<p class="title">' + userTitle + '</p>');
    }

    // Create sharing elements
    var $shareList = $('<ul/>'),
        shareListHtml = '',
        liStyle = '';

    for (var i = 0, m = userServices.length; i < m; i++) {
      var service = userServices[i],
          serviceClass = '',
          insideA = '';
      if (i < (m - 1)) {
        liStyle = "margin-right:" + serviceMargin + "px;"
      } else {
        liStyle = "";
      }
      if ($.inArray(service, customServices) > -1) {
        serviceClass = 'custom_button_' + service + ' at300b';
        insideA = '<span class="at300bs at15nc at15t_'+service+'"></span>'
      } else {
        serviceClass = 'addthis_button_' + service;
      }
      shareListHtml += '<li style="' + liStyle + '"><a rel="'+service+'" class="mmat_sharethis_service addthis_32x32_style '+serviceClass+'">'+insideA+'</a></li>';
    }

    var ulWidth = userServices.length * serviceWidth + ((userServices.length - 1) * serviceMargin),
        modalWidth = (!userTitle) ? ulWidth : maxWidth;

    $shareList.append(shareListHtml).css({
      'left': ((modalWidth - ulWidth) / 2) + 'px'
    });

    $shareModal.css({
      'width': modalWidth + 'px',
      'padding-left': lrPadding + 'px',
      'padding-right': lrPadding + 'px',
      'margin-left': ((modalWidth + (lrPadding * 2)) / -2) + 'px'
    }).append($shareList).append('<a href="#" class="mmat_close"></a>');

    for (var i = 0, m = customServices.length; i < m; i++) {
      var service = customServices[i];
      $shareModal.delegate('.custom_button_'+service, 'click', overrideServices[service]);
    }

    $shareModal.delegate('.mmat_sharethis_service', 'click', function() {
      googleAnalytics.trackShareClick($(this).attr('rel'));
    });

    // Initialize modal
    $shareModal.jqm({
      trigger: trigger,
      overlayClass: 'mmat_overlay',
      closeClass: 'mmat_close',
      overlay: 50
    });

    addthis.init();

  });

})(jQuery);

