function y2k(number) { return (number < 1000) ? number + 1900 : number; }

var today = new Date();
var day   = today.getDate();
var month = today.getMonth();
var year  = y2k(today.getYear());

if (navigator.userAgent.indexOf("Opera")!=-1 && document.getElementById) var type="OP";
if (document.all) var type="IE";
if (document.layers) var type="NN";
if (!document.all && document.getElementById) var type="MO";

function padout(number) { return (number < 10) ? '0' + number : number; }

function restart() {
  eval("document." + datewindow.name + ".value = '' + year + '-' + padout(month - 0) + '-' + padout(day)");
  datewindow.close();
}
/*
  Function to obscure email addresses using javascript.
*/
function sendEmail(id) {
  document.location = 'mailto:' + id + '@cs.virginia.edu';
}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
var http = getHTTPObject(); // We create the HTTP Object
function chooseDate(name) {
  datewindow=open('choose_date.php',name,'resizable=no,width=200,height=200');
  datewindow.location.href = 'choose_date.php';
  if (datewindow.opener == null) datewindow.opener = self;
}
function popupDescription(location){
  var leftPosition = screen.width / 2 - 230;
  var topPosition = screen.height / 2 - 150;
  popup = window.open(location, "description","height=300,width=460,scrollbars=yes,left="+leftPosition+",top="+topPosition);
}
function MM_jumpMenu(targ,selObj,restore) {
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
function toggleDiv(id) {
  var element = document.getElementById(id);
  if (element.style.display == 'none') element.style.display = 'block';
  else element.style.display = 'none';
}
function toggleDisplay(itemname) {
  tmp = document.getElementsByTagName('div');
  for (i = 0; i < tmp.length; i++) {
    if (tmp[i].className == itemname) tmp[i].style.display = (tmp[i].style.display == 'none') ? 'block' : 'none';
  }
}
document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
  return elements;
}
function findPosY(obj) {
  var curtop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y) { curtop += obj.y; }
  return curtop;
}
function findPosX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x) { curleft += obj.x; }
  return curleft;
}

/* Get the computed style of a particular element */
function getStyle(element, cssRule) {
  if(document.defaultView && document.defaultView.getComputedStyle) {
    var value = document.defaultView.getComputedStyle(element, '').getPropertyValue(cssRule.toLowerCase());
  } else if (element.currentStyle) {
    var value = element.currentStyle[ cssRule ];
  } else {
    var value = false;
  }
  return value;
}

function hideDivClass(itemname,id) {
  var tmp = document.getElementsByTagName('div');
  for (var i = 0; i < tmp.length; i++) {
    if ((tmp[i].className == itemname) && (tmp[i].id != id)) tmp[i].style.display = 'none';
  }
}
function minimap(room) {
  tmp = document.getElementsByTagName('AREA');
  for (i = 0; i < tmp.length; i++) {
    if (tmp[i].alt == room) {
      myString = tmp[i].coords;
      var myArray = myString.split(',');
      if ((room == '228') || (room == '238C')) {
        document.getElementById('minialtpic').style.clip='rect('+myArray[1]+'px '+myArray[2]+'px '+myArray[3]+'px '+myArray[0]+'px)';
      } else {
        document.getElementById('miniorangepic').style.clip='rect('+myArray[1]+'px '+myArray[2]+'px '+myArray[3]+'px '+myArray[0]+'px)';
      }
    }
  }
}
var Debug = new Object();
Debug.show = function() {
  if (document.getElementById('debug')) { return; }
  var debug = document.createElement('div');
  debug.id = 'debug';
  debug.style.position = 'absolute';
  debug.style.left = '0px';
  debug.style.top = '0px';
  debug.style.backgroundColor = '#ffffff';
  debug.style.width = '300px';
  debug.style.fontSize = '10px';
  debug.style.color = '#000000';
  debug.style.height = '100px';
  debug.style.overflow = 'auto';
  this.div = debug;
  var body = document.getElementsByTagName('body');
  body[0].appendChild(debug);
}
Debug.print = function(string) {
  this.show();
  document.getElementById('debug').innerHTML = string + '<br>' + document.getElementById('debug').innerHTML;
}
Debug.clear = function() {
  if (document.getElementById('debug')) {
    document.getElementById('debug').innerHTML = '';
  }
}
Debug.setText = function(string) {
  this.show();
  document.getElementById('debug').innerHTML = string;
}

function print_r(input, _indent) {
    var indent       = (typeof(_indent)=='string')?_indent+'&nbsp;&nbsp;&nbsp;&nbsp;':'&nbsp;&nbsp;&nbsp;&nbsp;';
    var paren_indent = (typeof(_indent)=='string')?_indent+'&nbsp;&nbsp;':'';

    if ( typeof(input) == 'string' ) {
        var output = "'"+ input +"'\n"
    } else if ( typeof(input) == 'boolean' ) {
        var output = (input?'true':'false') +"\n"
    } else if ( typeof(input) == 'object' ) {
        var output  = ((input.reverse)?'Array':'Object') +"\n"
        output     += paren_indent + "(\n";
        for ( var i in input ) {
            output += indent + "["+ i +"] => "+ print_r(input[i],indent)
        }
        output += paren_indent + ")\n"
    }
    return output
}
function Delegate() {}
Delegate.create = function (o, f) {
  var a = new Array();
  var l = arguments.length;
  for(var i = 2 ; i < l ; i++) a[i - 2] = arguments[i];
  return function() {
    var aP = [].concat(arguments, a);
    f.apply(o, aP);
  }
}

Function.prototype.bind = function() {
  var f = this;
  var args = [];
  for (var i = 0; i < arguments.length; i++) {
    args.push(arguments[i]);
  }
  var object = args.shift();
  return function() {
    return f.apply(object, args.concat(arguments));
  }
}