/*
	dbInterface.js
*/

function displayRecord()
{
	if(http.readyState == 4 && http.status == 200)
	{  
		if(http.responseText != null)
		{
			eContent = document.getElementById(document.sElement);
			if(eContent != null)
				eContent.innerHTML = http.responseText;
		}
	}	
}

function saveNewFormDetails(sTableName)
{
	// PURPOSE: Sends request via AJAX to save form details
	
	// USED BY: dbMapper->editRec
	//			dbMapper->viewRec (subforms)
	
	// encode data from form
	sFormName = sTableName + "DetailsForm";
	formData = encodeForm(sFormName);

	// get onreadystatechange function
	fnAction = confirmSaveForm;
	eForm = document.getElementById(sFormName);
	if(eForm != null)
	{
		if(eForm.getAttribute('readystateFN') != null)
			fnAction = window[eForm.getAttribute('readystateFN')];
	}
	//*/
	
	// create AJAX request and send
	http.open("POST", "./classlibs/dbProcessor.php", true);
	http.onreadystatechange = fnAction;
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(formData);	
}

function saveFormDetails(sTableName)
{
	// PURPOSE: Sends request via AJAX to save form details
	
	// USED BY: dbMapper->editRec
	//			dbMapper->viewRec (subforms)
	
	// encode data from form
	sFormName = sTableName + "DetailsForm";
	formData = encodeForm(sFormName);
	// get onreadystatechange function
	fnAction = confirmSaveForm;
	eForm = document.getElementById(sFormName);
	if(eForm != null)
	{
		if(eForm.getAttribute('readystateFN') != null)
			fnAction = window[eForm.getAttribute('readystateFN')];
	}
	//*/
	
	// create AJAX request and send
	http.open("POST", "./classlibs/dbEditor.php?action=save&table=" + sTableName, true);
	http.onreadystatechange = fnAction;
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(formData);	
}

function confirmSaveForm()
{
	// PURPOSE: Processes result of saveFormDetails
	// 			Gives user feedback whether form data was saved correctly or not
		
	if(http.readyState == 4 && http.status == 200)
	{  
		sMsg = "ERROR: Record not updated!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
			sMsg = xmlData.getElementsByTagName('msg')[0] != null?xmlData.getElementsByTagName('msg')[0].getAttribute('value'):"";

			// process response data
			eCtrl = document.getElementById("edId");
			if(eCtrl != null)
				eCtrl.value = sId;
			eCtrl = document.getElementById("submit");
			if(eCtrl != null)
				eCtrl.value = 'Update';
			
		}

		eCtrl = document.getElementById("formHint");
		if(eCtrl != null)
			eCtrl.innerHTML = "<hr>" + sMsg;
		else
			alert(sMsg);
	}
}


function confirmNewSubItem()
{
	// PURPOSE: Processes result of saveFormDetails called from dbMapper->viewRec() (subform)
	// 			Gives user feedback whether form data was saved correctly or not
	//			Hides new item form and displays new data

	if(http.readyState == 4 && http.status == 200)
	{  
		sStatus = "ERROR: Record not updated!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sTable = xmlData.getElementsByTagName('table')[0] != null?xmlData.getElementsByTagName('table')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
		}
		//alert(sStatus);
		
		sFormName = sTable + "DetailsForm";
		
		// create a form to edit new subitem		
		eForm = document.getElementById(sFormName);
		if(eForm != null)
		{
			sFormBody = "<form id='" + sTable + sId + "DetailsForm' method='POST'>\n";
			sFormBody += "<dl id='" + sTable + sId + "'>\n";

			// add display fields
			for(iInput=0; iInput < eForm.elements.length; iInput++)
			{
				// skip control inputs
				if(eForm.elements[iInput].type == "button" || eForm.elements[iInput].type == "hidden")
					continue;
					
				// ascertain what attributes are required from form field
				bReadOnly = eForm.elements[iInput].type == "select-one";
				bRequired = eForm.elements[iInput].onchange != null
				sInputName = eForm.elements[iInput].name.replace(/ed/, "");
				sInputValue = eForm.elements[iInput].value;
				sTagClass = sTable + "_" + eForm.elements[iInput].name.replace(/ed/, "") + "Tag";
				sDataClass = sTable + "_" + eForm.elements[iInput].name.replace(/ed/, "") + "Data";

				// get field text from select options where applicable
				if(eForm.elements[iInput].type == "select-one")
					sInputValue = eForm.elements[iInput].options[sInputValue - 1].text;

				// create actual field element with <dt>field tag</dt>
				sFormBody += "<dt class='"  + sTagClass + "'>" + sInputName + '</dt>\n';
				sFormBody += "<dd class='" +sDataClass + "'" + (bReadOnly?" readonly='readonly'":"") + (bRequired?" required='required'":"") + ">" + sInputValue + "</dd>\n";
			
				// clear eForm field
				if(eForm.elements[iInput].type != "select-one")
					eForm.elements[iInput].value = "";
				else
					eForm.elements[iInput].value = 0;
			}

			// add control buttons 
			sFormBody += '</dl>\n<p style="text-align:right">';
			sFormBody += "<input type='button' value='Edit' onclick='editLinkedRec(\"" + sTable + "\", \"" + sId + "\")' />";
			sFormBody += "<input type='button' value='Delete' onclick='deleteLinkedRec(\"" + sTable + "\", \"" + sId + "\")' />";
			sFormBody += "<input style='display:none' type='button' value='Save' onclick='saveSubFormDetails(\"" + sTable + "\", \"" + sId + "\")' />";
			// sFormBody += "<input style='display:none' type='button' value='Cancel' onclick='cancelLinkedEdit(\"" + sTable + "\", \"" + sId + "\", true)' />";
			sFormBody += "<input style='display:none' type='button' value='Cancel' onclick='cancelEdit(\"" + sTable + "\", \"" + sId + "\", true)' />";
			sFormBody += "<input  id='edId' name='edId' type='hidden' value='" + sId + "' />";
			sFormBody += "</p>\n</form>";

			// create form body
			el = document.getElementById("new" + sTable + "Record");
			if(el != null)
				el.innerHTML += sFormBody;
			else
				alert("new" + sTable + "Record is not in document");
		}
		else
			alert(sForm + " is not in document");

		// toggle new item form and button
		toggleView(sFormName);		
		toggleView("new" + sTable + "Btn");		
	}
}

function saveSubFormDetails(sForm, sTable)
{
	// PURPOSE: Sends request via AJAX to save dbMapper->viewRec() subform details
	
	// USED BY: dbMapper->viewRec() subforms
	
	formData = encodeForm(sForm);
	http.open("POST", "./classlibs/dbEditor.php?action=save&table=" + sTable, true);
	http.onreadystatechange = confirmSaveSubForm;
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(formData);
}

function confirmSaveSubForm()
{
	// PURPOSE: Processes result of saveSubFormDetails called from dbMapper->viewRec() subform
	// 			Gives user feedback whether form data was saved correctly or not
	//			Hides edit item form and redisplays data

	if(http.readyState == 4 && http.status == 200)
	{  
		sMsg = "ERROR: Record not updated!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sTable = xmlData.getElementsByTagName('table')[0] != null?xmlData.getElementsByTagName('table')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
			sMsg = xmlData.getElementsByTagName('msg')[0] != null?xmlData.getElementsByTagName('msg')[0].getAttribute('value'):"";
			
			// process response data
			eForm = document.getElementById(sTable + sId + "DetailsForm");
			if(eForm != null && eForm.getAttribute('readystateFN') != null)
				setTimeout(eForm.getAttribute('readystateFN') + "()",1000);
			else
				cancelEdit(sTable + sId + "DetailsForm", false);
		}
		eCtrl = document.getElementById("formHint");
		if(eCtrl != null)
			eCtrl.innerHTML = "<hr>" + sMsg;
		else
			alert(sMsg);
	}
}

function editRec(sFormName)
{
	// PURPOSE: Creates input fields to edit items from dbMapper->ViewRec() forms
	
	// get empty details form
	eForm = document.getElementById(sFormName);
	if(eForm == null)	
		return;
	
	// toggle edit btns
	eBtns = eForm.getElementsByTagName("input");
	for(iBtn=0; iBtn< eBtns.length; iBtn++)
	{
		if(eBtns[iBtn].style.display == "none")
			eBtns[iBtn].style.display = "inline";
		else
			eBtns[iBtn].style.display = "none";
	}

	// create input ctrls for editable fields
	eLabels = eForm.getElementsByTagName("dt");
	eFields = eForm.getElementsByTagName("dd");
	for(iField=0; iField< eFields.length; iField++)
	{
		if(eFields[iField].getAttribute("readonly") == "readonly")
			continue;
			
		if(eLabels[iField].getAttribute("alias") != null)
		{
			eLabels[iField].style.display = 'none';
			eFields[iField].style.display = 'none';
			continue;
		}
			
		sFieldName = eLabels[iField].innerHTML.replace(/ /,"_");
		if(eLabels[iField].getAttribute("fieldName") != null)
			sFieldName = eLabels[iField].getAttribute("fieldName").replace(/ /,"_");
		sValue = trim(eFields[iField].innerHTML);
		sInputType = "text";
		if(eFields[iField].getAttribute("edValue") != null)
		{
			sValue = eFields[iField].getAttribute("edValue");
			// sInputType = "password";
		}
		if(eFields[iField].getAttribute("type") != null)
		{
			//if(eFields[iField].getAttribute("type") == "file")
			//	sInputType = "file";
				sInputType = eFields[iField].getAttribute("type");
		}
			
		sRequired = eFields[iField].getAttribute("required") == "required"?' onChange=updateBtns(' + "'" + sFormName + "','submit');":"";
		
		if(eLabels[iField].getAttribute('hidden') == 'hidden')
		{
			eLabels[iField].style.display = '';
			eFields[iField].style.display = '';
		}
		if(eFields[iField].getAttribute('options') != null)
		{
			sContent = '\n<select name="ed' + sFieldName + '" default="' + sValue + '">';
			sOptions = eFields[iField].getAttribute('options').split(";");
			for(iOpt=0;iOpt<sOptions.length;iOpt++)
			{
				sAttr = sOptions[iOpt].split("=");
				sSelected = sValue == sAttr[1]?" selected=\"selected\"":"";
				sContent += "\n\t<option value=\"" + sAttr[0] + "\"" + sSelected + ">" + sAttr[1] + "</option>";
			}
			sContent += "</select>";
			eFields[iField].innerHTML =	sContent;
		}
		else
		{
			if(sInputType == 'date')
			{
				eFields[iField].innerHTML = "\n<input id=\"" + sFieldName + "\" name=\"ed" + sFieldName + "\" type=\"hidden\" default=\"" + sValue + "\" value=\"" + sValue + "\"" + sRequired + " />\n";
				sYear = "19"; nMonth=1; nDay=1;
				if(sValue.indexOf("-") >=0)
				{
					if(sValue == "0000-00-00")
						sValue = Date().getFullYear() + "-" + (Date().getMonth() + 1) + "-" + Date.getDate();
					aDate = sValue.split("-");
					sYear = aDate[0]; nMonth = aDate[1]; nDay = aDate[2];
				}
				// Select control for day
				sDay = "<select id=\"" + sFieldName + "Day\" onchange=\"updateDateField('"+sFieldName+"')\">";
				for(iDay = 1; iDay < 32; iDay++)
				{
					sSelected = iDay == nDay?"selected=\"selected\"":"";
					sDay += "<option value=\""+iDay+"\" " + sSelected + ">" + iDay + "</option>";
				}
				sDay += "</select>\n";

				// Select control for month
				sMonth = "<select id=\"" + sFieldName + "Month\" onchange=\"updateDateField('"+sFieldName+"')\">";
				aMonths = new Array("January","February","March","April","May","June","July","August","September","October","Novemeber","December");
				for(iMonth=0;iMonth<aMonths.length;iMonth++)
				{
					sSelected = iMonth+1 == nMonth?"selected=\"selected\"":"";
					sMonth += "<option value=\""+(iMonth+1)+"\" " + sSelected +">" + aMonths[iMonth] + "</option>";
				}	
				sMonth += "</select>\n";
				
				eFields[iField].innerHTML += sDay + " " + sMonth + " ";	
				eFields[iField].innerHTML += "\t\t\t<input class=\"input\" id=\"" + sFieldName + "Year\" size=\"4\" value=\"" + sYear + "\" onchange=\"updateDateField('"+sFieldName+"')\"/>\n";

			}
			else if(sInputType == 'checkbox')
			{
				sChecked = sValue == "Yes"?" checked=\"checked\" ":""
				eFields[iField].innerHTML = "<input id=\"" + sFieldName + "1\" type=\"radio\" name=\"ed" + sFieldName + "\" value=\"1\" " + sChecked + "/>";
				eFields[iField].innerHTML += "<label for=\"" + sFieldName + "1\">Yes</label>";

				sChecked = sValue == "No"?" checked=\"checked\" ":""
				eFields[iField].innerHTML += "<input id='" + sFieldName + "0\" type=\"radio\" name=\"ed" + sFieldName + "\" value=\"0\" " + sChecked + "/>";; 
				eFields[iField].innerHTML += "<label for=\"" + sFieldName + "0\">No</label>";
				
			}
			else if(sInputType == 'file')
				eFields[iField].innerHTML += '<br/>\n<input name="ed' + sFieldName + '" type="' + sInputType + '" default="' + sValue + '" value="' + sValue + '"' + sRequired + " />\n";
			else if(sInputType == 'textarea')
				eFields[iField].innerHTML = '\n<textarea name="ed' + sFieldName + '" default="' + sValue + '" ' + sRequired + ' cols="40" rows="10">' + sValue + "</textarea>\n";
			else
				eFields[iField].innerHTML = '\n<input name="ed' + sFieldName + '" type="' + sInputType + '" default="' + sValue + '" value="' + sValue + '"' + sRequired + " />\n";
		}
	}
}

function deleteLinkedRec(sTableName, sId)
{
	// PURPOSE: Creates AJAX request to delete the record with sId from sTableName

	if(!confirm("Are you sure you want to delete this information?"))
		return;
		
	http.open("GET", "./classlibs/dbEditor.php?action=delete&table=" + sTableName + "&id=" + sId, true);
	http.onreadystatechange = confirmLinkedDelete;
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(null);	
}

function confirmLinkedDelete()
{
	// PURPOSE: Provides user with feedback whether record was deleted or not

	if(http.readyState == 4 && http.status == 200)
	{  
		sStatus = "ERROR: Record not deleted!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sTable = xmlData.getElementsByTagName('table')[0] != null?xmlData.getElementsByTagName('table')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
			sSuccess = xmlData.getElementsByTagName('success')[0] != null?xmlData.getElementsByTagName('success')[0].getAttribute('value'):"";
			
			// process response data
			if(sSuccess == 'true')
			{
				sForm = sTable; // .substr(sTable.indexOf("-") + 1);
				eForm = document.getElementById(sForm + sId + "DetailsForm");
				if(eForm != null)	
				{
					eForm.innerHTML = "";
					eForm.id = "";
					eForm.style.display = "none";
				}	
			}
		}
		alert(sStatus);
	}
}

function cancelEdit(sFormName, bResetData)
{
	// PURPOSE: Removes input fields from subform and redisplays data

	// get empty details form
	eForm = document.getElementById(sFormName);
	if(eForm == null)	
		return;

    // prepare variables to store alias fields
    nAlias = 0;
    aAlias = new Array;

    // get array of tags that hold field properties
	eLabels = eForm.getElementsByTagName("dt");
    // get array of fields to update and change
	eFields = eForm.getElementsByTagName("dd");
	// remove input ctrls from editable fields
	for(iField=0; iField< eFields.length; iField++)
	{
        // skip read only fields, their value wouldn't have changed
		if(eFields[iField].getAttribute("readonly") == "readonly")
			continue;

        // process alias fields
		if(eLabels[iField].getAttribute("alias") != null)
		{
            // toggle display of field
			eLabels[iField].style.display = '';
			eFields[iField].style.display = '';

            // remember as an alias for processing further down
            aAlias[nAlias++] = iField;

            // no other action required at this point
			continue;
		}

        // get the input control
		sFieldName = eLabels[iField].innerHTML.replace(/ /,"_");
		eInputs = eFields[iField].getElementsByTagName("input");
        // if element wasn't an input, assume it's a select
        //TODO: Add extra code for checkboxes if necessary
		if(eInputs.length == 0)
			eInputs = eFields[iField].getElementsByTagName("select");
		if(eInputs.length == 0)
			eInputs = eFields[iField].getElementsByTagName("textarea");

        // get new data value
		if(eInputs.length > 0)
		{
			sNewValue = "";
			if(eInputs[0].tagName=='SELECT')
				sNewValue = eInputs[0].options[eInputs[0].selectedIndex].text;
			else if(eInputs[0].type=='radio')
			{
				if(eInputs[0].checked)
					sNewValue = eInputs[0].value?"Yes":"No";
			}
			else //if(eInputs[0].type=='text' || eInputs[0].type=='password' || eInputs[0].type=='file' || eInputs[0].type=='textarea' || eInputs[0].type=='radio')
				sNewValue = eInputs[0].value;
				
			sValue = bResetData?eInputs[0].getAttribute('default'):sNewValue;
			if(eInputs[0].type=='radio')
				sValue = eInputs[0].checked?"Yes":"No";
			
			if(eFields[iField].getAttribute("type") =='date')
			{
				aDate = eFields[iField].getAttribute("edValue").split("-");
				sValue = aDate[2] + "/" + aDate[1] + "/" + aDate[0];
			}
			if(eInputs[0].type=='file')
				sValue = eFields[iField].firstChild.nodeValue;

			if(eInputs[0].type=='password')
				sValue = "*****";
		}
        // replace input control with new value
		eFields[iField].innerHTML = sValue;

        // toggle back hidden edit fields (usually alias fields)
		if(eLabels[iField].getAttribute('hidden') == 'hidden')
		{
			eLabels[iField].style.display = 'none';
			eFields[iField].style.display = 'none';
		}

		//TODO: *** update alias values
        for(nAlias=0;nAlias<aAlias.length;nAlias++)
		{
            sAliasData = "";
            // get tablename:field1;field2
            aAliasParam = eLabels[aAlias[nAlias]].getAttribute("alias").split(":");
            aFields = aAliasParam[1].split(";");
            // build new alias content
			for(nField=0;nField<aFields.length;nField++)
            {
                sTagName = aAliasParam[0] + "_" + aFields[nField] + "Data";
                eEl = document.getElementById(sTagName);
                if(eEl != null)
                    sAliasData += eEl.innerHTML + " ";
            }
   			eFields[aAlias[nAlias]].innerHTML = sAliasData;
		}
        //*/

	}

	// toggle edit btns
	eBtns = eForm.getElementsByTagName("input");
	for(iBtn=0; iBtn< eBtns.length; iBtn++)
	{
		if(eBtns[iBtn].style.display == "none")
			eBtns[iBtn].style.display = "inline";
		else
			eBtns[iBtn].style.display = "none";
	}
}

function editListItem(sTableName, bNewRec)
{
	sFormName = sTableName + "DetailsForm";
	eSelect = document.getElementById("recList");
	eForm = document.getElementById(sFormName);

	if(eSelect == null || eForm == null)
		return;

	if(bNewRec)
		eSelect.selectedIndex = -1;
	nItem = eSelect.selectedIndex;
	if(nItem < 0)	
	{
		eForm.elements['edName'].value = "";
		eForm.elements['edId'].value = "";
	}
	else
	{
		eForm.elements['edName'].value = eSelect.options[nItem].text;
		eForm.elements['edId'].value = eSelect.options[nItem].value;
	}
	
	eBtn = document.getElementById("Save" + sTableName + "Btn");
	if(eBtn != null)
		eBtn.value = nItem<0?"Create":"Update";

	eBtn = document.getElementById("Del" + sTableName + "Btn");
	if(eBtn != null)
		eBtn.disabled = nItem<0?"disabled":"";
		
	updateBtns(sTableName + "DetailsForm", "Save" + sTableName + "Btn");
}

function deleteListItem(sTableName)
{
	eSelect = document.getElementById("recList");
	if(eSelect.selectedIndex < 0)
	{
		alert("Please select a record first");
		return;
	}
	if(!confirm("Are you sure you want to delete this item?"))
		return;

	sId = eSelect.options[eSelect.selectedIndex].value;
	
	http.open("GET", "./classlibs/dbEditor.php?action=delete&table=" + sTableName + "&id=" + sId, true);
	http.onreadystatechange = confirmDeleteListItem;
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.send(null);		
	
}

function confirmDeleteListItem()
{
	// PURPOSE: Provides user with feedback whether record was deleted or not

	if(http.readyState == 4 && http.status == 200)
	{  
		sStatus = "ERROR: Record not deleted!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sTable = xmlData.getElementsByTagName('table')[0] != null?xmlData.getElementsByTagName('table')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
			sSuccess = xmlData.getElementsByTagName('success')[0] != null?xmlData.getElementsByTagName('success')[0].getAttribute('value'):"";
			
			// process response data
			if(sSuccess == 'true')
			{
				eSelect = document.getElementById("recList");
				eSelect.remove(eSelect.selectedIndex);
				editListItem(sTable, true);				
			}
		}
		alert(sStatus);
	}
}

function confirmSaveListItem()
{
	// PURPOSE: Processes result of saveFormDetails
	// 			Gives user feedback whether form data was saved correctly or not
		
	if(http.readyState == 4 && http.status == 200)
	{  
		sStatus = "ERROR: Record not updated!";

		if(http.responseXML != null)
		{
			// get response data
			xmlData = http.responseXML.documentElement;
			sId = xmlData.getElementsByTagName('id')[0] != null?xmlData.getElementsByTagName('id')[0].getAttribute('value'):"";
			sStatus = xmlData.getElementsByTagName('status')[0] != null?xmlData.getElementsByTagName('status')[0].getAttribute('value'):"";
			sTableName = xmlData.getElementsByTagName('table')[0] != null?xmlData.getElementsByTagName('table')[0].getAttribute('value'):"";

			eSelect = document.getElementById("recList");
			eForm = document.getElementById(sTableName + "DetailsForm");
			bNewItem = true;
			
			if(eSelect != null && eForm != null)
			{
				for(iOption = 0; iOption < eSelect.options.length; iOption++)
				{
					if(eSelect.options[iOption].value == sId)
					{
						eSelect.options[iOption].text = eForm.elements['edName'].value;
						bNewItem = false;
						break;
					}
				}
				if(bNewItem)
				{
					eOption = new Option;
					eOption.text = eForm.elements['edName'].value;
					eOption.value = sId;
					
					eSelect.add(eOption,null);
				}
			}
			editListItem(sTableName, true);
		}
	}
}

