// loadHTML: load HTML-fractions
// Horst Walther
// 2007-04-06

  var uninitialized = 0;
  var loading = 1;
  var loaded = 2;
  var interactive = 3;
  var complete = 4;

  var ok = 200;
  var notFound = 404; // HTTP-Status-Code 404 page not found
  var idact=0;
  var idold=0;

//  ------------------------------------------------------------
function newXML_Object () {
  var request = null;
  if(window.XMLHttpRequest) {
    try { 
      request = new XMLHttpRequest();
    }
    catch(e) { 
      request = null; 
    }
  } else 
    if(window.ActiveXObject) {
      try { 
        request = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {
      try { 
        request = new ActiveXObject('Microsoft.XMLHTTP');
      } 
      catch(e) { 
        request = null; 
      }
    } 
  }
  return request;
}

//  ------------------------------------------------------------
function myProcessReqChange() {
  document.getElementById(elementId).innerHTML = ((request.readyState == complete && request.status == ok ) ? request.responseText : ("### not (yet) loaded to "+elementId));
}

//  ------------------------------------------------------------
function loadUrlHidden (sourceURL, id) {
  createHiddenNode (id, 'div');
  return loadURL (sourceURL, iD);
}

//  ------------------------------------------------------------
function createHiddenNode (id, tagType) {
  if (!document.getElementById(id)) {
    var tmpNode = document.createElement(tagType);
    tmpNode.innerHTML = '&nbsp;';
    tmpNode.setAttribute("id", id);
    tmpNode.style.backgroundColor= "white";
    tmpNode.style.border= "1px solid red";
    tmpNode.style.borderBottom= "1px solid aqua";
    tmpNode.style.visibility = "hidden" ;
    tmpNode.style.display = "none" ;
    document.body.appendChild(tmpNode);
	return (tmpNode);
  }
  return document.getElementById(id);
}

//  ------------------------------------------------------------
function loadFileToId (sourceURL, iD) {
  return loadUrl (sourceURL, iD);
}

//  ------------------------------------------------------------
function loadUrl(sourceURL, iD) {
//  traceln ('loadUrl('+sourceURL+', '+iD+')');
  var request = newXML_Object ();
  if(request) { 
    request.onreadystatechange = function () {createHiddenNode (iD, 'div').innerHTML = ((request.readyState == complete && request.status == ok ) ? request.responseText : ("### '"+sourceURL+"' not (yet) loaded to '< "+iD+" >'"));}; 
    request.open('GET', sourceURL, true);
    request.setRequestHeader('Content-Type', 'text/xml'); 
    request.setRequestHeader('Cache-Control', 'no-cache'); 
    request.send('');
  } else {
    alert ("no XMLHttpRequest Object");
  } 
  return request;
}

//  ------------------------------------------------------------
function loadFileToIdAndDo (sourceURL, id, userFunction) {
//  traceln ('loadFileToIdAndDo ('+sourceURL+', '+id+', ...)');
  return loadToID (sourceURL, id, userFunction);
}

//  ------------------------------------------------------------
function loadToID(sourceURL, id, userFunction) {
//  traceln ('loadToID ('+sourceURL+', '+id+', ...)')
  var request = newXML_Object ();
  if(request) { 
    request.onreadystatechange = function () {if (request.readyState == complete /*&& request.status == ok*/ ) {createHiddenNode (id, 'div').innerHTML = request.responseText; userFunction();}}; 
//    traceln ('1.: request.open("GET",'+sourceURL+', true)');
    request.open('GET', sourceURL, true); // asynchronously 
    request.setRequestHeader('Content-Type', 'text/xml'); 
    request.send('');
//    traceln (request.responseText);
  } else {
    traceln ("no XMLHttpRequest Object");
  } 
  return request;
}

//  ------------------------------------------------------------
function loadFileAndDo (fileName, userFunction) {
//  traceln ('loadFileAndDo ('+fileName+', ...')
  return loadAndDo (fileName, userFuction);
}

//  ------------------------------------------------------------
function checkOnExistance (sourceURL, existFunction, notExistFunction, elseFunction, forbiddenFunction) {
//  traceln ('checkOnExistance ('+sourceURL+', ...)')
  var request = newXML_Object ();
  if(request) { 
    request.onreadystatechange=function() {  
    if (request.readyState==4) {
      if (request.status==200) existFunction ()
        else if (request.status==404) notExistFunction()
         else elseFunction ()
      }
    }
    try {
      request.open("HEAD", sourceURL, true);
      request.send(null)
    }
    catch(ex) {
      if (ex.message == 'Security violation')forbiddenFunction;
      return ex; // traceln (ex.name+': '+ex.message);
    }
  }
  return request;
}

//  ------------------------------------------------------------
function loadAndDo (sourceURL, userFunction) {
//  traceln ('loadAndDo ('+sourceURL+', ...)')
  var request = newXML_Object ();
  if(request) { 
    request.onreadystatechange = function () {if (request.readyState == complete /*&& request.status == ok*/ ) { /*traceln (sourceURL);*/ if (userFunction) userFunction(request.responseText);}}; 
    try {
      request.open('GET', sourceURL, true); // asynchronously 
      request.setRequestHeader('Content-Type', 'text/xml'); 
      request.setRequestHeader('Cache-Control', 'no-cache'); 
      request.send('');
//      traceln ('request.responseText='+request.responseText);
    }
    catch(ex) {
      return ex;
    }
  } else {
    alert ("no XMLHttpRequest Object");
  } 
  return request;
}

//  ------------------------------------------------------------
function toggleStyle (id, color1, color2) {
//  alert ("now find:"+id);
  var obj = document.getElementById(id);
//  alert ("color="+obj.style.backgroundColor);
  if (obj.style.backgroundColor == color2) {
    obj.style.backgroundColor= color1;
    obj.style.border= "1px solid black";
    obj.style.borderBottom= "1px solid black";
  }
  else {  
    obj.style.backgroundColor= color2;
    obj.style.border= "1px solid red";
    obj.style.borderBottom= "1px solid aqua";
  }
  idold=id;
}
//  ------------------------------------------------------------
function toggleAllStyles (idFrac, idNum, color1, color2) {
  for (var i=0; i < idNum; i++) {
    toggleStyle (idFrac+i, color1, color2);
  }
}

//  ------------------------------------------------------------
function toggleStyles (idFrac, id1, color1, color2) {
  toggleStyle (idold, color1, color2);
  toggleStyle (idFrac+id1, color1, color2);
}

//  ------------------------------------------------------------