/********************************************************************** 	
	The Alberta Library Online
	$Id: weatherreport.js,v 1.7 2005/10/12 17:18:24 pcharoen Exp $ 
	Author: Piyapong Charoenwattana
	Version: $Revision: 1.7 $ $Date: 2005/10/12 17:18:24 $
	
	SearchStats gadget creates these variables:
	- var dbShortName = new Array(x); (string)
	- var dbRows = new Array(x); (string)
	- var dbUnavailables = new Array(x); (string)
	- var dbSlow = new Array(x); (boolean)
	- var dbCount = x; (int)
	- var respTime = x; (double)
	- var dbUnavailableNames = new Array(x); (string)
	- var dbUnavailableMessages = new Array(x); (string)
**********************************************************************/
var popup;
var override = false;
var mainForm = document.forms['mainForm'];
var curDbs = new Array();
var topicStr;
var selectedTopic;
var allowOmit;
var target;
var indexName = new Array(3);
indexName[0] = 'Keyword';
indexName[1] = 'Author';
indexName[2] = 'Title phrase';

var captionText = 'Search in progress, please wait...';
var progress = ''
var barNo = 0;

function overLibSearchStats() {
	document.mainForm.submit();
	callOverLib();
	window.setTimeout('displayStatus()', 1000);
	return false;
}

function displayStatus() {
	window.status = captionText;
	callOverLib();
	window.setTimeout('displayStatus()', 1000);
}

function callOverLib() {
	overlib(displaySearchStats(), STICKY, CENTERPOPUP, SHADOW, CLOSECLICK, WIDTH, 400, HAUTO, CLOSETEXT, '', CLOSEFONTCLASS, 'closefontClass', BGCOLOR, '#e5b76d',FGCOLOR, '#FFFFE0', CAPTION, captionText, CAPTIONFONTCLASS, 'capfontClass');
}

function displaySearchStats() {
   
   //var d;
   // handle each type of search
   if(document.mainForm.active.value == '3') {
      // basic search
      selectedTopic = document.mainForm.topic.selectedIndex;
      target = document.mainForm.topic.options[selectedTopic].text;
      topicStr = document.mainForm.topic.value + "+";
   }
   else if(document.mainForm.active.value == '2') {
      // article search
      selectedTopic = document.mainForm.dbname.selectedIndex;
      target = document.mainForm.dbname.options[selectedTopic].text;
      topicStr = document.mainForm.dbname.value + "+";
   }
   else if(document.mainForm.active.value == '4') {
      // advanced search
      topicStr = document.mainForm.topic.value;
      target = document.mainForm.topicname.value;
   }
   else if(document.mainForm.active.value == '9') {
      // history search
      topicStr = '';
      target = '';
   }
   else {
      // refine search
      topicStr = document.mainForm.topic.value;
      target = document.mainForm.topicname.value;
   }

      ihtml = '<html><head><title>TAL Online</title><link rel="stylesheet" href="/html/stylesheetmain.css" type="text/css" title="TAL Online Styles">';
      ihtml = ihtml +  '</head><body text="#000000" bgcolor="#ffffff" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">';

      // estimate response time message
      ihtml = ihtml +  '<table border="0" cellpadding="1"><tr><td>';
      ihtml = ihtml +  '<table border="0" cellpadding="3" cellspacing="3" >';
      ihtml = ihtml +  '<tr>';
      ihtml = ihtml +  '<td ><p>';
      ihtml = ihtml +  'We estimate your search will take ' + respTime + ' seconds. Thank you for being patient.';
      ihtml = ihtml +  '</p></td></tr>';
      // unavailable database message
      if(dbUnavailableNames.length > 0) {
         var i;
         var dbMsg = '';
         for(i = 0; i < dbUnavailableNames.length; i++) {
            if(topicStr.indexOf(dbUnavailableNames[i]) > - 1) {
               dbMsg = dbMsg + "<li>" + dbUnavailableMessages[i] + "</li>";
            }
         }
         // if found in dblist, show message
         if(dbMsg.length > 0) {
            ihtml = ihtml +  '<tr ><td ><p>';
            ihtml = ihtml +  'The following databases have been excluded from your search due to slowness or lack of availability:';
            ihtml = ihtml +  '</p></td></tr>';
            ihtml = ihtml +  '<tr><td><ul>';
            ihtml = ihtml +  dbMsg;
            ihtml = ihtml +  '</ul></td></tr>';
         }
      }
      ihtml = ihtml +  '</table>';
      progress = progress + '<span class="space">&nbsp;</span><span class="progressStep">&nbsp;&nbsp;</span>';
      barNo = barNo + 1;
      ihtml = ihtml +  '</td></tr><tr><td><div class="progressBar">' + progress + '</div></td></tr></table>';
      ihtml = ihtml +  '</body></html>';
      if (barNo > 39) {
      	barNo = 0;
      	progress = '';
      }
      
   return ihtml;
}

function overrideSubmit(deleteSlowDbs) {
   override = true;
   if(deleteSlowDbs) {
      x = topicStr.indexOf("::") + 3;
      if(x >= 0) {
         topicStr = topicStr.substring(0, x - 1);
         var first = true;
         x = 0;
         var y = 0;
         var newCurDbs = new Array();
         while(curDbs[x] != null) {
            if(dbSlow[curDbs[x]] != "true") {
               if(first) {
                  first = false;
               }
               else {
                  topicStr += "+";
               }
               topicStr += dbShortName[curDbs[x]];
               newCurDbs[y] = curDbs[x];
               y++;
            }
            x++;
         }
         if(document.mainForm.active.value == "4") {
            document.mainForm.topic.value = topicStr;
         }
         else {
            document.mainForm.topic.options[selectedTopic].value = topicStr;
         }
         curDbs = newCurDbs;
      }
   }
   openPopup(false);
   document.forms[0].submit();
   override = false;
}

function openPopup(slow) {
   popup = window.open('', "popup", 'width=350,height=600,top=200,left=340,dependent,scrollbars=yes');
   if(popup.opener == null) popup.opener = self;
   popup.focus();
   var d;
   with(popup.document) {
      write('<HTML>	<HEAD><TITLE>TAL Online</TITLE><LINK rel = STYLESHEET href = "/html/stylesheetmain.css" Type = "text/css" title="TAL Online Styles">');
      write('</HEAD><BODY TEXT="#000000" BGCOLOR="#ffffff" TOPMARGIN=0 LEFTMARGIN=0 marginheight="0" marginwidth="0">');
      write('<table border="0" cellpadding="4" cellspacing="0" width="100%">');
      write('<tr><td valign="top" align="right">');
      if(!slow) {
         write('<a href="javascript:self.close()"><img src="/images/but_closewnd.gif" width="125" height="18" border="0" alt="Close this window"></a>');
      }
      write('&nbsp;</td></tr>');
      write('<tr>');
      write('<td align="center"><img src="/images/searchinprogress3.gif" width="178" height="27" border="0" alt="Search in progress, please wait..."></td>');
      write('</tr>');
      if(slow) {
         write('<tr><td>');
         write('<h2>Server Problem</h2></td></tr>\n');
      }
      write('</table><br><table border="0" cellpadding="0" cellspacing="0" align=center><tr>');
      write('<td align="right">Searching:	</td>');
      write('<td align="left"><b>' + target + '</b></td>');
      var x;
      // check for advanced search
      if(document.mainForm.active.value == "4") {
         write('</tr><tr>	<td align="right">for:	</td>');
         write('<td align="left"><i>');
         var i = 0;
         if(document.mainForm.termA.value.length > 0) {
            write(document.mainForm.indexA.options[document.mainForm.indexA.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termA.value + '&quot;');
         }
         if(document.mainForm.termB.value.length > 0) {
            write('</i></td></tr><tr><td>&nbsp;</td><td align="left"><i>');
            write(document.mainForm.operatorB.options[document.mainForm.operatorB.selectedIndex].text);
            write('&nbsp;' + document.mainForm.indexB.options[document.mainForm.indexB.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termB.value + '&quot;');
         }
         if(document.mainForm.termC.value.length > 0) {
            write('</i></td></tr><tr><td>&nbsp;</td><td align="left"><i>');
            write(document.mainForm.operatorC.options[document.mainForm.operatorC.selectedIndex].text);
            write('&nbsp;' + document.mainForm.indexC.options[document.mainForm.indexC.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termC.value + '&quot;');
         }
         write('</i></td>');
      }
      else {
         for(x = 0; x <= 2; x++) {
            if(document.mainForm.indexsrch[x].checked)
            break;
         }
         write('</tr><tr>	<td align="right">for:	</td>');
         write('<td align="left"><i>' + indexName[x] + ': ');
         write('&quot;' + document.mainForm.termsrch.value + '&quot;</i></td>');
      }
      write('</tr></table><br />\n');
      if(slow) {
         write('<p>Your search includes one or more servers that have recently been experiencing network difficulties:</p>');
         write('<table width=100%>');
         write('<tr><td><b>Database</b></td><td></td><td><b>Seconds</b></td><td></td><td><b>Status</b></td></tr>\n');
         x = 0;
         while(curDbs[x] != null) {
            if((dbSlow[curDbs[x]] == "true")) {
               write(dbRows[curDbs[x]] + "\n");
            }
            x++;
         }
         write('</table>');
         write('<p>Would you like to:<br>\n');
         write('<a href="javascript:self.close();">Abort the search</a> \n');
         write('<a href="javascript:opener.overrideSubmit(false);">Proceed</a> \n');
         if(allowOmit && curDbs.length > 1) {
            write('<a href="javascript:opener.overrideSubmit(true);">Proceed, but omit this/these server(s)</a> \n');
         }
         write('<br>');
      }
      write('<table border="0" cellpadding="0" cellspacing="0" width="100%">');
      write('<tr>');
      write('<td align="center" colspan="5" bgcolor="#ffffff">');
      write('<b>Recent response times</b>');
      write('</td></tr><tr>');
      write('<td bgcolor="#eeeecc" width="100%">Resource Name</td>');
      write('<td bgcolor="#eeeecc"><img src="/images/space.gif" width="1" height="1" border="0" alt="" /></td>');
      write('<td bgcolor="#eeeecc">Seconds&nbsp;</td>');
      write('<td bgcolor="#eeeecc"><img src="/images/space.gif" width="1" height="1" border="0" alt="" /></td>');
      write('<td bgcolor="#eeeecc">Status</td>');
      write('</tr>');
      x = 0;
      while(curDbs[x] != null) {
         if((!(slow)) ||(dbSlow[curDbs[x]] != "true")) {
            write(dbRows[curDbs[x]] + "\n");
         }
         x++;
      }
      write('</table>');
      write('</td></tr></table>');
      write('</body></html>');
   }
   popup.document.close();
}

function openBasicSearchPopup() {
   popup = window.open('', "popup", 'width=400,height=300,top=200,left=340,dependent,scrollbars=yes');
   if(popup.opener == null) popup.opener = self;
   popup.focus();
   var d;
   // handle each type of search
   if(document.mainForm.active.value == '3') {
      // basic search
      selectedTopic = document.mainForm.topic.selectedIndex;
      target = document.mainForm.topic.options[selectedTopic].text;
      topicStr = document.mainForm.topic.value + "+";
   }
   else if(document.mainForm.active.value == '2') {
      // article search
      selectedTopic = document.mainForm.dbname.selectedIndex;
      target = document.mainForm.dbname.options[selectedTopic].text;
      topicStr = document.mainForm.dbname.value + "+";
   }
   else if(document.mainForm.active.value == '4') {
      // advanced search
      topicStr = document.mainForm.topic.value;
      target = document.mainForm.topicname.value;
   }
   else {
      // refine search
      topicStr = document.mainForm.topic.value;
      target = document.mainForm.topicname.value;
   }
   with(popup.document) {
      write('<html><head><title>TAL Online</title><link rel="stylesheet" href="/html/stylesheetmain.css" type="text/css" title="TAL Online Styles">');
      write('</head><body text="#000000" bgcolor="#ffffff" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">');
      write('<table border="0" cellpadding="4" cellspacing="0" width="100%">');
      write('<tr>');
      write('<td align="center"><img src="/images/searchinprogress3.gif" width="178" height="27" border="0" alt="Search in progress, please wait..."></td>');
      write('</tr>');
      write('</table><br><table border="0" cellpadding="0" cellspacing="0" align=center><tr>');
      write('<td align="right">Searching:	</td>');
      write('<td align="left"><b>' + target + '</b></td>');
      if(document.mainForm.active.value == '4') {
         // advanced search indexes
         write('</tr><tr>	<td align="right">for:	</td>');
         write('<td align="left"><i>');
         var i = 0;
         if(document.mainForm.termA.value.length > 0) {
            write(document.mainForm.indexA.options[document.mainForm.indexA.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termA.value + '&quot;');
         }
         if(document.mainForm.termB.value.length > 0) {
            write('</i></td></tr><tr><td>&nbsp;</td><td align="left"><i>');
            write(document.mainForm.operatorB.options[document.mainForm.operatorB.selectedIndex].text);
            write('&nbsp;' + document.mainForm.indexB.options[document.mainForm.indexB.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termB.value + '&quot;');
         }
         if(document.mainForm.termC.value.length > 0) {
            write('</i></td></tr><tr><td>&nbsp;</td><td align="left"><i>');
            write(document.mainForm.operatorC.options[document.mainForm.operatorC.selectedIndex].text);
            write('&nbsp;' + document.mainForm.indexC.options[document.mainForm.indexC.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termC.value + '&quot;');
         }
         write('</i></td>');
      }
      else if(document.mainForm.active.value == '2' || document.mainForm.active.value == '3') {
         // basic, article search indexes (keyword, author, title)
         var x;
         for(x = 0; x <= 2; x++) {
            if(document.mainForm.indexsrch[x].checked)
            break;
         }
         write('</tr><tr>	<td align="right">for:	</td>');
         write('<td align="left"><i>' + indexName[x] + ': ');
         write('&quot;' + document.mainForm.termsrch.value + '&quot;</i></td>');
      }
      else {
         // refine search
         var x;
         for(x = 0; x <= 2; x++) {
            if(document.mainForm.indexsrch[x].checked)
            break;
         }
         write('</tr><tr>	<td align="right">for:	</td>');
         write('<td align="left"><i>' + document.mainForm.termsrchold.value + ' ');
         if(document.mainForm.termsrch.value.length > 0) {
            write(document.mainForm.operatorsrch.options[document.mainForm.operatorsrch.selectedIndex].text);
            write('&nbsp;' + document.mainForm.indexsrch.options[document.mainForm.indexsrch.selectedIndex].text + '&nbsp;');
            write('&quot;' + document.mainForm.termsrch.value + '&quot;');
         }
         write('</i></td>');
      }
      write('</tr></table><br/>\n');
      // estimate response time message
      write('<table border="0" cellpadding="5" cellspacing="5" width="100%">');
      write('<tr>');
      write('<td bgcolor="#FFFFFF" width="100%"><p>');
      write('We estimate your search will take ' + respTime + ' seconds. Thank you for being patient.');
      write('</p></td></tr>');
      // unavailable database message
      if(dbUnavailableNames.length > 0) {
         var i;
         var dbMsg = '';
         for(i = 0; i < dbUnavailableNames.length; i++) {
            if(topicStr.indexOf(dbUnavailableNames[i]) > - 1) {
               dbMsg = dbMsg + "<li>" + dbUnavailableMessages[i] + "</li>";
            }
         }
         // if found in dblist, show message
         if(dbMsg.length > 0) {
            write('<tr><td><p>');
            write('The following databases have been excluded from your search due to slowness or lack of availability:');
            write('</p></td></tr>');
            write('<tr><td><ul>');
            write(dbMsg);
            write('</ul></td></tr>');
         }
      }
      // close window button 
      write('<tr><td valign="middle" align="center">');
      write('<a href="javascript:self.close()"><img src="/images/but_closewnd.gif" width="125" height="18" border="0" alt="Close this window"></a>');
      write('&nbsp;</td></tr>');
      write('</table>');
      write('</td></tr></table>');
      write('</body></html>');
   }
   popup.document.close();
   return true;
}

function handleSubmit() {
   // need to check whether current db list includes a slow server
   var slow = false;
   if(override == false) {
      if(document.mainForm.topic) {
         selectedTopic = document.mainForm.topic.selectedIndex;
         // check for advance search
         if(document.mainForm.active.value == "4") {
            topicStr = document.mainForm.topic.value;
         }
         else {
            topicStr = document.mainForm.topic.options[selectedTopic].value;
         }
         tmpStr = topicStr.substring(topicStr.indexOf("::") + 2) + "+";
         var curDbsPtr = 0;
         for(x = 0; x <= dbCount; x++) {
            if(tmpStr.indexOf(dbShortName[x] + "+") >= 0) {
               curDbs[curDbsPtr] = x;
               if(dbSlow[x] == 'true') {
                  slow = true;
               }
               curDbsPtr++;
            }
         }
         curDbs[curDbsPtr] = null;
         // needed by IE4.01
         allowOmit = true;
         if(document.mainForm.active.value == "4") {
            target = document.mainForm.topicname.value;
         }
         else {
            target = document.mainForm.topic.options[selectedTopic].text;
         }
      }
      else {
         // no topic, just single db
         var curDbName = document.mainForm.dbname.options[document.mainForm.dbname.selectedIndex].value;
         for(x = 0; x <= dbCount; x++) {
            if(curDbName == dbShortName[x]) {
               curDbs[0] = x;
               if(dbSlow[x] == 'true') {
                  slow = true;
               }
               break;
            }
         }
         curDbsPtr = 1;
         allowOmit = false;
         target = document.mainForm.dbname.options[document.mainForm.dbname.selectedIndex].text;
      }
   }
   openPopup(slow);
   return !(slow);
}

function closePopup() {
   if(popup && !popup.closed) popup.close();
}

function explain(s) {
   explainWin = window.open('/explains/' + s, 'explainWin', 'width=400,height=400,resizable =1,scrollbars=1,menubar=0');
   if(explainWin && !explainWin.closed) explainWin.focus();
}

function findRegion() {
   findRegionWin = window.open('/RegionFinder/form.jsp', 'findRegionWin', 'top=200,left=340,dependent,width=400,height=400,resizable=1,scrollbars=1,menubar=0');
   if(findRegionWin && !findRegionWin.closed) findRegionWin.focus();
}

function findRegionForm() {
	ihtml = '<iframe src="/searchalberta/regionFinderForm.jsp" width="660" height="180">';
	ihtml = ihtml + 'Your browser does not support this feature.</iframe>';
	document.getElementById('findRegionFrame').innerHTML = ihtml;
}

function closeFindRegionForm() {
	ihtml = '<p align="left">To find your region again, please click on the link above.</p>';
	document.getElementById('findRegionFrame').innerHTML = ihtml;
}

