//red olive calendar js code and ajax libs

function get_position(o) {
	var x = y = 0;

	if (o.offsetParent) {
    while(1) {
      x += o.offsetLeft;
      y += o.offsetTop;

      if(!o.offsetParent)
        break;

      o = o.offsetParent;
    }
	}
  
  else if (o.parentNode) {
    while(1) {
      x += o.offsetLeft;
      y += o.offsetTop;

      if(!o.parentNode)
        break;

      o = o.parentNode;
    }
    y -= 450;
	}

  else if (o.x && o.y) {
    x += o.x;
    y += o.y;
  }

	return [x,y];
}

function initFocus(fieldId, defaultVal) {
  var theInput = document.getElementById(fieldId);
	
	if(theInput.value == defaultVal) {
    theInput.value = "";
	}
}

function fadeIn(elem) {
  elem.style.display = "block";
  var tween = new fx.Opacity(elem, {duration: 1});
	tween.toggle();
}

function fadeOut(elem) {
  elem.style.filter = "alpha(opacity=0)";
  elem.style.opacity = "0";
  elem.style.display = "none";
}






















function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
	arrayPageSize = new Array(myWidth, myHeight) 
	return arrayPageSize;
  }

  var _months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var _weekdays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

function Calendar(month, year) {
	this.parent = null;
	this.el = null;
	this.month = month;
	this.year = year;
	this.dates = new Array();
	this.events = new Array();
	this.eventItems = new Array();
}

Calendar.prototype.render = function(element) {
  var imgRoot = this.parent.imgRoot;   
  var totalDays = new Array(31, ((this.year % 4 == 0 && this.year % 100 != 0) || this.year % 400 == 0 ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	this.firstDay = (new Date(this.year, this.month, 1)).getDay();

  this.el = document.createElement("table");
  this.el.id = "calendar";
  this.el.cellSpacing = "0";
  var tbody = document.createElement("tbody");
  var tr = document.createElement("tr");
  var td = document.createElement("td");
  td.className = "calMonth";
  td.colSpan = "7";
  
  
//matt create txt month name
      var label, txt;
      //label = ('<p>month: ' + _months[this.month] +  '</p>'); //custom formatting
	  label =  _months[this.month];
      txt = document.createTextNode(label);
 td.appendChild(txt);
 
//matt create spacer bewteen month and year

var img = document.createElement("img");
  img.title = 'spacer';
  img.src = imgRoot + "datespacer.gif";
  td.appendChild(img);
 
//matt create txt year name
      var label, txt;
      //label = ('<p>month: ' + _months[this.month] +  '</p>'); //custom formatting
	  label =  this.year;
      txt = document.createTextNode(label);
 td.appendChild(txt);


  //var img = document.createElement("img");
  //img.title = _months[this.month];
  //img.src = imgRoot + "months/cal" + this.month + ".gif";
  //td.appendChild(img);
  //img = document.createElement("img");
  //img.title = this.year;
  //img.src = imgRoot + "years/" + this.year + ".gif";
  //td.appendChild(img);
  tr.appendChild(td);
  tbody.appendChild(tr);

  tr = document.createElement("tr");
  for (var i=0; i<_weekdays.length; i++) {
    td = document.createElement("td");
    td.className = "calDay";
    img = document.createElement("img");
    img.title = _weekdays[i];
    img.src = imgRoot + "days/cal" + i + ".png";
    td.appendChild(img);
    tr.appendChild(td);
	}
  tbody.appendChild(tr);
  
  
  //add padding for day names and calendar with bar
  
  tr = document.createElement("tr");
    td = document.createElement("td");
    td.className = "calDayAfter";
	td.colSpan = "7";
	 var label, txt;
      //label = ('<p>month: ' + _months[this.month] +  '</p>'); //custom formatting
	  label =  ' ' //hack for IE7 wasn't showing the bar
      txt = document.createTextNode(label);
 td.appendChild(txt);
    tr.appendChild(td);
  tbody.appendChild(tr);
  
  //end add

  var colCount = 0;
  tr = document.createElement("tr");
  if (this.firstDay > 0) {
		for (i=0; i<this.firstDay; i++) {
			td = document.createElement("td");
      td.className = "calDate";
			var txt = document.createTextNode(" ");
			td.appendChild(txt);
			tr.appendChild(td);
      colCount += 1;
		}
	}

  for(i=1; i<totalDays[this.month]+1; i++) {
    if(colCount > 6) {
      tbody.appendChild(tr);
      tr = document.createElement("tr");
      colCount = 0;
    }
    td = document.createElement("td");
    td.className = "calDate";
    img = document.createElement("img");
    img.src = imgRoot + "numbers/" + i + "_off.gif";
    td.appendChild(img);
    tr.appendChild(td);
    this.dates[this.dates.length] = td;
    colCount += 1;
	}

  var remainder = 7 - colCount;
  if (remainder > 0) {
    for(i=0; i<remainder; i++) {
      td = document.createElement("td");
      td.className = "calDate";
			var txt = document.createTextNode(" ");
			td.appendChild(txt);
			tr.appendChild(td);
    }
  }
  tbody.appendChild(tr);

  this.el.appendChild(tbody);
  element.appendChild(this.el);
}

Calendar.prototype.bind = function() {
  var a, img;

	for (var i=0; i<this.events.length; i++) {
		var date = this.events[i].day;
		var el = this.dates[date-1];
    a = document.createElement("a");
    a.href = this.events[i].href;
		el.firstChild.src = this.parent.imgRoot + "numbers/" + date + "_on.gif";
    img = el.removeChild(el.firstChild);
    a.appendChild(img);
    el.appendChild(a);
    var index = this.parent.eventTriggers.length;
		this.parent.eventTriggers[index] = [];
    this.parent.eventTriggers[index][0] = el;
    this.parent.eventTriggers[index][1] = this.events[i];
	}
}

Calendar.prototype.initEventsArray = function() {
  var pEvts = this.parent.events;

  for(var i=this.parent.eventsPos; i<pEvts.length; i++) {
    if(pEvts[i].month == this.month && pEvts[i].year == this.year) {
      this.events[this.events.length] = pEvts[i];
      this.parent.eventsPos = i + 1;
    }
  }
}
  function CalendarEvent(div) {
  this.divElem  = div;
  var dateSplit = this.divElem.id.split("-");

  this.year       = dateSplit[0];
  this.month      = dateSplit[1] - 1;
  this.day        = dateSplit[2];
  this.dateObj    = new Date(this.year, this.month, this.day);
  this.href       = this.divElem.getElementsByTagName("a")[0].href;
  this.content    = this.divElem.innerHTML;
}
  function CalendarManager(target, eventTarget, flyOut, btnBack, btnForward) {
	if(!(document.getElementById && document.getElementsByTagName && document.createElement)) return;
  
  this.el = document.getElementById(target);
	this.elScreens = document.getElementById(eventTarget);
  this.flyOut = document.getElementById(flyOut);
  this.btnBack = document.getElementById(btnBack);
  this.btnForward = document.getElementById(btnForward);
  this.btnSpacer = document.getElementById("calSpacer");
	this.events = new Array();
	this.eventScreens = new Array();
	this.eventTriggers = new Array();
	this.calendars = new Array();
  this.today = new Date();
  this.imgRoot = "images/calendar/";
  this.initEventItems();
  this.eventsPos = 0;
	this.createCalendars();
	this.selectedIndex = 0;
}

CalendarManager.prototype.initEventItems = function() {
  var calEvents = this.elScreens;
  var calEventDivs = calEvents.getElementsByTagName("div");

  for(var i=0; i<calEventDivs.length; i++) {
    this.events[this.events.length] = new CalendarEvent(calEventDivs[i]);
  }
}

CalendarManager.prototype.createCalendars = function() {
	if (this.events.length == 0) return;
	var currentCalendar;
	
  var month = this.today.getMonth();
  var year  = this.today.getFullYear();
 
 if(this.events[this.events.length-1].month == 11) {
    var monthEnd = 0;
    var yearEnd = parseInt(this.events[this.events.length-1].year) + 1;
  }
  else {
    var monthEnd = this.events[this.events.length-1].month + 1;
    var yearEnd = this.events[this.events.length-1].year;
  }

  while (!(month==monthEnd && year==yearEnd)) {
    currentCalendar = new Calendar(month, year);
    this.calendars[this.calendars.length] = currentCalendar;
    currentCalendar.parent = this;
    currentCalendar.initEventsArray();
    currentCalendar.render(this.el);
		currentCalendar.bind();
    
    if (month == 11) {
      month = 0;
      year += 1;
    }
    else {
      month += 1;
    }
  }
	
  this.bind();
  this.setDisplay();
}

CalendarManager.prototype.setDisplay = function() {
  var cal = this.calendars;
  if (cal.length > 0) {
    cal[0].el.style.display = "block";
  }
}

CalendarManager.prototype.setBtnStates = function() {
  if (this.selectedIndex != 0) {
	  
    this.btnBack.style.display = "inline";
	this.btnSpacer.style.display = "none";
  }
  else {
    this.btnBack.style.display = "none";
    this.btnSpacer.style.display = "inline";
  }

  this.btnForward.style.display = this.selectedIndex < this.calendars.length-1 ? "inline" : "none";
}

CalendarManager.prototype.bind = function() {
	var o = this;
	for (var i=0; i<this.eventTriggers.length; i++) {
    this.eventTriggers[i][0].firstChild.onmouseover = function() { o.showEvent(this.parentNode); };
    this.eventTriggers[i][0].firstChild.onmouseout = function() { o.hideEvent(this.parentNode); };
  }

  o.btnBack.onclick = function() {
    o.selectedIndex -= 1;
    o.calendars[o.selectedIndex + 1].el.style.display = "none";
    o.calendars[o.selectedIndex].el.style.display = "block";
    o.setBtnStates();
  };

  o.btnForward.onclick = function() {
    o.selectedIndex += 1;
    o.calendars[o.selectedIndex - 1].el.style.display = "none";
    o.calendars[o.selectedIndex].el.style.display = "block";
    o.setBtnStates();
  };
}

CalendarManager.prototype.hideEvent = function() {
  fadeOut(this.flyOut);
}

CalendarManager.prototype.showEvent = function(o) {
  var evt = this.eventTriggers;
  var fTarget = this.flyOut.getElementsByTagName("div")[3];
  var h3 = document.createElement("h3");
  var label, txt, ul;

	for (i=0; i<evt.length; i++) {
		if(evt[i][0] == o) {
      ul = evt[i][1].divElem.getElementsByTagName("ul")[0].cloneNode(true);
      fTarget.innerHTML = "";
      this.flyOut.style.top = get_position(o)[1] - 23 + "px";
      label = _weekdays[evt[i][1].dateObj.getDay()] + " " + _months[evt[i][1].month] + " " + evt[i][1].day + ", " + evt[i][1].year;
      txt = document.createTextNode(label);
      h3.appendChild(txt);
      fTarget.appendChild(h3);
      fTarget.appendChild(ul);
      fadeIn(this.flyOut);
		}
	}
}
  /*  Prototype JavaScript framework
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
/*--------------------------------------------------------------------------*/

//note: modified & stripped down version of prototype, to be used with moo.fx by mad4milk (http://moofx.mad4milk.net).

var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments);
		}
	}
}

Object.extend = function(destination, source) {
	for (property in source) destination[property] = source[property];
	return destination;
}

Function.prototype.bind = function(object) {
	var __method = this;
	return function() {
		return __method.apply(object, arguments);
	}
}

Function.prototype.bindAsEventListener = function(object) {
var __method = this;
	return function(event) {
		__method.call(object, event || window.event);
	}
}

function $() {
	if (arguments.length == 1) return get$(arguments[0]);
	var elements = [];
	$c(arguments).each(function(el){
		elements.push(get$(el));
	});
	return elements;

	function get$(el){
		if (typeof el == 'string') el = document.getElementById(el);
		return el;
	}
}

if (!window.Element) var Element = new Object();

Object.extend(Element, {
	remove: function(element) {
		element = $(element);
		element.parentNode.removeChild(element);
	},

	hasClassName: function(element, className) {
		element = $(element);
		if (!element) return;
		var hasClass = false;
		element.className.split(' ').each(function(cn){
			if (cn == className) hasClass = true;
		});
		return hasClass;
	},

	addClassName: function(element, className) {
		element = $(element);
		Element.removeClassName(element, className);
		element.className += ' ' + className;
	},
  
	removeClassName: function(element, className) {
		element = $(element);
		if (!element) return;
		var newClassName = '';
		element.className.split(' ').each(function(cn, i){
			if (cn != className){
				if (i > 0) newClassName += ' ';
				newClassName += cn;
			}
		});
		element.className = newClassName;
	},

	cleanWhitespace: function(element) {
		element = $(element);
		$c(element.childNodes).each(function(node){
			if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) Element.remove(node);
		});
	},

	find: function(element, what) {
		element = $(element)[what];
		while (element.nodeType != 1) element = element[what];
		return element;
	}
});

var Position = {
	cumulativeOffset: function(element) {
		var valueT = 0, valueL = 0;
		do {
			valueT += element.offsetTop  || 0;
			valueL += element.offsetLeft || 0;
			element = element.offsetParent;
		} while (element);
		return [valueL, valueT];
	}
};

document.getElementsByClassName = function(className) {
	var children = document.getElementsByTagName('*') || document.all;
	var elements = [];
	$c(children).each(function(child){
		if (Element.hasClassName(child, className)) elements.push(child);
	});  
	return elements;
}

//useful array functions
Array.prototype.iterate = function(func){
	for(var i=0;i<this.length;i++) func(this[i], i);
}
if (!Array.prototype.each) Array.prototype.each = Array.prototype.iterate;

function $c(array){
	var nArray = [];
	for (var i=0;i<array.length;i++) nArray.push(array[i]);
	return nArray;
}
  /*
moo.fx, simple effects library built with prototype.js (http://prototype.conio.net).
by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE.
for more info (http://moofx.mad4milk.net).
Sunday, March 05, 2006
v 1.2.3
*/

var fx = new Object();
//base
fx.Base = function(){};
fx.Base.prototype = {
	setOptions: function(options) {
	this.options = {
		duration: 500,
		onComplete: '',
		transition: fx.sinoidal
	}
	Object.extend(this.options, options || {});
	},

	step: function() {
		var time  = (new Date).getTime();
		if (time >= this.options.duration+this.startTime) {
			this.now = this.to;
			clearInterval (this.timer);
			this.timer = null;
			if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);
		}
		else {
			var Tpos = (time - this.startTime) / (this.options.duration);
			this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;
		}
		this.increase();
	},

	custom: function(from, to) {
		if (this.timer != null) return;
		this.from = from;
		this.to = to;
		this.startTime = (new Date).getTime();
		this.timer = setInterval (this.step.bind(this), 13);
	},

	hide: function() {
		this.now = 0;
		this.increase();
	},

	clearTimer: function() {
		clearInterval(this.timer);
		this.timer = null;
	}
}

//stretchers
fx.Layout = Class.create();
fx.Layout.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.el.style.overflow = "hidden";
		this.iniWidth = this.el.offsetWidth;
		this.iniHeight = this.el.offsetHeight;
		this.setOptions(options);
	}
});

fx.Height = Class.create();
Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.height = this.now + "px";
	},

	toggle: function() {
		if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);
		else this.custom(0, this.el.scrollHeight);
	}
});

fx.Width = Class.create();
Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	
	increase: function() {
		this.el.style.width = this.now + "px";
	},

	toggle: function(){
		if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);
		else this.custom(0, this.iniWidth);
	}
});

//fader
fx.Opacity = Class.create();
fx.Opacity.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		// pass in reference to element not its id
		// this.el = $(el);
		this.el = el;
		// set initial opacity to element's opacity
		// this.now = 1;
		this.now = el.style.opacity;
		this.increase();
		this.setOptions(options);
	},

	increase: function() {
		if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;
		this.setOpacity(this.now);
	},
	
	setOpacity: function(opacity) {
		//using display instead of visibility
		//if (opacity == 0 && this.el.style.visibility != "hidden") this.el.style.visibility = "hidden";
		//else if (this.el.style.visibility != "visible") this.el.style.visibility = "visible";{
		if (window.ActiveXObject) this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";
		this.el.style.opacity = opacity;
	},

	toggle: function() {
		if (this.now > 0) this.custom(1, 0);
		else this.custom(0, 1);
	}
});

//transitions
fx.sinoidal = function(pos){
	return ((-Math.cos(pos*Math.PI)/2) + 0.5);
	//this transition is from script.aculo.us
}
fx.linear = function(pos){
	return pos;
}
fx.cubic = function(pos){
	return Math.pow(pos, 3);
}
fx.circ = function(pos){
	return Math.sqrt(pos);
}
  /*
	Standards Compliant Rollover Script
	Author : Daniel Nolan
	http://www.bleedingego.co.uk/webdev.php
*/


 