var requiredFlashMajorVersion = 7;
// Minor version of Flash required
var requiredFlashMinorVersion = 0;
// Minor version of Flash required
var requiredFlashRevision = 0;


function validate(parent)
{
	try
	{
		var required = new Array();
		var matches = new Array();
		var matchNames = new Array();
		var regexes = new Array();
		
		var warningVisible = new Array();		
		var matchesEmpty = true;
		
		var inputs = parent.getElementsByTagName("input");
		
	
		for(var z = 0; z < inputs.length; z++)
		{
			if (inputs[z].getAttribute("required"))
				required[required.length] = inputs[z];
				
			if (inputs[z].getAttribute("match"))
			{
				var matchName = inputs[z].getAttribute("matchName"); 
				if (!matches[matchName])
					matches[matchName] = new Array();
	
				matches[matchName][matches[matchName].length] = inputs[z];
				matchNames[matchNames.length] = matchName;
				matchesEmpty = false;
			}
			
			if (inputs[z].getAttribute("regex"))
				regexes[regexes.length] = inputs[z];
		}
		
		var requiredValid = true;
		
		for(var z = 0; z < required.length; z++)
		{
			var warningContainer = document.getElementById(required[z].id + "WarningContainer");
			var errorMsg = document.getElementById(required[z].id + "Required");			
			
			if (!required[z].value || required[z].value == "")
			{	
				errorMsg.style.display = errorMsg.getAttribute("visibleDisplay") ? errorMsg.getAttribute("visibleDisplay") : "inline";
				warningContainer.style.display = warningContainer.getAttribute("visibleDisplay") ? warningContainer.getAttribute("visibleDisplay") : "inline";
				warningVisible[required[z].id] = true;
				requiredValid  = false;
			}
			else
			{
				errorMsg.style.display = "none";
				if (!warningVisible[required[z].id])
					warningContainer.style.display = "none";
				
			}
		}
		
		var matchesValid = true;
		
		if (!matchesEmpty)
		{
			for(var z = 0; z < matchNames.length; z++)
			{
				var value;
				var match = matchNames[z];
				
				if (matches[match].length > 1)
				{
					value = matches[match][0].value;			
					
					for(var w = 1; w < matches[match].length; w++)
					{
						var errorMsg = document.getElementById(matches[match][w].id + "Match");
						var warningContainer = document.getElementById(matches[match][w].id + "WarningContainer");
	
						if (value != matches[match][w].value)
						{
							errorMsg.style.display = errorMsg.getAttribute("visibleDisplay") ? errorMsg.getAttribute("visibleDisplay") : "inline";
							warningContainer.style.display = warningContainer.getAttribute("visibleDisplay") ? warningContainer.getAttribute("visibleDisplay") : "inline";
							warningVisible[matches[match][w].id] = true;
							matchesValid = false;				
						}
						else
						{	
							errorMsg.style.display = "none";
							if (!warningVisible[matches[match][w].id])
								warningContainer.style.display = "none";							
						}
					}
				}
			}
		}
		
		var regexesValid = true;
		
		for(var z = 0; z < regexes.length; z++)
		{
			var regex = new RegExp(regexes[z].getAttribute("regex"));
			var errorMsg = document.getElementById(regexes[z].id + "Regex");
			var warningContainer = document.getElementById(regexes[z].id + "WarningContainer");
			
			if (!regex.test(regexes[z].value))
			{
				errorMsg.style.display = errorMsg.getAttribute("visibleDisplay") ? errorMsg.getAttribute("visibleDisplay") : "inline";
				warningContainer.style.display = warningContainer.getAttribute("visibleDisplay") ? warningContainer.getAttribute("visibleDisplay") : "inline";
				warningVisible[regexes[z].id] = true;
				regexesValid = false;				
			}
			else
			{	
				errorMsg.style.display = "none";
				if (!warningVisible[regexes[z].id])
					warningContainer.style.display = "none";
				
			}
		}
		
		var warningSummary = document.getElementById("warningSummary");

		if (!requiredValid || !matchesValid || !regexesValid)
		{			
			var standardSummary = document.getElementById("standardSummary");
						
			if (warningSummary && standardSummary)
			{
				warningSummary.style.display = warningSummary.getAttribute("visibleDisplay") ? warningSummary.getAttribute("visibleDisplay") : "inline";
				standardSummary.style.display = "none";
			}
			else
			{
				alert("There are some problems with the details that you have entered. Please correct and then re-submit.");
			}				
				
			return false;
		}
		
		if (warningSummary)
			warningSummary.style.display = "none";
		
		return true;
	}
	catch(err)
	{
		var errMsg = document.getElementById("errMsg");
		if (errMsg)
		{			
			var message = errMsg.getElementsByTagName('p')[0];
			message.innerHTML = "Error: " + err.message;
			errMsg.style.display = errMsg.getAttribute("visibleDisplay") ? errMsg.getAttribute("visibleDisplay") : "inline";			
		}
		else
		{
			alert(err.description);
		}
		return false;
	}
}

function resetForm(parent)
{
	try
	{
		var errMsg = document.getElementById("errMsg");
		
		if (errMsg)
		{
			errMsg.innerHTML = "";
			errMsg.style.display = "none";			
		}
		
		var inputs = parent.getElementsByTagName("input");
	
		for(var z = 0; z < inputs.length; z++)		
			if (inputs[z].type == "text" || inputs[z].type == "password" || inputs[z].type == "hidden") 	
				inputs[z].value = "";
		
		return false;
	}
	catch(err)
	{
		var errMsg = document.getElementById("errMsg");
		if (errMsg)
		{
			errMsg.innerHTML = "Error: " + err.message;
			errMsg.style.display = errMsg.getAttribute("visibleDisplay") ? errMsg.getAttribute("visibleDisplay") : "inline";			
		}
		else
		{
			alert(err.description);
		}
		return false;
	}
}

function setStepAndSubmitForm(stepValue, formName)
{
	form = document.getElementById(formName);
	
	if (form)
	{
		form.step.value = stepValue;
		form.submit();
	}
}

/*
function onDataSetChange(dataSet)
{
	var params;
	
	var type = document.getElementById("type");
	if (dataSet)
		params = "dataSet=" + dataSet.options[dataSet.selectedIndex].value;
		
	if (type)
		params += "&type=" + type.options[type.selectedIndex].value;
	
	ajaxSubmitParametersIntoDIV(params, "typeDiv", context + "/jsp/secure/getOrganisationTypes.jsp", "setSearchTermExample();");
}*/

function setSearchTermExample()
{
	var searchTermLabel = document.getElementById("searchTermLabel");
	var type = document.getElementById("type");
	
	if (searchTermLabel && type)
	{
		var value = type.options[type.selectedIndex].getAttribute("example");
		
		if (value)
			searchTermLabel.innerHTML = "Search Term e.g. " + value;
		else
			searchTermLabel.innerHTML = "Search Term";
	} 	
}

function onSearch()
{
	var dataSet = document.getElementById("dataSet");
	var type = document.getElementById("type");
	var searchTerm = document.getElementById("searchTerm");
	
	var searchResults = document.getElementById("searchResults");
	
	if (searchResults)
	{
		searchResults.innerHTML = "<div style='text-align:center'><img src='" + context + "/images/egg_timer_small.gif' /></div>";
	}
	
	var params = "";
	
	if (dataSet)
		params = "dataSet=" + dataSet.options[dataSet.selectedIndex].value;
		
	if (type)
		params += "&type=" + type.options[type.selectedIndex].value;

	if (searchTerm)
		params += "&searchTerm=" + searchTerm.value; 

	ajaxSubmitParametersIntoDIV(params, "searchResults", context + "/jsp/secure/listOrganisations.jsp", "applySearchResultsEffect()", "preLoadSearchResults()");
}

function preLoadSearchResults()
{
	var searchResults = document.getElementById("searchResults");
	searchResults.style.display = "none";
}
function applySearchResultsEffect()
{
	var searchResults = document.getElementById("searchResults");

	Effect.BlindDown(searchResults);
	Effect.Appear(searchResults);	
}

function toggleSubCategory(id, url)
{
	var list = document.getElementById("dl" + id);
	var img = document.getElementById("imgToggle" + id);
	
	//switch the arrow image
	switchImage(img);	
	 
	var contents = document.getElementById("divContents" + id);	
	var contentState = contents.getAttribute("contentState");
	
	if (contentState == "empty")
	{
		//Switch on egg timer
		var status = document.getElementById("divStatus" + id);
		status.innerHTML = "<img src='" + context + "/images/egg_timer_smaller.gif' />";
		
		ajaxSubmitParametersIntoDIV("id=" + id, "divContents" + id, url, "categoriesLoaded('" + id + "')");
	}
	else
	{
		applyToggleEffect(id);
	}
}

function toggleCategory(categoryName, url)
{
	var list = document.getElementById("dl" + categoryName);
	var img = document.getElementById("imgToggle" + categoryName);
	
	//switch the arrow image
	switchImage(img);	
	 
	var contents = document.getElementById("divContents" + categoryName);	
	var contentState = contents.getAttribute("contentState");
	
	if (contentState == "empty")
	{
		//Switch on egg timer
		var status = document.getElementById("divStatus" + categoryName);
		status.innerHTML = "<img src='" + context + "/images/egg_timer_smaller.gif' />";
		
		ajaxSubmitParametersIntoDIV("categoryName=" + categoryName, "divContents" + categoryName, url, "categoriesLoaded('" + categoryName + "')");
	}
	else
	{
		applyToggleEffect(categoryName);
	}
}

function categoriesLoaded(categoryName)
{
		var contents = document.getElementById("divContents" + categoryName);
		contents.setAttribute("contentState", "full");
		
		//Switch off egg timer
		var status = document.getElementById("divStatus" + categoryName);
		status.innerHTML = "";
		
		
		applyToggleEffect(categoryName);
}

function applyToggleEffect(categoryName)
{
	var contents = document.getElementById("divContents" + categoryName);
	var visibleState = contents.getAttribute("visibleState");
	
	
	switch(visibleState)
	{
		case "open":
			Effect.BlindUp(contents);
			Effect.Fade(contents);
			contents.setAttribute("visibleState", "closed");
		break;
		case "closed":
			Effect.BlindDown(contents);
			Effect.Appear(contents);
			contents.setAttribute("visibleState", "open");
		break;
	}
}

function switchImage(img)
{
	var openSrc = img.getAttribute("openSrc");
	var closedSrc = img.getAttribute("closedSrc");
	
	if (img.src.indexOf(openSrc) != -1)
	{
		img.src = closedSrc;
	}
	else
	{
		img.src = openSrc;
	}
}

function swapAllListItems(listAId, listBId)
{
	var listA = document.getElementById(listAId);
	var listB = document.getElementById(listBId);
	
	var selectedOptions = new Array();
	
	for(var z = listA.options.length - 1; z >= 0; z--)
	{
		selectedOptions[selectedOptions.length] = listA.options[z];
		listA.remove(z);
	}
			
	for(var z = listB.options.length - 1; z >= 0; z--)
	{
		selectedOptions[selectedOptions.length] = listB.options[z];
		listB.remove(z);
	}	
					
	selectedOptions.sort(sortOptions);
	
	for(var z = 0; z < selectedOptions.length; z++)
		listB.options[listB.options.length] = selectedOptions[z];
}


function swapListItems(listAId, listBId)
{
	var listA = document.getElementById(listAId);
	var listB = document.getElementById(listBId);
	
	var selectedOptions = new Array();
	
	for(var z = listA.options.length - 1; z >= 0; z--)
	{
		if (listA.options[z].selected)
		{
			selectedOptions[selectedOptions.length] = listA.options[z];
			listA.remove(z);
		}
	}
			
	for(var z = listB.options.length - 1; z >= 0; z--)
	{
		selectedOptions[selectedOptions.length] = listB.options[z];
		listB.remove(z);
	}	
					
	selectedOptions.sort(sortOptions);
	
	for(var z = 0; z < selectedOptions.length; z++)
		listB.options[listB.options.length] = selectedOptions[z];
}

function sortOptions(optionA, optionB)
{
	return optionA.text < optionB.text ? -1 : (optionA.text == optionB.text ? 0 : 1);
}

function selectIncludedFilterValues()
{
	var filterSelections = document.getElementsByName("filterSelection");
	
	for(z = 0; z < filterSelections.length; z++)
	{
		if (filterSelections[z].checked)
		{
			var include = document.getElementById("include" + filterSelections[z].value);
			
			if (!include)
			{
				filterSelections[z].checked = false;
				continue;
			}
				
			for(w = 0; w < include.options.length; w++)
			{
				include.options[w].selected = true;
			}
		}
	}
}



function selectTab(tab, url)
{
	var tabElement = document.getElementById(tab);
	var resultTabs = document.getElementById("resultTabs");
	
	var tabs = resultTabs.getElementsByTagName("li");
	
	for(var z = 0; z < tabs.length; z++)
		tabs[z].className = "tab";
	
	tabElement.className = "tabSelected";
	
	ajaxSubmitParametersIntoDIV("tab=" + tab, "results", url);
}

function createChart(id, url, isBig)
{	
	var type = document.getElementById("chartSelect" + id);
	var showValues = document.getElementById("chartShowValues" + id);
	var sortSeries = document.getElementById("chartSortSeries" + id);
	var size = document.getElementById("chartSize" + id);
	
	var params = "id=" + id + "&type=" + type.value;
	
 	params += "&showValues=" + showValues.checked;
 	params += "&sortSeries=" + sortSeries.checked;
 	if (size)
 		params += "&size=" + size.value;
	 	
	params += "&isBig=" + isBig;
	 	
	 	
	if (DetectFlashVer(requiredFlashMajorVersion, requiredFlashMinorVersion, requiredFlashRevision))
	{
		ajaxSubmitParametersIntoDIV(params, "chart" + id, url);
	}
	else
	{
		ajaxLoadURLIntoDIV("chart" + id, context + "/jsp/error/noFlash.jsp");
	}		
}

function createBigChart(anchor, id, url)
{
	var type = document.getElementById("chartSelect" + id);
	var showValues = document.getElementById("chartShowValues" + id);
	var sortSeries = document.getElementById("chartSortSeries" + id);
	var size = document.getElementById("chartSize" + id);
	
	var params = "id=" + id + "&type=" + type.value;
	
 	params += "&showValues=" + showValues.checked;
	params += "&sortSeries=" + sortSeries.checked;
 	
 	if (size)
 		params += "&size=" + size.value;
	 	
	
	anchor.href = url + "?" + params;	
}

function exportData(anchor, categoryName)
{
	var dataTypes = document.getElementsByName(categoryName + "DataType");
	var dataType;
	
	for(var z = 0; z <dataTypes.length; z++)
	{
		if (dataTypes[z].checked)
		{
			dataType = dataTypes[z].value;
			break;
		}
	}
	
	
	var params = "categoryName=" + categoryName + "&dataType=" + dataType;
	anchor.href = context + "/jsp/secure/getCSVData.jsp?" + params;	
}

function loadData(categoryName)
{
	var dataTypes = document.getElementsByName(categoryName + "DataType");
	var dataType;
	
	for(var z = 0; z <dataTypes.length; z++)
	{
		if (dataTypes[z].checked)
		{
			dataType = dataTypes[z].value;
			break;
		}
	}

	var url = context + "/jsp/secure/getData.jsp";
	var params = "categoryName=" + categoryName + "&dataType=" + dataType;
	
	//Switch on egg timer
	var status = document.getElementById("divStatus" + categoryName);
	status.innerHTML = "<img src='" + context + "/images/egg_timer_smaller.gif' />";
	
	ajaxSubmitParametersIntoDIV(params, categoryName + "Data", url, "dataLoaded('" + categoryName + "');");
}

function dataLoaded(categoryName)
{
	//Switch off egg timer
	var status = document.getElementById("divStatus" + categoryName);
	status.innerHTML = "";
}

function selectAllCheckboxes(parent, input)
{
	var inputs = parent.getElementsByTagName('input');	
	
	for(var z = 0; z < inputs.length; z++)
	{
		if (inputs[z].type != "checkbox")
			continue;
			
		inputs[z].checked = input.checked; 
	}
}
