//Javascript Document
//Author: Travis Cunningham
//Description: MouseOver Ajax Div
//Date: June 2008

window.onload = initAll;
var xhr = false;
var xPos, YPos;

// Timer Functions
var timer;

function setTimer(){
	timer = setTimeout(hideDiv, 250);
}
function clearTimer(){
	clearTimeout(timer);
}
//Hide Div
function hideDiv() {
	var mouseoverDiv = document.getElementById('mouseoverDiv');
	mouseoverDiv.style.display = "none";
	var sideBar = document.getElementById('sideBar');
	sideBar.style.position = '';
	var allLinks = getElementsByClassName('activeBin', "a", "sideBar");
	for(i=0; i<allLinks.length; i++){
		allLinks[i].className = 'binLink';
		
	}
}
// Initalize function calls
function initAll(){
	var sideBar = document.getElementById("sideBar");
	if(sideBar){
		//var allLinks = sideBar.getElementsByTagName("a");
		var allLinks = getElementsByClassName('binLink', "a", "sideBar");
		for(i=0; i<allLinks.length; i++){
			allLinks[i].onmouseover = showPreview;
			allLinks[i].onmousemove = clearTimer;
			allLinks[i].onmouseout = setTimer;
			allLinks[i].onclick = function (){ return false; }
		} 
		var createmouseoverDiv = document.createElement('div');
		var mouseoverDiv = sideBar.appendChild(createmouseoverDiv).setAttribute('id','mouseoverDiv');
	}
}
//Show ajax event
function showPreview(evt){
	var sideBar = document.getElementById('sideBar');
	var allLinks = getElementsByClassName('activeBin', "a", "sideBar");
	for(i=0; i<allLinks.length; i++){
		allLinks[i].className = 'binLink';
		
	}
	if(evt) {
		if(evt.target.href) {
			var url = evt.target.href; 
			evt.target.className = "activeBin";
			xPos = evt.target.offsetLeft;
			yPos = evt.target.offsetTop;
		} else { 
			var url = evt.target.parentNode.href;
			evt.target.parentNode.className = "activeBin";
			xPos = evt.target.parentNode.offsetLeft;
			yPos = evt.target.parentNode.offsetTop;
		}
	}
	else {
		var sideBar = document.getElementById('sideBar');
		sideBar.style.position = 'relative';
		evt = window.event;
		if (evt.srcElement.tagName == 'A') {
			var url = evt.srcElement;
			evt.srcElement.className = 'activeBin';
			xPos = evt.srcElement.offsetLeft;
			yPos = evt.srcElement.offsetTop;
			
		} else { 
			var url = evt.srcElement.parentNode.href;
			evt.srcElement.parentNode.className = 'activeBin';
			xPos = evt.srcElement.parentNode.offsetLeft;
			yPos = evt.srcElement.parentNode.offsetTop;
		}
	}
	//Ajax Request
	if(window.XMLHttpRequest){
		xhr = new XMLHttpRequest();
	}
	else {
		if(window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}
	if (xhr) {
		xhr.onreadystatechange = showContents;
		xhr.open("GET", url, true);
		xhr.send(null);
	}
	else {
		alert("Sorry But I could not create an XMLHttpRequest");
	}
	clearTimer;
}
	
//Function that will show contents which will
// display the response for the request above.

function showContents() {
	if (xhr.readyState == 4){
		if(xhr.status == 200) {
			var outMsg = xhr.responseText;
		}
		else {
			var outMsg = "There was something wrong with your request " + xhr.status;
		}
		
		//Do something with outMsg
		var mouseoverDiv = document.getElementById('mouseoverDiv');
		mouseoverDiv.innerHTML = outMsg;
		mouseoverDiv.style.display = 'block';
		mouseoverDiv.style.top = parseInt(yPos) + 10 + "px";
		if(!document.getElementById('alt1')){
			mouseoverDiv.style.left = parseInt(xPos) + 145 + "px";
		} else {
			mouseoverDiv.style.left = parseInt(xPos) + 275 + "px";	
		}
		//Call Timers to allow mouse into
		mouseoverDiv.onmouseover = clearTimer;
		mouseoverDiv.onmouseout = setTimer;
	}
}
/**
 * document.getElementById(); replacement.
 */
function $() {
    var elements = new Array();
    
    // Find all the elements supplied as arguments
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        
        // If the argument is a string assume it's an id
        if (typeof element == 'string') {
            element = document.getElementById(element);
        }
        
        // If only one argument was supplied, return the element immediately
        if (arguments.length == 1) {
            return element;
        }
        
        // Otherwise add it to the array
        elements.push(element);
    }
    
    // Return the array of multiple requested elements
    return elements;
};
/**
 * Retrieve an array of element base on a class name
 */
function getElementsByClassName(className, tag, parent){
    parent = parent || document;
    if(!(parent = $(parent))) return false;
    
    // Locate all the matching tags
    var allTags = (tag == "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag);
    var matchingElements = new Array();
    
    // Create a regular expression to determine if the className is correct
    className = className.replace(/\-/g, "\\-");
    var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
    
    var element;
    // Check each element
    for(var i=0; i<allTags.length; i++){
        element = allTags[i];
        if(regex.test(element.className)){
            matchingElements.push(element);
        }
    }
    
    // Return any matching elements
    return matchingElements;
};

