function positionOffscreen(id){
    $(id).addClassName('offscreen-positioned');
}

var PopOverAdjuster = Class.create({
	// add "hover" functionality to IE6... position pop over better
	initialize: function(sElement){
		var opener = $$(sElement);
		
		for (var i = 0; i < opener.length; i++) {
			opener[i].observe('mouseover', this.__MouseOver.bindAsEventListener(this));
			opener[i].observe('mouseout', this.__MouseOut.bindAsEventListener(this));
			opener[i].observe('click', this.__MouseOver.bindAsEventListener(this));   
		}
		
	},
	
	__MouseOver: function(e) {
		e.stop();
		var opener = e.element();
		var target = opener.next('div.hours-wrapper');
		target.addClassName('on');
		this._adjust(opener, target);
	},
	
	__MouseOut: function(e) {
		var target = e.element().next('div.hours-wrapper').removeClassName('on');
		target.setStyle("left: -50000px"); 
	},
	
	_adjust: function (opener, target) {
		var width = opener.getWidth() + 6; // width + padding
		var top = - (target.getHeight() / 2);
		target.clonePosition(opener, {setWidth: false, setHeight: false, offsetLeft: width, offsetTop: top});
		var indicatorPos = (target.getHeight() + target.offsetTop) - 11;
		target.down('div.indicator').setStyle('top: ' + indicatorPos + 'px');
	}
});



var NavAdjuster = Class.create({
	initialize: function(sElement) {
		// Let's do some magic to see if there's an "-on" class on any of the childnodes	
		var onArray = $(sElement).childElements().grep(new Selector("li[class$='-on']"));
		// there should only be one item highlighted at a time... if there are more, something's off. Let's only grab the first element.
		// Now, see if there's a UL in it
		if (onArray.length > 0) {
			var child = onArray[0].down("ul");
			var childHeight = child.getHeight();

			// add childHeight to current wrapper height
			var wrapper = $(sElement).up("div");
			var wrapperHeight = wrapper.getHeight() + childHeight;
			wrapper.setStyle('height:' + wrapperHeight + 'px');
			$(sElement).addClassName("multi");
		}
	}
});

/* Alternating colors in table rows, plus padding left for first td */

 function tableStyle() {
     // find the tables
     tables=document.getElementsByTagName('table');
         // loop through the tables and find the tr's
         for(i=0; i<tables.length; i++){
             rows=tables[i].getElementsByTagName('tr');
             // loop through tr's
             for(j=0;j<rows.length;j++){
                 // only do stuff if it's not the table head, identified by class
                 if( rows[j].className !== 'head'){
                         // look for the first td and give it some class
                         cells=rows[j].getElementsByTagName('td');
                         cells[0].className=cells[0].className + ' first';
                         // modulus magic will tell us if the row is odd or even
                         mod = j%2;
                         // if it's even, give it some class
                         if(mod==0){
                             rows[j].className=rows[j].className + ' altRow';
				}
			}
		}
	}
}

/**************************************************************************************
ListSlider - collapses a list of items into clickable bars that expand to show content.
**************************************************************************************/

/*** Example Usage ***

<div class="nojs">
	<div class="slider-list" id="list-slider">
		<div class="slider">
			<div class="trigger">
				<h4>
					//// Header ////
				</h4>
			</div>
			<div class="drawer">
				<div class="content">
					//// Content ////
				</div>
			</div>
		</div>
	</div>
</div>

*/


var ListSlider = Class.create();

ListSlider.prototype = {
	initialize: function(triggerSelector, drawerSelector, speed){	
			
		// variables
		this.triggers = $$(triggerSelector);
		this.drawers = $$(drawerSelector);
		this.duration = speed;
		this.allClosed = false;
		
		// element check
		if (!this.triggers.length || !this.drawers.length){ return; }	

		// if there is only one trigger/drawer set class on single drawer and return
		if (this.drawers.length < 2){ this.drawers.reduce().addClassName("single_item"); return;}
		
		// get all the original drawer heights and set them to the rel
		this.drawers.each(function(currentDrawer){
			currentDrawer.rel = currentDrawer.getHeight();
		});
		
		// set hover on triggers for IE6
		if(GlobalUtils.IE6 == true){ GlobalUtils.ieHover(triggerSelector, "iehover"); }
		
		// collapse all by default
		this.expandCollapseAll();
		
		// attach event handlers
		this.triggers.invoke("observe", "click", this.slideAnim.bindAsEventListener(this));
	},
	
	expandCollapseAll: function(){
		// if all are closed
		if (this.allClosed == true){
			// add class name of open on triggers
			this.triggers.each(function(currentTrigger){
				currentTrigger.removeClassName("closed").addClassName("open");
			});	
			// show drawers
			this.drawers.each(function(currentDrawer){				
				currentDrawer.setStyle({
					height: currentDrawer.rel+"px",
					overflow: "hidden",
					position: "relative"
				});
				currentDrawer.removeClassName("is_hidden");			
			});
			this.allClosed = false;
			this.allTrigger.update("collapse all.");

		// if all are not closed
		} else {
			// add class name of closed on triggers
			this.triggers.each(function(currentItem){
				currentItem.removeClassName("open").addClassName("closed");
			});
			// show drawers
			this.drawers.each(function(currentDrawer){
				// set rel attribute to original height
				currentDrawer.setStyle({
					height: "0px",
					overflow: "hidden",
					position: "relative"
				});
				currentDrawer.addClassName("is_hidden");							
			});		
			this.allClosed = true;	
		}
	},
	
	slideAnim: function(e){
		
		var currentTrigger = Event.element(e).up("div.trigger") || Event.element(e);
		var currentDrawer = currentTrigger.up("div.slider").down("div.drawer");
		
		// if current drawer is hidden...
		if(currentDrawer.hasClassName("is_hidden") == true){
			// slide down animation
			new Effect.Scale(
				currentDrawer,
				100,
				{ 
				scaleX: false,
				scaleFrom: 0,
				duration: this.duration,
				scaleContent: false,
				transition: Effect.Transitions.sinoidal,
				scaleMode: { originalHeight: currentDrawer.rel }
				}
			);
			currentTrigger.removeClassName("closed").addClassName("open");
			currentDrawer.removeClassName("is_hidden");
		
		// if current drawer is visible
		} else {
			// slide up animation
			new Effect.Scale(
				currentDrawer,
				0,
				{ 
				scaleX: false,
				scaleFrom: 100,
				duration: this.duration,
				scaleContent: false,
				transition: Effect.Transitions.sinoidal,
				scaleMode: { originalHeight: currentDrawer.rel }
				}			
			);
			currentTrigger.removeClassName("open").addClassName("closed");
			currentDrawer.addClassName("is_hidden");	
		}
	}
}

/********************************************************
GlobalUtils - A series of utility functions and variables 
********************************************************/
var GlobalUtils = {         
    //IE6 Variable, only true if running IE6
    IE6: false /*@cc_on || @_jscript_version < 5.7 @*/,
    ieHover: function(elementSelector, cssClass){     
        var hoverEl = $$(elementSelector);
        if(!hoverEl) { return; } // element check                 
        hoverEl.each(function(el){
            Event.observe(el, "mouseover", function(){el.addClassName(cssClass)});
            Event.observe(el, "mouseout", function(){el.removeClassName(cssClass)});
        });
    }
}

document.observe('dom:loaded', function() {
	var adjust = new NavAdjuster("CMSListMenu2");
	var popAdjust = new PopOverAdjuster("a.hours");
	var careerAreas = new ListSlider(
		"div#list-slider div.slider div.trigger", 
		"div#list-slider div.slider div.drawer",
		"0.25"
	);
});

