Mac = (navigator.appVersion.indexOf("Mac")!=-1)?1:0; 

if (document.getElementById) {  // ie5, ns6 + 
         document.writeln('<LINK REL=stylesheet HREF="/library/css/default.css" TYPE="text/css">');
} else if (document.all) { // ie4
        if (Mac)  document.writeln('<LINK REL=stylesheet HREF="/library/css/4mac.css" TYPE="text/css">');
        else document.writeln('<LINK REL=stylesheet HREF="/library/css/default.css" TYPE="text/css">');
} else if (document.layers) { // ns4
        if (Mac)  document.writeln('<LINK REL=stylesheet HREF="/library/css/4mac.css" TYPE="text/css">');
        else document.writeln('<LINK REL=stylesheet HREF="/library/css/ns4pc.css" TYPE="text/css">');
} else { 
        // Not CSS compliant - No Stylesheet??? 
} 

// Netscape Window Resize Bug
if(document.layers){origWidth=innerWidth;origHeight=innerHeight;onresize=function(){
if(innerWidth!=origWidth||innerHeight!=origHeight)location.reload()}}

/* ========= START GENERAL FUNCTIONS ============ */

function isIn(arr, val) {
// determines whether the passed value val is in the passed array arr
  // if val is a string
  if (parseInt(val) + '' == 'NaN') { for (var i=0; i<arr.length; i++) { if (arr[i].toLowerCase() == val.toLowerCase()) { return true; } } }
  else for (var i=0; i<arr.length; i++) { if (arr[i] == val) { return true; } }
  return false;
}

function newParseInt(str) {
/* function helps date parsing - removes leading zeros to prevent octal interpretation */
  str = str.split('');
  i = 0;
  while (str[i] == '0') str[i++] = '';
  return str.join('');
}

/* =========== END GENERAL FUNCTIONS ============ */


/* ========= START DATE & TIME FUNCTIONS ======== */

month_short = ['dec', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
month_days = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function arrIndexOf(arr,val) {
//the index of the value in the array, -1 if not in array
  ret = -1;
  for (var i=0; i<arr.length; i++) { if (arr[i] == val) ret = i; }
  return ret;
}

function isLeapYear (year) {
// return true if the passed year is a leap year
   if (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)) { return (true); }
   else { return (false); }
}

function getDaysOfMonth(month, year) {
// returns the number of days in the month
   if ((month > 12) || (month < 0)) { return -1; }
   else { return (isLeapYear(year) && (month == 2)) ? (month_days[month]+1) : month_days[month]; }
}

function checkFloat(formField) {
  if (isNaN(parseFloat(formField.value)))
    formField.value = "";
}

function checkInt(formField) {
  if (isNaN(parseInt(formField.value)))
    formField.value = "";
}

function isDate(strDate) {
// checks to see if passed date is a valid date in british format
// can be in following formats:
// 22-02, 22-02-02, 22-Mar-02, 22-March-02
// 22 02, 22 Mar, 22 March, 22 02 02, 22 Mar 02, 22 March 02
// 22/2, 22/2/02, 22/Mar/02, 22/March/02
  debug = false;
  if (strDate.indexOf('/') > -1) arrDate = strDate.split('/');
  else if (strDate.indexOf('-') > -1) arrDate = strDate.split('-');
  else if (strDate.indexOf(' ') > -1) arrDate = strDate.split(' ');
  else { if (debug) alert(strDate + '\nno seperators'); return false; }
  if (arrDate.length < 2 || arrDate.length > 3) { if (debug) alert(strDate + '\nnum of atoms bad'); return false; }
  // check Day
  if (parseInt(newParseInt(arrDate[0])) + '' == 'NaN') { if (debug) alert(strDate + '\nday not a number'); return false; }
  else { intDay = parseInt(newParseInt(arrDate[0])); }
  // check Month
  if (parseInt(arrDate[1]) + '' == 'NaN') {
    if (!isIn(month_short,arrDate[1].substring(0,3))) { if (debug) alert(strDate + '\nmonth not a valid month string'); return false; }
    else { strMonth = arrDate[1].substring(0,3); }
  }
  else {
    if (parseInt(newParseInt(arrDate[1])) > 12) { if (debug) alert(strDate + '\nmonth not a valid int, > 12'); return false; }
    else { strMonth = month_short[newParseInt(arrDate[1])]; }
  }
  // check Year
  tmpDate = new Date();
  if (arrDate.length < 3) { intYear = tmpDate.getYear(); }
  else {
    if (parseInt(newParseInt(arrDate[2])) + '' == 'NaN') { if (debug) alert(strDate + '\nyear not a number'); return false; }
    if (arrDate[2].length < 2) { if (debug) alert(strDate + '\nnot enough digits in year'); return false; }
    if (parseInt(newParseInt(arrDate[2])) < 50) { intYear = parseInt('20' + arrDate[2]); }
    else if (parseInt(newParseInt(arrDate[2])) < 100) { intYear = parseInt('19' + arrDate[2]); }
    else if (parseInt(newParseInt(arrDate[2])) >= 100) { intYear = parseInt(arrDate[2]); }
  }
  if (intDay > getDaysOfMonth(arrIndexOf(month_short, strMonth.toLowerCase()), intYear)) { if (debug) alert(strDate + '\ndays in month in year bad'); return false; }
  strSQLDate = intDay + '-' + strMonth + '-' + intYear;
  if (debug) alert(strSQLDate + '\n is a valid date')
  return strSQLDate;
}

function isTime(strTime) {
// returns true if the time passed is a valid 12 or 24hr time
  re = /([01]?[0-9]|2[0-3])[:.]?([01]?[4-9]|[012]?[0-3])?[aApP]?[mM]?/
  if (re.test(strTime) == true) return true;
  else return false;
}

/* ========== END DATE & TIME FUNCTIONS ========= */

// start macromedia functions

function 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=findObj(n,d.layers[i].document); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') {
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('You have not completed the following required field(s):\n'+errors);
  document.MM_returnValue = (errors == '');
}

function swapImage() { //v3.0
  var i,j=0,x,a=swapImage.arguments; document.sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=findObj(a[i]))!=null){document.sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function swapImgRestore() { //v3.0
  var i,x,a=document.sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function on(text){window.status = text;}

function off(){window.status = "";}

function show(object) {
    if (document.getElementById && document.getElementById(object) != null)
         document.getElementById(object).style.visibility='visible';
    else if (document.layers && document.layers[object] != null)
        document.layers[object].visibility = 'visible';
    else if (document.all && document.all[object])
        document.all[object].style.visibility = 'visible';
}

function hide(object) {
    if (document.getElementById && document.getElementById(object) != null)
         document.getElementById(object).style.visibility='hidden';
    else if (document.layers && document.layers[object] != null)
        document.layers[object].visibility = 'hidden';
    else if (document.all && document.all[object])
         document.all[object].style.visibility = 'hidden';
}

function appear() {
  for (i=0; i < arguments.length; i++) {
    if (document.getElementById && document.getElementById(arguments[i]) != null) {
         document.getElementById(arguments[i]).style.visibility='visible';
         document.getElementById(arguments[i]).style.display = 'block';
    }
    else if (document.layers && document.layers[arguments[i]] != null)
        document.layers[arguments[i]].visibility = 'visible';
    else if (document.all && document.all[arguments[i]])
        document.all[arguments[i]].style.visibility = 'visible';
  }
}

function isVisible(elementName) {
    if (document.getElementById && document.getElementById(arguments[0]) != null)
      return document.getElementById(arguments[0]).style.visibility;
    else if (document.layers && document.layers[arguments[0]] != null)
      return document.layers[arguments[0]].visibility;
    else if (document.all && document.all[arguments[0]])
      return document.all[arguments[0]].visibility;
}

function toggleVisibility() {
  for (i=0; i < arguments.length; i++) {
    if (document.getElementById && document.getElementById(arguments[i]) != null) {
      document.getElementById(arguments[i]).style.visibility = (document.getElementById(arguments[i]).style.visibility == 'hidden') ? 'visible' : 'hidden';
      document.getElementById(arguments[i]).style.display = (document.getElementById(arguments[i]).style.display == 'none') ? 'block' : 'none';
    }
    else if (document.layers && document.layers[arguments[i]] != null)
      document.layers[arguments[i]].visibility = (document.layers[arguments[i]].visibility == 'hidden') ? 'visible' : 'hidden';
    else if (document.all && document.all[arguments[i]])
      document.all[arguments[i]].style.visibility = (document.all[arguments[i]].visibility == 'hidden') ? 'visible' : 'hidden';
  }
}

function disappear() {
  for (i=0; i < arguments.length; i++) {
    if (document.getElementById && document.getElementById(arguments[i]) != null) {
         document.getElementById(arguments[i]).style.visibility='hidden';
         document.getElementById(arguments[i]).style.display = 'none';
    }
    else if (document.layers && document.layers[arguments[i]] != null)
        document.layers[arguments[i]].visibility = 'hidden';
    else if (document.all && document.all[arguments[i]])
         document.all[arguments[i]].style.visibility = 'hidden';
  }
}

function toggleVisibility() {
  if (document.getElementById)
    for (i=0; i < arguments.length; i++) {
      if (document.getElementById(arguments[i]) != null) {
        //alert(arguments[i] + ': ' + document.getElementById(arguments[i]).style.visibility);
        if (document.getElementById(arguments[i]).style.visibility == 'hidden') appear(arguments[i]);
        else disappear(arguments[i]);
      }
    }
}

function toggleLabel(thisElement, visElement, visLabel, hidLabel) {
// toggles thisElements label based on visibility of visElement
  if (document.getElementById)
    if ((document.getElementById(visElement) != null) && (document.getElementById(thisElement) != null))
      if (document.getElementById(visElement).style.visibility == 'hidden') document.getElementById(thisElement).innerText = hidLabel;
      else document.getElementById(thisElement).innerText = visLabel;
}

var navs = ['Nav1', 'Nav2', 'Nav3', 'Nav4']
var navTimeouts = [];
var defaultNav;
var defaultTimeout;
var delayTime = 1000;

function showNav(navId) {
  show(navId);
  navTimeouts[navId] = setTimeout("hide('"+navId+"')", delayTime);
}
function delayHide(navID) {
    // sets a timeout to hide the layer whose name we were passed and
    // shows the default layer as intialised in 'setupNav(navID)'
    if (defaultNav != "")
        defaultTimeout = setTimeout("show(defaultNav);", delayTime);
    navTimeouts[navID] = setTimeout("hide('" + navID + "')", delayTime);
}

function cancelHide(navID) {
    // cancels the delayed hiding of layer whose name was passed and
    // cancels the showing of the default layer.
    clearTimeout(navTimeouts[navID]);
    if (defaultNav != "")
        clearTimeout(defaultTimeout);
}

function hideAll() {
  for (eachNav in navs) {
    hide(navs[eachNav])
  }
}

