	function toggleHidden(targetId, mode, speed) {
		target = $('#'+targetId);
		
		if(speed == 'fast') {
			if(mode == 'show') target.show();
			else if(mode == 'hide') target.hide();
			else {
				if(target.is(":hidden")) target.show();
				else target.hide();
			}
		} else {
			if(mode == 'show') target.fadeIn('slow');
			else if(mode == 'hide') target.fadeOut('slow');
			else {
				if(target.is(":hidden")) target.fadeIn('slow');
				else target.fadeOut('slow');
			}
		}
	}
	
	function postAlert(alertText, alertType) {
		if(alertType == 'success') {
			noticeBarT.show();
			alertBarT.hide();
			noticeBarTextT.html(alertText);
			globalMsgBarT.slideDown('slow', function() {
				noticeBarT.effect("pulsate", { times: 1 }, 1000);
				setTimeout("hideGlobalAlert()", 5000);
			});
		} else {
			alertBarT.show();
			noticeBarT.hide();
			alertBarTextT.html(alertText);
			globalMsgBarT.slideDown('slow', function() {
				alertBarT.effect("pulsate", { times: 1 }, 1000);
				setTimeout("hideGlobalAlert()", 5000);
			});
		}
	}
	
	function postPNotice(noticeText) {
		$("#noticeBarText").html(noticeText);
		noticeBarT.show();
	}
	
	function hideGlobalAlert() {
		globalMsgBarT.slideUp('slow');
	}
	
	function findPosX(obj) {
		var curleft = 0;
		if(obj.offsetParent)
			while(1) 
			{
			  curleft += obj.offsetLeft;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.x)
			curleft += obj.x;
		return curleft;
	}
		
	function findPosY(obj) {
		var curtop = 0;
		if(obj.offsetParent)
			while(1)
			{
			  curtop += obj.offsetTop;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.y)
			curtop += obj.y;
		return curtop;
	}
	
	function makeSortable(eName, dbTableVal, idFieldVal, sortFieldVal, whereSQLVal, useHandle) {
		if(useHandle == 1) {
			$('#'+eName).sortable({
				handle : '.dataHandle',
				update : function () {
					var orderVal = $('#'+eName).sortable('serialize');
					if(!orderVal || orderVal == '') {
						alert('You must add ID tags to the sortable items');
						return false;
					}
					postPNotice('Saving Sort Order...');
					$.post(webroot+'ajax-sort.php', { dbTable:dbTableVal, sortField:sortFieldVal, idField:idFieldVal, order:orderVal, whereSQL:whereSQLVal }, function(response) {
						if(response == 'success') {
							reflowBackgrounds(eName);
							postAlert('Sorting Order Saved', 'success');
						} else {
							postAlert('Sorting Order Error<br />'+response, 'error');
							return false;
						}
					});
				}
			});
		} else {
			$('#'+eName).sortable({
				update : function () {
					var orderVal = $('#'+eName).sortable('serialize');
					if(!orderVal || orderVal == '') {
						alert('You must add ID tags to the sortable items');
						return false;
					}
					postPNotice('Saving Sort Order...');
					$.post(webroot+'ajax-sort.php', { dbTable:dbTableVal, sortField:sortFieldVal, idField:idFieldVal, order:orderVal, whereSQL:whereSQLVal }, function(response) {
						if(response == 'success') {
							reflowBackgrounds(eName);
							postAlert('Sorting Order Saved', 'success');
						} else {
							postAlert('Sorting Order Error<br />'+response, 'error');
							return false;
						}
					});
				}
			});
		}
	}

	function reflowBackgrounds(elemId) {
		var bgClass = 'dataBG1';
		
		$('#'+elemId+' div').each(function() {
			var divId = $(this).attr('id');
			if(divId.substr(0, 5) == 'item_') {
				$(this).removeClass('dataBG1').removeClass('dataBG2');
				$(this).addClass(bgClass);
				
				if(bgClass == 'dataBG1') bgClass = 'dataBG2';
				else bgClass = 'dataBG1';
			}
		});
	}

	function getFileExt(filename) { 
		if(filename.length == 0) return ""; 
		var dot = filename.lastIndexOf("."); 
		if(dot == -1) return ""; 
		var extension = filename.substr(dot,filename.length); 
		return extension; 
	}

	var globalMsgBarT, noticeBarT, noticeBarTextT, alertBarT, alertBarTextT;

	$(function() {
		globalMsgBarT = $('#globalMessageBar');
		noticeBarT = $('#noticeBar');
		noticeBarTextT = $('#noticeBarText');
		alertBarT = $('#alertBar');
		alertBarTextT = $('#alertBarText');

		$('.dataBar').mouseover(function() {
			if($(this).hasClass('dataBG1') || $(this).hasClass('dataBG2')) $(this).addClass('dataHover');
			if($(this).hasClass('altDataBG1') || $(this).hasClass('altDataBG2')) $(this).addClass('altDataHover');
			if($(this).hasClass('alt2DataBG1') || $(this).hasClass('alt2DataBG2')) $(this).addClass('alt2DataHover');
		});
		
		$('.dataBar').mouseout(function() {
			if($(this).hasClass('dataBG1') || $(this).hasClass('dataBG2')) $(this).removeClass('dataHover');
			if($(this).hasClass('altDataBG1') || $(this).hasClass('altDataBG2')) $(this).removeClass('altDataHover');
			if($(this).hasClass('alt2DataBG1') || $(this).hasClass('alt2DataBG2')) $(this).removeClass('alt2DataHover');
		});
		
		$('.dataBarFlex').mouseover(function() {
			if($(this).hasClass('dataBG1') || $(this).hasClass('dataBG2')) $(this).addClass('dataHover');
			if($(this).hasClass('altDataBG1') || $(this).hasClass('altDataBG2')) $(this).addClass('altDataHover');
			if($(this).hasClass('alt2DataBG1') || $(this).hasClass('alt2DataBG2')) $(this).addClass('alt2DataHover');
		});
		
		$('.dataBarFlex').mouseout(function() {
			if($(this).hasClass('dataBG1') || $(this).hasClass('dataBG2')) $(this).removeClass('dataHover');
			if($(this).hasClass('altDataBG1') || $(this).hasClass('altDataBG2')) $(this).removeClass('altDataHover');
			if($(this).hasClass('alt2DataBG1') || $(this).hasClass('alt2DataBG2')) $(this).removeClass('alt2DataHover');
		});
	
		//$(".calendarField").datepicker();
		
	});
