﻿
// Alerts
var enableDebugAlert = false;
function debugAlert(aMessage) {
  if (!enableDebugAlert)
    return;
  enableDebugAlert = confirm(aMessage);
}

function errorAlert(aMessage, aException) {
  var message = aMessage
  if (aException != null) {
    message += '\n\n' + 'Exception details:\n\n' + aException.message;
    message += '\n\nStack frame:\n\n' + aException.popStackFrame;
  }
  alert(message);
}

function objectAlert(aObject) {
  var message = '';
  for (var property in aObject)
    message += property + ' = ' + aObject[property] + '\n';
  debugAlert(message);
}

function detailedObjectAlert(aObject, aDescription) {
  var message = aDescription + '\n\n';
  message += getDetailedObjectMessage(aObject);
  debugAlert(message);
}

function getDetailedObjectMessage(aObject, aPrefix) {
  var message = '';
  for (var property in aObject) {
    var propName = property;
    if (aPrefix != undefined) 
      propName = aPrefix + '.' + propName;

    if ((typeof aObject[property]) == "object") {
      if (property == "Spans" || property == "Inputs")
        message += getDetailedObjectMessageObjectIDs(aObject[property], propName);
      else
        message += getDetailedObjectMessage(aObject[property], propName);
    }
    else
      message += propName + ' = ' + aObject[property] + '\n';
  }
  return message;
}

function getDetailedObjectMessageObjectIDs(aObject, aPrefix) {
  var message = '';
  for (var property in aObject) {
    var propName = property;
    if (aPrefix != undefined) propName = aPrefix + '.' + propName;
    message += propName + ' = ' + aObject[property].id + '\n';
  }
  return message;
}

