var version = "1.1"
var logStat = '';
var meModified = new Date(document.lastModified);

var timeoutDelay = 50;     //- How long (milliseconds) For each loop on dependant loading
var timeoutMax   = 10;     //- How long (seconds) to wait before giving up on a file.

var lockedSeq = new Array();

var isDOM = (document.getElementById ? true : false);
var isIE4 = ((document.all && !isDOM) ? true : false);
var isNS4 = (document.layers ? true : false);

var isNS  = false;
var isIE  = false;
var isIE5 = false;
var isNS5 = false;

var browserVersionNote = "";
var browserName=navigator.appName
var browserVersion=navigator.appVersion

var ib = browserVersion.indexOf(" ",0)
if (-1<ib) {
  browserVersionNote = browserVersion.substring(1+ib,browserVersion.length)
  browserVersion=browserVersion.substring(0,ib)
  }
browserVersion=new Number(browserVersion);

if (browserName == "Netscape") {
  isNS=true;
  if (browserVersion >= 5.0) { isNS5=true; }
  }
else if (browserName == "Microsoft Internet Explorer") {
  isIE=true;
  if (browserVersion >= 5.0) { isIE5=true; }
  }

function buildLeftNav() {

leftnav = [
["index.html","Charis Home"],
["sched.html","Concert Schedule"],
["firstcd.html","Buy our CD"],
["susanne.html","Susanne Peck"],
["press.html","Press Information"],
["repetoire.html","Repertoire"],
["singers.html","Our Members"],
["charismailist.html","Mailing List"],
["","<hr color='#0000AA' width='80%' size='1px' align=left>"],
["home.html","Related Links"],
["http://wellhost.com/charismembersonly/index.html","Member Login"]
]

  myPage=location.href.toLowerCase();
  var i=myPage.indexOf("?",0)
  if (-1 < i) {
    myPage=myPage.substring(0,i)
    }
  i=myPage.indexOf("#",0)
  if (-1 < i) {
    myPage=myPage.substring(0,i)
    }

  var i=myPage.indexOf("/",0)
  while (i > -1) {
    myPage=myPage.substring(1+i,myPage.length)
    i=myPage.indexOf("/",0)
    }
  var stx = '<span id=navblock><table width="100%" cellpadding=2 cellspacing=0 border=0>\n';
  if (document.all) { stx += "<tr><td colspan=2><img src='clear_dot.gif' height='10px'></td></tr>"; }
  var lnk = "";
  var sty = "";
  for (var i=0;i<leftnav.length;i++) {
    var pg = leftnav[i][0]
    var ti = leftnav[i][1]
    if (myPage == pg) {
      mecl=' class="leftSel"'
      }
    else {
      mecl=''
      }
    stx += '<tr'+mecl+'><td'+mecl+' width="3">&nbsp;</td><td'+mecl+'><a class="llink" href="'+pg+'">'+ti+'</a><td></tr>\n';
    }
  stx += "</table></span>";
  document.write(stx);
//if (document.all) { onConditionExecute("checkpos","defineNavPos()","findMe(navblock).y > 5"); }
  }

function initialize (htmlfile) {
  if ((isIE) || (isNS5)) { document.title="Charis Chamber Voices Version "+version+", updated: "+meModified }
  if ((isIE) || (isNS5)) {
    onConditionExecute("checkpos","defineNavPos()","findMe(document.getElementById(\"navblock\")).y > 5");
    }
  if (htmlfile == "index.html") {
    MM_preloadImages('pubphoto2001-legend-300.jpg')
    }
  }

function defineNavPos() {
  var nb=document.getElementById("navblock");
  leftnavOffset=findMe(nb).y;
  nb.style.top=leftnavOffset;
  nb.style.position='absolute';
  }

function scrollMe () {
//alert(document.body.scrollTop+"/"+leftnav.offsetTop)
  if ((isIE) || (isNS5)) { // apparently only works in IE ???
    var ds=document.body.scrollTop
    if (ds<0) ds=0
    if ("undefined" == typeof leftnavOffset) defineNavPos();
    navblock.style.top=ds+leftnavOffset
    }
  }

//- Function: "findMe(object)"
//-  Recurse up tree and add up x/y positions to find absolute placement of this object
//-  Note: This doesn't work for all objects in y direction.  If you find the answer, email me: jfkelley@us.ibm.com
function findMe(obj) {
//  alert("findMe: "+obj)
  xy = new Array()
  xy.x=new Number(obj.offsetLeft);
  xy.y=new Number(obj.offsetTop);
  while (obj.offsetParent) {
    obj=obj.offsetParent;
    xy.x += obj.offsetLeft;
    xy.y += obj.offsetTop;
    }
//  if (("undefined" != mommy) && (null != mommy)) {
//    var mxy=findMe(mommy);
//    xy.x += mxy.x;
//    xy.y += mxy.y;
//    }
// doesn't help here; but should think about it:  xy.y=xy.y+document.body.scrollTop;
  return xy;
  }

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function showHTML () {
  if ((isIE) || (isNS5)) {
    var stx = document.getElementById("mainBody")
    document.write("<HTML><xmp>"+stx.innerHTML+"</xmp></HTML>")
    }
  else alert("showHTML() only works with IE and NS 5.0+")
  }


var navoptions = [
'<SELECT NAME="Destination2" onChange="goTo(this)">',
'<OPTION VALUE="NoValue" SELECTED>--- KeeneFest WebSite Contents ---</OPTION>',
'<OPTION VALUE="index.html">Home Web Page</OPTION>',
'<OPTION VALUE="concerts.html">Concert Information</OPTION>',
'<OPTION VALUE="http://wellhost.com/keenefest/mailist.html">Join our Mailing List</OPTION>',
'<OPTION VALUE="progsing.html">Singers Program</OPTION>',
'<OPTION VALUE="progconduct.html">Conductors Program</OPTION>',
'<OPTION VALUE="http://wellhost.com/keenefest/application.html">Application Form</OPTION>',
'<OPTION VALUE="kent.html">About Kent School</OPTION>',
'<OPTION VALUE="caramoor.html">About Caramoor Festival</OPTION>',
'<OPTION VALUE="faculty.html">Keenefest Faculty</OPTION>',
'<OPTION VALUE="sched.html">Festival Schedule</OPTION>',
'<OPTION VALUE="board.html">Keenefest Board of Directors</OPTION>',
'<OPTION VALUE="musicstores.html">List of Music Stores</OPTION>',
'<OPTION VALUE="amazon.html">KeeneFest/Amazon.com BOOKSTORE</OPTION>',
'<OPTION VALUE="checklist.html">Participant Checklist</OPTION>',
'</SELECT>'
]

function getRef(id) {
 if (isDOM) return document.getElementById(id);
 if (isIE4) return document.all[id];
 if (isNS4) return document.layers[id];
 }
function getSty(id) {
 return (isNS4 ? getRef(id) : getRef(id).style);
 }

function buildHeader() {
  document.write('<table width="100%" border=0 cellpadding=10 cellspacing=0>');
  document.write(' <tr>');
  document.write('  <td align=center style="background-color:#FFBB00; color:#000000; border-color:#FFBB00">');
  document.write('   <span style="padding-top: 5; padding-bottom: 5">');
  document.write('    <a href="index.html"><img border=0 src="banner.jpg" align=middle alt="Click here to return to the KeeneFest Home Page"></a>');
  document.write('    </span>');
  document.write('   </td>');
  document.write('  <td style="background-color:#FFBB00; color:#000000; border-color:#FFBB00">');
  document.write('   <TABLE WIDTH="100%">');
  document.write('    <tr>');
  document.write('     <td align="center" style="background-color:#FFBB00; color:#000000; border-color:#FFBB00">');
  document.write('      <form name="none" action="">');
  document.write('       <table border=0 cellspacing=0 cellpadding=0>');
  document.write('        <tr>');
  document.write('         <td valign="middle" align="right" style="background-color:#FFBB00; color:#000000; border-color:#FFBB00">');
  document.write('          <center><a href="concerts.html"><font size="+2">Concert Information</font></a>');
  document.write('          <br><a href="http://wellhost.com/keenefest/mailist.html">Join our mailing list</a></center><br>');
  for (var i=0;i<navoptions.length;i++) {
    document.write(navoptions[i])
    }
  document.write('          </td>');
  document.write('         </tr>');
  document.write('        </table>');
  document.write('       </form>');
  document.write('      </TD>');
  document.write('     </TR>');
  document.write('    </table>');
  document.write('   </td>');
  document.write('  </tr>');
  document.write(' <tr>');
  document.write('  <td colspan=2 style="background-color:#F0F4FF">');
  }

function buildFooter() {
  document.write('<CENTER>');
  document.write('<P>');
  document.write('<HR ALIGN=CENTER>');
  document.write('[');
  document.write('<a href="mailto:kfwebmaster@wellhost.com">Contact Webmaster</a>');
  document.write('| <a href="mailto:kfadmin@wellhost.com">Contact Administrator</a>');
  document.write(']');
  document.write('<p>Other pages on this site:');
  document.write('<form name="none" action="">');
  document.write('<table border=0 cellspacing=0 cellpadding=0>');
  document.write('<tr><td valign="middle" align="right" style="background-color:#FFFFFF; color:#000000; border-color:#FFFFFF">');
  for (var i=0;i<navoptions.length;i++) {
    document.write(navoptions[i])
    }
  document.write('</td></tr></table>');
  document.write('</form>');
  document.write('&copy; 2002 The Dennis Keene Choral Festival, Inc.');
  document.write('<br><font size="-1">');
  show_visits();
  document.write('</font></center>');
  document.write('</td></tr></table>');
  }

function goTo(pagename) {
  if ((-1 < pagename.selectedIndex) && (pagename.options[pagename.selectedIndex].value != 'nil')) {
    val = pagename.options[pagename.selectedIndex].value;
    if (val!="NoValue") {
      pagename.selectedIndex=0;
      location.href=val;
      return true;
      }
    }
  }


function validForm(inform) {
  if (document.all || document.getElementById) {  // IE or NS6+ only
    for (i = 0; i < inform.length; i++) {
      var tempobj = inform.elements[i];
      if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset") tempobj.disabled = true;
      }
    }

  var tryemail = inform.email.value;
  var errSt="";
  var toploc = ""
  var switchto = "";

  if (tryemail == "") {
    errSt="* You didn't enter your email address."
    switchto = inform.email;
    }
  else if (tryemail.indexOf("@")<3){
    errSt="* The email address ("+tryemail+") doesn't look right.\n  There's no '@' sign; Please use the external e-mail address form as in the example."
    switchto = inform.email;
    }

  if (inform.required.value != "") {
    var required = inform.required.value.split(",")
    for (var i=0;i<required.length;i++) {
      if (inform[required[i]].value == "") {
        errSt += '\nYou didn\'t supply a value for '+required[i]
        if (switchto == "") switchto=inform[required[i]]
        }
      }
    }

//if ( ((inform.apply_as.value == 'Conductor') || (inform.apply_as.value == 'Fellow')) && (inform.is_singer.value == "")) {
//     errSt += '\nYou didn\'t indicate whether you are a singing conductor'
//     if (switchto == "") switchto=inform.apply_as;
//     }


  if (errSt != "") {
    alert("FORM INCOMPLETE:\n"+errSt)
    if (toploc != "") location.href=toploc
    else if (switchto != "") switchto.focus()
    for (i = 0; i < inform.length; i++) {
      var tempobj = inform.elements[i];
      if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset") tempobj.disabled = false;
      }
    return false;
    }
  else return true;
  }


//- Function: "onConditionExecute()"
//-   Wait till a test comes back "true" and execute an arbitrary command
//-  Use "lockedSeq" to register our place in line to access that object.
function onConditionExecute (testname,cmdString) {
    var args=onConditionExecute.arguments;
//logIt("OC called: "+testname+"/"+cmdString+"/"+args.length+"/"+args[0])
    var isit=true;
    var passargs=''
    for (var i=2;i<args.length;i++) {
      passargs += ',"'+args[i]+'"'
//      window.status=new Date() + " Testing: "+args[i]+" ("+findMe(navblock).y+")"
      eval ("var isthis = ("+args[i]+")")
      if (!isthis) {
        isit=false;
        break;
        }
      }
    if (isit == false) {
      if ((typeof lockedSeq[testname] == "undefined") || (lockedSeq[testname] == null)) {
        lockedSeq[testname] = 0;
        }
      else {
        lockedSeq[testname]++;
        }
      if (lockedSeq[testname]*timeoutDelay/1000 > timeoutMax) {
        window.status=("oce[1] "+testname+" onConditionExecute Error: timeout occured waiting for truth of "+testname);
        lockedSeq[testname] = null;
        }
      else {
        var doit='onConditionExecute("'+testname+'","'+cmdString+'"'+passargs+')';
// logIt("redo: "+doit)
        setTimeout(doit,timeoutDelay);
        }
      }
    else {
      lockedSeq[testname] = null;
      window.status="oce[0]";
      eval(cmdString);
      }
    }

function show_visits(page_cookie) {
  if (!page_cookie) {
    var page_cookie=location.href
    var i=page_cookie.indexOf("?",0)
    if (-1 < i) {
      page_cookie=page_cookie.substring(0,-1+i)
      }
    var i=page_cookie.indexOf("/",0)
    while (i > -1) {
      page_cookie=page_cookie.substring(1+i,page_cookie.length)
      i=page_cookie.indexOf("/",0)
      }
    }
  var cookie_date=new Date(document.lastModified);
  var expdate = new Date();
  expdate.setTime(expdate.getTime()+(5*24*60*60*1000));
  document.write("<Font color=0000FF>" + "Page "+page_cookie+" last updated: "+ document.lastModified);
  if (!(cookie_date == GetCookie(page_cookie))){
    SetCookie(page_cookie,cookie_date,expdate);
    document.write(" (<font color='red'>Changed</font> since your last visit)");
    }
  else {
    document.write(" (Unchanged since your last visit)");
    }
  document.write("</font>");
  }

function SetCookie (name, value) {
  var args = SetCookie.arguments;
  var len = SetCookie.arguments.length;
  var expires = (len > 2) ? args[2] : null;
  var path = (len > 3) ? args[3] : null;
  var domain = (len > 4) ? args[4] : null;
  var secure = (len > 5) ? args[5] : false;
  document.cookie = name + "=" + escape (value) +
  ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
  ((path == null) ? "" : ("; path=" + path)) +
  ((domain == null) ? "" : ("; domain=" + domain)) +
  ((secure == true) ? "; secure" : "");
  }

function getParseVal (xstr,startpoint) {
  var endindex = xstr.indexOf ("&", startpoint);
  if (endindex == -1) endindex = xstr.length;
  var regexp = /%/g;
  return unescape(xstr.substring(startpoint, endindex)).replace(regexp, " ");
  }

function getParse (xstr,name) {
  var prefix = name + "=";
  var prefixlen = prefix.length;
  var strlen = xstr.length;
  var i = 0;
  while (i < strlen) {
    var j = i + prefixlen;
    if (xstr.substring(i, j) == prefix) return getParseVal(xstr,j);
    i = xstr.indexOf("&", i) + 1;
    if (i == 0) break;
    }
  return "??";
  }

function getCookieVal (startpoint) {
  var endindex = document.cookie.indexOf (";", startpoint);
  if (endindex == -1) endindex = document.cookie.length;
  return unescape(document.cookie.substring(startpoint, endindex));
  }

function GetCookie (name) {
  var prefix = name + "=";
  var prefixlen = prefix.length;
  var strlen = document.cookie.length;
  var i = 0;
  while (i < strlen) {
    var j = i + prefixlen;
    if (document.cookie.substring(i, j) == prefix) return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
    }
  return null;
  }
