/**
 * retorna um elemento ou vários procurando pelo seu id
 * @example $("idName") ou $("id1", "id2", "id3")
*/
function $() {
  var elements = new Array()

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i]
    if (typeof element == 'string')
      element = document.getElementById(element)

    if (arguments.length == 1) 
      return element

    elements.push(element)
  }

  return elements
}

function $isObj(obj) {
  return (String(typeof obj).toLowerCase() == "object") && obj != null
}

function $isStr(str) {
  return (String(typeof str).toLowerCase() == "string") || str instanceof String
}

function $def(param, defaultValue) {
  return param == undefined ?defaultValue :param
}

function $childs(pai, filhos) {
  var elements = new Array()
  var raiz = $(pai)
  for (var i = 1; i < arguments.length; i++) {
    var element = arguments[i]
    if (typeof element == 'string')
      element = raiz.getElementById(element)

    if (arguments.length == 1) 
      return element

    elements.push(element)
  }

  return elements
}

function $tags(pai, tagName) {
  var elements = new Array()
  var raiz = $(pai).childNodes
  for (var i = 1; i < arguments.length; i++) {
    var tag = arguments[i]
    if ($isStr(tag)) {
      for (var elm in raiz) {
		elm = raiz[elm]
	    if ($isObj(elm) && String(elm.tagName).toLowerCase() == String(tag).toLowerCase())
			elements.push(elm) 
	  }
	} else {
      elements.push(tag)
	}
  }

  return elements
}

function $tagsR(pai, tagName) {
  var elements = new Array()
  var raiz = $(pai)
  for (var i = 1; i < arguments.length; i++) {
    var tag = arguments[i]
    if ($isStr(tag)) {
      var elms = raiz.getElementsByTagName(tag)
	  for (var j = 0; j < elms.length; j++) {
	    elements.push(elms.item(j))
	  }
    } else {
	  elements.push(tag)
	}
  }

  return elements
}

/**
 * cria uma tag e inicializa com os dados do objeto properties
*/
function $c(tag, properties) {
	var c = document.createElement(tag)
	for(var i in properties) {
		try{
			c[i] = properties[i]
		}catch(e){}
	}
	return c
}

function $addEvent(obj, evt, func, cap) {
	if (obj.addEventListener) obj.addEventListener(evt, func, cap)
	else if (obj.attachEvent) obj.attachEvent('on'+evt, func)
}

function $wrap(element, tagName) {
	var tag = document.createElement(tagName)
	var e = $(element) // element or id
	e.parentNode.insertBefore(tag, e)
	tag.appendChild(e)
	return tag
}