/* ----------------------------------------------------------------------------------------------- *
 *                    Client-side JavaScript library for SDS Catalyst Website                      *
 * ----------------------------------------------------------------------------------------------- */
var iCallID;
var lastPopUp = 0;
var ContextMenu;

var PrintDiv;

function PrintMe()
{
	if (window.print)
		window.print();
	else
	{
		// MeadCo ScriptX 
		if (PrintDiv.tagName == "DIV")
		{
			PrintDiv = PrintDiv.firstChild;
			PrintDiv.printing.header = document.body.printHeader ? document.body.printHeader : "&w&b&b&u";
			PrintDiv.printing.footer = document.body.printFooter ? document.body.printFooter : "SDS Catalyst&b&d &t&bPage &p / &P";
		}
		PrintDiv.printing.portrait = (!document.body.orientation || document.body.orientation.toLowerCase() != "landscape");
		PrintDiv.printing.Print(true);
	}
}

function PopupHelpBox(text)
{
	if (!text)
		return;

	if (event)
	{
		event.returnValue = false;
		event.cancelBubble = true;
	}
		
	var popup = window.createPopup();
	var oPopBody = popup.document.body;
	oPopBody.document.createStyleSheet("sds.css");

	with (oPopBody.style)
	{
		backgroundColor = "#EEFFEE";
		border = "outset 4px";
		padding = "5px";
		margin = "5px";
	}
	
//	oPopBody.title = "Click outside this window to close it";
	oPopBody.innerHTML = text;// + '<p align=center><button onclick="close()">Close Window</button></p>';
	
	var realWidth = 300;
	popup.show(0, 0, realWidth, 0);
	
	var realHeight = 1*popup.document.body.scrollHeight;
	if (realHeight > 300)
	{
		popup.hide();
		realWidth = 500;
		popup.show(0, 0, realWidth, 0);
		realHeight = 1*popup.document.body.scrollHeight;
	}
	while (realHeight > screen.availHeight)
	{
		popup.hide();
		realWidth += 200;
		if (realWidth > screen.availWidth)
		{
			realWidth = screen.availWidth;
			break;
		}
		popup.show(0, 0, realWidth, 0);
		realHeight = 1*popup.document.body.scrollHeight;
	}
	// Hides the dimension detector popup object.
	popup.hide();
	
	// Shows the actual popup object with correct height.
	oPopBody.style.textAlign = "justify";
	try
	{
		popup.show(5, 5, realWidth, realHeight, window.event.srcElement);
//		popup.document.focus();
	}
	catch(e)
	{
		popup.show(5, 5, realWidth, realHeight);
	}
	
	return false;
}

function HideSelects()
{
	var ie = IEVersion();
	if (ie == 0 || ie >= 7) return;
		
	var selects = document.all.tags("SELECT");
	for (var i=0; i < selects.length; i++)
	{
		var select = selects[i];
		select.oldDisplay = select.style.display;
		var parent = select.parentElement;
		parent.style.width = parent.offsetWidth + "px";
		parent.style.height = parent.offsetHeight + "px";
		select.style.display = "none";
	}
}
function RestoreSelects()
{
	var ie = IEVersion();
	if (ie == 0 || ie >= 7) return;
		
	var selects = document.all.tags("SELECT");
	for (var i=0; i < selects.length; i++)
	{
		var select = selects[i];
		if ("oldDisplay" in select)
			if (select.style.display != select.oldDisplay)
				select.style.display = select.oldDisplay;
	}
}
function PopDown()
{
	try
	{
		var popup = document.all.PopupHelpBoxDiv;
		RestoreSelects()
		popup.removeNode(true);
	}
	catch(e)
	{
	}
	return false;
}
function IEVersion()
{
	var s = "" + navigator.appVersion;
	var i = s.indexOf("MSIE");
	if (i < 0) return 0;
	i = parseFloat(s.substring(i+4));
	//window.status = i;
	return i;
}
function PopupHelpBox2(text,realWidth,realHeight)
{
	if (!text)
		return;

	PopDown();
		
	var src = window.event.srcElement;
	var parent = src;
	var Left = -6, Top = -6;
	if (!realWidth) realWidth = 200;
	if (!realHeight) realHeight = 20;
	
	var docContainer = document.body;
	if (!docContainer.clientHeight)
		docContainer = docContainer.parentElement;
	var maxWidth = docContainer.clientWidth-10, maxHeight = docContainer.clientHeight-10;
	var Top = 0;
	while (parent)
	{
		Left += parent.offsetLeft;
		Top += parent.offsetTop;
		parent = parent.offsetParent;
	}

	var popup = document.createElement("DIV");
	popup.id = "PopupHelpBoxDiv";
	popup.innerHTML = text;
	popup.title = "";
	popup.className = "HelpPanel";
	var oPopBody = popup;
	with (oPopBody.style)
	{
		zIndex = 9;
		position = "absolute";
		border = "none";
		padding = "0px";
		margin = "0px";
		textAlign = "justify";
		height = 1;
		left = Left + "px";
		top = Top + "px";
		width = realWidth + "px";
	}

	document.body.insertAdjacentElement("beforeEnd", popup);
	
	var realHeight = 1*popup.scrollHeight;
	if (realHeight > 300)
	{
		realWidth = 500;
		popup.style.width = realWidth + "px";
		realHeight = 1*popup.scrollHeight;
	}
	while (realHeight > maxWidth)
	{
		realWidth += 200;
		if (realWidth > maxWidth)
		{
			realWidth = screen.availWidth;
			break;
		}
		popup.style.width = realWidth;
		realHeight = 1*popup.scrollHeight;
	}

	realWidth += 40;
	realHeight += 50;
	if (realWidth + Left > maxWidth)
	{
		Left = maxWidth - realWidth;
		if (Left < 0) Left = 0;
		popup.style.left = Left + "px";
	}
	if (realHeight + Top > maxHeight)
	{
		Top = maxHeight - realHeight;
		if (Top < 0)
			Top = 0;
		popup.style.top = Top + "px";
	}
	popup.style.width = realWidth + "px";
	popup.style.height = realHeight + "px";

	// Shows the actual popup object with correct height.
	popup.innerHTML = '\
<div class="TL"></div><div class="T"></div><div class="TR"></div><div class="HL"></div><div class="H">' + src.innerHTML + '\
<img src="images/Browser Stop 16 n p.png" alt="Close" style="width:16px;height:16px;border:none;position:absolute;right:2px" onclick="PopDown()"/>\
</div><div class="HR"></div><div class="L"></div><div class="C" title="Click on the red cross\r\nabove to close this panel">\
		' + text + '\
</div><div class="R"></div><div class="BL"></div><div class="B"></div><div class="BR"></div>';
	
	oPopBody.focus();
	oPopBody.style.textAlign = "justify";
	//oPopBody.setCapture(false);
	
	return false;
}

function RelayWheel()
{
//TODO find out why relaying the wheel events don't work
//	window.event.srcElement.parentElement.fireEvent("onmousewheel",document.createEventObject(window.event));
	window.event.cancelBubble = true;
	window.event.returnValue = false;
	return 0;
}

function ExitCatalyst()
{
	window.open('/Benchmarking/default.asp', '_top');
}

/* ----------------------------------------------------------------------------------------------- */

function InitLAData()
{
	if (!("DataService" in document.all))	return;
	
	DataService.useService("data.asmx?WSDL","Catalyst");
	window.status = 'Loading local authority  list...';
	iCallID = DataService.Catalyst.callService("LocalAuthorities", 0, 1*schemeForm.laid.value);
}

function PopulateLA(laBox)
{
	var regionBox = window.event.srcElement;
	var option = regionBox.options[regionBox.selectedIndex];
	var LAs = option.LAs.split(";");
	if (!("originalValue" in laBox))
		laBox.originalValue = laBox.value;
	while (laBox.options.length)
		laBox.options.remove(laBox.options.length-1);
	for (var l in LAs)
	{
		var pair = LAs[l].split("=");
		var oOption = document.createElement('OPTION');
		laBox.options.add(oOption);
		oOption.innerText = pair[1];
		oOption.value = pair[0];
		if (pair[0] == laBox.originalValue)
			oOption.selected = true;
	}
}

function onLAData()
{  
	window.status = 'Done';
	if((event.result.error)&&(iCallID==event.result.id))  
	{    
		var xfaultcode = event.result.errorDetail.code;
		var xfaultstring = event.result.errorDetail.string;    
		var xfaultsoap = event.result.errorDetail.raw;
		
		alert(xfaultcode + "\r\n" + xfaultstring + "\r\n" + xfaultsoap);
	}
	else
	{
		var val = event.result.value;
		if (val)
		{
			val = val.split(";")
			var result = '<select onchange="LAChanged()" onmousewheel="RelayWheel()">';
			var found = 0;
			for (var i in val)
			{
				var r = val[i].split(",");
				result += '<option value="' + r[0] + '"';
				if (1*r[2])
				{
					result += ' selected';
					found = 1*r[0];
				}
				result += '>' + r[1];
			}
			if (!found)
				result += '<option value=-1 selected>--Please Select--\r\n';
			result += '</select>';
			LAselects.insertAdjacentHTML("beforeEnd",result);
			setTimeout("LAChanged()",100);
		}
		else
		{
			var sels = LAselects.all.tags("SELECT");
			val = sels[sels.length-1].value;
			schemeForm.laid.value = val;
			//window.status = "LAID=" + val + " selected";
		}
	}
}

function LAChanged()
{
	var sels = LAselects.all.tags("SELECT");
	var sel;
	if (event)
		sel = event.srcElement;
	else
	{
		sel = sels[sels.length-1];
		sel.focus();
	}
	var found = 0;
	var val = 1*sel.value;
	for (var i=0; i < sels.length; i++)
		if (sels[i].uniqueID == sel.uniqueID)
			found = i;
	if (val > 0)
	{
		window.status = 'Loading local authority  list...';
		iCallID = DataService.Catalyst.callService("LocalAuthorities", val, 1*schemeForm.laid.value);
	}
	for (i = sels.length-1; i > found; i--)
		sels[i].removeNode(true);
}

/* ----------------------------------------------------------------------------------------------- */

function InitPWDData()
{
	if (!("DataService" in document.all))	return;
	
	DataService.useService("data2.asmx?WSDL","Catalyst");
	window.status = 'Fetching new password';
	iCallID = DataService.Catalyst.callService("GeneratePassword");
}

function onPWDData()
{  
	window.status = 'Done';
	if((event.result.error)&&(iCallID==event.result.id))  
	{    
		var xfaultcode = event.result.errorDetail.code;
		var xfaultstring = event.result.errorDetail.string;    
		var xfaultsoap = event.result.errorDetail.raw;
		
		alert(xfaultcode + "\r\n" + xfaultstring + "\r\n" + xfaultsoap);
	}
	else
	{
		var val = event.result.value;
		Form1.password1.value = val;
		Form1.password2.value = val;
		Form1.SendEmail.value = 2;
		Form1.submit();
	}
}

/* ----------------------------------------------------------------------------------------------- */

// called from scheme-validation.asp
function InitBenchData()
{
	if ("BenchmarkService" in document.all)
	{
		BenchmarkService.useService("data2.asmx?WSDL","Catalyst");
		Benchmark();
	}
}

function Benchmark()
{
	window.status = "Loading benchmark...";
	var call = 'BenchmarkService.Catalyst.callService(\r\n\
		"SchemeValidation", \r\n\
		' + SchemeForm.schemeid.value + ',	// ownSchemeID\r\n\
		' + BenchForm.tod.value + ',		// type of development\r\n\
		\'' + (BenchForm.tciarea.value ? BenchForm.tciarea.value : "") + '\',	// tciArea\r\n\
		' + BenchForm.laid.value + ',		// localAuthority\r\n\
		' + BenchForm.year.value + ',		// yearFirstUnit\r\n\
		' + BenchForm.tenure.value + ',		// tenure\r\n\
		' + BenchForm.toa.value + ',		// typeOfAccommodation\r\n\
		' + BenchForm.pg.value + ',			// peerGroupID\r\n\
		' + BenchForm.s106.value + ',		// S.106\r\n\
		true			// include prospective schemes\r\n\
	);';
	//alert(call);
	iCallID = eval(call);
}

// called from scheme-validation.asp
function onBenchData()
{
	if((event.result.error)&&(iCallID==event.result.id))  
	{    
		window.status = "Error.";
		var xfaultcode = event.result.errorDetail.code;
		var xfaultstring = event.result.errorDetail.string;    
		var xfaultsoap = event.result.errorDetail.raw;
		
		alert(xfaultcode + "\r\n" + xfaultstring + "\r\n" + xfaultsoap);
	}
	else
	{
		window.status = (new Date()).toLocaleTimeString() + " Done.";
		var msg = '';
		var val = event.result.value;
		if (val.indexOf("|") >= 0)
		{
			val = val.split(";");
			var inputs = val[val.length-2].split('|');
			var startYear = inputs[0];
			var costBase = inputs[inputs.length-1];
			var warn = '';
			if (costBase > startYear)
				warn = 'red';
				
			// update special values from the Scheme table
			var C = document.all("S0");
			if (C)
			{
				C.style.color = warn;
				C.innerText = (costBase-1) + '/' + (costBase % 10);
			}
			C = document.all("S1");
			if (C)
			{
				var c = inputs[1] - inputs[29] - inputs[30] - inputs[31];
				C.innerText = c;
				C.style.color = c ? 'Orange' : '';
			}

			// update all the Input Questions
			for (var i = 0; i < inputs.length; i++)
			{
				C = document.all("Q" + i);
				var c = inputs[i];
				switch (i)
				{
					case 8: 
						var R = document.all("R35");
						if (R)	// hide aquisition discount row if Q8=No
							R.style.display = (c == 1) ? '' : 'none';
						c = (c == 1) ? "Yes" : "No"; 
						break;

					case 25:
						switch(1*c)
						{
							case 1: c = 'n/a'; break;
							case 2: c = '>85%'; break;
							case 3: c = '<85%'; break;
							default: c = ''; break;
						}
						break;
						
					case 29:
						C.style.color = (1*c == 0) ? 'Orange' : '';
						break;
						
				}
				if (C)
					C.innerText = c;
			}
			
			// update all the KPIs
			for (var i = 1; i < val.length-2; i++)
			{
				var pair = val[i-1].split("|");
				/*var I = pair[3];
				if (I != i)
					msg += "Row " + I + " found in slot " + i + ": " + val[i-1] + "\r\n";*/
				var A = document.all("A"+i);
				var B = document.all("B"+i);
				C = document.all("C"+i);
				var D = document.all("D"+i);
				var E = document.all("E"+i);
				if (A && A.length)
					A = A[0];
				if (B && B.length)
					B = B[0];
				if (C && C.length)
					C = C[0];
				if (D && D.length)
					D = D[0];
				if (E && E.length)
					E = E[0];
				
				var units = parseInt(pair[0].replace(',',''));
				if (A)
					A.innerText = pair[0];//units ? N0(units) : 0;
					
				var b = parseFloat((''+pair[1]).replace(',',''));
				if (B)
					if (units > 0 || pair[0].length == 0)
					{
						B.innerText = pair[1];//E ? N0(b) : N1(b);
						B.title = pair[3] + ' / ' + pair[4];
					}
					else
						B.innerHTML = '<a class=box href="javascript:" title="Click here for more information..." onclick="PopupHelpBox2(\'<b>Suppressed benchmark</b>: There are less than three schemes from which to compute an average. Try widening your benchmark criteria above by selecting more *All...* items from the drop-down listboxes.\')"><img border="0" src="images/infoIcon.gif"></a>';
					
				var c = parseFloat((''+pair[2]).replace(',',''));
				var Approval = FromEnglishDate(inputs[26]);
				var EstPC = FromEnglishDate(inputs[27]);
				var ActPC = FromEnglishDate(inputs[28]);
				var EstSoS = FromEnglishDate(inputs[36]);
				var ActSoS = FromEnglishDate(inputs[37]);
				var EstLUS = FromEnglishDate(inputs[38]);
				var ActLUS = FromEnglishDate(inputs[39]);
				warn = '';
				switch (i)
				{
					case 17:	// acq / mē
						if (inputs[7] <= 1 && inputs[4] == 1)
							warn = 'orange';
						break;
					case 18:	// works / mē
						if (inputs[10] > 0 && inputs[4] == 3)
							warn = 'orange';	//If Type is ESP/Package  then this should be zero
						break;
					case 51:	// est. time app to SoS 
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							var color = 'Green';
							if (Approval.getFullYear() < 2000)
								color = "Red";
							else if (Approval.getFullYear() > startYear)
								color = "Orange";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(Approval) + "'>";
							
							color = 'Green';	
							if (EstSoS.getFullYear() < 2000)
								color = "Red";
							else if (EstSoS < Approval)
								color = "Orange";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(EstSoS) + "'>";
								
							col1.innerHTML = "Est. time " + span1 + "app.</span> to " + span2 + "SoS</span>";
						}
						break;
					case 52:	// act. time app.to SoS 
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							var color = 'Green';
							if (Approval.getFullYear() < 2000)
								color = "Red";
							else if (Approval.getFullYear() > startYear)
								color = "Orange";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(Approval) + "'>";
							
							color = 'Green';	
							if (ActSoS.getFullYear() < 2000)
								color = "Red";
							else if (ActSoS > ActPC)
								color = "Orange";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(ActSoS) + "'>";
								
							col1.innerHTML = "Act. time " + span1 + "app.</span> to " + span2 + "SoS</span>";
						}
						break;
					case 54:	// est. time SoS to PC
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							var color = 'Green';
							if (EstSoS.getFullYear() < 2000)
								color = "Red";
							else if (EstSoS > EstPC)
								color = "Orange";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(EstSoS) + "'>";
							
							color = 'Green';
							if (EstPC.getFullYear() < 2000)
								color = "Red";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(EstPC) + "'>";
								
							col1.innerHTML = "Est. time " + span1 + "SoS</span> to " + span2 + "PC</span>";
						}
						break;
					case 55:	// act. time SoS to PC
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							color = 'Green';	
							if (ActSoS.getFullYear() < 2000)
								color = "Red";
							else if (ActSoS > ActPC)
								color = "Orange";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(ActSoS) + "'>";
							
							color = 'Green';	
							if (ActPC.getFullYear() < 2000)
								color = "Red";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(ActPC) + "'>";
								
							col1.innerHTML = "Act. time " + span1 + "SoS</span> to " + span2 + "PC</span>";
						}
						break;
					case 57:	// est. time PC to last sale
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							color = 'Green';
							if (EstPC.getFullYear() < 2000)
								color = "Red";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(EstPC) + "'>";
							
							color = 'Green';	
							if (EstLUS.getFullYear() < 2000)
								color = "Red";
							else if (EstLUS < EstPC)
								color = "Orange";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(EstLUS) + "'>";
								
							col1.innerHTML = "Est. time " + span1 + "PC</span> to " + span2 + "last sale</span>";
						}
						break;
					case 58:	// act. time PC to last sale
						if (A)
						{
							var tr = A.parentElement;
							var col1 = tr.cells[0];
							
							color = 'Green';	
							if (ActPC.getFullYear() < 2000)
								color = "Red";
							var span1 = "<span style='color:" + color + "' title='" + ToEnglishDate(ActPC) + "'>";
							
							color = 'Green';	
							if (ActLUS.getFullYear() < 2000)
								color = "Red";
							else if (ActLUS < ActPC)
								color = "Orange";
							var span2 = "<span style='color:" + color + "' title='" + ToEnglishDate(ActLUS) + "'>";
								
							col1.innerHTML = "Act. time " + span1 + "PC</span> to " + span2 + "last sale</span>";
						}
						break;
					case 97:	// sales&marketing / unit
						if (inputs[12] <= 1 && (inputs[6] == 2 || inputs[6] == 4))
							warn = 'orange';	// Highlight if zero when one of the Homebuy product types is selected
						break;
					case 110:	// persons per unit
						if (c > 1 && inputs[5] == 2)
							warn = 'orange';
						break;
					case 111:	// subsidy / unit
						if (inputs[17] > 0 && inputs[16] < inputs[17] )
							warn = 'orange';	//If Q17 has a value, then Q16 must not be less
						else if (inputs[18] == 2 && inputs[17] < 1)
							warn = 'orange';	// if scheme went thtough IMS warn if net SHG is zero
						break;
				}
				if (C && C.style)
					C.style.color = warn;
				if (D)
					D.innerText = "";
				if (E)
					E.innerText = "";
				if ((''+pair[2]).indexOf("-") < 1 && !isNaN(c))
				{
					if (C)
					{
						C.innerText = pair[2];//E ? N0(c) : N1(c);
						C.title = pair[5] + ' / ' + pair[6];
					}
					if (D && units > 0)
						D.innerText = E ? N0(c - b) : N1(c - b);
					if (E && b > 0)
						E.innerText = N0(100.0 * (c - b) / b);
				}
				else
				if (C)
					C.innerText = pair[2];
			} // for i
			

			val = val[val.length-1] + "";
			if (val.length > 0)
				alert(val);
		}
		else
		if (val)
			alert(val);
		if (msg)
			alert(msg);
/*		else
			alert('No results for iCallID = BenchmarkService.Catalyst.callService(\r\n\
		"SchemeValidation", \r\n\
		' + SchemeForm.schemeid.value + ',	//ownSchemeID\r\n\
		' + BenchForm.tod.value + ',		// type of development\r\n\
		' + (BenchForm.tciarea.value > 0 ? BenchForm.tciarea.value : '') + ',	// tciArea,				\r\n\
		' + BenchForm.laid.value + ',		//localAuthority,			\r\n\
		' + BenchForm.year.value + ',		//yearFirstUnit,			\r\n\
		' + BenchForm.tenure.value + ',		//tenure,					\r\n\
		' + BenchForm.toa.value + ',		//typeOfAccommodation,	\r\n\
		' + BenchForm.pg.value + '			//peerGroupID				\r\n\
	);');
*/
	}
}

/* ----------------------------------------------------------------------------------------------- */

function InitAnnualData()
{
	if ("AnnualService" in document.all)
	{
		AnnualService.useService("data2.asmx?WSDL","Catalyst");
		AnnualData();
	}
}

function AnnualData()
{
	if (BenchForm.submissionid.value.length > 0)
	{
		window.status = "Loading report...";
		iCallID = AnnualService.Catalyst.callService(
			"AnnualValidation", 
			BenchForm.submissionid.value
		);
		var notes = BenchForm.submissionid.options[BenchForm.submissionid.selectedIndex].title;
		if (notes)
		{
			NotesSpan.innerText = notes;
			NotesRow.style.display = "";
		}
		else
			NotesRow.style.display = "none";
	}
}

function onAnnualData()
{  
	if((event.result.error)&&(iCallID==event.result.id))  
	{    
		window.status = "Error.";
		var xfaultcode = event.result.errorDetail.code;
		var xfaultstring = event.result.errorDetail.string;    
		var xfaultsoap = event.result.errorDetail.raw;
		
		alert(xfaultcode + "\r\n" + xfaultstring + "\r\n" + xfaultsoap);
	}
	else
	{
		window.status = new Date().toLocaleTimeString() + " Done.";
		var val = event.result.value;
		if (val.indexOf(";") >= 0)
		{
			val = val.split(";");
			for (var i = 1; i <= val.length; i++)
			{
				var pair = val[i-1].split("|");
				if (pair.length == 1) // main report
				{
					if ("A" + i in document.all)
					{
						var A = document.all("A"+i);
						A.innerText = pair[0];
					}
				}
				else // annex
				{
					var A,B,C,D,E;
					if (!("A"+i in document.all))	// must add row
					{	
						var tr = Annex.insertRow();
						A = tr.insertCell(); 
						A.id = "A" + i;
						A.className = "r";
						B = tr.insertCell(); 
						B.id = "B" + i;
						B.className = "r";
						C = tr.insertCell(); 
						C.id = "C" + i;
						C.className = "r";
						D = tr.insertCell(); 
						D.id = "D" + i;
						D.className = "r";
						E = tr.insertCell(); 
						E.id = "E" + i;
						E.className = "r";
					}
					else
					{
						A = document.all("A"+i);
						B = document.all("B"+i);
						C = document.all("C"+i);
						D = document.all("D"+i);
						E = document.all("E"+i);
					}
					if (pair[0] == "TOTAL")
					{
						A.innerHTML = '<b>' + pair[0] + '</b>';
						B.innerHTML = '&nbsp;';
						C.innerHTML = '<b>' + pair[1] + '</b>';
						C.title		= pair[5];
						D.innerHTML = '<b>' + pair[2] + '</b>';
						E.innerHTML = '<b>' + pair[3] + '</b>';
//						document.all.DEBUG.innerHTML = "<textarea rows=6 cols=50>" + pair[5] + "</textarea>";
					}
					else
					{
						A.innerHTML = '<a class=box href="scheme-validation.asp?schemeid=' + pair[5] + '&submissionid=' + pair[6] + '">' + pair[0] + '</a>';
						B.innerText = pair[7];
						C.innerText = pair[1];
						C.title		= "";
						D.innerText = pair[2];
						E.innerText = pair[3];
					}
					E.title		= pair[4];
				}
			} // for i
			for (var i = val.length+1; i <= val.length+100; i++)
			{
				if ("A" + i in document.all)
				{
					var A = document.all("A"+i);
					A.removeNode(true);
				}
			}
		}
		else
		if (val)
			alert(val);
/*		else
			alert('No results for iCallID = BenchmarkService.Catalyst.callService(\r\n\
		"SchemeValidation", \r\n\
		' + SchemeForm.schemeid.value + ',	//ownSchemeID\r\n\
		' + BenchForm.tod.value + ',		// type of development\r\n\
		' + (BenchForm.tciarea.value > 0 ? BenchForm.tciarea.value : '') + ',	// tciArea,				\r\n\
		' + BenchForm.laid.value + ',		//localAuthority,			\r\n\
		' + BenchForm.year.value + ',		//yearFirstUnit,			\r\n\
		' + BenchForm.tenure.value + ',		//tenure,					\r\n\
		' + BenchForm.toa.value + ',		//typeOfAccommodation,	\r\n\
		' + BenchForm.pg.value + '			//peerGroupID				\r\n\
	);');
*/
	}
}

/* ----------------------------------------------------------------------------------------------- */

function InitArData()
{
	if ("ArService" in document.all)
	{
		ArService.useService("data2.asmx?WSDL","Catalyst");
		ArData();
	}
}

function ArData()
{
	window.status = "Loading report...";
	iCallID = ArService.Catalyst.callService(
		"AnnualReport", 
		2003, 0, [1,3,4,5,6,7,8,-8]
	);
}

function onArData()
{  
	if((event.result.error)&&(iCallID==event.result.id))  
	{    
		window.status = "Error.";
		var xfaultcode = event.result.errorDetail.code;
		var xfaultstring = event.result.errorDetail.string;    
		var xfaultsoap = event.result.errorDetail.raw;
		
		alert(xfaultcode + "\r\n" + xfaultstring + "\r\n" + xfaultsoap);
	}
	else
	{
		window.status = new Date().toLocaleTimeString() + " Done.";
		var val = event.result.value;
		if (val.indexOf(";") >= 0)
		{
			val = val.split(";");
			for (var i = 1; i <= val.length; i++)
			{
				var pair = val[i-1].split("|");
				var ID = "Line" + pair[0] + "_" + pair[1];
				if (ID in document.all)	
				{	
					var Row = document.all(ID);
					for (var x = 2; x < pair.length; x++)
						Row.children.tags("TD")[x].innerText = pair[x];
				}
				else
					window.status = ID + " not found";
			} // for i
		}
		else
		if (val)
			alert(val);
	}
}

/* ----------------------------------------------------------------------------------------------- */

function ReFilterSchemeList()
{
	var y = 1*SchemeListForm.Year.value;
	var total = 0;
	for(var r=1; r < SchemeList.rows.length; r++)
	{
		var row = SchemeList.rows[r];
		var units = 0;
		if (y)
		{
			units = 1*row["Y" + y];
			if (isNaN(1*units))
				units = 0;
		}
		else
		{
			for (var attr in row)
			{
				var val = 1*row[attr];
				if (attr.substring(0, 1) == 'Y' && !isNaN(val))
					units += val;
			}
		}
		row.style.display = units ? '' : 'none';
		row.cells[3].innerText = units ? units : '?';
		total += units;
	}
	TotalUnits.innerText = total + (y ? ' (filtered)' : '');
}

function DeleteRange(original, openingTag, closingTag)
{
	var s = "" + original;
	do
	{
		var S = s.toUpperCase();
		var j = S.indexOf(openingTag);
		if (j < 0)
			break;
		var k = S.indexOf(closingTag, j);
		if (k < 0)
			break;
		s= s.substr(0, j) + s.substr(k + closingTag.length);
	} while(true);
	
	return s;
}

function SortTable(eTable, col, Extracttextue, iRowStart, iRowEnd)
{
	status = "Sorting...";
	
	// enumerate rows
	var rows = new Array();
	for (var i=0; i < eTable.all.length; i++)
	{
		var e = eTable.all[i];
		if (e.tagName == 'TR')
			rows[rows.length] = e;
	}			
	
	if (!iRowStart)
		iRowStart = 0;

	// record first row's container (table body element)
	// when the sorting is done, all the rows will be in this container
	// if they weren't in there to begin with
	var tBody = rows[iRowStart].parentNode;
		
	if (!iRowEnd)
		iRowEnd = rows.length - 1;
		
	var bReverse = (eTable.sortBy == col+1);
	eTable.sortBy = (bReverse) ? 0 : col+1;
	
	var i, jRow, rowI, rowJ, textI, textJ;
	var text = new Array();
	for ( i = 0; i < iRowStart; i++)
		text[i] = "";

	// extract sort values for each row	
	for ( i = iRowStart ; i <= iRowEnd ; i++ )
		text[i] = ExtractSortValue(col, rows[i]);
	
	for ( i = iRowStart; i < iRowEnd ; i++ )
	{
		// cache row pointer and sort value for I
		rowI = rows[i];
		textI = text[i];
			
		for ( j = i+1 ; j <= iRowEnd ; j++ )
		{
			// cache row pointer and sort value for J
			rowJ = rows[j];
			textJ = text[j];

			// compare text values
			if	(   
					(!bReverse && textI > textJ)
				||	( bReverse && textI < textJ)
				)
			{
				// swap row pointers
				rows[i] = rowJ;		rows[j] = rowI;		rowI = rowJ;
				
				// swap text values
				text[i] = textJ;	text[j] = textI;	textI = textJ;
			}
		}
		
		// move row at index I to end
		tBody.insertAdjacentElement("beforeEnd", rowI);
	}
	tBody.insertAdjacentElement("beforeEnd", rows[iRowEnd]);
	
	vCell = 0;
	status = "Sorted";
}

/*----------------------------------------------------------------------*\
|								Main Menu Stuff							 |
\*----------------------------------------------------------------------*/
var Doc, menuArea, menuHolder, Menu;

function GetMenu()
{
try
{
	if (!Doc)
	{
		document.attachEvent("onmouseover",MenuBarMouseOut);
		if ("MenuArea" in document.all) // only true for default.asp page
		{
			Doc = document;
			LoadedDefault();
			if ("Pop" in Doc) 
				Doc.all.MenuArea.fireEvent("onmouseout");
			else
				Doc.Pop = 0;
			if (!menuArea)
				menuArea = Doc.all.MenuArea;
			if (!menuHolder)
				menuHolder = Doc.all.MenuPlaceholder;
		}
		else if ("MenuArea" in window.parent.document.all)
			Doc = window.parent.document;
		else
		{
	//		window.status = "Can't locate menu";
			return;
		}
	}
	}
	catch(e) { }
}

function LoadedDefault()
{
	if (window == window.top)
	{
		var sw = window.screen.availWidth;
		var w = sw, h = window.screen.availHeight;
		if (w > 1280)
			w = 1280;
		window.moveTo(0/*(sw - w)/2*/, 0);
		window.resizeTo(w, h);
		
		if (window.screen.colorDepth < 16)
			alert(" This website was designed to be used on screens with at least 65,535 colours (16-bit per pixel). You may still use it on your PC, however you may find that some areas are difficult to read. Contact the S-D-S Helpline to dicsuss this further.");
		else if (sw < 1020)
			alert(" This website was designed to be used on screens with at least 1024 x 768 resolution. You may still use it on your PC, however you may find that some areas are cumbersome to use. Contact the S-D-S Helpline to discuss this further.");
	}
	else
		window.open("/Catalyst2006/","_top","width=800,height=600",true);
	window.setInterval("CheckMenu()", 100);
}

function CheckMenu()
{
	if (document.SetMenu)
	{
		var options = document.SetMenu;
		document.SetMenu = 0;
		SetMenu(options);
	}
	if (document.ResetMenuOptions)
	{
		document.ResetMenuOptions = false;
		ResetMenuOptions();
	}
	if (document.AddMenuOption)
	{
		var options = document.AddMenuOption;
		document.AddMenuOption = 0;
		AddMenuOption(options);
	}
}

function SetMenu(options,allowFrameless)
{
	if (!Doc)
	{
		if (allowFrameless) return;
		window.open("/Catalyst2006/","_top");
		return;
	}
	if (Doc != document)
	{
		if (!Doc) return;
		Doc.SetMenu = options;
		return;
	}
	menuArea.style.display = "";
	menuHolder.style.display = "none";
	
	options = options.split("|");
	var Page = options[0];
	var Display = options[1];
	var Popup = options[2];
	var URL	= options[3];

	Menu = 0;
	if (("Menu_" + Page) in menuArea.all)	// main menu already exists
	{
		Menu = menuArea.all["Menu_" + Page];
		
		// remove children
		ResetMenuOptions();
			
		// remove siblings to the right
		while (Menu.nextSibling && Menu.nextSibling.id != "MenuTail")
			Menu.nextSibling.removeNode(true);
	}
	else if (("Option_" + Page) in menuArea.all)	// option exists
	{
		var Option = menuArea.all["Option_" + Page];
		if (Option.length)
			Option = Option[Option.length-1];
		try
		{
			Menu = Option.parentElement.parentElement;
		}
		catch(e)
		{
			debugger;
		}
		
		// remove siblings to the right
		while (Menu.nextSibling && Menu.nextSibling.id != "MenuTail")
			Menu.nextSibling.removeNode(true);
			
		Menu = 0;
	}
	var Tail = menuArea.all.MenuTail;
	if (!Menu)
	{
		Menu = document.createElement("TD");
		Menu.width = 2;
		Menu.background = "images/menu-sep.gif";
		Menu = Tail.insertAdjacentElement("beforeBegin", Menu);

		var	link = document.createElement("A");
		link.className = "menu";
		link.href = URL;
		link.innerText = Display;
		Menu = document.createElement("TD");
		Menu.background = "images/menu-cur.gif";
		Menu.id = "Menu_" + Page;
		Menu.insertAdjacentElement("beforeEnd", link);
		Menu.title = Popup;
		Menu = Tail.insertAdjacentElement("beforeBegin", Menu);
	}
	document.title = "Catalyst " + Popup;
	var TD = Menu;
	while (TD)
	{
		if (!TD.width)
			TD.background = "images/menu-blank.gif";
		TD = TD.previousSibling;
	};
}

function ResetMenuOptions()
{
	if (Doc != document)
	{
		if (!Doc) return;
		Doc.ResetMenuOptions = true;
		return;
	}
	if (Menu)
	{
		var divs = Menu.all.tags("DIV");
		if (divs.length)
			divs[0].removeNode(true);
	}
}

function AddMenuOption(options)
{
	if (Doc != document)
	{
		if (!Doc) return;
		Doc.AddMenuOption = options;
		return;
	}
	if (!Menu)
	{
		window.status = "Call to MENU(...) must precede AddMenuOption(...)";
		return;
	}
	
	// get option container
	var DIV = Menu.all.tags("DIV");
	if (DIV.length)
		DIV = DIV[0];
	else
	{
		DIV = document.createElement("DIV");
		DIV.style.display = "none";
		DIV.className = "menu";
		Menu.insertAdjacentElement("beforeEnd", DIV);
	}

	// make option(s)
	options = options.split(",");

	for (var o = 0; o < options.length; o++)
	{
		var parts	= options[o].split("|");
		var Page	= parts[0].toLowerCase();
		var Display	= parts[1];
		var Popup	= parts[2];
		var URL		= parts[3];
		
		var link = document.createElement("A");
		link.className = "menuo";
		link.id = "Option_" + Page;
		link.href = URL;
		link.title = Popup;
		link.innerText = Display;
		link.style.whiteSpace = "nowrap";
		//link.style.width = "250px";
		DIV.insertAdjacentElement("beforeEnd", link);
	}
}

function ResetMenu()
{ 
	if (!Doc || !menuArea)
	{
		window.open("default.asp","_top");
		return;
	}
	var cells = menuArea.children;
	for (var i = cells.length-2; i >= 2; i--)
		cells[1].removeNode(true);
	menuArea.style.display = "none";
	menuHolder.style.display = "";
}

function MenuBarMouseOver()
{
	if (Doc != document)
		return;
	var e = window.event.srcElement;
	window.event.cancelBubble = true;
	while (e && e.tagName != "TD")
		e = e.parentElement;
	if (e)
	{
		var A = e.all.tags("A");
		if (A.length > 0)
		{
			A = A[0];
			var DIV = document.all[A.sourceIndex+1];
			if (DIV.tagName == "DIV")
			{
				var TD = DIV.parentElement, X = -2, Y = TD.offsetHeight-3;
				while (TD)
				{
					X += TD.offsetLeft;
					Y += TD.offsetTop;
					TD = TD.offsetParent;
				}
				DIV.style.left = X + "px";
				DIV.style.top = Y + "px";
				DIV.style.display = "";
				if (DIV.offsetHeight > 400)
				{
					DIV.style.height = "400px";
					DIV.style.width = DIV.offsetWidth + "px";
					DIV.style.overflowY = "scroll";
				}
				
				if (Doc.Pop != DIV)
					MenuBarMouseOut();
				Doc.Pop = DIV;
				status = "Over Menu " + A.innerText;
				return false;
			}
			else
			{
				status = "Over link " + A.innerText;
				return false;
			}
		}
	}
	MenuBarMouseOut();
}

function MenuBarMouseOut()
{
	if (Doc && Doc.Pop)
	{
		//status = "Off menu " + Doc.all[Doc.Pop.sourceIndex-1].innerText;
		Doc.Pop.style.display = "none";
		Doc.Pop = 0;
	}
}

function MenuBarMouseDown()
{
	window.event.cancelBubble = true;
	var e = window.event.srcElement;
	if (e.tagName != "SELECT")
		return false;
	if (e.options.length == 1)
	{
		var v = e.options[0].value;
		status = "Opened " + v;
		window.open(v,"SDSMain");
	}
	else
		e.onchange = MenuBarClick;
	return false;
}

function MenuBarMouseUp()
{
	window.event.cancelBubble = true;
	var e = window.event.srcElement;
	if (e.tagName != "SELECT")
		return false;
	return false;
}

function MenuBarClick()
{
	var v = this.options[this.selectedIndex].value;
	status = "Opened " + v;
	window.open(v,"SDSMain");
	return true;
}

//GetMenu();

function N2(val)
{
	val = "00" + val;
	return val.substr(val.length-2);
}

function D(date)
{
	date = new Date(date);
	return N2(date.getDate()) + '/' + N2(1+date.getMonth()) + '/' + date.getFullYear();
}

function AddYears(date, years)
{
	return new Date(date.getFullYear() + years, date.getMonth(), date.getDate());
}
		
function YearBegin(date)
{
	date = new Date(date);
	if (date.getMonth() > 2)
		return new Date(date.getFullYear(),3,1);
	else
		return new Date(date.getFullYear()-1,3,1);
}

function YearEnd(date)
{
	date = new Date(date);
	if (date.getMonth() < 3)
		return new Date(date.getFullYear(),2,31);
	else
		return new Date(date.getFullYear()+1,2,31);
}

function ParseDateString(val)
{
	val = (""+val).split("/");
	if (val.length == 1)
		val = val[0].split("-");
	if (val.length == 1)
		val = val[0].split(" ");
	if (val.length < 3 || val[2].length!=4 || val[1].length<1 || val[0].length<1 || val[1].length >2 || val[0].length>2)
		return new Date(1999,0,1);
	try
	{
		val[0] *= 1;
		val[1] *= 1;
		val[2] *= 1;
		val = new Date(val[2],-1+val[1],val[0]);
	}
	catch (e)	
	{	
		return new Date(1999,0,1);
	}
	return val;
}

function IsValidEmailAddress(addy)
{
	var parts = addy.toLowerCase().split('@');
	if (parts.length != 2 || !parts[0].length)
		return false;
	else
	{
		parts = parts[1].split('.');
		var country = parts[parts.length-1];
		if (parts.length < 2 || country.length < 2 || country == 'co')
			return false;
		if (country.length == 2 && parts[parts.length-2].length < 2)
			return false;
		if (country == 'uk' && parts.length < 3)
			return false;
	}
	return true;
}

function Min(a, b)
{
	if (a < b)
		return a;
	else
		return b;
}

function Max(a, b)
{
	if (a > b)
		return a;
	else
		return b;
}

function DateTimePicker(inputbox,defaultYear)
{
	if (inputbox.length) inputbox = inputbox[0];
	var left = inputbox.offsetWidth / 2;
	var top = inputbox.offsetHeight / 2;
	var width = 200;
	var height = 220;
	var e = inputbox;
	while (e)
	{
		left += e.offsetLeft - e.scrollLeft;
		top += e.offsetTop - e.scrollTop;
		e = e.offsetParent;
	}
	left -= width/2;
	top -= height/2;
	if (left < 0) left = 0;
	if (top < 0) top = 0;
	if (left + width > screen.availWidth)
		left = screen.availWidth - width;
	if (top + height > screen.availHeight)
		top = screen.availHeight - height;
	window.buddy = inputbox;
	window.defaultYear = defaultYear;
	var popup = window.open("DateTimePicker.htm",
		"DTPpopup",
		"title=0,statusbar=0,toolbar=0,location=0,resizable=1,scrollbars=0,menubar=0," + 
		"width=" + width + ",height=" + height + ",top=" + top + ",left=" + left);
	popup.focus();
}

function FromEnglishDate(date)
{
	return new Date(1*date.substr(6),1*date.substr(3,2)-1,1*date.substr(0,2),12,0,0);
}

function ToEnglishDate(date)
{
	return N2(date.getDate()) + '/' + N2(1+date.getMonth()) + '/' + date.getFullYear();
}

/* begin Scheme-Submission scripts */

	var borderLow = "3px ridge magenta";
	var borderHigh = "3px ridge red";
	var borderOkay = "3px ridge lightgreen";
	var titleLow = "This value appears to be too low!";
	var titleHigh = "This value appears to be too high!";
	var titleOkay = "This value appears to be sensible";

	function ValidateCell(id, col, min, max, units)
	{
		try
		{
			var box = Qbox(id, col);
			if (!box) return;
			var val = (units == "date") ? Qd(id, col) : Q(id, col);

			var minN= "";
			if (min)
				minN = eval((units == "date" ? "D(" : "Nn(") + min + ")");

			var maxN= "";
			if (max)
				maxN = eval((units == "date" ? "D(" : "Nn(") + max + ")");
			
			var title = titleOkay;
			var border = borderOkay;
			
			if (min && max)
			{
				if (val < min)	
				{
					border = borderLow;
					title = titleLow + '\r\n(' + minN + ' minimum)';
				}
				else if (val >  max)
				{
					border = borderHigh;
					title = titleHigh + '\r\n(' + maxN + ' maximum)';
				}
			}
			else if (min)
			{
				if (val < min)	
				{
					border = borderLow;
					title = titleLow + '\r\n(' + minN + ' minimum)';
				}
			}
			else if (max)
			{
				if (val >  max)	
				{
					border = borderHigh;
					title = titleHigh + '\r\n(' + maxN + ' maximum)';
				}
			}
			
			if (box.style.border != border)
				box.style.border = border;
			if (box.title != title)
				box.title = title;
		}
		catch(e)
		{
		}
	}
	
	function Qbox(id, col)
	{
		var box = document.getElementById("Q" + id + "c" + col);
		return box;
	}
	
	function Q(id,col)
	{
		var box = Qbox(id,col);
		if (!box) return "Error";
		var val = box.value;
		if (!val)
			return 0;
		val = val.split(",").join("");
		return 1*val;
	}
	
	function Qd(id, col)
	{
		var box = Qbox(id,col);
		if (!box) return new Date();
		var val = box.value;
		try
		{
			return ParseDateString(""+val);
		}
		catch(e)
		{
			return new Date();
		}
	}
	
	function Nn(aNumber)
	{
		var i = (aNumber*100) % 100;
		if (i >= 10 && i <= 90)
			return N1(aNumber);
		else
			return N0(aNumber);
	}
	
	function IsSales(col)
	{
		var productType = Q(6, col);
		switch (productType)
		{
		case 2: // homebuy
		case 4: // KW Homybuy
		case 7: // Outright Sale
			return true;
		}
		return false;
	}

	function CheckPercentInput()
	{
		var e = window.event.srcElement;
		if (!e)
			return;
		var v = e.value;
		if (!v)
			return;
		if (1*v > 100)
		{
			alert('Please key in a value less than 100%');
			e.focus();
		}
	}

	function RowCompare(dAbove, dBelow)
	{
		if (dAbove.getFullYear() < 2000 || dBelow.getFullYear() < 2000)
			return "";
		if (dAbove > dBelow)
			return TimeSpan(dAbove, dBelow) + "<img src='images/red delete 16 n p.png' height='16' width='16'>";
		else
			return TimeSpan(dAbove, dBelow) + "<img src='images/green checkmark 16 n p.png' height='16' width='16'>";
	}
	
	function TimeSpan(from, to)
	{
		var sign = false;
		if (to < from)
		{
			var temp = from;
			from = to;
			to = temp;
			sign = true;
		}
		var months = to.getFullYear() * 12 + to.getMonth() - 
			from.getFullYear() * 12 - from.getMonth();
		var days = to.getDate() - from.getDate();
		if (days < 0)
		{
			days = to.getDate();
			var d = new Date(to.getFullYear(), to.getMonth(), 0);
			days += d.getDate();
			days -= from.getDate();
			months--;
		}
		var years = Math.floor(months/12.0);
		months -= years * 12;
		var s = "";
		if (years)
			s += (months || days ? "&gt;" : "") + years + (years == 1 ? " year " : " years ");
		else if (months)
			s += (days ? "&gt;" : "") + months + (months == 1 ? " month " : " months ");
		else if (days)
			s += days + (days == 1 ? " day " : " days ");
		if (sign)
			s += "<i style='color:red'>too soon</i>";
		return s;
	}
					
	function Show(index)
	{
		Form1.SelectedTab.value = index+1;	// in-case we get saved, we need to bring the user back to the same page
		for (var i = 0; i < 3; i++)
		{
			var th = TabRow.cells[i];
			th.className = (i == index) ? "ActiveTab" : "InactiveTab";
		}
		TableSummary.className = (index==0) ? "ActiveTab" : "InactiveTab";
		TableEssential.className = (index==1) ? "ActiveTab" : "InactiveTab";
		TableOptional.className = (index==2) ? "ActiveTab" : "InactiveTab";
	}
	

/* -- end scheme-submission scripts -- */

// General ASPX form support

function T(x)	// trim
{
	if (!x) return x;
	var reg = /^\s*(\S*.*\S)\s*$|^\s*$/;
	return x.replace(reg, "$1");
}

var TheForm = false;
var AjaxFrame = false;
document.onload = DocLoaded();
if (document.attachEvent)
	document.attachEvent("onload", DocLoaded);
	
function DocLoaded()
{
	TheForm = document.getElementsByTagName("FORM")[0];
	if (!TheForm) 
	{
		status = "There is no form on this page";
		return;
	}
	status = "Loaded";
	var inputs = TheForm.elements;
	var isAjaxForm = false;
	for (var i = 0; i < inputs.length; i++)
	{
		var input = inputs[i];
		input.oldValue = input.value;	// save the current value
		if (input.name == "IsAjaxForm")
			isAjaxForm = input.value;
	}
	if (isAjaxForm)
	{
		TheForm.attachEvent("onsubmit", AjaxSubmitForm);
		AjaxFrame = document.createElement("IFRAME");
		AjaxFrame.name = "AJAXFrame";
	//	AjaxFrame.style.display = "none";
		TheForm.parentElement.insertBefore(AjaxFrame);
		TheForm.target = AjaxFrame.name;
	}
}

function AjaxSubmitForm()
{
	var update = TheForm.action;
	var inputs = TheForm.elements;
	var q = update.indexOf('?');
	if (q > 0)
		update = update.substr(0, q);
	var separator = update.indexOf('?') < 0 ? '?' : '&';
	for (var i = 0; i < inputs.length; i++)
	{
		var input = inputs[i];
		if (input.oldValue == input.value && input.type != 'hidden')
			continue;
		update += separator + input.name + '=' + input.value;
		separator = '&';		
	}
	AjaxFrame.removeNode();
	AjaxFrame = document.createElement("IFRAME");
	AjaxFrame.attachEvent("onload", AjaxReturnForm);
	AjaxFrame.name = "AJAXFrame";
	AjaxFrame.src = update;
//	AjaxFrame.style.display = "none";
	TheForm.parentElement.insertBefore(AjaxFrame);
	window.open(update);
	return false;	
}

function AjaxReturnForm()
{
	debugger;
	alert(AjaxFrame.document.body.innerText);
}

function GetField(name, index)
{
	if (!index) index = 0;
	// try to retrieve the input element directly from the form's elements collection
	var box = TheForm.elements(name, index);
	if (!box)	// not found?
	{
		// try to retrieve the element from the document
		box = document.getElementsByName(name, index);
		if (!box) return null;
		if (box.length)
			box = box[0];
		if (box.tagName == "DIV")	// is it a container?
		{
			// look for INPUT elements in the container
			box = box.getElementsByTagName("INPUT");
			if (!box || box.length == 0)	// not found? look for TEXTAREAs
				box = box.getElementsByTagName("TEXTAREA");
			if (!box || box.length == 0)	// none of those? look for BUTTONs
				box = box.getElementsByTagName("BUTTON");
			if (!box || box.length == 0)	// not any? look for SELECTs
				box = box.getElementsByTagName("SELECT");
			
			if (box && box.length)	// found something?
				box = box[index];
		}
	}
	return box;
}

function GetValue(field)
{
	if (!field)
		return null;
	return T(field.value);
}
			

