// Next three functions from http://www.quirksmode.org

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;
}

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 getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++)
	{
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++)
		{
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (testNode.sourceIndex)
	{
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition)
	{
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}

// Next function from http://lawrence.ecorp.net/inet/samples/js-getelementsbyclassname.shtml
document.getElementsByClassName = function(class_name) {

    var docList = this.all || this.getElementsByTagName('*');

    var matchArray = new Array();

    /*Create a regular expression object for class*/
    var re1 = new RegExp("\\b"+class_name+"\\b");

    /*Create regular expression to handle dashes in class name*/
    var re2 = new RegExp("[\S]"+class_name+"|"+class_name+"[\S]");

    for (var i = 0; i < docList.length; i++) {
        if (re1.test(docList[i].className) && !re2.test(docList[i].className) ) {
            matchArray[matchArray.length] = docList[i];
        }
    }

    return matchArray;
}

// Next four functions used for swapping multiple select fields (attribution forgotten, maybe http://www.irt.org/script/1265.htm)

function deleteOption(object,index) {
	object.options[index] = null;
}

function addOption(object,text,value) {
	var defaultSelected = true;
	var selected = true;
	var optionName = new Option(text, value, defaultSelected, selected)
	object.options[object.length] = optionName;
}

function copySelected(fromObject,toObject) {
	for (var i=0, l=fromObject.options.length;i<l;i++) {
		if (fromObject.options[i].selected)
			addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
	}
	for (var i=fromObject.options.length-1;i>-1;i--) {
		if (fromObject.options[i].selected)
			deleteOption(fromObject,i);
	}
}

function copyAll(fromObject,toObject) {
	for (var i=0, l=fromObject.options.length;i<l;i++) {
		addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
	}
	for (var i=fromObject.options.length-1;i>-1;i--) {
		deleteOption(fromObject,i);
	}
}


// My functions

function invisiblateAll(targetClass) {
	var allElements = document.getElementsByClassName(targetClass);
	for (var i=0;i<allElements.length;i++) {
		allElements[i].style.display = 'none';
	}
}

function showElement(target,type) {
	// Checks to see if you're passing an ID or an object
	if (document.getElementById(target)) {
		target = document.getElementById(target);
	}
	// Checks if you specified a display type, or defaults to 'block'
	(type && type != '') ? (displayType = type) : (displayType = 'block');

	target.style.display = displayType;
}

function hideElement(target) {
	if (document.getElementById(target)) {
		target = document.getElementById(target);
	}
	target.style.display = 'none';
}

function toggleDisplay(target,type) {
	// Checks to see if you're passing an ID or an object
	if (document.getElementById(target)) {
		target = document.getElementById(target);
	}
	// Checks if you specified a display type, or defaults to 'block'
	(type && type != '') ? (displayType = type) : (displayType = 'block');

	// Performs toggle
	if (target.style.display == 'none') {
		target.style.display = displayType;
	}
	else {
		target.style.display = 'none';
	}
}
	
function toggleSchedule(element) {
	var targetID = element.parentNode.parentNode.id;

	var targetClass = targetID+'_detail';
	var allElements = document.getElementsByClassName(targetClass);
	for (var i=0;i<allElements.length;i++) {
		toggleDisplay(allElements[i]);
	}

	var targetDays = targetID+'_days';
	toggleDisplay(targetDays);
}

var showingHelp;
function toggleHelp() {
	var helpMessage = document.getElementById('showhelp');
	var messageShow = 'Show inline help';
	var messageHide = 'Hide inline help';
	
	var allElements = document.getElementsByClassName('help');
	showingHelp = !(showingHelp);
	if (showingHelp == false) {
		helpMessage.innerHTML = messageShow;
		for (var i=0;i<allElements.length;i++) {
			allElements[i].style.display = 'none';
		}
	}
	else {
		helpMessage.innerHTML = messageHide;
		for (var i=0;i<allElements.length;i++) {
			allElements[i].style.display = 'block';
		}
	}
}

function checkForHelp() {
	if (document.getElementsByClassName('help').length > 0) {
		document.getElementById('showhelp').style.display = 'block';
		showingHelp = false;
	}
}

// Filterbox functions

function toggleFilterbox() {
	toggleDisplay('showing-link','inline');
	toggleDisplay('showing-text','inline');
	toggleDisplay('filter-link','inline');
	toggleDisplay('filter-text','inline');
	toggleDisplay('filter-inside','block');
	return false;
}

function saveFilter(target) {
	(target.checked == true) ? (showElement('filter-savename')) : (hideElement('filter-savename'));
}

// Page-formating (toolbox) function

function formatPage() {
	// Sets desired margins and padding
	var paddingMenus = 0;
	var marginContent = 0;
	var paddingContent = 0;
	var paddingActions = 5;

	// Sets reference variables for live-resizable areas.
	var boxMenuMain = document.getElementById('menu-main');
	var boxMenuSub = document.getElementById('wrapper-menu-sub');
	//var boxMenuAdmin = document.getElementById('menu-admin');
	var boxBreadcrumb = document.getElementById('breadcrumb');
	var boxContent = document.getElementById('content');
	var boxActions = document.getElementById('actions');
	var boxFooter = document.getElementById('footer');
	var heightHeader,heightBreadcrumb,heightActions,widthBody,heightBody;

	// Get inner window height.
	if (self.innerHeight) // all except Explorer
	{
			widthBody = self.innerWidth;
			heightBody = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
	{
			widthBody = document.documentElement.clientWidth;
			heightBody = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
			widthBody = document.body.clientWidth;
			heightBody = document.body.clientHeight;
	}

	boxMenuMain.style.width = (widthBody - (paddingMenus * 2)) + 'px';
	boxMenuMain.style.padding = '0 ' + paddingMenus + 'px';
	//boxMenuAdmin.style.right = paddingMenus + 'px';

	heightHeader = boxBreadcrumb.offsetTop + boxBreadcrumb.offsetHeight;
	heightFooter = boxFooter.offsetHeight;
	boxContent.style.width = (widthBody - (marginContent * 2) - (paddingContent * 2)) + 'px';
	boxContent.style.top = heightHeader + marginContent + 'px';
	boxContent.style.left = marginContent + 'px';
	boxContent.style.padding = paddingContent + 'px';
	if (boxActions) { // Checks to see if there is an actions element.
		boxActions.style.bottom = heightFooter + 'px';
		boxActions.style.padding = paddingActions + 'px ' + paddingMenus + 'px';
		boxActions.style.width = widthBody - (paddingMenus * 2) + 'px';
		boxContent.style.height = (heightBody - heightHeader - heightFooter - boxActions.offsetHeight - (paddingContent * 2)) + 'px';
	}
	else {
		if     ((heightBody - heightHeader - heightFooter - (paddingContent * 2)) > 0)		
			
			boxContent.style.height = (heightBody - heightHeader - heightFooter - (paddingContent * 2)) + 'px';
			
		else  boxContent.style.height = '0px';
	}
}