  function getRef(el_id) {
    return (typeof(el_id) == "string") ? document.getElementById(el_id) : el_id;
  }

  function changeClass(el_id,myClass) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.className = myClass;
  }

  function changeStyle(el_id,myStyle,newVal) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.style[myStyle] = newVal;
  }

  function changeAttribute(el_id,attrName,newVal) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.attrName = newVal;
  }

  function changeValue(el_id,newVal) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.value = newVal;
  }

  function changeText(el_id,newText) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.innerHTML = newText;
  }

  function appendText(el_id,newText) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.innerHTML += newText;
  }

  function clearText(el_id) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.innerHTML = '';
  }

  function addChild(el_id,newText) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.appendChild(newText);
  }

  function insertAfter(target,newNode) {
    var myElmt = getRef(target);
    if (myElmt) {
      var myParent = myElmt.parentNode;
      var myNextNode = myElmt.nextSibling;

      if (myNextNode) {
        myParent.insertBefore(newNode,myNextNode);
      } else {
        myParent.appendChild(newNode);
      }
    }
  }

  function clickItem(el_id) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.click();
  }

  function addHidden(fieldname,val,extrasDiv) {
    var extrasDiv = (extrasDiv) ? extrasDiv : "myFormExtras";
    var myItem = document.getElementById(extrasDiv);
    var myHidden = document.createElement('input');
    myHidden.type = "hidden";
    myHidden.name = fieldname;
    myHidden.value = val;
    myItem.appendChild(myHidden);
  }

  function formSubmit(myForm) {
    var myForm = (myForm) ? document.getElementById(myForm) : document.forms[0];
    if (myForm) myForm.submit();
  }

  function doOpen(el_id) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.style["display"] = 'block';
  }

  function doClose(el_id) {
    var myElmt = getRef(el_id);
    if (myElmt) myElmt.style["display"] = 'none';
  }

  var isIElt7 = false;
  function hideSelectsFromIElt7(myParent) {
    var myElmt = getRef(myParent);
    if (isIElt7 && myElmt) {
      var mySelects = myElmt.getElementsByTagName('select');
      for (i=0;i<mySelects.length;i++) {
        doClose(mySelects[i]);
      }
    }
  }

  function showSelectsForIElt7(myParent) {
    var myElmt = getRef(myParent);
    if (isIElt7 && myElmt) {
      var mySelects = myElmt.getElementsByTagName('select');
      for (i=0;i<mySelects.length;i++) {
        doOpen(mySelects[i]);
      }
    }
  }

  function popUp(URL) {
    var day = new Date();
    var id = day.getTime();
    window.open(URL,0,'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=yes,width=630,height=480,left = 360,top = 212');
  }

  function closePopUp() {
    opener.window.location.reload(false);
    window.close();
  }

  function makePass() {
    var myDiv = document.getElementById('myFormExtras');
    myDiv.innerHTML += "<input type=\"hidden\" name=\"random_pass\" value=\"1\" />\n";
    clickItem('submitMe');
  }

  function gotoPage(url) {
    window.location = url;
  }

  function formFocus(myForm) {
    var myForm = (myForm) ? document.getElementById(myForm) : document.forms[0];
    if (myForm) myForm.elements[1].focus();
  }

  function addEvent(elm, evType, fn, useCapture) {
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  }

  function removeEvent(elm, evType, fn, useCapture) {
    if (elm.removeEventListener) {
      elm.removeEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.detachEvent) {
      var r = elm.detachEvent('on' + evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  }

  function buildGetString(fieldnames,myForm) {
    var get_string = "";
    var myForm = (myForm) ? myForm : document.forms[0];

    var names = fieldnames.split(',');

    var myVal = null;
    for (var i in names) {
      myVal = myForm.elements[names[i]].value;
      get_string += "&"+names[i]+"="+myVal;
    }

    return get_string;
  }

  function isEnterPressed(e) {
    var keycode;
    if (window.event) {
      keycode = window.event.keyCode;
    } else if (e) {
      keycode = e.which;
    } else {
      return false;
    }
    if (keycode == 13) {
       return true;
    } else {
      return false;
    }
  }

  //climb up the tree to the supplied tag
  function ascendDOM(e,target) {
    while (e.nodeName.toLowerCase() != target && e.nodeName.toLowerCase() != 'html') {
      e = e.parentNode;
    }
    return (e.nodeName.toLowerCase() == 'html') ? null : e;
  }

  //climb up the tree to the supplied class
  function ascendDOMByClass(e,myclass) {
    //alert(e.nodeName);
    while (!e.className || (e.className.toLowerCase() != myclass && e.nodeName.toLowerCase() != 'html')) {
      e = e.parentNode;
    //alert(e.nodeName);
    }
    return (e.nodeName.toLowerCase() == 'html') ? null : e;
  }

  function getChild(e,target) {
    if (!e) {
      return;
    }
    var node = e.firstChild;
    while (node.nodeName.toLowerCase() != target && node.nextSibling) {
    //alert(node.nodeName);
      node = node.nextSibling;
    }
    return (node.nodeName.toLowerCase() != target) ? null : node;
  }

  function getChildByClass(el,myclass) {
    if (!el) {
      return;
    }
    var children = el.childNodes;
    //showArray(children);
    for (var i=0;i<children.length;i++) {
      if (children[i].className && children[i].className.indexOf(myclass) != -1) {
        return children[i];
      }
    }
    return null;
  }

  function getTopChildren(e,target) {
    //showArray(e);
    var node = e.firstChild;
    var children = new Array();
    while (node) {
    //alert(node.nodeName);
      if (node.nodeName.toLowerCase() == target) {
        children.push(node);
      }
      node = node.nextSibling;
    }
    return (children) ? children : null;
  }

  function getTarget(e) {
    return window.event ? window.event.srcElement: e ? e.target : null;
  }

  function stopBubble(e) {
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    } else if (e) {
      e.stopPropagation();
      e.preventDefault();
    }
  }

  function insertRowAfterEl(el,spanned) {
    var parent_row = ascendDOM(el,'tr');
    var parent_rowCells = parent_row.getElementsByTagName('td');
    var parent_table = ascendDOM(parent_row,'tbody');
    if (!parent_table) {
      parent_table = ascendDOM(parent_row,'table');
    }

    var all_rows = parent_table.getElementsByTagName('tr');
    for (var i=0;i<all_rows.length;i++) {
      if (all_rows[i] == parent_row) {
        break;
      }
    }

    var next_row = all_rows[i+1];
    var new_row = document.createElement('tr');

    if (spanned) {
      var new_cell = document.createElement('td');
      new_cell.colSpan = parent_rowCells.length;
      new_row.appendChild(new_cell);
    } else {
      var new_cell;
      for (i=0;i<parent_rowCells.length;i++) {
        new_cell = document.createElement('td');
        new_row.appendChild(new_cell);
      }
    }

    if (next_row) {
      parent_table.insertBefore(new_row,next_row);
    } else {
      parent_table.appendChild(new_row);
    }

    return new_row;
  }

  function deleteRowAfterEl(el) {
    var parent_row = ascendDOM(el,'tr');
    var parent_table = ascendDOM(parent_row,'tbody');
    if (!parent_table) {
      parent_table = ascendDOM(parent_row,'table');
    }

    var all_rows = parent_table.getElementsByTagName('tr');
    for (var i=0;i<all_rows.length;i++) {
      if (all_rows[i] == parent_row) {
        break;
      }
    }

    var next_row = all_rows[i+1];
    if (next_row) {
      parent_table.removeChild(next_row);
    }
  }

  function splitElId(el) {
    return el.id.split('_');
  }


function getXMLElContent(element) {
  if (element.xml) {
    return element.xml;
  } else {
    var mySerial = new XMLSerializer();
    return mySerial.serializeToString(element);
  }
}


function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - innerHTML to add option(s) to select(s)
* Problem: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Creative Commons license
* Versão: 1.0 - 06/04/2006
* Author: Micox - Náiron J.C.G - micoxjcg@yahoo.com.br - elmicoxcodes.blogspot.com
* Parametros:
* objeto(tipo object): the select
* innerHTML(tipo string): the new innerHTML
*******/
    objeto.innerHTML = ""
    //creating phantom element to receive temp innerHTML
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.toLowerCase().indexOf("<option")<0){//if not option, convert do option
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
    //transfering childs of phantom element to options
    for(var i=0;i<selTemp.childNodes.length;i++){
        if(selTemp.childNodes[i].tagName){
            opt = document.createElement("OPTION")
            for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
                opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
            }
            opt.value = selTemp.childNodes[i].getAttribute("value")
            opt.text = selTemp.childNodes[i].innerHTML
            if(document.all){ //IEca
                objeto.add(opt)
            }else{
                objeto.appendChild(opt)
            }
        }
    }
    //clear phantom
    document.body.removeChild(selTemp)
    selTemp = null
}

function checkXMLError(xmlcontent) {
  var regexp = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

  alert(xmlcontent.documentElement.tagName);
  if (xmlcontent.documentElement.tagName == "parsererror") {
    regexp.test(xmlcontent.xml);
    alert("An error occured:\n"
      +"Description: "+RegExp.$1+"\n"
      +"File: "+RegExp.$2+"\n"
      +"Line: "+RegExp.$3+"\n"
      +"Line Pos: "+RegExp.$4+"\n"
      +"Source: "+RegExp.$5);
  }
}

function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    curleft = obj.offsetLeft
    curtop = obj.offsetTop
    while (obj = obj.offsetParent) {
      curleft += obj.offsetLeft
      curtop += obj.offsetTop
    }
  }
  return [curleft,curtop];
}
