/**
 * @author psimmons
 * @author kshahzad
 *
 * @see
 */
jQuery(document).ready(function($) {
  $(document).bind('showError', function(e, status, message) {
    $('#messagebox').remove();
    var errorMessage = '<div id="messagebox"><div class="messagebox_icon_' + status + '"></div><div id="messagebox_top"></div><div id="messagebox_center"><div class="messagebody"><ul><li><span class="message_text_' + status + '">' + message + '</span></li></ul></div></div><div id="messagebox_bottom"></div></div>';
    $('#pagetitle').after(errorMessage);
    // show the message assume it is at the top of the page
    window.scrollTo(1,1);
  });
  $(document).bind('showUnexpectedError', function(e) {
    $(document).trigger('showError', ['status', 'Sorry, something went wrong please try again.']);
  });
  $(document).ajaxError(function(e, request, settings) {
    $(document).trigger('showUnexpectedError');
  });

  $.ajaxSetup({timeout: 10000, dataType: 'xml', contentType: "text/xml", type: "POST"});

  if ($.validator) {
    $.validator.addMethod('dashesempty', function(value, element) {
      return this.optional(element) || !/----/.test(value);
    }, $.format("Please complete."));
    $.validator.addMethod('nospaces', function(value, element) {
      return this.optional(element) || !/\s/.test(value);
    }, $.format("No spaces please."));

    $.validator.addMethod('summitAlias', function (value) {
        return !/[A-Z]/.test(value);
    }, 'Please enter alias in lowercase.');


    $.validator.addMethod('isUrl', function(value, element) {
      var hasHTTP = value.search('http://');
      var hasHTTPS = value.search('https://');
      if(value == ''){
        return true;
      }
      return ((hasHTTP >= 0 || hasHTTPS >= 0) );
    }, $.format("Please enter valid url starting with http:// or https://"));

    $.validator.addMethod('containsDigits', function(value, element, requiredCount) {
      var digitCount = 0;
      for (var i = 0; i < value.length; i++) {
        var c = value.charAt(i);
        if (/\d/.test(c)) {
          digitCount++;
        }
      }
      return this.optional(element) || digitCount >= requiredCount;
    }, $.format('Must contain {0} digits.'));
    $.validator.messages.required = "Please complete.";
  }

  $.fn.clearForm = function() {
    return this.each(function() {
      var type = this.type, tag = this.tagName.toLowerCase();
      if (tag == 'form')
        return $(':input',this).clearForm();

      if (type == 'text' || type == 'password' || tag == 'textarea')
        this.value = '';
      else if (type == 'checkbox' || type == 'radio')
        this.checked = false;
      else if (tag == 'select')
        this.selectedIndex = -1;
    });
  };

  if (!$.bt) {
    $.bt = {};
  }
  $.extend($.bt, {
    escapeXmlSpecialCharacters: function(text) {
      text = text.replace(/&/g, "&amp;");
      text = text.replace(/'/g, "&apos;");
      text = text.replace(/"/g, "&quot;");
      text = text.replace(/>/g, "&gt;");
      text = text.replace(/</g, "&lt;");
      text = text.replace(/:/g, "");
      return text;
    },
    formAnswersXmlFromJQuery: function(data) {
      var xml = "<form>";
      $.each(data, function(i, element) {
        var name = $(this).attr('name').replace('field', '');
        var value = $.bt.escapeXmlSpecialCharacters($(this).val());
        if ($(this).attr('type') === 'checkbox') {
          if (value === '1') {
            value = 'true';
          } else {
            value = 'false';
          }
        }
        xml += '<formAnswer id="' + name + '">' + value + '</formAnswer>';
      });
      xml += "</form>";
      return xml;
    },
    brightTALKRequestXmlWrapper: function(xmlBody) {
      return '<?xml version="1.0" encoding="UTF-8"?><request>' + xmlBody + '</request>';
    },
    formXmlToErrors: function(xml) {
      var errors = {};
      $('formItem[validationresult]', xml).each(function() {
        var id = $(this).attr('id');
        var message = $(this).attr('validationresult');
        if (message != 'undefined' && message !== '') {
          errors['field'+id] = $.bt.escapeXmlSpecialCharacters(message);
        }
      });
      return errors;
    }
  });

});

