	var filter_shown = 0;
	var __tid;
	var activeReport;
	var activeURL;
	var urlString;
	var startQuery;
	var activeFilterURL;
	var extraSubmitAction = "";
	var dropdown_window = "filters";
	var activeColumnName;
	var activeColumnValue
	var activeColumnValue2;
	var handles_obj = new Array();
	var handles_listener_obj = new Array();
	var loadContents_arr = new Array();
	var loadContentsURL_arr = new Array();
	var loadMenuURL_arr = new Array();
	var lastMenuToggleObject;
	var lastContentToggleObject;

	// MAIN HANDLE STORING FUNCTIONS (REPLACING ALL OTHER STATIC FUNCTIONS WITH THIS)
	function setHandle(handle_type, handle_name, obj)
	{
		if (typeof(handles_obj[handle_type])=="undefined") handles_obj[handle_type] = new Array();
		handles_obj[handle_type][handle_name] = obj;
		
		if (typeof(handles_listener_obj[handle_type])=="undefined") handles_listener_obj[handle_type] = new Array();
		else runOnLoadListener(handle_type, handle_name);
	}
	function getHandle(handle_type, handle_name)
	{
		return handles_obj[handle_type][handle_name];
	}
	function setOnLoadListener(handle_type, handle_name, url)
	{
		if (typeof(handles_listener_obj[handle_type])=="undefined") handles_listener_obj[handle_type] = new Array();
		handles_listener_obj[handle_type][handle_name] = url;
	}
	function runOnLoadListener(handle_type, handle_name)
	{
		if (typeof(handles_listener_obj[handle_type][handle_name])!="undefined")
		{
			loadWindow(handle_type, handle_name, handles_listener_obj[handle_type][handle_name], 1);
		}
	}

	// LOAD CONTENT WINDOW FUNCTIONS
	function loadWindow(handle_type, handle_name, url, noloadingwindow)
	{
		if ((typeof(noloadingwindow)=='undefined') && (handle_type=='Window')) loadingScreen('Content', 1);

		switch(handle_name)
		{
			case 'Filters':
			{
				openFiltersWindow();
				dropdown_window = "filters";
				break;
			}
			case 'Preferences':
			{
				openFiltersWindow();
				dropdown_window = "preferences";
				handle_name = 'Filters';
				break;
			}
		}
		getHandle(handle_type,handle_name).src = url;
	}
	function loadReportWindow(url, loading)
	{
		if (loading)
		{
		    getHandle('Control','LoadingReportScreen').style.display 		= 'inline';
		    url = url + '&rnd=' + Math.round(Math.random()*(99999 - 1))+1;
		}
		getHandle('Content','Reports').src  = url;
		if (filter_shown) openFiltersWindow();
		else closeFiltersWindow();
	}
	function generateReport(url,report,columnName,columnValue,columnValue2)
	{
		if (!validateDate(getHandle('Control','CalendarStart')))
		{
			alert('Invalid Start Date');
			return void(0);	
		}
		if (!validateDate(getHandle('Control','CalendarEnd')))
		{
			alert('Invalid End Date');
			return void(0);
		}
		if (!validateDateRange(getHandle('Control','CalendarStart').value, getHandle('Control','CalendarEnd').value))
		{
			alert('End date must be greater than start date');
			return void(0);	
		}
		var digDeep = '';
		
		if (columnName || columnName=='')
		{
			digDeep = '&columnName=' + columnName + '&columnValue=' + columnValue + '&columnValue2=' + columnValue2;
			activeColumnName = columnName;
			activeColumnValue = columnValue;
			activeColumnValue2 = columnValue2;
		}
	
		if (url)
		{
			activeURL = url;
			activeReport = report;
			activeFilterURL = 'report_filters.php';
			var rand = '&rand=' + Math.random()*3000;
			activeURL + '&test=true';
			var tmp = activeURL;
			tmp = escape(tmp);
			if (tmp.search('%3F') == -1) startQuery = '?';
			else startQuery = '&';
	
			var startDate = getHandle('Control','CalendarStart').value + ' 00:00:00';
			var endDate   = getHandle('Control','CalendarEnd').value + ' 23:59:59';
			urlString =  'startDate=' + startDate + '&endDate=' + endDate + '&report=' + report + '&reportURL=' + url + digDeep;
		}
		else
		{
			if (!activeURL) return void(0);
			var rand = '&rand=' + Math.random()*3000;
			var tmp = activeURL;
			tmp = escape(tmp);
			if (tmp.search('%3F') == -1) startQuery = '?';
			else startQuery = '&';
			
			digDeep = '&columnName=' + activeColumnName + '&columnValue=' + activeColumnValue + '&columnValue2=' + activeColumnValue2;
			
			var startDate = getHandle('Control','CalendarStart').value + ' 00:00:00';
			var endDate   = getHandle('Control','CalendarEnd').value + ' 23:59:59';
			activeFilterURL = 'report_filters.php';
			urlString =  'startDate=' + startDate + '&endDate=' + endDate + '&report=' + activeReport + '&reportURL=' + activeURL + digDeep;
		}
		loadReportWindow(activeURL + startQuery + urlString + rand, true);
		return void(0);
	}

	// GENERAL CONTROL FUNCTIONS
	function reloadSiteSelector()
	{
		getHandle('Control','SitesDropdown').src 	= getHandle('Control','SitesDropdown').src;
		getHandle('Menu','SiteSettings').src 		= getHandle('Menu','SiteSettings').src;
	}
	function tabScreen(screen_name)
	{
		toggleTabs(screen_name);
		for(x in handles_obj['Menu'])	handles_obj['Menu'][x].style.display = 'none';
		for(x in handles_obj['Window']) handles_obj['Window'][x].style.display = 'none';
		getHandle('Control', 'LoadingReportScreen').style.display = 'none';
		getHandle('Window', screen_name).style.display = 'inline';
		getHandle('Menu', screen_name).style.display = 'inline';
	}
	function hideLoadingReportScreen()
	{
	    if (__tid) clearTimeout(__tid);
	    __tid = 0;
	    getHandle('Control','LoadingReportScreen').style.display = 'none';
	    //getHandle('Window','Reports').style.display = 'inline';
	}

	function loadingScreen(type, on)
	{
		switch(type)
		{
			case 'Menu':
			{
			    if (on) getHandle('Control','LoadingMenuScreen').style.display = 'inline';
			    else getHandle('Control','LoadingMenuScreen').style.display = 'none';
				break;
			}
			case 'Content':
			{
			    if (on) getHandle('Control','LoadingContentScreen').style.display = 'inline';
			    else getHandle('Control','LoadingContentScreen').style.display = 'none';
				break;
			}
		}
	}

	// FILTERS WINDOW FUNCTIONS
	function reloadFiltersWindow()
	{
		if (dropdown_window=='filters') getHandle('Content','Filters').src	= getHandle('Content','Filters').src;
	}
	function openFiltersWindow()
	{
		if (typeof(loadContents_arr['Filters'])=="undefined")
		{
			loadContents_arr['Filters'] = 1;
			getHandle('Content','Filters').src = loadContentsURL_arr['Filters'];
		}
		getHandle('Control','ReportScreen').rows = "173,25,*";
		filter_shown = 1;
	}
	function closeFiltersWindow()
	{
		getHandle('Control','ReportScreen').rows = "0,25,*";
		filter_shown = 0;
	}
	function hideFiltersWindow()
	{
		getHandle('Control','ReportScreen').rows = '0,0,*';
	}
	function toggleFiltersWindow()
	{
		if (filter_shown) 	closeFiltersWindow();
		else				openFiltersWindow();
	}

	function callCommandWindow(url)
	{
		getHandle('Control','Commands').src = url;
	}

	// VALIDATION FUNCTIONS
	function validateDate(date)
	{
		date.value = date.value.replace(/\s/g,'');
		var d = date.value.split("-");
		
		// VALIDATE YEAR
		if (!(d[0] > 2004 && d[0] < 2050 && d[0].search(/[^\d]/) == -1)) return false;
		// VALIDATE MONTH
		if (d[1] > 0 && d[1] <= 12 && d[0].search(/[^\d]/) == -1)
		{
			if (d[1].length<2) d[1] = '0'+d[1];
		}
		else return false;
		// VALIDATE DAY
		if (d[2] > 0 && d[2] <= 31 && d[0].search(/[^\d]/) == -1)
		{
			if (d[2].length<2) d[2] = '0'+d[2];
		}
		else return false;

		return true;
	}

	function validateDateRange(startDate, endDate)
	{
		// MAKE SURE START DATE IS NOT GREATER THAN END DATE
		sd = startDate.split("-");	
		ed = endDate.split("-");
		nsd = new Date(sd[0] , sd[1] , sd[2]);
		ned = new Date(ed[0] , ed[1] , ed[2]);
		if (nsd > ned) return false;
		else return true;
	}
	
	function popuphelp(url)
	{
		mywin=window.open(url,"popup",'height=330, width=660, toolbar=no, menubar=no, scrollbars=no, resizable=yes,  location=no, directories=no, status=0');
	}
	
	function toggleTabs(tabOn)
	{
		// TURN OFF TABS
		getHandle('Tab','Home').style.display = 'none';
		getHandle('Tab','Reports').style.display = 'none';
		getHandle('Tab','SiteSettings').style.display = 'none';
		getHandle('Tab','Account').style.display = 'none';
		// TURN ON TAB
		getHandle('Tab',tabOn).style.display = 'block';
		if (typeof(loadContents_arr[tabOn])=="undefined")
		{
			loadingScreen('Menu', 1);
			loadingScreen('Content', 1);
			getHandle('Content',tabOn).src = loadContentsURL_arr[tabOn];
			getHandle('Menu',tabOn).src = loadMenuURL_arr[tabOn];
			loadContents_arr[tabOn] = 1;
		}
	}
