// Some Globals 

var Component = '%';
var Opsys = '%';
var Dbms = '%';
var Product = '%';
var Release = '%';

function goProductMatrix()
{
  doNodes(document.getElementById('ProductsTree'), 'product_tree_xml.vsp?p=matrix_format_cat&family=1');
  setStepHead('Advanced Product Matrix');
  historyAdd('matrix');
}

function resetGlobals()
{
  Component = '%';
  Opsys = '%';
  Dbms = '%';
  Product = '%';
  Release = '%';
}

function sync(component, opsys, dbms, product, release)
{  
  Component = component;
  Opsys = opsys;
  Dbms = dbms;
  Product = product;
  Release = release;
  //RefreshComponents();
}

function goConfirm(url, what)
{
 var confirmed = confirm("Are you sure??\r\nDo you want to "+what+"?");
 if (confirmed == true)
 {
   window.location=url;
   return tree;
 }
 return false;
}

function waitingMsg()
{
  return '<div class="working"><img src="busy_spinner_medium.gif" height="20px" alt="working..." /></div>';
}

function process_req2(req, eltid)
{
  process_req_elt(req, document.getElementById(eltid));
}

function process_req_elt(req, elt)
{
  //alert(elt.id);
	if (!req)
	{
		alert ('XMLHttpRequest is not supported');
		return;
	}
	req.onreadystatechange = 
		function()
		{
			if (req.readyState == 4 && req.status == 200) 
			{
				var respXML =  req.responseText; 
				elt.innerHTML = respXML;
				if (Right(elt.id, 6) == '_os_db')
				{
  				addMouseOvers('supermatrix', '#ecc;');
  			}
			} 
			else 
				if (req.readyState == 4 && req.status != 200)
				{
					soap_error_alert (req);
				}
	  }
}

function process_req_f(req, felt)
{
	if (!req)
	{
		alert ('XMLHttpRequest is not supported');
		return;
	}
	req.onreadystatechange = 
		function()
		{
			if (req.readyState == 4 && req.status == 200) 
			{
				var respXML =  req.responseText; 
				felt.value = respXML;
			} 
			else 
				if (req.readyState == 4 && req.status != 200)
				{
					soap_error_alert (req);
				}
	  }
}

function sel_handler(getstring, target, waitmsg)
{
	var req = new XMLHttpRequest(); 
	document.getElementById(target).innerHTML = waitmsg;
	process_req2(req, fam);
	req.open('GET', getstring);
	req.send(null);
}

//searchComponents('qa', '_s', 'components');

function searchComponents()
{
	var srch_string = document.qa._s.value;
	var selectlist = document.qa.component;
	var sel = null;
	if (selectlist && selectlist.selectedIndex >= 0) {
  	  sel = selectlist.options[selectlist.selectedIndex].value;
    }
	var req = new XMLHttpRequest();
	document.getElementById('components').innerHTML = waitingMsg();
	process_req2(req, 'components');
	req.open('GET', 'ajax_data.vsp?component_search=' + srch_string + '&selected=' + sel);
	req.send(null);
}

function showDetail(val)
{
  var req = new XMLHttpRequest();
  document.getElementById('details').style.visibility = 'visible';
  document.getElementById('details').innerHTML = waitingMsg();
  process_req2(req, 'details');
  req.open('GET', 'ajax_data.vsp?component_description='+val);
  req.send(null);
  
}

function getActivities(qaid, filter, filterby, sort, sel)
{
  var req = new XMLHttpRequest();
  document.getElementById('activities').innerHTML = waitingMsg();
  process_req2(req, 'activities');
  req.open('GET', 'ajax_data.vsp?activities=1&qa_id='+qaid+'&sortby='+sort+'&filter='+filter+'&by='+filterby+'&sel='+sel);
  req.send(null);
  
}


function fetchPage(uri)
{
  var req = new XMLHttpRequest();
  document.getElementById('wview').innerHTML = waitingMsg();
  process_req2(req, 'wview');
  req.open('GET', 'ajax_data.vsp?fetch='+uri);
  req.send(null);
  
}

function showPage(id)
{
  var req = new XMLHttpRequest();
  document.getElementById('wview').innerHTML = waitingMsg();
  process_req2(req, 'wview');
  req.open('GET', 'ajax_data.vsp?show='+id);
  req.send(null);
  
  var req2 = new XMLHttpRequest();
  document.getElementById('qa_test_details').innerHTML = waitingMsg();
  process_req2(req2, 'qa_test_details');
  req2.open('GET', 'ajax_data.vsp?qa_test_details='+id);
  req2.send(null);
}

function CloseDiv(id, how)
{
  if(how == 'close')
  { 
    var elt = document.getElementById(id);
    elt.parentNode.removeChild(elt);
  }
  else
  {
    document.getElementById(id).style.visibility = 'hidden';
  }
  return;
}
function openTree(me, subtree)
{
  var sub = document.createElement("span");
  doNodes(sub, subtree);

  var node = me.parentNode;
  me.setAttribute('onClick', 'closeTree(this, \'' + subtree + '\');');
  me.setAttribute('class', 'toggle_minus');
  var MinusSpan = document.createElement('span');
    MinusSpan.innerHTML = '|--|';
  me.replaceChild(MinusSpan, me.firstChild);
  node.appendChild(sub)
}

function openMatrix(div, subtree)
{
  div = document.getElementById(div);
  div.style.visibility = 'visible';
  doNodes(div, subtree);
}

function openTreeOSFamily(me, subtree)
{
  var sub = document.createElement("span");
    sub.setAttribute('class', 'subcontainer');
  var family = document.createElement("span");
    family.setAttribute('class', 'family');
  var cpu = document.createElement("span");
    cpu.setAttribute('class', 'cpu');
  var mode = document.createElement("span");
    mode.setAttribute('class', 'mode');
  var components = document.createElement("span");
    components.setAttribute('class', 'components');

  doNodes(family, subtree);

  var node = me.parentNode;
  me.setAttribute('onClick', 'closeTree(this, \'' + subtree + '\');');
  me.setAttribute('class', 'toggle_minus');
  var MinusSpan = document.createElement('span');
    MinusSpan.innerHTML = '|--|';
  me.replaceChild(MinusSpan, me.firstChild);
  sub.appendChild(cpu);
  sub.appendChild(mode);
  sub.appendChild(components);
  sub.appendChild(family);
  node.appendChild(sub)
  
}

function openTreeProcessor(me, subtree)
{  
  var node = me.parentNode;
  var tnode = node.parentNode
    tnode = tnode.parentNode;
    tnode = tnode.childNodes;
  doNodes(tnode[0], subtree);
    tnode[1].innerHTML = '';
    tnode[2].innerHTML = '';
}

function openTreeMode(me, subtree)
{
  var node = me.parentNode;
  var tnode = node.parentNode
    tnode = tnode.parentNode;
    tnode = tnode.childNodes;
  doNodes(tnode[1], subtree);
    tnode[2].innerHTML = '';
}

function openTreeComponents(me, subtree)
{
  var node = me.parentNode;
  var tnode = node.parentNode
    tnode = tnode.parentNode;
    tnode = tnode.childNodes;
  doNodes(tnode[2], subtree);
}
function s(x)
{
  var xxs = document.getElementById('family_list');
  var divs = xxs.getElementsByTagName('div');
  for (var i = 0; i < divs.length; i ++)
    divs[i].style.backgroundColor = 'white';
    
  x.style.backgroundColor = 'navy';
}
function closeTree(me, subtree)
{
  var node = me.parentNode;
  node.removeChild(node.lastChild); 

  me.setAttribute("onClick", 'openTree(this, \'' + subtree + '\');');
  me.setAttribute('class', 'toggle_plus');
  var MinusSpan = document.createElement("span");
    MinusSpan.innerHTML = '|+|';
  me.replaceChild(MinusSpan, me.firstChild);
}

function doNodes(ActualElt, URi)
{
  var req = new XMLHttpRequest();
  ActualElt.innerHTML = waitingMsg();
  process_req_elt(req, ActualElt);
  req.open('GET', URi);
  req.send(null);
}

function UriFetchId(uri, target)
{
  var req = new XMLHttpRequest();
  document.getElementById(target).innerHTML = waitingMsg();
  process_req2(req, target);
  req.open('GET', uri);
  req.send(null);
}
function treeLink(id, type, context)
{
  if (context == 'products')  productLink(id, type);
}
function productLink(id, type)
{
  var uri = 'product_tree.vsp?detail='+id;
  UriFetchId(uri, 'viewDetail');
}
function doLink(id, os, db, product, release)
{
  Component = id;
  Opsys = os;
  Dbms = db;
  Product = product;
  Release = release;
  
    var uri = 'ajax_data.vsp?detail=component&component_name='+id+'&opsys_name='+os+'&dbms_name='+db+'&product_id='+product+'&product_release_id='+release;
    uri = uri.replace(RegExp('\%','g'), '%25');
  UriFetchId(uri, 'viewDetail');
}
function RefreshComponents()
{
  doLink(Component, Opsys, Dbms, Product, Release);
}
function qaEdit(qaid)
{
    var uri = 'ajax_data.vsp?action=makenew&qaid='+qaid;
    uri = uri.replace(RegExp('\%','g'), '%25');
    UriFetchId(uri, 'newcomponent');
    document.getElementById('newcomponent').style.visibility = 'visible';
}

function startNew(component, os, db, product, release)
{
  Component = component;
  Opsys = os;
  Dbms = db;
  Product = product;
  Release = release;

    var uri = 'ajax_data.vsp?action=makenew&compname='+Component+'&opsys_name='+Opsys+'&dbms_name='+Dbms+'&product_id='+Product+'&product_release_id='+Release;
    uri = uri.replace(RegExp('\%','g'), '%25');
    UriFetchId(uri, 'newcomponent');
    document.getElementById('newcomponent').style.visibility = 'visible';
}

function DeleteQA(qaid)
{
  if (!confirm('Are you sure you want to delete this QA Item and Activities associated with it?')) return;
    
  var req = new XMLHttpRequest();
	if (!req)
	{
		alert ('XMLHttpRequest is not supported');
		return;
	}
  var uri = 'ajax_data.vsp?action=delete_qa_record&qaid='+qaid;
	req.onreadystatechange = 
		function()
		{
			if (req.readyState == 4 && req.status == 200) 
			{
				var respXML =  req.responseText; 

        var e = document.createElement('root');
        e.innerHTML = respXML;
        var x = e.getElementsByTagName('response')[0];
        alert(x.innerHTML);
        RefreshComponents();
			} 
			else 
				if (req.readyState == 4 && req.status != 200)
				{
					soap_error_alert (req);
				}
	  }
  req.open('GET', uri);
  req.send(null);
}

function soap_error_alert (req)
{
  if (req.status == 500 && req.responseXML != null)
    {
      var respXML = req.responseXML;
      var elms = respXML.getElementsByTagName("Fault");
      var err = req.statusText + '\r\n';
      if (elms.length != 0)
        {
          var i;
          var elms = respXML.getElementsByTagName("faultstring");
          if (elms.length)
	    {
	      var nodes = elms[0].childNodes 
	       for (i = 0; i < nodes.length; i++)
		 {
		   if (nodes[i].nodeType == 3)
		     err = err + nodes[i].nodeValue; 
		 }  
	    }
        }
      alert (err);   
    }
  else
    {
      alert ('Error: ' + req.statusText);
    }
}

function fill_inner (results, tag_name)
{
  var str = "";
  if (!results || results.length != 1)
    {
      str = 'No result is returned.';
    }
  else
    {  
      var nodes = results[0].childNodes;

      if (!nodes || nodes.length == 0)
        {
          str = 'No nodes in the result returned.';
        }
      else
        {
          var i;
          for (i = 0; i < nodes.length; i++)
             {
	       if (nodes[i].nodeType == 3)
		 str = str + nodes[i].nodeValue;
             }
        }
     }
  document.getElementById(tag_name).innerHTML = str;
}

function tHover (tblid, r,c, col)
{
  r--;
  c--;
  //makes the indexes respect to actual elements
  var table = document.getElementById(tblid);
  var trs = table.getElementsByTagName('tr');
  for (var y = 0; y < trs.length; y ++)
  {
    var tdr = trs[y];
    var tds = tdr.childNodes;
    var numtds = tdr.getElementsByTagName('td').length ;
    var x = 0; 
    for (var n = 0; n < tds.length; n ++)
    {
      var nn = tds[n];
      if (nn.nodeType == 1)
      {
        if ((x == c || y == r) && (x > 0 && y > 0) && x < numtds)
        {
          nn.style.backgroundColor = col;
        }
        if (!(x == 0 && y == 0) && ((x == c && y == 0) || (x == 0 && y == r)))
        {
          nn.style.backgroundColor = col;
        }
        x ++;
      }
    }
  }
}

function addMouseOvers(tblid, colin)
{
  var table = document.getElementById(tblid);
  var trs = table.getElementsByTagName('tr');
  for (i = 0; i < trs.length; i ++)
  {
    var tdr = trs[i];
    var tds = tdr.childNodes;
    var items = 1;
    for (j = 0; j < tds.length; j ++)
    {
      var x = tds[j];
      if (x.nodeType == 1)
      {
        //x.innerHTML = 's';
        x.setAttribute('onMouseOver', 'tHover(\''+tblid+'\', '+(i+1)+', '+items+', \''+colin+'\');');
        var colout = x.style.backgroundColor;
        x.setAttribute('onMouseOut', 'tHover(\''+tblid+'\', '+(i+1)+', '+items+', \''+colout+'\');');
        items ++;
      }
    }
  }
}


function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

