var extractMessage = function(message) {
  if ($) {
    divmessage = $(message).find('#error-message');
    var cleanedMessage = "";
    if (divmessage.length > 0) {
      cleanedMessage = divmessage.html();
    } else {
      cleanedMessage = message;
    }
    return cleanedMessage;
  }

  return message;
}

var showError = function(responseText) {
  if (typeof(responseText) === "undefined")
    return;
  var cleanedMessage = extractMessage(responseText)
    .replace(/<br\s?\?>/g, '\n') // Alle Zeilenumbrüche entfernen
    .replace(/<(\?b)>/g, '')     // Markierte Stellen entfernen (<b>|</b>)
    .replace(/<\?a.*?>/gi, '')   // Links entfernen (Linktext bleibt erhalten)
  if (cleanedMessage != '' && cleanedMessage.toUpperCase() != 'OK')
    alert(convertToLatinString(cleanedMessage));
}

var loggedOut = false;

var handleError = function(statusCode, dataCallback) {
  var data;
  switch (statusCode) {
    case 400:
      data = dataCallback(true);
      if (!loggedOut) {
        if (!data.loggedIn)
          loggedOut = true;
        alert(data.message);
      }
      if (top.location && data.location && top.location != data.location)
        top.location.replace(data.location);
      break;
    case 404:
      alert("Fehler 404 aufgetreten: Die gewünschte Funktion kann nicht aufgerufen werden.");
      break;
    case 500:
      data = dataCallback(true);
      alert(data.exception.message);
      break;
    case 503:
      alert("Der Server steht zur Zeit leider nicht zur Verfügung! Bitte versuchen Sie es später erneut.");
      break;
    default:
      data = dataCallback(false); // get raw data!
      showError(data);
  }
}

if (typeof $ === "function") {
  $(document).ajaxError(function(event, jqHXR, ajaxError, thrownError) {
    if (!ajaxError.suppressGlobalErrorMessage) {
      handleError(jqHXR.status, function(asJson) {
        return asJson ? $.evalJSON(jqHXR.responseText) : jqHXR.responseText;
      });
    }
  });
}

if (typeof Ext != "undefined") {
  Ext.Ajax.on('requestexception', function(connection, response, options) {
    var data;
    if (!options.suppressGlobalErrorMessage) {
      handleError(response.status, function(asJson) {
        return asJson ? Ext.decode(response.responseText) : response.responseText;
      });
    }
  });
}
