	var additionalTableCheckOK = true;
	var fieldNames = new Array();
	var fieldAlerts = new Array();
	var fieldData = new Array ();
	var separator;
	var tableErrMsgElementID = "errMsgTable";
	var commonErrMsgElementID = "errMsgCommon"
	// creates multidimensional arays
	function initFieldData(){
		for (var i = 0; i< fieldNames.length; i++){
			fieldData[i] = new Array();
		}
		separator = getValue("Separator_");
		if (separator == "") {separator = "~~~"};
	}
	
	
	var tArray = new Array();
	var selectedRow = -1;
	var s = '';
	
	function addUser(){
		var num = fieldData[0].length;
		setDataRow( num);
	}
	
	function replaceUser(){
		if(selectedRow == -1) return;
		setDataRow( selectedRow );
	}
	function setDataRow( num ) {
		if (!additionalTableCheckOK) { return };
		var tt = new Array();
		for (var i = 0; i< fieldNames.length; i++) {
			tt[i] = getValue(fieldNames[i]+"_");
			if ( tt[i] == "" && fieldAlerts[i] == "_" ) {
					tt[i] = " "
				} else {
				if ( tt[i] == "" && fieldAlerts[i] != "" ) {
					customAlert (tableErrMsgElementID, fieldAlerts[i]);
					return;
				} 
			}
		}
		
		for (var i = 0; i< fieldNames.length; i++) {
			fieldData[i][num] = tt[i]
		}
		drawTable();
		clearFields();
	}
	function removeUser(){
		if(selectedRow == -1) return;
		var userCount = fieldData[0].length;
		for (var i = 0; i< fieldNames.length; i++) {
			fieldData[i] = fieldData[i].slice(0,selectedRow).concat( fieldData[i].slice(selectedRow+1,userCount) );
		}	
		drawTable();
		clearFields();
	}
	function drawTable(){
		customAlert (tableErrMsgElementID, '');
		s = composeTableString();
		document.all['addInfo'].innerHTML = s;
		if (fieldData[0].length == 0) {
			document.all['removeUserButton'].style.visibility = "hidden";
			document.all['replaceUserButton'].style.visibility = "hidden";
		} else {
			document.all['removeUserButton'].style.visibility = "visible";
			document.all['replaceUserButton'].style.visibility = "visible";
		}
		selectedRow = -1;
		composeResFields();
	}
	
	
	function composeResFields(){
		for (var i = 0; i< fieldNames.length; i++) {
			setValue(fieldNames[i], fieldData[i].join(separator) );
		}
	}
	
	function showUser(n){
		selectedRow = n;
		document.all['userNumIn'+String(n)].checked = true;
		for (var i = 0; i< fieldNames.length; i++) {
			setValue(fieldNames[i]+"_", fieldData[i][n]);
		}
	}
	
	function clearFields() {
		for (var i = 0; i< fieldNames.length; i++) {
			setValue(fieldNames[i]+"_", "");
		}
	}		
	
	function highlightRow (x) {
		x.style.background = highlitedRowBG;
	}
	function unHighlightRow (x) {
		x.style.background = unHighlitedRowBG;
	}
	// initializes data arrays using field values, which contains array members sepsrated by value of the field "Separator_"
	function initialize(){
		if (getValue(fieldNames[0]) != "") {
			for (var i = 0; i< fieldNames.length; i++) {
				fieldData[i] = getValue(fieldNames[i]).split(separator);
				setValue(fieldNames[i]+"_", "");
			}
		};
		drawTable();
	}
	
	function setValue(fieldName, newValue){
		var field = document.forms[currentFormName].elements[fieldName];
		if (field == null) { return };
		var fieldType= field.type;
		if (fieldType == "text" || fieldType == "textarea" || fieldType == "hidden"){ 
			field.value = newValue;
			return;
		}
		
		if (fieldType == "select-one") {
			for (var i =0; i< field.options.length; i++) {
				if (field.options[i].value == newValue) {
					field.options.selectedIndex=i;
					changeCommentsVisibility(fieldName);
					return;
				}
			}
			changeCommentsVisibility(fieldName);
			return;
		}
		
		if (fieldType == "radio" || fieldType == "checkbox") {
			if (field.value == newValue ) {
				field.checked = true;
			} else {
				field.checked = false;			
			}
			changeCommentsVisibility(fieldName);
			return ;
		}
		
		if (String(fieldType) == "undefined") { //multiple radio or checkbox (i hope :)
			for( var i=0; i< field.length; i++) {
				if (field[i].value == newValue ) {
					field[i].checked = true;
				} else {
					field[i].checked = false;
				}
			}
			changeCommentsVisibility(fieldName);
			return;
		}
		
		return;
	}
	
	function getValue(fieldName) {
		 var field = document.forms[currentFormName].elements[fieldName];
		if (field == null) { return ("") };
		var fieldType= field.type;
		if (fieldType == "text" || fieldType == "textarea" || fieldType == "hidden"){ 
			return (field.value);
		}
		
		if (fieldType == "select-one") {
			return (field.options[field.options.selectedIndex].value );
		}
		
		if (fieldType == "radio" || fieldType == "checkbox") {
			if (field.checked == true ) {
				return (field.value);
			}
			return "";
		}
		
		if (String(fieldType) == "undefined") { //multiple radio or checkbox (i hope :)
			for( var i=0; i< field.length; i++) {
				if (field[i].checked == true ) {
					return (field[i].value);
				}
			}
			return("");
		}
		
		return;
	}
	
	function changeCommentsVisibility(name) {
		if (document.all["Comments"+name] == null ) return;
		if (getCommentsVisibility(name) == "Y"){
			document.all["Comments"+name].style.visibility="visible";
			document.all["Comments"+name].style.display="";	
		} else if (getCommentsVisibility(name) == "N"){
			document.all["Comments"+name].style.visibility="hidden";
			document.all["Comments"+name].style.display="none";
		}
	}
// Add by Moiseenko Artem 11/03/2005
	function changefieldsVisibility(name,status) {
		if (document.all[name] == null ) return;
		if (status == "Y"){
			document.all[name].style.visibility="visible";
			document.all[name].style.display="";	
		} else if (status == "N"){
			document.all[name].style.visibility="hidden";
			document.all[name].style.display="none";
		}
	}	
	function getCommentsVisibility(fieldName) {
		var field = document.forms[currentFormName].elements[fieldName];
		if (field == null) { return (null) };
		var fieldType= field.type;
		if (fieldType == "select-one") {
			return (field.options[field.options.selectedIndex].COMMENTSVISIBLE );
		}
		
		if (fieldType == "radio" || fieldType == "checkbox") {
			if (field.checked == true ) {
				return (field.COMMENTSVISIBLE);
			} else {
				if (field.COMMENTSVISIBLE == "Y" ) {
					return "N";
				} else if (field.COMMENTSVISIBLE == "N" ) {
					return "Y";				
				}
			}
		}
		
		if (String(fieldType) == "undefined") { //multiple radio or checkbox (i hope :)
			for( var i=0; i< field.length; i++) {
				if (field[i].checked == true ) {
					return (field[i].COMMENTSVISIBLE);
				}
			}
			return("");
		}
		
		return;
	}
	var oblFieldNames = new Array; // obligatory field names array
	var oblFieldRE = new Array; // regular expressions
	var oblFieldAlerts = new Array; // corresponding alerts
	
	
	function checkOblFields(){
		var fv;
		for (var i=0; i< oblFieldNames.length; i++){
			fv = getValue(oblFieldNames[i]);
 
			if (oblFieldRE[i].exec(fv) != fv ){
		    		customAlert(commonErrMsgElementID, oblFieldAlerts[i]);
				return false;
			} else {
		    		customAlert(commonErrMsgElementID, '');
			}
		}
		return true;
	}
	function openPopup(url, width, height){
		var w = window.open (url, 'newWin', 'resizable=yes,scrollbars=auto,status=yes,width='+String(width)+',height='+String(height));
		w.focus();
	}
	function writeDateOptions(n) {
		  document.write('<OPTION value="" selected></OPTION> ');
		  for (var d=1; d<n; d++) {
			temporaryDayString = d<10 ? "0"+String(d) : d	;
			  document.write("<OPTION value="+temporaryDayString+">"+temporaryDayString+"</OPTION>");
		  }
	}
	function customAlert(elementID, msg) {
		if (document.all[elementID] == null) {
			if (msg != '') {
				alert (msg);
			}
		} else {
			document.all[elementID].innerHTML=msg;
		}
	}

