var CrLf = String.fromCharCode(13) + String.fromCharCode(10);
var InModificationMode = false;
var booltrapmoveaway = false;

function doaddanewentry (frmtable){
	showeditarea(frmtable, true, false);
	InModificationMode = true;
	frmtable.op.value = 'ListAdd';
}

function docanceledit(frmtable) {
	frmtable.op.value = '';
	showeditarea(frmtable, false, false);
	InModificationMode = false;
}

function dodeleteentry(frmtable) {
	frmtable.op.value = 'ElectionCandidateDelete';
	LoadRowIds(frmtable);
	doformsubmit(frmtable);
}

function doeditentry (frmtable){
	showeditarea(frmtable, true, true);
	InModificationMode = true;
	frmtable.op.value = 'ElectionCandidateUpdate';
}

function doformaddanewentry (frmtable, category){
	frmtable.op.value = 'ElectionCandidateAdd';
	frmtable.table.value = category;
	doformsubmit(frmtable);
}

function doformeditentry (frmtable, category){
	frmtable.op.value = 'ElectionCandidateEdit';
	frmtable.table.value = category;
	LoadRowIds(frmtable);
	doformsubmit(frmtable);
}

function doformcanceledit(frmtable) {
	frmtable.op.value = 'ElectionCandidateCancel';
	PopulateFields (frmtable);
	doformsubmit(frmtable);
}

function doformsubmit(frmtable) {
	booltrapmoveaway = false;
	frmtable.submit();
}

function doformupdatenow(frmtable) {
	if (!ValidateForm(frmtable)) { return; }
	doformsubmit(frmtable);
}

function doupdatenow(frmtable) {
	if (!ValidateForm(frmtable)) { return; }
	if (frmtable.op.value == 'ListUpdate') {
		LoadRowIds(frmtable);
	}
	doformsubmit(frmtable);
}

function getrow(thisitem) {
	var workitem = thisitem;
	while (workitem.parentElement != null) {
		if (workitem.tagName == "TR") break;
		workitem = workitem.parentElement;
	}
	return workitem;
}

function getToday () {
	var now = new Date();
	var monlit = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
	return now.getDate() + ' ' + monlit[now.getMonth()] + ' ' + now.getFullYear();
}

function inputonkeypress (inputarea) {
	if (inputarea.fldcolour == 'Y') {
		var keycode = event.keyCode;
		if (((keycode >= 'A'.charCodeAt(0)) && (keycode <= 'F'.charCodeAt(0))) || ((keycode >= 'a'.charCodeAt(0)) && (keycode <= 'f'.charCodeAt(0)))) {
			return 2;
		}
	}
	if (inputarea.fldcurrency == 'Y') {
		var keycode = event.keyCode;
		if (keycode == '.'.charCodeAt(0)) {
			return 2;
		}
	}
	if ((inputarea.fldnumeric == 'Y') || (inputarea.fldcurrency == 'Y') || (inputarea.fldcolour == 'Y')) {
		var keycode = event.keyCode;
		if (((keycode < '0'.charCodeAt(0)) || (keycode > '9'.charCodeAt(0)))
		&& (keycode > 32) && (keycode) < 127) {
			event.keyCode=0;
			return false;
		}
	}
	return true;
}

function LoadRowIds(frmtable) {
	frmtable.keyid.value = '';
	var a = frmtable.all.item('imgsel');
	if (a!=null) {
		if (a.length!=null) {
	       		for (i=0; i<a.length; i++) {
				if (a(i).selected == 'true') {
					if (frmtable.keyid.value == '' ) {
						frmtable.keyid.value = a(i).rowid;
					} else {
						frmtable.keyid.value = frmtable.keyid.value + "," + a(i).rowid;
					}
				}
		        }
		} else {
			if (a.selected == 'true') {
				frmtable.keyid.value = a.rowid;
			}
		}
	}
}

function PopulateFieldDate (frmtable, aHidden) {
	var adate = frmtable.all.item(aHidden.id + 'a');
	if (adate == null) return '';
	var datevalue = adate.value;
	datevalue.replace(/\s+$/g, "");
	if (datevalue.length == 0) return '';
	var ad = new Date(Date.parse(datevalue));
	var ae = new Date(ad.getFullYear(), ad.getMonth(), ad.getDate());
	return PopulatePad(ae.getFullYear(), 4) + '-' + PopulatePad((ae.getMonth() + 1), 2) + '-' + PopulatePad(ae.getDate(), 2);
}

function PopulateFieldDatetime (frmtable, aHidden) {
	var adate = frmtable.all.item(aHidden.id + 'a');
	var ahour = frmtable.all.item(aHidden.id + 'b');
	var aminute = frmtable.all.item(aHidden.id + 'c');
	if ((adate == null) || (ahour == null) || (aminute == null)) return '';
	var datevalue = adate.value;
	datevalue.replace(/\s+$/g, "");
	if (datevalue.length == 0) return '';
	var ad = new Date(Date.parse(datevalue));
	var ae = new Date(ad.getFullYear(), ad.getMonth(), ad.getDate(), ahour.value, aminute.value);
	return PopulatePad(ae.getFullYear(), 4) + '-' + PopulatePad((ae.getMonth() + 1), 2) + '-' + PopulatePad(ae.getDate(), 2) + ' ' + PopulatePad(ae.getHours(), 2) + ':' + PopulatePad(ae.getMinutes(), 2);
}

function PopulateFields (frmtable) {
	for (i=1; i<frmtable.noofcolumns; i++) { 
		var a = frmtable.all.item(frmtable.id + 'idedit' + i);
		if (a == null) break;
		if (a.tagName == "INPUT") {
			if (a.flddate == 'Y') {
				a.value = PopulateFieldDate (frmtable, a) 
			}
			if (a.flddatetime == 'Y') {
				a.value = PopulateFieldDatetime (frmtable, a) 
			}
		}
	}
	return true;
}

function PopulatePad(thisString, thislength) {
	var teststring = new String(thisString);
	var padlength = thislength - teststring.length;
	var padstring = '0000000000';
	return ((padlength > 0)?padstring.substr(0,padlength):'') + thisString;

}

function selectclicked(frmtable, thisitem) {
	if (InModificationMode) return;
	var newclass;
	if (thisitem.selected == 'true') {
		frmtable.selectedcount--;
		if (thisitem.deleteable == 1) frmtable.deleteselectedcount--;
		thisitem.selected = 'false';
		thisitem.src = egen.extras + 'images/row.gif';
		newclass = 'normalcell';
	} else {
		frmtable.selectedcount++;
		if (thisitem.deleteable == 1) frmtable.deleteselectedcount++;
		thisitem.selected = 'true';
		thisitem.src = egen.extras + 'images/rowselect.gif';
		newclass = 'selectedcell';
	}
	// change style of cells within row
	var myrow = getrow(thisitem);
	if (myrow != null) {
		for (i=2; i<=myrow.cells.length; i++) {
			if ((myrow.cells(i-1).className != "hidegroupentry") && (myrow.cells(i-1).className != "invisible")) { myrow.cells(i-1).className = newclass; }
		}
	}
	// change button state for edit and delete
	frmtable.editentry.disabled = (frmtable.selectedcount != 1);
	togglebuttondisabled (frmtable, 'deleteentry', ((frmtable.selectedcount == 0) || (frmtable.selectedcount != frmtable.deleteselectedcount)));
	// reflect the change in the text shown
	selectmouseover(frmtable, thisitem);
}

function selectmouseout(thisitem) {
	window.status = '';
}

function selectmouseover(frmtable, thisitem) {
	var statusmessage = '';
	var popupmessage = '';
	if (frmtable.selectedcount == 0) {
		statusmessage = 'No';
	} else {
		statusmessage = frmtable.selectedcount.toString();
	}
	statusmessage = statusmessage + ' entr' + ((frmtable.selectedcount != 1) ? 'ies' : 'y');
	statusmessage = statusmessage + ' selected.';
	popupmessage = 'This entry can be modified '
			+ ((thisitem.deleteable != 1) ? 'but not ' : 'and ')
			+ 'deleted.';
	thisitem.title = popupmessage;
	window.status = statusmessage;
}

function setStartDate (frmtable) {
	for (i=1; i<frmtable.noofcolumns; i++) {
		var a = frmtable.all.item(frmtable.id + 'idedit' + i);
		if (a == null) break;
		if (a.tagName == "INPUT") {
			if (a.fldstartdate == 'Y') {
				a.value = getToday();
				a = frmtable.all.item(a.id + 'a');
				if (a != null) { a.value = getToday(); }
			}
		}
	}
}

function showeditarea (frmtable, boolvisible, boolimportvalues){
	var standardbuttonsclass = 'buttonvisible';
	var editbuttonsclass = 'buttonhidden';
	var imgselref;
	if (boolvisible) {
		standardbuttonsclass = 'buttonhidden';
		editbuttonsclass = 'buttonvisible';
	}
	toggleeditrows(frmtable, 'editrowgap', boolvisible);
	toggleeditrows(frmtable, 'editrowactual', boolvisible);
	var selectedrow = null;
	if (boolimportvalues) {
		var a = frmtable.all.item('imgsel');
		if (a!=null) {
			if (a.length!=null) {
		       		for (i=0; i<a.length; i++) {
					if (a(i).selected == 'true') {
						imgselref = a(i);
						selectedrow = getrow(a(i));
						break;
					}
			        }
			} else {
				if (a.selected == 'true') {
					imgselref = a;
					selectedrow = getrow(a);
				}
			}
		}
	}
	for (i=1; i<frmtable.noofcolumns; i++) { 
		var a = frmtable.all.item(frmtable.id + 'idedit' + i);
		if (a == null) break;
		if (a.tagName == "INPUT") {
			if (a.type == 'checkbox') {
				a.checked = false;
			} else {
				a.value = '';
			}
		}
		a.original = '';
		if (boolimportvalues) {
			var boolImportHandled = false;
			if (a.tagName == "SELECT") {
				var ioptionentry = -1;
				for (ioption=0; ioption<a.options.length; ioption++) {
					if (a.options(ioption).value == selectedrow.cells(i).xcolumnid) {
						ioptionentry = ioption;
						break;
					}
				}
				if (ioptionentry == -1) {
					var newoptionelement = document.createElement('OPTION');
					newoptionelement.value = selectedrow.cells(i).xcolumnid;
					// newoptionelement.value = imgselref.rowid;
					newoptionelement.text = selectedrow.cells(i).innerText;
					newoptionelement.addedflag = 'Y';
					a.add (newoptionelement, 0);
					ioptionentry = 0;
				}
				a.options(ioptionentry).selected = true;
				boolImportHandled = true;
			}
			if (a.tagName == "INPUT") {
				if (a.type == "checkbox") {
					a.checked = (selectedrow.cells(i).xcolumnid == '-1');
					boolImportHandled = true;
				}
				if (a.flddate == 'Y') {
					a = frmtable.all.item(a.id + 'a');
				}
			}
			if (!boolImportHandled) {
				a.value = ((selectedrow.cells(i).innerHTML != "&nbsp;") ? selectedrow.cells(i).innerText : '');
				a.original = a.value;
				if (a.flddate == 'Y') {
					a = frmtable.all.item(a.id + 'a');
					a.value = selectedrow.cells(i).innerText;
				}
			}
		} else {
			if (a.tagName == "INPUT") {
				if (a.type == "checkbox") {
					a.checked = false;
				}
				if (a.flddate == 'Y') {
					afield = frmtable.all.item(a.id + 'a');
					if (afield != null) { afield.value = ''; }
				}
				if (a.fldstartdate == 'Y') {
					afield = frmtable.all.item(a.id + 'a');
					if (afield != null) { afield.value = getToday(); }
				}
			}
			if (a.tagName == "SELECT") {
				var ioptionentry = -1;
				for (ioption=0; ioption<a.options.length; ioption++) {
					if (a.options(ioption).addedflag == 'Y') {
						ioptionentry = ioption;
						break;
					}
				}
				if (ioptionentry != -1) {
					a.remove(ioptionentry);
				}
			}
		}
	}
	togglebuttonclass(frmtable, 'addnewentry', standardbuttonsclass);
	frmtable.editentry.className = standardbuttonsclass;
	togglebuttonclass(frmtable, 'deleteentry', standardbuttonsclass);
	togglebuttonclass(frmtable, 'closewindow', standardbuttonsclass);
	frmtable.canceledit.className = editbuttonsclass;
	frmtable.updatenow.className = editbuttonsclass;
	if (boolvisible) {
		var movefield = frmtable.all.item('editrowgap');
		frmtable.canceledit.disabled = false;
		frmtable.updatenow.disabled = false;
		movefield.scrollIntoView(false);
		if (frmtable.firstfield == null)
			frmtable.field1.focus();
		else {
			var a = frmtable.all.item(frmtable.firstfield);
			if (a != null) a.focus();
		}
	}
}

function togglebuttonclass (frmtable, butname, butclass) {
	var a = frmtable.all.item(butname);
	if (a == null) return;
	a.className = butclass;
	return;
}

function togglebuttondisabled (frmtable, butname, flag) {
	var a = frmtable.all.item(butname);
	if (a == null) return;
	a.disabled = flag;
	return;
}

function toggleeditrow(thisitem, boolvisible) {
	if (boolvisible) {
		thisitem.className = 'editrowvisible';
	} else {
		thisitem.className = 'editrowhidden';
	}
}

function toggleeditrows(frmtable, editrowname, boolvisible) {
	var a = frmtable.all.item(editrowname);
	if (a != null) {
		if (a.length != null)
			for (i=0; i<a.length; i++) { 
				toggleeditrow(a(i), boolvisible);
			}
		else
			toggleeditrow(a, boolvisible);
	}
}

function ValidateForm(frmtable) {
	var starttime = '';
	for (i=1; i<frmtable.noofcolumns; i++) { 
		var a = frmtable.all.item(frmtable.id + 'idedit' + i);
		if (a == null) return false;
		if (a.tagName == "SELECT") {
			if ((a.fldrequired == 'Y') && (a.selectedIndex < 0)) {
				alert('You must select an entry for ' + a.fldname);
				a.focus();
				return false;
			}
		}
		if ((a.tagName == "INPUT") || (a.tagName == "TEXTAREA")) {
			if (a.flddate == 'Y') {
				if (!ValidateFormDate(frmtable, a)) {
					return false;
				}
			}
			if (a.flddatetime == 'Y') {
				if (!ValidateFormDate(frmtable, a)) {
					return false;
				}
			}
			if (a.fldcolour == 'Y') {
				var colourvalue = a.value;
				colourvalue = colourvalue.replace(/[\dABCDEFabcdef]+/g, "");
				if (colourvalue.length != 0) {
					alert('The entry for ' + a.fldname + ' must contain a RGB value for example 3366FF');
					a.focus();
					return false;
				}
			}
			if (a.fldcurrency == 'Y') {
				var currencyvalue = a.value;
				currencyvalue = currencyvalue.replace(/[.\d]+/g, "");
				if (currencyvalue.length != 0) {
					alert('The entry for ' + a.fldname + ' must contain a numeric value for example 123.45');
					a.focus();
					return false;
				}
				currencyvalue = a.value;
				currencyvalue = currencyvalue.replace(/^\d*./, "");
				if (currencyvalue.length > 2) {
					alert('The entry for ' + a.fldname + ' must be a numeric value for example 123.45. Too many characters were encountered after the decimal point.');
					a.focus();
					return false;
				}
				currencyvalue = currencyvalue.replace(/\d+/g, "");
				if (currencyvalue.length != 0) {
					alert('The entry for ' + a.fldname + ' must contain a numeric value for example 123.45');
					a.focus();
					return false;
				}
			}
			if (a.fldnumeric == 'Y') {
				var numericvalue = a.value;
				numericvalue = numericvalue.replace(/\d?/g, "");
				if (numericvalue.length != 0) {
					alert('The entry for ' + a.fldname + ' must be a numeric value for example 123.45. Too many decimal points were encountered.');
					a.focus();
					return false;
				}
			}
			if ((a.fldstartdate == 'Y') || (a.fldenddate == 'Y')) {
				var fieldvalue = '';
				if (a.flddatetime == 'Y') {
					fieldvalue = PopulateFieldDatetime (frmtable, a);
				}
				if (a.flddate == 'Y') {
					fieldvalue = PopulateFieldDate (frmtable, a);
				}
				if (a.fldstartdate == 'Y') {
					starttime = fieldvalue;
				}
				if (a.fldenddate == 'Y') {
					if (fieldvalue.length != 0) {
						if (fieldvalue <= starttime) {
							alert('Invalid ' + a.fldname + ' value');
							a = frmtable.all.item(a.id + 'a');
							a.focus();
							return false;
						}
					}
				}
			}
			if (a.fldrequired == 'Y') {
				var requiredfieldname = a.fldname;
				if ((a.flddatetime == 'Y') || (a.flddate == 'Y')) {
					a = frmtable.all.item(frmtable.id + 'idedit' + i + 'a');
				}
				if (a.value.length == 0) {
					alert('You must specify a ' + requiredfieldname);
					a.focus();
					return false;
				}
			}
		}
	}
	PopulateFields (frmtable);
	return true;
}

function ValidateFormDate (frmtable, aHidden) {
	var a = frmtable.all.item(aHidden.id + 'a');
	if (a == null) return false;
	if (a.value.length != 0) {
		var datevalue = a.value;
		if (isNaN(Date.parse(datevalue ))) {
			alert('Unrecognised Date format for ' + aHidden.fldname);
			a.focus();
			return false;
		}
	}
	return true;
}
