/*!
 * @copyright 2010-Present Advanced Care Solutions, Inc.
 * @author Christopher Rahauiser <crahauiser@acs-web.com>
 */
(function($) {
  $('a.newwin').click(function(event) {
    event.preventDefault();
    var win = window.open(this.href);
    if (win && win.focus) {
      win.focus();
    }
  });

  var formFields = $('#name,#phone,#email,#comments');

  $.scrollToElement = function(jqObj) {
    var selector = 'html';
    if (! $.browser.opera) {
      selector += ',body';
    }
    var offsetTop = jqObj.offset().top;
    $(selector).animate({
      scrollTop: offsetTop
    }, 1000);
  };

  var contactHolder = $('#contact-holder');
  $('#contact-link').click(function(event) {
    event.preventDefault();
    $.scrollToElement(contactHolder);
    formFields.eq(0).focus();
  });

  var messageHolder = $('#contact');
  var errorTemplate = '<p class="error contact-error">%s</p>';
  var successTemplate = '<p class="success contact-success">%s</p>';
  var phoneRegex = /^\d{10}$/;
  var emailRegex = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|biz|info|name|aero|jobs|museum|gov|edu|mil|asia|int)$/i;

  function ajaxErrorHandler() {
    var message = 'We apologize, but an error has occurred. Your information ' +
      'was not able to be sent. Please try again later.';
    formFields.eq(0).before(errorTemplate.replace('%s', message));
  }

  function ajaxSuccessHandler(data) {
    if (data.success) {
      messageHolder.append(successTemplate.replace('%s', data.success));
      formFields.each(function() {
        $(this).val('');
      });
    } else if (data.error) {
      messageHolder.append(data.error);
    } else {
      ajaxErrorHandler();
    }
  }

  function formSubmitHandler(event) {
    event.preventDefault();
    $('p.contact-error,p.contact-success').remove();

    var errors = false;
    if ($.trim(formFields.eq(0).val()) === '') {
      errors = true;
      messageHolder.append(
        errorTemplate.replace('%s', 'The Full Name field is required.'));
    }
    var phone = $.trim(formFields.eq(1).val());
    if (phone !== '') {
      phone =
          phone
            .replace(/\-/g, '')
            .replace(/\)/g, '')
            .replace(/\(/g, '')
            .replace(/\./g, '')
            .replace(/\s/g, '');
      if (! phoneRegex.test(phone)) {
        errors = true;
        messageHolder.append(
          errorTemplate.replace('%s', 'The Phone field must be in the format xxx-xxx-xxxx.'));
      }
    }
    if ($.trim(formFields.eq(2).val()) === '') {
      errors = true;
      messageHolder.append(
        errorTemplate.replace('%s', 'The Email Address field is required.'));
    } else if (! emailRegex.test($.trim(formFields.eq(2).val()))) {
      errors = true;
      messageHolder.append(
        errorTemplate.replace('%s', 'The Email Address field must contain a valid email address.'));
    }
    if ($.trim(formFields.eq(3).val()) === '') {
      errors = true;
      messageHolder.append(
        errorTemplate.replace('%s', 'The Message field is required.'));
    }
    if (errors) {
      return;
    }

    var url = $(this).attr('action');
    $.ajax({
      url: url,
      dataType: 'json',
      type: 'POST',
      data: formFields.serialize(),
      error: ajaxErrorHandler,
      success: ajaxSuccessHandler
    });
  }
  $('form').submit(formSubmitHandler);
})(jQuery);
