// manage onload scripts
var static_html=0;
var onloadFuncs = new Array();
function AddToOnload(f) { onloadFuncs.push(f);}

// start: Cookies
var cookieMgr = {
  "getCookie":function(name){  
    var the_cookie = name + "="; 
    if (document.cookie.length > 0) {        
      begin = document.cookie.indexOf(the_cookie);  
      if (begin != -1) {       
	begin += the_cookie.length;
	end = document.cookie.indexOf(";", begin);
	if (end == -1) { end = document.cookie.length; }
	return unescape(document.cookie.substring(begin, end));
      } 
    } return null;
  },
  "setCookie":function(name, value) {
    var time = new Date();
    time.setTime(time.getTime() + (2*1000*60*60*24*365));//expires 365 days
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + time.toGMTString();
  },
  "deleteCookie":function(name) {
    if(cookieMgr.getCookie(name))document.cookie = name + "=" + "; path=/; expires=Saturday, 01-Jan-2000 00:00:00 GMT";
  }
};	
// end: Cookies 

// start: scripts loader
var loadScripts = { 
  "style": null,
  "init": function() { 
    var is_dom = (document.getElementById && !document.all) ? 1:0;
    var is_ie4up = (document.all) ? 1:0;
    var clink='<link rel="stylesheet" type="text/css" href="';
    var jscript='<script language="JavaScript" src=';
    var croot='/dat/css/';
    var ctroot='/dat/templates/';
    var sroot='/dev/';
    var mTags,val,nam,stemp="",ttemp="",site="",frontpage="",URL=location.href;
    var surl = URL.split('?');
    var opts =surl[1];
    var rurl = surl[0]; rurl = rurl.replace(new RegExp('.+/'), ''); rurl = rurl.replace(new RegExp('\\..+'), '');
    if(!rurl || rurl=="") { rurl="index";}
    if(typeof(opts) != "undefined") {
      var items =opts.split("&");
      for(var i=0; i< items.length; i++) {
	var item = items[i].split("=");
	if(item[0] == '_theme') { ttemp=item[1];}
	else if(item[0] == '_name') { rurl=item[1];}
	else if(item[0] == '_site') { site=item[1];}
      }
    }
    if(is_ie4up) {mTags=document.all.tags("meta"); }
    else if(is_dom) { mTags=document.getElementsByTagName("meta");}
    if(typeof(mTags)!= "undefined") {
      for(var i=0;i<mTags.length;i++) {
	att = mTags.item(i);
	switch(att.name) {
        case 'template': stemp = att.content;  break;
        case 'site': if(site == ""){site= att.content;}  break;
        case 'frontpage': frontpage = att.content;  break;
	}
      }
    }
    var sw=800;
    if(document.documentElement && document.documentElement.clientWidth){sw=document.documentElement.clientWidth;}
    else if(document.body && document.body.clientWidth) {sw=document.body.clientWidth;}
    else if(typeof(window.innerWidth)=='number' ) {sw=window.innerWidth;}
    var is_pda  = (screen.width <= 320 || sw <= 600);
    var name="blue";
    if(stemp != "") { name=stemp.split('-')[0];}
    if(! static_html ) {
      var cookie = cookieMgr.getCookie("utm_theme");
      if(cookie != null){name=cookie;} 
    }
    if(ttemp=="" && site == "math") ttemp="beige";
    if(ttemp != ""){name=ttemp.split('-')[0];} 
    loadScripts.style = name;
    if(site != ""){site += "/";}    
    document.write(jscript + '"' +sroot+site +'_site.js" type="text/javascript"></script>'+
		   jscript + '"_common.js" type="text/javascript"></script>'+
		   jscript + '"' + rurl +'.js" type="text/javascript"></script>');
    if(frontpage != "" || is_pda){ document.write(clink + ctroot + name +'/' +'frontpage.css" media="all">');}
    document.write(clink + ctroot + name +'/' + name +'.css" media="all">');
    if(is_pda) {document.write(clink + croot + 'pda.css" media="screen">');}
    document.write(clink + croot + 'user.css" media="all">'+
		   clink + sroot + '_site.css" media="all">'+
		   clink + sroot + site +'_site.css" media="all">'+
		   clink + '_common.css" media="all">'+
		   clink + rurl +'.css" media="all">');
    document.write(clink + croot + 'print.css" media="print">');
  }
}

loadScripts.init();

// start: font sizer 
var fontSizer = {
  "chgCss": null,
  "elt": null,
  "init":function() {
    var ua = navigator.userAgent.toLowerCase();
    if(ua.indexOf("safari")==-1 && ua.indexOf("opera")==-1 &&
       document.styleSheets && document.styleSheets[0].addRule) { fontSizer.chgCss = true;}
    if(document.getElementById("dtools") == null) { return;}
    fontSizer.elt = "dtools";
    var amount = fontSizer.checkFontSize();
    fontSizer.changeFontSize(amount);
    fontSizer.createFontSizer(); 
    if(document.getElementById("fs"+amount) && document.getElementById("fontSize")) { 
      fontSizer.highlightFontSize(document.getElementById("fs"+amount),amount,
				  document.getElementById("fontSize").getElementsByTagName("span"));
    }
  },
  "createFontSizer":function() {	
    var name = fontSizer.elt; 
    var pelt = document.getElementById(name);
    if(pelt == null) { return;}
    var fsObj = document.createElement("p");
    fsObj.id = "fontSize";
    fsObj.style.display = "none";
    pelt.appendChild(fsObj);
    var spanObj;

    if(! static_html ) {
      spanObj = document.createElement("span");
      spanObj.id = "theme";
      spanObj.title = "Select a default theme for this Website";
      spanObj.onclick = function() { 
	var theme = cookieMgr.getCookie("utm_theme"); if(theme==null) theme="";
	pwn=window.open('/cgi-bin/cms/pub/theme/'+theme,'theme','scrollbars=yes,resizable=yes,menubar=no,width=640,height=540');
	if(window.focus()){pwn.focus();}
      };
      fsObj.appendChild(spanObj);
    }

    for(x=2;x>-3;x--){
      spanObj = document.createElement("span");
      spanObj.id = "fs"+x;
      spanObj.onclick = function() { 
	fontSizer.changeFontSize(this); 
	var size = this.id.split("fs")[1];
	var fsObj = this.parentNode.getElementsByTagName("span");
	fontSizer.highlightFontSize(this,size,fsObj); 
      };
      if(fontSizer.chgCss) {
	spanObj.onmouseover=function() { this.className+=" over";	}
	spanObj.onmouseout=function() { this.className=this.className.replace(" over", "");}
      }
      fsObj.appendChild(spanObj);
    }
  },
  "highlightFontSize":function(nObj,size,fsObj) {
    fontSizer.changeFontSize(nObj);
    for(x=0;fsObj.length>x;x++) { 
      fsClass = fsObj[x].id;
      if(fsClass!="active" && fsClass != "theme") {
	fsObj[x].onclick = function () { 
	  fontSizer.highlightFontSize(this,this.id.split("fs")[1],this.parentNode.getElementsByTagName("span")); 
	}
	fsObj[x].className = "";
      }
      if(fsClass != "theme") {
	othersize = fsObj[x].id.split("fs")[1];
	change = parseInt(othersize)-parseInt(size);
	if (change > 0) {
	  fsObj[x].title = "Increase text size by "+change+" level";
	} else {
	  change = Math.abs(change);
	  fsObj[x].title = "Decrease text size by "+change+" level";
	}
	if(change>1) fsObj[x].title += "s";
      }
    }
    nObj.className = "active"; 
    nObj.title = "Current text size level"; 
    nObj.onclick = null;
  },
  "changeFontSize":function(v) {
    var css,rule,nObj;
    var amount = (v.nodeType==1) ? v.id.split("fs")[1].split(" active")[0] : parseInt(v);
    var fS = (100+amount*10)+"%";
    if(fontSizer.chgCSS) { //IE
      css = document.styleSheets[0];
    } else if(document.createElement) { // W3C DOM
      css = document.createElement("style");
      css.media = "screen";
      css.type = "text/css";
      document.getElementsByTagName("head")[0].appendChild(css);
    }
    var elt = document.getElementById("container");
    if(elt){
      rule = "#container { font-size: "+fS+"; }";
      if(v.nodeType==1){
	elt.style.fontSize = fS; 
       } else if(css.addRule){ //IE
	css.addRule("#container", "font-size: "+fS);
      } else if(document.createStyleSheet){// GT in Opera/IE
	document.createStyleSheet().cssText = rule;	
      } else if(document.createTextNode) {// W3C DOM
	rule = document.createTextNode(rule);
	css.appendChild(rule);
      }
    }
    cookieMgr.setCookie("utm_font", "fS="+amount+";");
  },
  "checkFontSize":function(v) {
    var cookie = cookieMgr.getCookie("utm_font");
    if(cookie==null){ cookie = "fS=0;"; }
    cookie = cookie.split(";");
    for(x=0;cookie.length>x;x++){
      if(cookie[x].indexOf("fS")!=-1) { return cookie[x].split("fS=")[1]; }
    }
  }
};
// end: font sizer 

// start: hack IE hover on LI
var hackIE = {
  "init": function() {
    if(document.all && document.getElementById) { // hack IE 
      var uls = document.getElementsByTagName("ul");
      for(var j=0; j<uls.length; j++) {
	var ul=uls[j]; var menu=0;
	var p=ul; while(p){if(p.className=="dropdown") {menu=1;break;}  p=p.parentNode;}
	if(menu) {
	  for(i=0; i<ul.childNodes.length; i++) {
	    var n = ul.childNodes[i];
	    if(n.nodeName.toLowerCase()=="li") {
	      n.onmouseover=function() { this.className+=" over";	}
	      n.onmouseout=function() { this.className=this.className.replace(" over", "");}
	    }
	  }
	}
      }
    }
  }
}
// end: hack IE hover on LI

var ttMgr = {
  'isIE': (!window.opera && navigator.userAgent.toLowerCase().indexOf("msie") !=-1),
  'isOpera': (navigator.userAgent.toLowerCase().indexOf("opera") !=-1),
  "addEvent" : function(elm, evT,fn,useCapture) {
    if(elm.addEventListener) {
      elm.addEventListener(evT, fn,useCapture);
      return true;
    } else if(elm.attachEvent) {
      var r = elm.attachEvent('on'+evT, fn)
      return r;
    } else {
      elm['on'+evT] = fn;
    }
  },
  "handle":"",

  "scanall": function() {
    if(!document.getElementById || !document.getElementsByTagName || !document.createElement) return;  
    var spans = document.getElementsByTagName('span'); var divs = document.getElementsByTagName('div');
    ttMgr.scanlist(spans); ttMgr.scanlist(divs);
  },

  "scantree": function(id) {
    if(!document.getElementById || !document.getElementsByTagName || !document.createElement) return;  
    var root = document.getElementById(id);
    if(root) {
      var spans = root.getElementsByTagName('span');
      var divs = root.getElementsByTagName('div');
      ttMgr.scanlist(spans); ttMgr.scanlist(divs);
    }
  },

  "scanlist": function(lst) {
    if(lst) {
      var sl=lst.length;
      for(var i=0; i<sl; i++) {
	var elt=lst[i];
	var cnm=elt.className;
	if(cnm && (cnm == 'tooltip' || cnm == 'stooltip' || cnm == 'qtooltip')){
	  var parent = elt.parentNode;
	  if(parent && parent.className && parent.className=='tooltipper') {
	    ttMgr.addEvent(parent,'mouseover', ttMgr.mOver, false);
	    if(cnm == 'tooltip' || cnm == 'qtooltip'){ttMgr.addEvent(parent,'mouseout',  ttMgr.mOut, false);} 
	    else if(cnm == 'stooltip') {ttMgr.addEvent(parent,'mouseout',  ttMgr.sOut, false);} 
	    parent.tooltip = elt;
	  }
	}
      }
    }
  },

  "init": function() {
    if(!document.getElementById || !document.getElementsByTagName || !document.createElement) return;  
    ttMgr.scanall();
    var body = document.getElementsByTagName('body')[0];
    var tooltip = document.createElement("div");
    tooltip.id = "tooltipHolder";
    tooltip.className= "noprint";
    tooltip.style.position = "absolute";
    tooltip.style.display = "none";
    body.appendChild(tooltip);
    var twin = document.createElement("div");
    twin.id = "tooltipwin";
    twin.style.position = "relative";
    var nw=ttMgr.createHandle('nw'); nw.style.top="0px";nw.style.left="20px";
    var ne=ttMgr.createHandle('ne'); ne.style.top="0px";ne.style.right="20px";
    var sw=ttMgr.createHandle('sw'); sw.style.bottom="0px";sw.style.left="0px";
    var se=ttMgr.createHandle('se'); se.style.bottom="0px";se.style.right="0px";
    tooltip.appendChild(nw); tooltip.appendChild(ne); 
    tooltip.appendChild(twin);          
    tooltip.appendChild(sw); tooltip.appendChild(se); 
  },
  "createHandle": function(n) {
    var s= '/dat/templates/' + loadScripts.style +'/th_'+n+'.gif';
    var i= document.createElement("img");
    i.id = "ttHandle"+n;i.src=s;i.style.width=96;i.style.height=96;i.width=96; i.height=96;
    i.style.position="absolute";i.style.display="none";i.style.zIndex=201;
    return i;
  },
  "mOver": function(e) {
    var elt;
    if(window.event && window.event.srcElement) { elt=window.event.srcElement;}
    if(e && e.target) { elt = e.target;}
    if(!elt) {return;}
    var tip = elt.tooltip;
    if(!tip) {var i=0,p=elt.parentNode; while(!tip && i<10 && p){tip=p.tooltip;p=p.parentNode;i++;}}
    if(!tip) { return;}
    var tooltip = document.getElementById("tooltipHolder");    
    if(tooltip) {
      var twin = document.getElementById("tooltipwin"); var html="";
      if(tip.className=='stooltip'){
	html='<div id="closebtn"><a href="javascript:void(0)" onclick="document.getElementById(' +"'tooltipHolder'"+").style.display='none'" +'">'; 
	html+='<img src="/dat/imgs/_close.gif" width="12" height="11" border="0"></a></div><br>';
      }
      html+= tip.innerHTML+ '<img src="/dat/imgs/_spacer.gif" width="160" height="1" border="0" alt="">';
      twin.innerHTML=html;
      var x,y,sw,left,yoff=0,y1=0,x1=0;
      if(document.documentElement && document.documentElement.scrollTop){yoff=document.documentElement.scrollTop;}
      else if(document.body && document.body.scrollTop) {yoff=document.body.scrollTop;}
      else if(typeof(window.pageYOffset)=='number'){yoff=window.pageYOffset;}

      if(e.pageX && e.pageY){x=e.pageX; y=e.pageY;}
      else if(e.clientX && e.clientY){x=e.clientX; y=e.clientY;if(ttMgr.isIE) {y+=yoff;}}

      if(document.documentElement && document.documentElement.clientWidth){sw=document.documentElement.clientWidth;}
      else if(document.body && document.body.clientWidth) {sw=document.body.clientWidth;}
      else if(typeof(window.innerWidth)=='number' ) {sw=window.innerWidth;}
      // get window height
      if(typeof(window.innerHeight)=='number') {sh=window.innerHeight;}
      else if(document.documentElement && document.documentElement.clientHeight) {sh=document.documentElement.clientHeight;}
      else if(document.body && document.body.clientHeight){sh=document.body.clientHeight;}
      // position the tooltip
      var ns=""; var ew="";
      if(!ttMgr.isOpera && (sh>0&&y-yoff>(sh>>1)+10)){x1=-20;ns="s";twin.style.top='auto';twin.style.bottom='92px';}
      else {x1=20; ns="n";twin.style.top='92px';twin.style.bottom='auto';}
      left=ttMgr.left(elt);
      if(left+left>sw){	ew= "e"; x=sw-x-x1;tooltip.style.left='auto'; tooltip.style.right=x+'px';}
      else {ew="w"; x-=x1;tooltip.style.left=x+'px'; tooltip.style.right='auto';}
      ttMgr.handle=ns+ew;
      if(ns=="n") { y+=10;tooltip.style.top=y+'px'; tooltip.style.bottom='auto';}
      else {y= sh-y+10; if(ttMgr.isIE){y+=yoff;}tooltip.style.top='auto'; tooltip.style.bottom=y+'px';}
      if(tip.className=='qtooltip'){ttMgr.timer();} else {tooltip.timeout=setTimeout(ttMgr.timer,500);}
    }
  },
  "timer": function() {
    ttMgr.hideHandles();
    var v=document.getElementById("tooltipHolder");
    if(v){v.style.display="block";}
    var tth = ttMgr.handle;
    if(tth){var tm="ttHandle"+tth;var e=document.getElementById(tm);if(e){e.style.display="";}}
  },

  "hideHandles": function() {
    var a=["nw","ne","sw","se"];
    for(var i=0;i<4;i++){var id="ttHandle"+a[i];var t=document.getElementById(id);if(t){t.style.display="none";}}
  },

  "mOut": function(e) {
    var tooltip = document.getElementById("tooltipHolder");    
    if(tooltip) {
      if(tooltip.timeout){clearTimeout(tooltip.timeout);} 
      var tmp=document.getElementById("tooltipwin"); tmp.innerHTML="";
      ttMgr.hideHandles(); tooltip.style.display = "none"; 
    }
  },
  "sOut": function(e) {
    var tooltip = document.getElementById("tooltipHolder");    
    if(tooltip){if(tooltip.timeout){clearTimeout(tooltip.timeout);} }
  },

  "left": function(obj) {
    var x = 0;
    if(obj.offsetParent){ while (obj.offsetParent) {x += obj.offsetLeft; obj = obj.offsetParent;} }
    else if (obj.x) {x += obj.x;}
    return x;
  },

  "top": function(obj) {
    var y = 0;
    if(obj.offsetParent){while (obj.offsetParent) {y += obj.offsetTop; obj = obj.offsetParent;}}
    else if (obj.y) {y += obj.y;}
    return y;
  }
};

var miscJScripts = { 
  "tagExtLinks": function() {
    if(document.links) {              
      var ptn = new RegExp('immutable');
      for(var i=0; i<document.links.length; i++) {
	var l=document.links[i].href;
	if(l.indexOf('http://www.ma.utexas')!=0 && l.indexOf('http://')==0) {
	  var c=document.links[i];
	  if(c.className && c.className.match(ptn)) continue;
	  c.className=c.className+" external";
	  if(c.title != "") {  c.title="External link: " + c.title; }
	  else {c.title ="External link";}
	}
      }
    }
  },
  "toggleSidebar": function() { 
    if(!document.getElementById || !document.getElementsByTagName || !document.createElement) return;  
    var el = document.getElementById('content111'); var rem=0;
    var mu = document.getElementById('menulholder');
    if(el) {
      if(mu){mu.style.display='none';}
      rem=1; el.removeAttribute('id'); el.id = 'content011';
     } else {
       el = document.getElementById('content110');    
       if(el) {
	 if(mu){mu.style.display='none';}
	 rem=1; el.removeAttribute('id'); el.id = 'content010';
       } else {
	 el = document.getElementById('content011');    
	 if(el) {
	   rem=0; el.removeAttribute('id'); el.id = 'content111';
	   if(mu){mu.style.display='block';}
	 } else {
	   el = document.getElementById('content010');          
	   if(el) {
	     rem=0; el.removeAttribute('id'); el.id = 'content110';
	     if(mu){mu.style.display='block';}
	   }        
	}
      }
     }
    if(0)cookieMgr.setCookie('utm_nosbar', rem);
  }
};

var domInit = function() {
  if(!document.getElementById || !document.getElementsByTagName || !document.createElement) return;
  var agent=navigator.userAgent.toLowerCase();
  var doit=0;
  if( !(agent.match(/msie/) && agent.match(/mac/) && !agent.match(/opera/)) ) { // don't do it on Mac IE
     hackIE.init();
     fontSizer.init(); 
     doit=1;
  }
  var cnt = onloadFuncs.length; for(var i=0; i< cnt; i++) { onloadFuncs[i]();}

  if(doit) {
//    miscJScripts.tagExtLinks();
    ttMgr.init();
  }
}

window.onload=domInit;

