versions/0.2.2/oj.js
function _attributesProcessedForOJ(attr){
    var jqEvents = {bind:1, on:1, off:1, live:1, blur:1, change:1, click:1, dblclick:1, focus:1, focusin:1, focusout:1, hover:1, keydown:1, keypress:1, keyup:1, mousedown:1, mouseenter:1, mouseleave:1, mousemove:1, mouseout:1, mouseup:1, ready:1, resize:1, scroll:1, select:1, insert:1},
    events, k, v

    // Allow attributes to alias c to class and use arrays instead of space seperated strings
    // Convert to c and class from arrays to strings
    if (oj.isArray(attr != null ? attr.c : void 0))
      attr.c = attr.c.join(' ')

    if (oj.isArray(attr != null ? attr["class"] : void 0))
      attr["class"] = attr["class"].join(' ')

    // Move c to class
    if ((attr != null ? attr.c : void 0) != null){
      if ((attr != null ? attr["class"] : void 0) != null)
        attr["class"] += ' ' + attr.c
      else
        attr["class"] = attr.c
      delete attr.c
    }

    // Allow attributes to take style as an object
    if (oj.isPlainObject(attr != null ? attr.style : void 0)){
      attr.style = _styleFromObject(attr.style, {
        inline: true
      })
    }

    // Omit attributes with values of false, null, or undefined
    if (oj.isPlainObject(attr)){
      for (k in attr){
        v = attr[k]
        if (v === null || v === void 0 || v === false)
          delete attr[k]
      }
    }

    // Filter out jquery events
    events = {}
    if (oj.isPlainObject(attr)){

      // Filter out attributes that are jquery events
      for (k in attr){
        v = attr[k]

        // If this attribute (k) is an event
        if (jqEvents[k] != null){
          events[k] = v
          delete attr[k]
        }
      }
    }

    // Returns bindable events
    return events
  }
function _attributesProcessedForOJ(attr){
    var jqEvents = {bind:1, on:1, off:1, live:1, blur:1, change:1, click:1, dblclick:1, focus:1, focusin:1, focusout:1, hover:1, keydown:1, keypress:1, keyup:1, mousedown:1, mouseenter:1, mouseleave:1, mousemove:1, mouseout:1, mouseup:1, ready:1, resize:1, scroll:1, select:1, insert:1},
    events, k, v

    // Allow attributes to alias c to class and use arrays instead of space seperated strings
    // Convert to c and class from arrays to strings
    if (oj.isArray(attr != null ? attr.c : void 0))
      attr.c = attr.c.join(' ')

    if (oj.isArray(attr != null ? attr["class"] : void 0))
      attr["class"] = attr["class"].join(' ')

    // Move c to class
    if ((attr != null ? attr.c : void 0) != null){
      if ((attr != null ? attr["class"] : void 0) != null)
        attr["class"] += ' ' + attr.c
      else
        attr["class"] = attr.c
      delete attr.c
    }

    // Allow attributes to take style as an object
    if (oj.isPlainObject(attr != null ? attr.style : void 0)){
      attr.style = _styleFromObject(attr.style, {
        inline: true
      })
    }

    // Omit attributes with values of false, null, or undefined
    if (oj.isPlainObject(attr)){
      for (k in attr){
        v = attr[k]
        if (v === null || v === void 0 || v === false)
          delete attr[k]
      }
    }

    // Filter out jquery events
    events = {}
    if (oj.isPlainObject(attr)){

      // Filter out attributes that are jquery events
      for (k in attr){
        v = attr[k]

        // If this attribute (k) is an event
        if (jqEvents[k] != null){
          events[k] = v
          delete attr[k]
        }
      }
    }

    // Returns bindable events
    return events
  }
_attributesProcessedForOJ: Process attributes to make them easier to use