
function dropDownEffect(id)
{
	if(!Element.visible($(id)))
	{
		Effect.BlindDown(id,	{ duration: 0.3, queue: {position: 'end', scope: id, limit:2} } );
	}
}

function dropUpEffect(id)
{
	Effect.BlindUp(id,	 { duration: 0.1, queue: {position: 'end', scope: id, limit:2 } });
}

function appearEffect(id)
{
	if(!Element.visible($(id)))
	{
		$(id).show();
	}
}

function hideEffect(id)
{
	$(id).hide();
}


function setDelayedHide(id)
{
	$(id).addClassName('waitingtohide'); //hiding process has begun
	if(!$(id).hasClassName('hidding')) //currently not in hiding process
	{
		setTimeout("delayedHide('" + id + "')", 0.0 * 1000); //use the timeout so that delayedhide is place in the queue and submenumouseover can interrupt the hiding process and leave the menu open. 
	}
}

function delayedHide(id){
	var dropElement = $(id);
	if (dropElement.hasClassName('waitingtohide'))
	{
		dropElement.addClassName('hidding');
		
		dropUpEffect(dropElement.id);
		//hideEffect(dropElement.id);
		
		hidingCleanup(dropElement.id);
	}
}

function hidingCleanup(id)
{
	var dropElement = $(id);
	dropElement.removeClassName('waitingtohide');
	dropElement.removeClassName('hidding');
	dropElement.removeClassName('active');
}


function dropDownNavButtonOver(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);
	
	var dropElement = currentElement.next();
	
	if($(dropElement) == null)
		return;
			
	if (!$(dropElement).hasClassName('hidding')){
		dropElement.removeClassName('waitingtohide'); //removing this class prevents hiding form completing
	}
	if (!$(dropElement).hasClassName('active')){
		dropElement.addClassName('active');
		
		dropDownEffect(dropElement.id);
		//appearEffect(dropElement.id);
	}
}

function dropDownNavButtonOut(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);

	var dropElement = currentElement.next();
	if($(dropElement) == null)
		return;
				
	if ($(dropElement).hasClassName('active')){
		setDelayedHide($(dropElement).id);
	}
}


function submenuMouseOver(mouseEvent)
{
	var currentElement = Event.findElement(mouseEvent,'ul'); //should always gets drop down menu contanier (the ul)
	
	var dropElement = currentElement;
	if (!$(dropElement).hasClassName('hidding')){
		dropElement.removeClassName('waitingtohide');
	}
}

function submenuMouseOut(mouseEvent)
{
	var currentElement = Event.findElement(mouseEvent,'ul');
	
	var dropElement = currentElement;	
	if ($(dropElement).hasClassName('active')){
		setDelayedHide($(dropElement).id);
	}
}


document.observe('dom:loaded', function() {
	var dropDownButtonList = $$('div.topNavButton');	
	dropDownButtonList.each(function(name) {
		name.observe('mousemove', dropDownNavButtonOver.bindAsEventListener(this));
		name.observe('mouseout', dropDownNavButtonOut.bindAsEventListener(this));
	});	
	
	var dropDownMenuList = $$('ul.topNavDrop');
	dropDownMenuList.each(function(name){
		name.observe('mousemove', submenuMouseOver.bindAsEventListener(this));
		name.observe('mouseout', submenuMouseOut.bindAsEventListener(this));
	});
	
	var toolButton = $('toolButton');
	toolButton.observe('click', toolButtonClick.bindAsEventListener(this,'studentToolLinks'));
	/*toolButton.observe('mouseout', dropDownNavButtonOut.bindAsEventListener(this));*/
	
	$('azIndexButton').observe('click', toolButtonClick.bindAsEventListener(this,'azIndexLinks'));
	
	if (document.getElementById('events1ToolLinks')) {
		$('events1ToolButton').observe('click', toolButtonClick.bindAsEventListener(this,'events1ToolLinks'));
	}
	
	if (document.getElementById('events2ToolLinks')) {
		$('events2ToolButton').observe('click', toolButtonClick.bindAsEventListener(this,'events2ToolLinks'));
	}
	
	$('pageCurtain').observe('click', curtainClose.bindAsEventListener(this));
	
	
	($$('div.curtainCloseButton')).each(function(name) {
		name.observe('click', curtainClose.bindAsEventListener(this));
	});
	
	var tabList = $$('.azIndexNavBarElement');	
	tabList.each(function(name) {
		name.observe('click', navTabOver.bindAsEventListener(this,'.azIndexContent'));
		name.observe('click', mouseOverSelectedTabFormat.bindAsEventListener(this,'azIndexSelected'));
	});
	
	var tabList = $$('.studentToolNavBarElement');	
	tabList.each(function(name) {
		name.observe('click', navTabOver.bindAsEventListener(this,'.studentToolContent'));
		name.observe('click', mouseOverSelectedTabFormat.bindAsEventListener(this,'studentToolSelected'));
	});
	
	var tabList = $$('div.navTab');	
	tabList.each(function(name) {
		name.observe('mousemove', navTabOver.bindAsEventListener(this,'div.tabbedNavContent'));
		//name.observe('mouseout', navTabOut.bindAsEventListener(this));
	});
	
	var tabbedIconList = $$('.tabbedIcon');	
	tabbedIconList.each(function(name) {
		name.observe('mousemove', navTabOver.bindAsEventListener(this,'div.tabbedIconContent', 'div.tabbedNavContent'));
	
		name.observe('mousemove', imageChangeToSolid.bindAsEventListener(this));
		name.observe('mouseout', imageChangeToFaded.bindAsEventListener(this));
	});
	
	
	startSlideShow(3000); //wait 3 seconds before beginning the slide show
	
	var splashImages = $$('div.splashButton');
	splashImages.each(function(name){
		name.observe('click', stopSlideshow.bindAsEventListener(this));
	});
	
	//adding and removing default text from header search input
	$('headerSearch').observe('focus',clearDefaultText.bindAsEventListener(this));
	$('headerSearch').observe('blur',replaceDefaultText.bindAsEventListener(this));
	$('headerSearch').defaultText = $('headerSearch').value;
});

//for making sure that the selected tab is highlighted(or whatever) and others are not
//the classAdded should be unique to each grouping of tabs 
function mouseOverSelectedTabFormat(mouseEvent, classAdded)
{
	$$('.'+classAdded).each(function(s){
		$(s).removeClassName(classAdded);
	});
	
	Event.element(mouseEvent).addClassName(classAdded);
}

function toolButtonClick(mouseEvent, menuID)
{
	$('pageCurtain').show();
	$(menuID).show();
}

function curtainClose(mouseEvent)
{
	$('pageCurtain').hide();
	$('studentToolLinks').hide();
	$('azIndexLinks').hide();
	if (document.getElementById('events1ToolLinks')) {
		$('events1ToolLinks').hide();
	}
	if (document.getElementById('events2ToolLinks')) {
		$('events2ToolLinks').hide();
	}
}

/*
function toolLinkOver(mouseEvent)
{
	var dropElement = $('toolLinks');
	if (!$(dropElement).hasClassName('hidding')){
		dropElement.removeClassName('waitingtohide');
	}
}

function toolLinkOut(mouseEvent)
{
	var dropElement = $('toolLinks');	
	if ($(dropElement).hasClassName('active')){
		setDelayedHide($(dropElement).id);
	}
}
*/

/*contentClassIdentifier is the CSS class identifier for the div that the revealed content is stored in*/
/*containerIdentifier is the CSS class identifier of the container for the content and the triggering tab. The container must also have a unique ID. This argument is used so that only matches within the container are hidden. if left null this feature is ignored*/
function navTabOver(mouseEvent, contentClassIdentifier, containerIdentifier)
{
	var currentElement = Event.element(mouseEvent);
	
	contentID = currentElement.id+"Content"; //hackish - contentID has to be same as tab's ID + "Content"
	
	var contentElement = $(contentID);
	
	if(contentElement != null)
	{
		var containerID;
		if (containerIdentifier !=null && (containerID=contentElement.up(containerIdentifier).id) != null)
		{
			var identifier = "#"+ containerID + " " + contentClassIdentifier;
		}
		else
		{
			var identifier = contentClassIdentifier;
		}
		var tabs = $$(identifier); /*used for closing all other content divs*/
		tabs.each(function(s){
			if(s.visible() && contentElement.id != s.id)
			{
				/*
				Effect.Shrink(s, {queue: {position:'end', scope: 'tabContentShrink', limit:1}, duration:0.5,
						afterFinish: function(a)
						{
							//s.removeClassName('activeTab');
						},
						direction:'top-left'
				});
				*/
				s.hide();
			}
		});
		/*
		Effect.Grow(contentElement, {queue: {position:'end', scope:'tabContentGrow', limit:1}, duration:0.5,
					direction:'top-left' });
		*/
		contentElement.show();
	}
}

/*
function testAjaxRequest(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);
	var bgcolor = currentElement.getStyle("backgroundColor");
	
	var container= $('tabbedNavContentContainer');
	container.setStyle({
		backgroundColor: bgcolor
	});
	
	
	if(!currentElement.hasClassName('active'))
	{
		currentElement.addClassName('active');
		
		var urlstr = '/ajax_trial/'+currentElement.id+'/';
					
		
		new Ajax.Request(urlstr, {
			onComplete: function(response, currentElement) {
				var container= $('tabbedNavContentContainer');
				container.innerHTML = response.responseText;
			}
		});
		
	}
}
*/

/*
function navTabOut(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);
	currentElement.removeClassName('activeTab');
}
*/
/*slide show of images is based off of id of slideshow div. format of id is splashImage#Slide */
/*assuming count starts at 1*/

var slideShowTimer; /*needed to find and stop timer*/

function startSlideShow(delay)
{
	if($('splashImage1Slide')!=null) //dpn't start unless at least first slide exists
	{
		slideShowTimer=setTimeout(nextSlide(1, delay), delay);
	}
}

function nextSlide(currentSlideNumber, delay)
{
	return (function(){
		Effect.Fade('splashImage'+currentSlideNumber+'Slide');
		var nextNumber = currentSlideNumber+1;
				
		if($("splashImage"+nextNumber+'Slide')==null)
		{
			nextNumber=1;
		}
		
		setTimeout("Effect.Appear('splashImage"+nextNumber+"Slide')", 900); //how fast you want the image to appear
		slideShowTimer=setTimeout(nextSlide(nextNumber, delay), delay+2000); //how long the image should remain
		
	});
}

var previousSplash;
function stopSlideshow(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);
	if(previousSplash != null && previousSplash.id != currentElement.id){
		previousSplash.setOpacity(currentElement.getOpacity());
		previousSplash.removeClassName("splashButtonHighlighted");
	}
	currentElement.setOpacity("0.99");
	currentElement.addClassName("splashButtonHighlighted");
	previousSplash = currentElement;
	
	clearTimeout(slideShowTimer);
	
	$$('div.splashImage').invoke('hide');
	
	Effect.Appear(currentElement.id+'Slide');//again basing id of slide on id of button.
}


//removes the default text of input. intended for when users select a tect field to enter something 
function clearDefaultText(e) {
    var target = e ? e.target : null;
    if (!target) return;
    
    if (target.value == target.defaultText) {
        target.value = '';
    }
}

//adds default text to input when input is blank
function replaceDefaultText(e) {
    var target = e ? e.target : null;
    if (!target) 
    	return;
    
    if (target.value == '' && target.defaultText) {
        target.value = target.defaultText;
    }
}

function imageChangeToSolid(e){
	var target = e ? e.target : null;
    if (!target) 
    	return;
	else{
		target.src = target.src.replace(/2\.gif/gi, ".gif");	
	}
}

function imageChangeToFaded(e){
	var target = e ? e.target : null;
    if (!target) 
    	return;
	else{
		target.src = target.src.replace(/\.gif/gi, "2.gif");	
	}
}


/*******************************************************************
 *following section is for js in subsections(side menu drop down/up) 
 *******************************************************************/

function sideNavButtonClick(mouseEvent)
{
	var currentElement = Event.element(mouseEvent);
	
	var dropElement = currentElement.next();
	if($(dropElement) == null)
		return;
	
	var dVis = dropElement.visible();
	
	//bring up all visible related drop elements (based on class)
	$$("."+dropElement.className).each(function(s){
		if(s.visible())
			dropUpEffect(s.id);
	});
		
	if(!dVis)
		dropDownEffect(dropElement.id);
		
}


document.observe('dom:loaded', function() {
	var sideNavButtonList = $$('div.sideNavButton');	
	sideNavButtonList.each(function(name) {
		name.observe('click', sideNavButtonClick.bindAsEventListener(this));
	})
	
});

/*******************************************************************
 *following section is for prettyfing tables 
 *******************************************************************/

function prettifyTables() {
    if (!document.getElementsByTagName) return false;

    var eleTables = document.getElementsByTagName("table");
    for (var i=0; i < eleTables.length; i++) {
        var eleTableRows = eleTables[i].getElementsByTagName("tr");
        for (var j=1; j < eleTableRows.length; j++) {
            if (j%2 == 0)
                eleTableRows[j].className = "trbg0";
            else
                eleTableRows[j].className = "trbg1";
        }
    }
}

function addLoadEvent(func) {
    var oldonload = window.onload;

    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}
addLoadEvent(prettifyTables);
