/* fs.js Faculty & Staff Directory and Office Listing engine */
var ALPHA=0,DEPT=1,SEARCH=2,csSEARCH=3,myst=true,delimiter=";";
var emsg=new Array();
emsg[0]='This page uses Javascript.';
emsg[1]='Go to SCCC Office Listing.';
emsg[2]='Go to SCCC Faculty & Staff Directory.';
emsg[3]='Show Evening Adjunct Instructors';
var lineCount=0;

function isNS4(){
  return (document.layers && !document.getElementById);
}

function rtrim(str){
   return str.replace(/\s+$/g,'');
}

function xtraInfo(name,matrix,prop) {
  var i=0;
  for (var j=0; j<matrix.length; j++) {
    var info=matrix[j].split(delimiter);
    if (name==info[0]) {
      i++;
      prop[i]=rtrim(info[1]);
    }
  }
}

function deptAlias(dept,targ) {
  for (var j=0; j<alias.length; j++){
    var info=alias[j].split(delimiter);
    if ( (dept==rtrim(info[0])) && (targ==rtrim(info[1])) )
       return true;
  }
  return false;
}

function linkBack(person){
  var lnk='<A class="linkb" href="javascript:history.go(0)">Instructions</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  lnk+='<a class="linkb" href="';
  lnk+=(person)?'office.html">Office Directory':'fs.html">Faculty &amp; Staff Directory';
  return lnk+'</a>';
}   

function header(targ,mode,person){
  var tmp='';
  var lnk=linkBack(person);
  switch (mode){
    case ALPHA:
      tmp="<span class=hdr>Alphabetical Listing: "+targ+"</span>";
      break;
    case DEPT: 
      tmp="<span class=hdr>Departmental Listing: "+targ+"</span>";
      break;
    default:
      tmp="Search Result For: "+targ;
  }
  var line="<table width=100%><tr><td>"+tmp+"</td><td align=right width=50%>"+lnk+"</td></tr></table>";
  return (myst)?line:tmp;
}
 
function urlLine(name,url) {
  var lnk=(url=="")?name:'<a href="'+url+'" target=_top title="'+name+'&#39;s&#13;Web Page">'+name+'</a>';
  lineCount++;
  return ('<b>'+lnk+'</b><br>');
}

function EmailLine(addr) {
  lineCount+=(addr!="")?1:0;
  return (addr=="")?"":((addr.indexOf("@",2)<0)?addr:"<a href=mailto:"+addr+">"+addr+"</a>")+"<br>";
}

function NormalLine(info) {
  lineCount+=(info!="")?1:0;
  return (info=="")?info:info+"<br>";
}

function noFinds(targ,mode,person){
  switch (mode){
    case ALPHA:
      return "no "+((person)?"last name":"office name")+" begins with letter "+targ;
        break;
    case DEPT:
      return "no one is listed in "+targ;
      break;
    default:
      return targ+" not found...";
  }
}

function footer(person) {
  return '<center>'+linkBack(person)+'</center>';
}

function createStr(info){
  var tmp="";
  for (var i=0; i<info.length; i++)
    if (info!="")
      tmp+=info[i]+"*";
  return tmp;
}

function Person(info){
  var urls=new Array();
  this.name=rtrim(info[0]+" "+info[1]);
  this.lastname=rtrim(info[1]);
  this.job=info[3];
  this.dept=new Array();
  this.dept[0]=rtrim(info[2]);
  xtraInfo(this.name,xdept,this.dept);
  this.room=info[4];
  this.phone=info[5];
  this.email=new Array();
  this.email[0]=info[6];
  xtraInfo(this.name,xemail,this.email);
  xtraInfo(this.name,web,urls);
  this.url=(urls.length==0)?"":urls[1];
  this.str=createStr(info);
  this.html=PersonLine;
}

function PersonLine(){
  with (this){
    line=urlLine(name,url); 
    line+=NormalLine(job);
    line+=NormalLine(dept[0]);
    line+=NormalLine(room);
    line+=NormalLine(phone);
    for (var j=0; j<email.length; j++)
      line+=EmailLine(email[j]);
  }
  return line;
}
    
function Office(info){
  this.name=info[0];
  this.room=info[1];
  this.phone=info[2];
  this.str=createStr(info);
  this.html=OfficeLine;
}

function OfficeLine(){
  with (this){
    line=urlLine(name,""); 
    line+=NormalLine(room);
    line+=NormalLine(phone);
  }
  return line;
}

function found(targ,mode,obj,person){
  with (obj){
    switch (mode){ 
      case ALPHA:
        var ltr=((person)?lastname:name).substring(0,1);
        return (ltr==targ); 
      case DEPT:
        for (j=0; j<dept.length; j++)
          if (obj.dept[j]==targ) 
            return true;
        return deptAlias(dept[0],targ);
      default :
        if (targ=='*all*') 
          return true;
        targ=(mode==SEARCH)?targ.toUpperCase():targ;
        var testv=(mode==SEARCH)?str.toUpperCase():str;
        return (testv.indexOf(targ)>-1);
    }
  }
  return false;
}
    
function buildHTML(targ,mode,matrix) {
  var kount=0;
  var len=0;
  var lineout="";
  var isPerson=(matrix==pers);
  lineCount=0;
  lineout+=header(targ,mode,isPerson);
  lineout+="<hr color=gold>";
  for (var j=0; j<matrix.length; j++) {
    var info=matrix[j].split(delimiter);
    if (len==0)
      len=info.length;
    if (info.length<len)
      continue;
    var obj=(isPerson) ? new Person(info) : new Office(info);
    if (found(targ,mode,obj,isPerson)){
      lineout+=(kount>0)?"<br>":"";
      lineout+=obj.html();
      lineCount+=(kount>0)?1:0;
      kount++;
    }
  }
  lineout+=(kount==0)?noFinds(targ,mode,isPerson):""; 
  status=kount+" record"+((kount>1)?"s":"")+" found";
  var special=((mode==DEPT) && (targ=="Computer Center"))?"GENERAL INFORMATION 381-1222":""; 
  lineout+=(special!="")?"<br>"+special:"";
  lineout+="<hr color=gold>";
  lineout+=((myst)&&(lineCount>35))?footer((isPerson)):"";
  lineout+=(kount>0)?"<center class=linkb>Last updated: "+datestamp+"</center>":"";
  return lineout;
}

function doCommon(targ,mode,matrix) {
  if (targ=="") 
    return false;
  var theLayer=(isNS4())?document.result:(document.getElementById)?document.getElementById('result'):(document.all)?document.all['result']:""; 
  if (theLayer=="") {
    alert("You need to upgrade your browser.");
    return false;
  } 
  status="searching for "+targ+", wait...";
  if (isNS4())
    with (theLayer.document) {
      write(buildHTML(targ,mode,matrix));
      close();
    }
  else
    theLayer.innerHTML=buildHTML(targ,mode,matrix);
  return false;
}

function doSearch(thisForm,matrix){
  var targ=thisForm.elements[0].value;
  doCommon(targ,((matrix==pers)?(thisForm.elements[1].checked)?csSEARCH:SEARCH:SEARCH),matrix);
}

function doAlpha(matrix,ltr) {
  doCommon(ltr,ALPHA,matrix);
}

function getDept(j){
  doCommon(depts[j],DEPT,pers);
}


function selDept(department){
  myst=false;
  doCommon(department,DEPT,pers);
}

function showStatus(i){
  status=emsg[i];
  return true;
}

function pushedReturn(thisForm,matrix) {
  if ((event.keyCode==13)||(event.which==13))
    doSearch(thisForm,matrix);
}

function focusIt(I) {
  document.forms[0].elements[I].focus();
}

