function signForm(f) {
  if (f.method.toLowerCase() != 'get') {
    if (!f.auth) {
      f.appendChild(
        Widget.input({'type': 'input', 'name': 'auth', 'style': {'display': 'none'}})
      );
    }
    f.auth.value = document.auth;
  }
}

formSubmit = function(form) {
  signForm(form);
  form = new Form(form);
  return form.__onSubmit();
}

function remove_link(el) {
  var as = $(el).getElementsByTagName('a');
  for (var i = 0; i < as.length; i++) {
    var a = $(as[i]);
    for(var j = 0; j < a.childNodes.length; j++) {
      a.parentNode.insertBefore(a.childNodes[j], a);
    }
    a.remove();
  }
}

function confirm_action(a, text) {
  if (confirm('Are you sure?')) {
    return rpc_action(a);
  }
  return false;
}

function rpc_action(a) {
  new Ajax(
    $type(a) == 'element' ? a.getAttribute('href') : a,
    {
      'method': 'post',
      'data': {
        'auth': document.auth
      },
      'onComplete': function(text) {
        new JsonRpc(text, this);
      }.bindAsEventListener(this)
    }
  ).request();
  return false;
}

function link(a, rpc) {
  if (rpc) {
    new Ajax(
      $type(a) == 'element' ? a.getAttribute('href') : a,
      {
        'method': 'get',
        'onComplete': function(text) {
          new JsonRpc(text, this);
        }.bindAsEventListener(this)
      }
    ).request();
    return false;
  } else {
    var parent = a;
    while (parent) {
      if (parent.className == 'm-notebook-content') {
        var nb = parent;
        while (nb && nb.className != 'm-notebook') {
          nb = nb.parentNode;
        }
        if (nb) {
          nb.parent.updatePage(parent.getAttribute('name'), {'url': a.getAttribute('href') });
          nb.parent.selectPage(parent.getAttribute('name'));
          return false;
        }
        return true;
      } else if (parent.className == 'pager-frame') {
        new Ajax(
          a.getAttribute('href'),
          {
            'method': 'GET',
            'update': $(parent),
          }
        ).request();
        return false;
      }
      parent = parent.parentNode;
    }
  }
  return true;
}

// mem cookies
Meteora.onStart(
  function() {
    if (typeof document.fields == 'object') {
      for (name in document.fields) {
        var value = document.fields[name];
        inputs = [];
        inputs.extend(document.getElementsByClassName(name));
        for (i = 0; i < inputs.length; i++) {
          input = inputs[i];
          if (input.nodeName == 'INPUT') {
            if (input.type == 'checkbox') {
              if (parseInt(value)) {
                input.setAttribute('checked', 'checked');
              } else {
                input.removeAttribute('checked');
              }
            } else {
              input.value = value;
            }
          }
        }
      }
    }
  }
);

function ajax_action(url, extra) {
  var data    = [];

  var params  = {
    'auth':   document.auth
  };

  if (extra) {
    for(var i in extra) {
      params[i] = extra[i];
    }
  }

  new Ajax(
    url,
    {
      'method': 'post',
      'data':   params
    }
  ).rpc();
}

function getNotebook(a) {

  var parent = a;
  while (parent) {
    if (parent.className == 'm-notebook-content') {
      var nb = parent;
      while (nb && nb.className != 'm-notebook') {
        nb = nb.parentNode;
      }
      if (nb) {
        return nb.parent;
      }
    }
    parent = parent.parentNode;
  }
}

function open_tab(a, id, name) {
  a = $(a);

  var nb = getNotebook(a);

  nb.addPage(
    {
      'id': id,
      'title': name
    },
    {
      'url':  a.getAttribute('href')
    },
    {
      'allowBookmark': true,
      'allowClose': true
    }
  );

  nb.selectPage(id);

  return false;

}
