@Ethereal = {

attributeName: 'as'

}

@Ethereal.isDOM = (el) ->

el instanceof HTMLDocument ||
el instanceof HTMLElement

listen = (e) ->

if e.type && e.type == 'DOMContentLoaded'
  document.removeEventListener('DOMContentLoaded', listen)

Ethereal.Watcher(document, {
    attributes: true,
    subtree: true,
    childList: true,
    attributeFilter: [Ethereal.attributeName],
    characterData: true
})

Ethereal.Watcher().inspect(document.body)

document.addEventListener 'submit', (e) ->
  if e.target.getAttribute('disabled')? || e.target.dataset['remote'] != 'true'
    return

  Ethereal.XHR.Form(e.target)

  e.preventDefault()
  return false

document.addEventListener 'click', (e) ->
  el = e.target
  while el? && !(el instanceof HTMLAnchorElement)
    el = el.parentElement

  return unless el?

  if el.getAttribute('disabled')? || el.dataset['remote'] != 'true'
    return

  xhr = new Ethereal.XHR(el)
  xhr.send(el.getAttribute('href'))

  e.preventDefault()
  return false

if document.readyState == ‘complete’

listen()

else

document.addEventListener('DOMContentLoaded', listen)