var IS_IE = (navigator.userAgent.toLowerCase().indexOf("msie") > -1)?true:false;
var XCURSOR_INTERVAL = 100;
var XBUSY_MESSAGE = "Preparing report...";
var XREADY_MESSAGE = "Done.";
var source=null, style=null, dsplsource=null;
var currsource="nocurrsrc";
var xmlfile="NoXMLFile";
var currstyle = "nocurrstyle";
var xslfile = "NoXSLFile";
var currdsplsource = "nocurrdsplsource";
var hdgtext = " ";
var hdg2txt = "";
var grouphdgtext = "<h1>Scheduling Optimizer Reports</h1>";
var printopentxt = "";
printopentxt += "It may take a minute or more for this report to\n";
printopentxt += "display on the screen.";
var optiontxt = " ";
var winObj;
var printWinTitle = "Printer Friendly Report";
function detectxml()
{
var idlist = ["Microsoft.XmlDom",
              "MSXML.DOMDocument",
              "MSXML2.DOMDocument",
              "Msxml2.DOMDocument.3.0",
              "Msxml2.DOMDocument.4.0",
              "Msxml2.DOMDocument.5.0"];
   //determine best msxml progID string to use 
var progID = "";
for (var i=0; i < idlist.length; i++) {
   try {
     var objXML = new ActiveXObject(idlist[i]);
     progID = idlist[i];
   } catch (objException) { 
   }
}
// alert("Open string:"+progID); // debug
if (progID == "") {
var alerttxt = "";
alerttxt += " The Microsoft XML parser is not installed ";
alerttxt += "on your computer! \n\n";
alerttxt += " For more information and to install ";
alerttxt += "this required component, \n";
alerttxt += "contact Customer Support. \n";
alert(alerttxt);
}
return progID;
}

function bldStdRepXML()
{
//     =========== xml and xsl DOM docmuments =============
       source = getXMLObj();
       source.async = false;
       style = getXMLObj();
       style.async = false;
       dsplsource = getXMLObj();
       dsplsource.async = false;
}

function getXMLObj(rootName)
{
var xmlDoc = null;
if (IS_IE) {  // IE MSXML object create
   var progID = detectxml();
   if (progID != "") {
     try
     {
       xmlDoc=new ActiveXObject(progID);
       xmlDoc.async="false";
       xmlDoc.setProperty("SelectionLanguage", "XPath");
       if (rootName)
          xmlDoc.loadXML("<" + rootName + "/>");
     }
     catch (e) {
        alert("Error: unable to create MSXML DOM object!");
     }
   }
}
else {  // Assume Netscape or Mozilla
  try {
  xmlDoc = document.implementation.createDocument("", rootName, null);
  }
  catch (e) {
    alert("Error: XML DOM object creation failed!");
  }
}
return xmlDoc;
}

function openRepPrintWin(
bodyStyle,    // 0=normal (10pt), 1=small (8pt)
winName)       // unique identfier, limits to 1 window per rep group
{
if (winObj) {
   if (!winObj.closed)
     winObj.close();
}
var printTemplate = "printpg.htm";
if (bodyStyle == 0)
   printTemplate = "printpgn.htm";
winObj = window.open(printTemplate, winName,
"left=10,top=10,menubar=yes,toolbar=no, scrollbars=yes,resizable=yes");
winObj.focus();
}

// ******* period, day, term heading generators **************

// generate XML nodes and content for period heading list
function putDsplPerHdg(xmlDoc,fromPer, toPer)
{
PerHdgXML = "";
   perNmList = "0102030405060708091011121314151617181920212223242526272829303132%%";
var perGrpNodeName="PERLIST";
var perGrpNode=xmlDoc.createElement(perGrpNodeName);
var perHdgNode;
var perHdgContent;

for (var k = fromPer; k <= toPer; ++k) {
   perHdgNode=xmlDoc.createElement("PERHDG");
     if (perNmList.substr(2*(k-1) + 1, 1) == " ")
       PerHdgXML = perNmList.substr(2*(k-1), 1);
     else
     PerHdgXML =
        perNmList.substr(2*(k-1), 2);
   perHdgContent=xmlDoc.createTextNode(PerHdgXML);
   perHdgNode.appendChild(perHdgContent);
   perGrpNode.appendChild(perHdgNode);
}
xmlDoc.documentElement.appendChild(perGrpNode);
return;
}

// generate XML nodes and content for day heading list
function putDsplDayHdg(xmlDoc,fromDay, toDay)
{
var dayHdgXML = "";
   dayCdList = "MTWRF";
var dayGrpNodeName="DAYLIST";
var dayGrpNode=xmlDoc.createElement(dayGrpNodeName);
var dayHdgNode;
var dayHdgContent;

for (var k = fromDay; k <= toDay; ++k) {
   dayHdgNode=xmlDoc.createElement("DAYHDG");
   dayHdgXML = dayCdList.substr((k-1), 1);
   dayHdgContent=xmlDoc.createTextNode(dayHdgXML);
   dayHdgNode.appendChild(dayHdgContent);
   dayGrpNode.appendChild(dayHdgNode);
}
xmlDoc.documentElement.appendChild(dayGrpNode);
return;
}

// generate XML nodes and content for term heading list
function putDsplTermHdg(xmlDoc,fromTerm, toTerm)
{
var termHdgXML = "";
var termNmList = "1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930";
var termGrpNodeName="TERMLIST";
var termGrpNode=xmlDoc.createElement(termGrpNodeName);
var termHdgNode;
var termHdgContent;

for (var k = fromTerm; k <= toTerm; ++k) {
   termHdgNode=xmlDoc.createElement("TERMHDG");
   if (termNmList.substr(2*(k-1) + 1, 1) == " ")
     termHdgXML = termNmList.substr(2*(k-1), 1);
   else
     termHdgXML =
       termNmList.substr(2*(k-1), 2);
   termHdgContent=xmlDoc.createTextNode(termHdgXML);
   termHdgNode.appendChild(termHdgContent);
   termGrpNode.appendChild(termHdgNode);
}
xmlDoc.documentElement.appendChild(termGrpNode);
return;
}

// *** end of period, day, term heading generators ******

function setStyleVar(varName, varValue)
{
var i,j;
var varSet = false;
var vassign;
var vassigns;
vassigns = style.getElementsByTagName("xsl:variable");
if (vassigns.length == 0)
   vassigns = style.getElementsByTagName("variable");
if(varValue)
{

for(i=0; i < vassigns.length && !varSet; i++)
{
// match a variable name attribute with the name given as argument
   if(vassigns[i].getAttribute("name") == varName)
   {
      vassign = vassigns[i];
      // remove current variable value
      while(vassign.firstChild)
         vassign.removeChild(param.firstChild);

      if(!varValue || varValue == null)
      {
         // no action - variable already null
      }
      else
      {
         vassign.setAttribute("select", varValue);
         varSet = true;
      }
   } // endif(vassigns[i])
}  // end for loop

}  // endif varvalue
return varSet;
}  // end setStyleVar

function loadSourceXML(xmlFile)
{
   if (xmlFile != currsource) {
      source.load(xmlFile);
      currsource = xmlFile;
   }
}

function loadStyleXSL(xslFile)
{
   if (xslFile != currstyle) {
      style.load(xslFile);
      currstyle = xslFile;
   }
}

// Transform current XML content in dsplsource using current style xslt,
// result in innerhtml of division id passed in parameterlocID
function putRepXML(locID,xmlExt)
{
var repTarget;
// Target document-division based on whether framed or unframed page
if (window != top) {  // framed, target bottom frame from parent
   p=parent;
   b=p.bottom;
   repTarget = b.document.getElementById(locID);
}
else {  // not framed, operate on this document
   repTarget = document.getElementById(locID);
}

// select source xml and style xslt based on 
// whether opened by another window
if (xmlExt) {  // use data from opener
   if (IS_IE) {
     repTarget.innerHTML = opener.dsplsource.transformNode(opener.style);
   }
   else {
      var xslp = new XSLTProcessor();
      xslp.importStylesheet (opener.style);
      repTarget.innerHTML = "";
      repTarget.appendChild(xslp.transformToFragment(opener.dsplsource,document));
   }
}
else { // directly opened window - unframed report or printer friendly page 
   if (IS_IE) {
      repTarget.innerHTML = dsplsource.transformNode(style);
   }
   else {
      var xslp = new XSLTProcessor();
      xslp.importStylesheet (style);
      repTarget.innerHTML = "";
      repTarget.appendChild(xslp.transformToFragment(dsplsource,document));
   }
}
} // end putRepXML

function putRepSource(outPutID, xmlExt)
{
if (xmlfile != currdsplsource || currsource != 'nocurrsrc') {
dsplsource = null;
dsplsource = getXMLObj("DISPLREP");
dsplsource.async = false; // required for netscape
dsplsource.load(xmlfile);
currdsplsource = xmlfile;
}
loadStyleXSL(xslfile);
putRepXML(outPutID, xmlExt);
}  // end putRepSource

function putRepHdg1(txt)
{
printWinTitle = txt;
hdgtext = "<h2>"+txt+"</h2>";
var p=parent;
var m=p.middle;
m.document.getElementById("hdgText").innerHTML = hdgtext;
}

function putRepHdg2(txt)
{
hdg2txt = txt;
var p=parent;
var m=p.middle;
m.document.getElementById("hdgText").innerHTML += txt;
}
function setCursorWait()
{
var el = document.getElementsByTagName("INPUT");
for(var i = 0; i < el.length; i++) {
  el.item(i).style['cursor'] = 'wait';
}
   document.body.style.cursor = 'wait'; 
}

function setCursorDefault()
{
var el = document.getElementsByTagName("INPUT");
for(var i = 0; i < el.length; i++) {
  el.item(i).style['cursor'] = 'auto';
}
   document.body.style.cursor = 'auto';
}

function showBusy(fnStr)
{
setCursorWait();
window.status=XBUSY_MESSAGE;
setTimeout(fnStr, XCURSOR_INTERVAL);
}

function showReady()
{
setCursorDefault();
window.status=XREADY_MESSAGE;
}


