function insertAfter(parent, node, referenceNode) {
	parent.insertBefore(node, referenceNode.nextSibling);
}
function prependChild(parent, node) {
	parent.insertBefore(node, parent.firstChild);
}

function jscss(a,o,c1,c2)
{
  switch (a){
    case 'swap':
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
    break;
    case 'add':
      if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
var clients = new Array();

function getElementsByClass(needle) 
{
  function _GetElementsByClass(outArray, seed, needle)
  {
    while (seed) {
      if (seed.nodeType == Node.ELEMENT_NODE) {
        if (seed.hasAttribute("class")) {
          var c = " " + seed.className + " ";
          if (c.indexOf(" " + needle + " ") != -1)
            outArray.push(seed);
        }
        _GetElementsByClass(outArray, seed.firstChild, needle)
      }
      seed = seed.nextSibling;
    }
  }

  var outArray = new Array();
  _GetElementsByClass(outArray, document.documentElement, needle);
  return outArray;
}

function _find_selected( a, id ) {
  for (var i=0; i<a.length; i++) { 
    if (a[i] == id) { return i; }
  }
  return -1;
}

function select_user(id) {
  window.open("select_user.php?func=set_user&id="+id,
              "select_user",
              "fullscreen=no,toolbar=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,directories=no,location=no,width=550,height=600");
}
function set_user(id,newValue) {
  getByID(id).value = newValue;
}

function select_assignee(id,tpid,tcid) {
  window.open("testcase_assign.php?id="+id+"&tpid="+tpid+"&tcid="+tcid,
              "testcase_assign",
              "fullscreen=no,toolbar=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,directories=no,location=no,width=550,height=600");
}
function set_assignee(id,newValue) {
  getByID(id).innerHTML = newValue;
}

function do_confirm( string, url ) {
  var answer = confirm(string);
  if (answer) {
    window.location = url;
  } else { 
    return false;
  }
  return true;
}

function filter_testcases() {
  var elements = getElementsByClass('testcase-row');
  var filter = getByID("testcase-filter").value;
  for (i = 0; i < elements.length; i++) {
    var cn = elements[i].className;
    var new_cn;
    var reg = new RegExp("testcase-row-" + filter);
    if (filter == 'all') {
      new_cn = cn.replace(/hidden-row/, "");
      elements[i].className = new_cn;
    } else if (!reg.test(cn)) {
      new_cn = cn + " hidden-row";
      elements[i].className = new_cn;
    } else {
      new_cn = cn.replace(/ hidden-row/, "");
      elements[i].className = new_cn;
    }
  }
}

function toggleCheckBoxes(id,selector) {
  var checks = document.getElementsByName(id);
  var sel = YAHOO.util.Dom.get(selector);
  for (var i=0;i<checks.length;i++) {
    checks[i].checked = sel.checked;
  } 
}

function append_tag( target, id, tag ) {
  var e = YAHOO.util.Dom.get(id);
  var trg = YAHOO.util.Dom.get(target);
  if (jscss('check',e,'selected')) {
    jscss('remove',e,'selected');
    var re = new RegExp(tag + ',?', 'g');
    trg.value = trg.value.replace(re,'');
  } else {
    if (YAHOO.util.Dom.get(target).value != "") {
      tag = ", " + tag;
    }
    jscss('add',e,'selected');
    trg.value += tag;
  }
  e.blur();
  return false;
}

var depcounts = new Array();

function expandDependencies( id ) {
  YAHOO.util.Dom.get('dep-action-' + id).blur();
  expand_request(id,"ajax.php?act=expand_testcase&id="+id);
}

function collapseDependencies( id ) {
  YAHOO.util.Dom.get('dep-action-' + id).src = "images/expand.gif";
  YAHOO.util.Dom.get('dep-action-' + id).blur();
  var myOnClick = new Function("e", "expandDependencies(" + id + "); return false;");
  YAHOO.util.Dom.get('a-' + id).onclick = myOnClick;
  var tbl = YAHOO.util.Dom.get('test-cases');
  var lastRow;
  for (var lastRow=0;lastRow<tbl.rows.length;lastRow++) {
    if (tbl.rows[lastRow].id == 'testcase-id-' + id) { lastRow++; break; }
  }
  for (var i=0; i < depcounts[id]; i++) {
    var lid = tbl.rows[lastRow].lid;
    if (depcounts[lid] > 0) {
      collapseDependencies(lid);
      tbl.deleteRow(lastRow);
      depcounts[lid] = 0;
    } else {
      tbl.deleteRow(lastRow);
    }
  }
}

function expand_request( id, url ) {
  clients[id] = getHTTPObject(); // We create the HTTP Object
  clients[id].open("GET", url, true); 
  clients[id].onreadystatechange = function() {
    if (clients[id].readyState == 1) {  
      YAHOO.util.Dom.get('dep-action-' + id).src = "images/indicator.gif";
    } else if (clients[id].readyState == 4) {  
      var results = clients[id].responseText;
      var objs = eval( results );

      var myOnClick = new Function("e", "collapseDependencies(" + id + "); return false;");
      depcounts[id] = objs.length;
      YAHOO.util.Dom.get('a-' + id).onclick = myOnClick;

      var tbl = YAHOO.util.Dom.get('test-cases');
      var lastRow;
      for (var lastRow=0;lastRow<tbl.rows.length;lastRow++) {
        if (tbl.rows[lastRow].id == 'testcase-id-' + id) { lastRow++; break; }
      }
      //var lastRow = tbl.rows.length;
      YAHOO.util.Dom.get('dep-action-' + id).src = "images/collapse.gif";
      for (var i=0;i<objs.length;i++) {
	var obj = objs[i];

        // if there's no header row in the table, then iteration = lastRow + 1
        var iteration = lastRow;
        var row = tbl.insertRow(lastRow);
	row.id = 'testcase-id-' + obj.id;
	row.lid = obj.id;
	row.className = 'row-unhilite testcase-row';
  
        // cell 1
        var cell1 = row.insertCell(0);
        var imgNode = document.createElement('img');
	imgNode.setAttribute('width','13');
	imgNode.setAttribute('height','13');
	imgNode.setAttribute('border','0');
	imgNode.setAttribute('id','dep-action-'+obj.id);
        if (obj.dcount > 0) {
          imgNode.setAttribute('src','images/expand.gif');
          var expandNode = document.createElement('a');
	  expandNode.setAttribute('href','#');
	  expandNode.setAttribute('id','a-'+obj.id);
          var myOnClick = new Function("e", "expandDependencies("+obj.id+"); return false;");
          expandNode.onclick = myOnClick;
          expandNode.appendChild(imgNode);
          cell1.appendChild(expandNode);
        } else {
          imgNode.setAttribute('src','images/null.gif');
          cell1.appendChild(imgNode);
        }
        var chkNode = document.createElement('input');
	chkNode.setAttribute('type','checkbox');
	chkNode.setAttribute('name','testcases[]');
	chkNode.setAttribute('value',obj.id);
	chkNode.setAttribute('id','testcase-'+obj.id);
        cell1.appendChild(document.createTextNode(' '));
        cell1.appendChild(chkNode);
  
        // cell 2
        var cell2 = row.insertCell(1);
        var textNode = document.createTextNode(obj.id);
        cell2.appendChild(textNode);
  
        // cell 3
        var cell3 = row.insertCell(2);
        var textNode = document.createTextNode(obj.priority);
        cell3.appendChild(textNode);
  
        // cell 4
        var cell4 = row.insertCell(3);
        var textNode = document.createTextNode(obj.difficulty);
        cell4.appendChild(textNode);
  
        // cell 5
        var cell5 = row.insertCell(4);
        var sumlnkNode = document.createElement('a');
	sumlnkNode.setAttribute('href','testcase.php?id='+obj.id);
        var sumNode = document.createTextNode(obj.summary);
	sumlnkNode.appendChild(sumNode);
        cell5.appendChild(sumlnkNode);
  
        // cell 6
        var cell6 = row.insertCell(5);
        var dellnkNode = document.createElement('a');
	dellnkNode.setAttribute('href','#');
        var delNode = document.createElement('img');
	delNode.setAttribute('src','images/delete.gif');
	delNode.setAttribute('width','11');
	delNode.setAttribute('height','11');
	delNode.setAttribute('border','0');

        var myOnClick = new Function("e", "do_confirm('Are you sure you wish to remove this test case?','testcase_delete.php?id="+obj.id+"&returnto='); return false;");
        dellnkNode.onclick = myOnClick;

	dellnkNode.appendChild(delNode);

        var editlnkNode = document.createElement('a');
	editlnkNode.setAttribute('href','testcase_edit.php?id='+obj.id);
        var editNode = document.createElement('img');
	editNode.setAttribute('src','images/edit.gif');
	editNode.setAttribute('border','0');
	editNode.setAttribute('width','15');
	editNode.setAttribute('height','15');
	editlnkNode.appendChild(editNode);

        cell6.appendChild(editlnkNode);
        cell6.appendChild(document.createTextNode(' '));
        cell6.appendChild(dellnkNode);

      }
      clients[id] = 0;
    }
  }; 
  clients[id].send(null);
}

function show( e ) {
  e.style.display = 'block';
//  e.style.visibility = 'visible';
}

function hide( e ) {
  if ( e ) {
    e.style.display = 'none';
//    e.visibility = 'hidden';
  }
}

function handleCalClick(cal,container,target) {
  var dates = cal.getSelectedDates();
  var d1 = dates[0];
  if (d1) {
    var m = d1.getMonth() + 1;
    var d = d1.getDate();
    var y = d1.getYear() + 1900;
    var str = y + '-' + m + '-' + d;
    var e = YAHOO.util.Dom.get(target);
    e.value = str;
    e = YAHOO.util.Dom.get(container);
    e.style.display = 'none';
    e.style.visibility = 'hidden';
  }
}
var calendar_on = '';
function handleCalInputClick(container) {
  if (container != calendar_on && calendar_on != '') {
    hide(YAHOO.util.Dom.get(calendar_on));
  }
  calendar_on = container;
  show(YAHOO.util.Dom.get(container));
}

