//Miscellaneous functions -- Cecile

/*function getElementsByClassName(classname, node)  {    
  if(!node) node = document.getElementsByTagName("body")[0];
  var a = [];
  var re = new RegExp('\\b' + classname + '\\b');
  var els = node.getElementsByTagName("*");
  for(var i=0,j=els.length; i<j; i++)
    if(re.test(els[i].className))a.push(els[i]);
  return a;
}*/

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	for ( var i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function displayHTML(source, destination) {
  document.getElementById(destination).innerHTML = document.getElementById(source).innerHTML;
}

function strContains(refString, pattern) {
  var displayedText = refString+'<br>'+pattern+'<br>';
  var occurrences = 0;
  for (var k=0;k<refString.length;k++) {
    if (refString.substr(k,pattern.length) == pattern)
      occurrences += 1;
  }
  displayedText += occurrences+' times<br>';
  return occurrences;
}


function getListOfDivIds() {
  var list = [];
  var e = document.getElementsByTagName("div");
  for(var i=0;i<e.length;i++) {
    list[i]=e[i].id;
  }
  return list;
}

function getListOfDivClasses() {
  var list = [];
  var e = document.getElementsByTagName("div");
  for(var i=0;i<e.length;i++) {
    list[i]=e[i].className;
  }
  return list;
}

function displayInDestinationIdIfClassContains(destination, classpattern) {
  var list = getListOfDivClasses();
  var htmlToDisplay = '';
  var testHTML = '';
  var check = 0;
  for(var i=0; i<list.length; i++) {
    check = 0;
    for(var k=0; k<i; k++) {
      if (list[i]==list[k]) check = 1;
    }
    if (list[i]!='' && check == 0) {
      if (strContains(list[i],classpattern)>0) {
        elements = getElementsByClass(list[i], null, null);
        for(var j=0; j<elements.length; j++)
          htmlToDisplay+=elements[j].innerHTML;
      }
    }
  }
  document.getElementById(destination).innerHTML = htmlToDisplay;
}

function displayDivCenterScreen(Xwidth,Yheight,divid) { 
  // First, determine how much the visitor has scrolled
  var scrolledX, scrolledY; 
  if( self.pageYoffset ) { 
    scrolledX = self.pageXoffset; 
    scrolledY = self.pageYoffset; 
  }
  else if( document.documentElement && document.documentElement.scrollTop ) { 
    scrolledX = document.documentElement.scrollLeft; 
    scrolledY = document.documentElement.scrollTop; 
  }
  else if( document.body ) { 
    scrolledX = document.body.scrollLeft; 
    scrolledY = document.body.scrollTop; 
  }
  // Next, determine the coordinates of the center of browser's window
  var centerX, centerY; 
  if( self.innerHeight ) { 
    centerX = self.innerWidth; 
    centerY = self.innerHeight; 
  }
  else if( document.documentElement && document.documentElement.clientHeight ) { 
    centerX = document.documentElement.clientWidth; 
    centerY = document.documentElement.clientHeight; 
  }
  else if( document.body ) { 
    centerX = document.body.clientWidth; 
    centerY = document.body.clientHeight; 
  }
  // Xwidth is the width of the div, Yheight is the height of the 
  // div passed as arguments to the function: 
  var leftoffset = scrolledX + (centerX - Xwidth) / 2; 
  var topoffset = scrolledY + (centerY - Yheight) / 2; 
  // The initial width and height of the div can be set in the 
  // style sheet with display:none; divid is passed as an argument to // the function 
  var o=document.getElementById(divid); 
  var r=o.style; 
  r.position='absolute'; 
  r.top = topoffset + 'px'; 
  r.left = leftoffset + 'px'; 
  r.display = "block"; 
} 

function hideDiv(divid) {
  var o=document.getElementById(divid); 
  var r=o.style; 
  r.display = "none"; 
}
