var EMAIL_REGEX = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])");

var Country = {
  isUSorCA: function(c) {
    return "US" == c || "CA" == c;
  }
};

function redirectBrowser(url) {
  window.location.href = url;
}

function setRegionSelectOptions(select, country_key, callback) {
  select.attr('disabled', 'disabled');
  select.html('');
  select.parent().hide();
  if(country_key.length > 0 && Country.isUSorCA(country_key)) {
    jQuery.ajax({
      url: '/util/get_country_region_options?c=' + country_key,
      type: 'GET',
      success: function(html) {
        select.parent().show();
        select.html(html);
        select.removeAttr('disabled');
        if(typeof callback == "function")
          callback();
      },
      error: function(jqXHR, textStatus, errorThrown) {
        if(typeof callback == "function")
          callback();
      }
    });
  }
}

function validateFormAndSubmit(event, form_element) {
  event.preventDefault();
  var valid = true;
  var wrappers = form_element.find('.input-wrapper');
  wrappers.removeClass('error');
  for(var i = 0; i < wrappers.length; i++) {
    var wrapper = jQuery(wrappers[i]);
    var input = wrapper.find('input');
    var select = wrapper.find('select');
    if((input.length > 0 && input.hasClass('required') && (input.val() == null || input.val().length == 0)) ||
       (select.length > 0 && select.hasClass('required') && (select.val() == null || select.val().length == 0))) {
      wrapper.addClass('error');
      valid = false;
    } else if (input.length > 0 && input.hasClass('required') && input.attr("id") == "email") {
      if (!EMAIL_REGEX.test($("#email").val().toLowerCase())) {
        wrapper.addClass("error");
        $("div#email_validate_error").show();
        valid = false;
      }
    }
    else {
      wrapper.find('.error-msg').hide();
    }
  }
  if(valid) {
    form_element.submit();
  }
  else {
    var form_errors_element = jQuery(form_element.find('#form_errors'));
    form_errors_element.html('Please check required fields below.');
    form_errors_element.show();
  }
}

function addError(msg) {
  jQuery('#errors').append('<div class="ui-state-error ui-corner-all"><span class="ui-icon ui-icon-alert"></span><span>' + msg + '</span><div class="clear"></div></div>');
  jQuery('#errors').show();
}

function clearErrors() {
  jQuery('#errors').hide();
  jQuery('#errors').html('');
}

function addNotice(msg) {
  jQuery('#notices').append('<div class="ui-state-highlight ui-corner-all"><span class="ui-icon ui-icon-info"></span><span>' + msg + '</span><div class="clear"></div></div>');
  jQuery('#notices').show();
}

function clearNotices() {
  jQuery('#notices').hide();
  jQuery('#notices').html('');
}

function showAjaxLoading() {
  if(!jQuery('#ajax_loading').length) {
    jQuery('body').append('<div id="ajax_loading"><div class=".progress"></div></div>');
  }
  jQuery('#ajax_loading').dialog({
    dialogClass:'ajax-loading',
    modal:true,
    resizable:false
  });
}

function setAjaxLoadingProgress(progress) {
  jQuery('#ajax-loading .progress').html(progress);
  jQuery('#ajax-loading .progress').show();
}

function hideAjaxLoading() {
  jQuery('#ajax_loading').dialog("close");
  jQuery('#ajax-loading .progress').hide();
}

function positionTransparentFileInput(ui_e, input_e) {
  if(input_e.offset().left != ui_e.offset().left || input_e.offset().top != ui_e.offset().top) {
    input_e.offset(ui_e.offset());
    input_e.width(ui_e.width());
    input_e.height(ui_e.height());
  }
}

function uninstallTinyMCE(id) {
  tinyMCE.execCommand("mceRemoveControl", true, id);
}

function installTinyMCE(id) {
  tinyMCE.execCommand("mceAddControl", true, id);
}

function getTinyMCEContent(id) {
  var txtarea = jQuery('#' + id);
  if(txtarea.length > 0) {
    txtarea.val(tinyMCE.get(id).getContent());
  }
}
