/*
  COPYWRITE

  This javascript library file is the sole property of Art Main and GoldCoastDesign and may
  not be reproduced, sold, or used in whole or in part for any purpose other than intended.
  All rights to this code is not transfered to the client it was provided for.  This code
  may be used for the single domain and purpose as provided by Art Main and GoldCoastDesign
  to the client it is intended for.

  Questions or concerns may be directed to info@goldcoastdesign.org

*/


  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];
}
