function TOOLSCONTEXT_propertyNameFromElementId(elId) {
	idParts = elId.split(/:::/);
	return idParts[4];
}

function TOOLSCONTEXT_performAction(itemLink, withValue) {
	var actingOnId = TOOLSCONTEXT.utility.entityIdFromElementId(itemLink.id);
	var actingOnEntity = TOOLSCONTEXT.utility.entityNameFromElementId(itemLink.id);
	var actingOnProperty = TOOLSCONTEXT_propertyNameFromElementId(itemLink.id);
	var actionDescription = itemLink.innerHTML;
	var itemDescription = '';
	if (TOOLSCONTEXT.itemDescriptions && TOOLSCONTEXT.itemDescriptions[actingOnEntity]) {
		itemDescription = TOOLSCONTEXT.itemDescriptions[actingOnEntity][actingOnId];
	} else {
		itemDescription = 'current item';
	}
	
	var propertyDisplay = TOOLSCONTEXT_getLinkContent(actingOnId, actingOnProperty);
	if (withValue) {
		var propertyValue = withValue;
	} else {
		var propertyValue = propertyDisplay;
	}
	var action = TOOLSCONTEXT_getActionParams(itemLink);
	var useFunction = action.func;
	if (useFunction) {
		var tmpFunc = new Function("itemLink", useFunction);
		tmpFunc(itemLink);
		TOOLSCONTEXT_closeMenu();
		return;
	}
	var useHref = action.href;
	var confirm = action.confirm;
	var suppressSubmitTo = false;
	var targettingSelf = false;
	if (action.target) {
		if (TOOLSCONTEXT_getFrameName(self) == TOOLSCONTEXT_getFrameName(action.target)) {
			targettingSelf = true;
		}
	}
	if ((useHref.indexOf('toolscontext.suppressSubmitTo') != -1) || ((!targettingSelf) && action.target && (TOOLSCONTEXT_getFrameName(action.target).indexOf('Set') != -1))) {
		suppressSubmitTo = true;
		useHref = useHref.replace(/toolscontext.suppressSubmitTo/, '');
	}
	
	if (useHref.indexOf('toolscontext.confirm') != -1) {
		confirm = 'yes';
		useHref = useHref.replace(/toolscontext.confirm/, '');
	}
	var confirmMessage = '';
	if (useHref.indexOf('toolscontext.confirmMessage') != -1) {
		confirm = 'yes';
		var hrefParts = useHref.split(/toolscontext.confirmMessage=/);
		confirmMessage = hrefParts[1];
		useHref = useHref.replace(/toolscontext.confirm/, '');
	}
	if (useHref.indexOf('{value}') != -1) {
		if (propertyValue == '--') {//todo: fix incorrect dependence of function on display
			alert('Sorry, no information for this item');
			return;
		}
	}
	
	useHref = useHref.replace(/\{id\}/g, actingOnId);
	useHref = useHref.replace(/\{description\}/g, escape(itemDescription));
	useHref = useHref.replace(/\{value\}/g, escape(propertyValue));
	useHref = useHref.replace(/\{display\}/g, escape(propertyDisplay));
	
	if ((useHref.indexOf('mailto:') != 0) && (action.target != '_blank')) {
		if (useHref.indexOf('?') == -1) {
			useHref += '?';
		}
		if (!suppressSubmitTo) {
				if (action.immediateReturn) {
				var nextDisplayKey = 'jumpTo';
			} else {
				//if (actionOptions.submitEntity) {
				//	var nextDisplayKey = actionOptions.submitEntity + '.submitTo';
				//} else {
					var nextDisplayKey = actingOnEntity + '.submitTo';
				//}
			}
			useHref = useHref + '&' + nextDisplayKey + '=' + TOOLSCONTEXT.submitTo;
		}
		
		if (action.column) useHref = 'customstep/columnFrame.php?columnWidth=' + action.column + '&customstep=' + escape('../' + useHref);
		useHref = TOOLSCONTEXT.uriToVersion + useHref;
	}
	if (confirm == 'yes') {
		if (!confirmMessage) {
			var confirmMessage = 'Are you sure you want to ' + actionDescription + ' "' + itemDescription + '?"';
		}
		if (!window.confirm(confirmMessage)) {
			TOOLSCONTEXT_closeMenu(TOOLSCONTEXT.openMenuId);
			return;
		}
	}
	
	TOOLSCONTEXT_closeMenu(TOOLSCONTEXT.openMenuId);
	if (action.target == '_blank') {
		if (useHref.indexOf('http') != 0) {
			useHref = TOOLSCONTEXT.uriToVersion + useHref;
		}
		window.open(useHref);
	} else {
		var targetFrame = TOOLSCONTEXT_loadActionFrame(action.target);
		useHref = useHref.replace('//', '/');
		var targetSetInfo = TOOLSCONTEXT_getFrameName(action.target).match(/Set([0-9])/);

		if (targetSetInfo) {
			var targetSetNumber = targetSetInfo[1];
			useHref += '&listLevel=' + targetSetNumber;
		}
		//targetFrame.setAttribute('src', useHref); //targetFrame
		//console.log(useHref);
		//console.log(targetFrame);
		TOOLSCONTEXT_setFrameLocation(targetFrame, useHref); //targetFrame
	}
}

function TOOLSCONTEXT_getFrameName(frameRef) {
	if (typeof frameRef == 'object') {
		return frameRef.name;
	}
	return frameRef;
}

function TOOLSCONTEXT_loadToFrame(frameName, frameUrl) {
	var targetFrame = TOOLSCONTEXT_loadActionFrame(frameName);
	var useHref = TOOLSCONTEXT.uriToVersion + frameUrl;
	TOOLSCONTEXT_setFrameLocation(targetFrame, useHref);
}

function TOOLSCONTEXT_setFrameLocation(frameEl, newLocation) {
	if (frameEl.tagName == 'IFRAME') {
		frameEl.setAttribute('src', newLocation);
	} else {
		frameEl.document.location.href = newLocation;
	}
}

function TOOLSCONTEXT_processSelectOne(checkEl, stepLink, selectName) {
	if (!checkEl.checked) return;
	var docPath = document.location.pathname;
	var newLocation = docPath + '?' + stepLink + '&' + selectName + '=' + checkEl.value;
	if (typeof top.mainContent == 'undefined') {
		var targetFrame = self;
	} else {
		var targetFrame = top.mainContent;
	}
	targetFrame.document.location.href = newLocation;
	return;
}

function TOOLSCONTEXT_loadActionFrame(frameName) {
	if (typeof frameName == 'object') return frameName;
	if (frameName == '') return top.frames['mainContent'];
	if (frameName == 'self') return self;
	if (top.frames[frameName]) return top.frames[frameName];
	var detailFrameId = 'TOOLSCONTEXT:::detailFrame' + frameName;
	var priorIFrame = parent.document.getElementById(detailFrameId);
	if (priorIFrame) return priorIFrame;
	var priorFrame = top.mainContent[frameName];
	if (priorFrame) return priorFrame;
	var curFrame = document.createElement('iframe');
	curFrame.setAttribute('name', 'Set1');
	TOOLSCONTEXT.dom.setStyleText(curFrame, 'width: 50%; height: 100%; border: 0px;');
	var saveHTML = document.documentElement.innerHTML;
	document.body.innerHTML = '';
	document.body.appendChild(curFrame);
	//frameDoc = curFrame.contentDocument;
	var frameDoc = TOOLSCONTEXT.dom.getIframeDocument(curFrame);
	frameDoc.open('text/html', 'replace');
	frameDoc.write('<html>' + saveHTML + '</html>');
	frameDoc.close();
	var newFrame = document.createElement('iframe');
	newFrame.setAttribute('name', 'Set2');
	newFrame.setAttribute('id', detailFrameId);
	TOOLSCONTEXT.dom.setStyleText(newFrame, 'width: 49%; height: 100%; border: 0px;');
	document.body.appendChild(newFrame);
	return newFrame;
}

function TOOLSCONTEXT_getLinkContent(id, propertyName) {
	var elementId = TOOLSCONTEXT.utility.subElementIdFromEntityId(TOOLSCONTEXT.grid.entity, id, 'grid', propertyName);
	var gridLink = document.getElementById(elementId);
	if (gridLink) {
		if (gridLink.getElementsByTagName('div').length > 0) {
			gridLink = gridLink.getElementsByTagName('div')[0];
		}
		if (gridLink.getElementsByTagName('span').length > 0) {
			gridLink = gridLink.getElementsByTagName('span')[0];
		}
		return TOOLSCONTEXT.utility.trim(gridLink.innerHTML);
	} else {
		return '';
	}
}

function TOOLSCONTEXT_getActionParams(itemLink) {
	var actingOnProperty = TOOLSCONTEXT.utility.propertyNameFromElementId(itemLink.id);
	var actionType = TOOLSCONTEXT.utility.groupNameFromElementId(itemLink.id);
	var action = TOOLSCONTEXT_data.actions[actionType][actingOnProperty];
	return action;
}

function selectionResult(entityName, requireInput) {
	if (typeof(params) == 'undefined') params = new Object();
	params.calledBy = self;
	params.del = new Object();
	if (requireInput == 'selectMultiple') {
		params.ok = new Object();
		params.ok.enabled = true;
		params.ok.linkTo = 'submit';
	}
	params.entityName = entityName;
	top.storeParams = false;
	if (checkCount > 0) {
		params.del.enabled = true;
		params.del.linkTo = 'deleteMultiple';
	} else {
		params.del.enabled = false;	
	}
	if (parent.registerMainChange) {
		parent.registerMainChange(params);
	} else {
		top.registerMainChange(params);
	}
}
function registerSelection(checkObj, entityName, requireInput) {
	if (checkObj.checked) {
		checkCount++;
	} else {
		if (checkCount > 0)
		checkCount--;	
	}
	selectionResult(entityName, requireInput);
}

function checkAll(checkStatus, entityName) {
	checkCount = 0;
	for (i = 0; i < document.fm.elements.length; i++) {
		curElObj = document.fm.elements[i];
		if (curElObj.name == (entityName + '.id[]')) {
			curElObj.checked = checkStatus;
			if (checkStatus) checkCount++;
		}
	}
	selectionResult(entityName);
}

function TOOLSCONTEXT_divertExport(curFm, entityName) {
	saveAction = curFm.action;
	saveTarget = curFm.target;
	curFm.action = TOOLSCONTEXT.uriToVersion + "go.php?toolscontext.response=csv";
	if (entityName != 'survey') curFm.target = 'help';
	curFm.submit();
	curFm.action = saveAction;
	curFm.target = saveTarget;
}

function TOOLSCONTEXT_sendToList(curFm) {
	curFm.action = TOOLSCONTEXT.uriToVersion + "go.php?toolscontext.uistep=ListSaveSend";
	curFm.submit();
}

function TOOLSCONTEXT_divertPrint(curFm, entityName) {
	
	saveAction = curFm.action;
	saveTarget = curFm.target;
	curFm.action = TOOLSCONTEXT.uriToVersion + 'go.php?toolscontext.uistep=PrintMultiple&printEntity=' + entityName;
	curFm.target = '_blank';
	curFm.submit();
	curFm.action = saveAction;
	curFm.target = saveTarget;
}

function divertImport(curFm, entityName, importToEntity) {
	//saveAction = curFm.action;
	//saveTarget = curFm.target;
	curFm.action = TOOLSCONTEXT.uriToVersion + "go.php?toolscontext.uistep=ImportFromEntity&importEntity=" + entityName + "&toEntity=" + importToEntity;
	//if (entityName != 'survey') curFm.target = 'help';
	curFm.submit();
	//curFm.action = saveAction;
	//curFm.target = saveTarget;
}

function checkEnter(event) {
	var NS4 = (document.layers) ? true : false;
	var code = 0;
	if (NS4) {
		code = event.which;
	} else {
		code = event.keyCode;
	}
	if (code==13) document.fm.submit();
}

function doSort(fm, entityName, elementName) {
	var fullName = entityName + '.dp.' + elementName + '.sort';
	var el = fm.elements[fullName];
	switch (el.value) {
		case '':
		case 'none':
			el.value = 'ASC';
			break;
			case 'ASC':
			el.value = 'DESC';
			break;
			case 'DESC':
			el.value = 'none';
			break;
	}
	var sortClickName = entityName + '.sortClick';
	fm.elements[sortClickName].value = elementName;
	fm.submit();
}


function clearSearch(searchFm) {
	for (i = 0; i < searchFm.elements.length; i++) {
		curElObj = searchFm.elements[i];
		if (curElObj.name.indexOf('.dp.') != -1) {
			if (curElObj.type == 'text') {
				curElObj.value = '';
			} else if (curElObj.name.indexOf('queryEntry') != -1) {
				curElObj.value = '';
			} else if (curElObj.type == 'checkbox') {
				curElObj.checked = false;
			} else {
				curElObj.selectedIndex = 0;
			}
		}
	}
	searchFm.submit();			
}

function refreshSearch(searchFm) {
	searchFm.submit();
}

function TOOLSCONTEXT_updateForm(triggerEl) {
	if (TOOLSCONTEXT_Local_FormAlreadySubmitting) {
		return;
	}
	if (triggerEl) {
		var formObj = triggerEl.form;
		var nameParts = triggerEl.name.split('.');
	} else {
		var formObj = document.fm;
		var nameParts = formObj.elements[0].name.split('.');
	}
	var entityName = nameParts[0];
	
	var submitToEl = formObj.elements[entityName + '.submitTo'];
	var submitTargetEl = formObj.elements[entityName + '.submitTarget'];
	var submitTo = '';
	var submitTarget = '';
	if (submitTargetEl) submitTo = escape(submitToEl.value);
	if (submitTargetEl) submitTarget = escape(submitTarget.value);
	var curLocation = document.location.href;
	if (curLocation.indexOf('?') == -1) curLocation += '?';
	if (curLocation.indexOf(entityName + '.submitTo') == -1) curLocation += '&' + entityName + '.submitTo=' + submitTo;
	if (curLocation.indexOf(entityName + '.submitTarget') == -1) curLocation += '&' + entityName + '.submitTarget=' + submitTarget;
	formObj.action = curLocation;
	formObj.elements.jumpTo.value = '';
	formObj.elements[entityName + '.display'].value = 'detail';
	formObj.elements[entityName + '.displayUpdate'].value = 'form';
	formObj.elements[entityName + '.action'].value = '';  
	formObj.target = '_self';
	formObj.submit();
}


function TOOLSCONTEXT_queryProperty(itemLink) {
	//toolscontext:::contact:::source:::column:::query
	var linkParts = itemLink.id.split(':::');
	var entityName = linkParts[1];
	var propertyName = linkParts[2];
	var menuName = entityName + '.dp.' + propertyName + '.search.value';
	var menuEl = document.fm.elements[menuName];
	if (typeof(menuEl) == 'undefined')
	{
		menuName = entityName + '.dp.' + propertyName + '.search.match';
		menuEl = document.fm.elements[menuName];
	}
	if (typeof(menuEl) == 'undefined')
	{
		menuName = entityName + '.dp.' + propertyName + '.search.0.match';
		menuEl = document.fm.elements[menuName];
	}
	TOOLSCONTEXT.saveQueryMenu = menuEl;
	if (menuEl.tagName != 'SELECT' && propertyName.indexOf('Date') < 0) {
		alert('The Query command lets you select multiple options to search on at once. It is only available with select menu columns.');
		return;
	}
	var queryEntryName = entityName + '.dp.' + propertyName + '.search.queryEntry';
	var queryEntryEl = document.createElement('input');
	queryEntryEl.setAttribute('type', 'hidden');
	queryEntryEl.setAttribute('name', queryEntryName);
	queryEntryEl.setAttribute('value', 'yes');
	menuEl.parentNode.appendChild(queryEntryEl);
	menuEl.form.submit();

	/*
	var checkboxName = menuName + '[]';
	var menuVal = menuEl.value;
	var menuParent = menuEl.parentNode;
	var checkboxDiv = document.createElement('div');
	var curOpt;
	var checkboxEl;
	var checkboxLabel;
	var brTag;
	for (i = 1; i < menuEl.options.length; i++) {
		curOpt = menuEl.options[i];
		checkboxEl = document.createElement('input');
		checkboxEl.setAttribute('type', 'checkbox');
		checkboxEl.setAttribute('name', checkboxName);
		checkboxEl.setAttribute('value', curOpt.getAttribute('value'));
		if (curOpt.getAttribute('value') == menuVal) {
			checkboxEl.checked = true;
		}
		checkboxLabel = document.createTextNode(curOpt.text);
		brTag = document.createElement('br');
		checkboxDiv.appendChild(checkboxEl);
		checkboxDiv.appendChild(checkboxLabel);
		checkboxDiv.appendChild(brTag);
		
	}
	var submitLink = document.createElement('a');
	var submitText = document.createTextNode('search');
	submitLink.appendChild(submitText);
	submitLink.setAttribute('href', '#');
	submitLink.setAttribute('onclick', 'document.fm.submit(); return false;');
	checkboxDiv.appendChild(submitLink);
	var spaceText = document.createTextNode(' ');
	checkboxDiv.appendChild(spaceText);
	var cancelLink = document.createElement('a');
	var cancelText = document.createTextNode('cancel');
	cancelLink.appendChild(cancelText);
	cancelLink.setAttribute('href', '#');
	cancelLink.setAttribute('onclick', 'TOOLSCONTEXT_queryPropertyRestore(); return false;');
	checkboxDiv.appendChild(cancelLink);
	
	
	menuParent.replaceChild(checkboxDiv, menuEl);
	TOOLSCONTEXT.queryCheckboxDiv = checkboxDiv;
	*/
}

function TOOLSCONTEXT_queryPropertyRestore(entityName, propertyName)
{
	// toolscontext:::contact:::source:::column:::query
	var menuName = entityName + '.dp.' + propertyName + '.search.queryEntry';
	var menuEl = document.fm.elements[menuName];
	menuEl.value = 'no'; 
	menuEl.form.submit();
}

function TOOLSCONTEXT_queryPropertyGo(entityName)
{
	// contact.action
	var menuName = entityName + '.action';
	var menuEl = document.fm.elements[menuName];
	menuEl.value = 'search';
	menuEl.form.submit();
}

function TOOLSCONTEXT_updateProperty(itemLink) {
	// toolscontext:::contact:::source:::column:::query
	var linkParts = itemLink.id.split(':::');
	var entityName = linkParts[1];
	var propertyName = linkParts[2];
	var menuName = entityName + '.dp.' + propertyName + '.search.value';
	var menuEl = document.fm.elements[menuName];
	if (!menuEl)
	{
		menuName = entityName + '.dp.' + propertyName + '.search.value[]';
		menuEl = document.fm.elements[menuName];
		if (menuEl.length == 0)
		{
			alert('The Update command lets you update a property for all the records in a list at once. It is only available with select menu columns.');
			return;	
		}
		menuEl = menuEl[0];
	}
	var updateEntryName = entityName + '.dp.' + propertyName + '.search.updateEntry';
	var updateEntryEl = document.createElement('input');
	updateEntryEl.setAttribute('type', 'hidden');
	updateEntryEl.setAttribute('name', updateEntryName);
	updateEntryEl.setAttribute('value', 'yes');
	menuEl.parentNode.appendChild(updateEntryEl);
	menuEl.form.submit();
}

function TOOLSCONTEXT_updatePropertyRestore(entityName, propertyName)
{
	// toolscontext:::contact:::source:::column:::query
	var menuName = entityName + '.dp.' + propertyName + '.search.updateEntry';
	var menuEl = document.fm.elements[menuName];
	menuEl.value = 'no'; 
	menuEl.form.submit();
}

function TOOLSCONTEXT_updatePropertyGo(entityName)
{
	// contact.action
	var menuName = entityName + '.action';
	var menuEl = document.fm.elements[menuName];
	menuEl.value = 'multistore'; 
	menuEl.form.submit();
}

function TOOLSCONTEXT_gridShowIds(entityName)
{
	for (key in TOOLSCONTEXT.itemDescriptions[entityName])
	{
		var actionMenuId = 'TOOLSCONTEXT:::' + entityName + ':::' + key + ':::item';
		var actionMenu = document.getElementById(actionMenuId);
		actionMenu.parentNode.appendChild(document.createTextNode(key));
	}
	//find all the menus
	
	//TOOLSCONTEXT:::contact:::1:::item
	
	// ui change
	TOOLSCONTEXT.actions.list.showIds = new Array();
	TOOLSCONTEXT.actions.list.showIds.display = 'Hide Ids';
	TOOLSCONTEXT.actions.list.showIds.func = 'TOOLSCONTEXT_gridHideIds(\'' + entityName + '\')';
}

function TOOLSCONTEXT_gridHideIds(entityName)
{
	for (key in TOOLSCONTEXT.itemDescriptions[entityName])
	{
		var actionMenuId = 'TOOLSCONTEXT:::' + entityName + ':::' + key + ':::item';
		var actionMenu = document.getElementById(actionMenuId);
		
		// remove last node
		var childNodes = actionMenu.parentNode.childNodes.length; 
		var nodeToRemove = actionMenu.parentNode.childNodes[childNodes - 1]; 
		actionMenu.parentNode.removeChild(nodeToRemove);		
	}
	//find all the menus
	
	//TOOLSCONTEXT:::contact:::1:::item
	
	// ui change
	TOOLSCONTEXT.actions.list.showIds = new Array();
	TOOLSCONTEXT.actions.list.showIds.display = 'Show Ids';
	TOOLSCONTEXT.actions.list.showIds.func = 'TOOLSCONTEXT_gridShowIds(\'' + entityName + '\')';
}

function TOOLSCONTEXT_showId(entityName, entityId) {
	var elementId = 'TOOLSCONTEXT:::' + entityName + ':::detailMain:::detail';
	var actionMenu = document.getElementById(elementId);
	
	// add node
	actionMenu.parentNode.appendChild(document.createTextNode('(' + entityName + ':' + entityId + ')'));
	
	//TOOLSCONTEXT:::contact:::1:::item
	
	// ui change
	TOOLSCONTEXT.actions.detail.showIds = new Array();
	TOOLSCONTEXT.actions.detail.showIds.display = 'Hide Id';
	TOOLSCONTEXT.actions.detail.showIds.func = 'TOOLSCONTEXT_hideId(\'' + entityName + '\',\'' + entityId + '\')';
}

function TOOLSCONTEXT_hideId(entityName, entityId) {
	var elementId = 'TOOLSCONTEXT:::' + entityName + ':::detailMain:::detail';
	var actionMenu = document.getElementById(elementId);
	
	// remove last node
	var childNodes = actionMenu.parentNode.childNodes.length; 
	var nodeToRemove = actionMenu.parentNode.childNodes[childNodes - 1]; 
	actionMenu.parentNode.removeChild(nodeToRemove);
	
	//TOOLSCONTEXT:::contact:::1:::item
	
	// ui change
	TOOLSCONTEXT.actions.detail.showIds = new Array();
	TOOLSCONTEXT.actions.detail.showIds.display = 'Show Id';
	TOOLSCONTEXT.actions.detail.showIds.func = 'TOOLSCONTEXT_showId(\'' + entityName + '\',\'' + entityId + '\')';
}

function TOOLSCONTEXT_storeProperty(inputEl) {
	var actingOnId = TOOLSCONTEXT.utility.entityIdFromElementId(inputEl.id);
	var actingOnEntity = TOOLSCONTEXT.utility.entityNameFromElementId(inputEl.id);
	var actingOnProperty = TOOLSCONTEXT_propertyNameFromElementId(inputEl.id);
	TOOLSCONTEXT.ajax.saveOneProp(actingOnEntity, actingOnId, actingOnProperty, inputEl.value);
}

function TOOLSCONTEXT_runOnChange(inputEl, onChange) {
	if (onChange == 'updateForm') {
		TOOLSCONTEXT_updateForm(inputEl);
	}
	//todo: support other onchange so they can run correctly with add-new-item-to-menu
}

function TOOLSCONTEXT_newLinkedShowInput(inputEl, entityName, propertySetName, primaryPropertyName, callingEntityName, callingEntityId, setOwner, passProperties, onChangeFunction) {
	if (inputEl.tagName == 'SELECT') {
		if (inputEl.value != ':::new:::') {
			TOOLSCONTEXT_runOnChange(inputEl, onChangeFunction);
			return;
		}
	}
	TOOLSCONTEXT.addingToMenuEntityName = entityName;
	TOOLSCONTEXT.addingToMenuPropertySetName = propertySetName;
	TOOLSCONTEXT.addingToMenuPrimaryPropertyName = primaryPropertyName;
	TOOLSCONTEXT.addingToMenu = inputEl;
	TOOLSCONTEXT.addingToMenuSet = document.createElement('span');
	TOOLSCONTEXT.addingToMenuParent = inputEl.parentNode;
	
	TOOLSCONTEXT.addingToMenuCallingEntityName = callingEntityName;
	TOOLSCONTEXT.addingToMenuCallingEntityId = callingEntityId;
	
	TOOLSCONTEXT.addingToMenuSetOwner = setOwner;
	TOOLSCONTEXT.addingToMenuPassProperties = setOwner;
	TOOLSCONTEXT.addingToMenuOnChange = onChangeFunction;
	
	TOOLSCONTEXT.addingToMenuParent.removeChild(inputEl);
	TOOLSCONTEXT.addingToMenuParent.appendChild(TOOLSCONTEXT.addingToMenuSet);
	mainLink = TOOLSCONTEXT.addingToMenuSet;
	var titleEditInput = document.createElement('input');
	TOOLSCONTEXT.addingToMenuEdit = titleEditInput;
	TOOLSCONTEXT.dom.setStyleText(titleEditInput, 'width: 150px;');
	TOOLSCONTEXT.dom.setClass(titleEditInput, 'bodycelltext');
	titleEditInput.setAttribute('value', '[type name and press enter]');
	titleEditInput.id = inputEl.id;
	mainLink.innerHTML = '';
	mainLink.appendChild(titleEditInput);
	//var titleSave = document.createElement('a');
	//titleSave.onclick = function() { TOOLSCONTEXT.stretchList.renameSave(TOOLSCONTEXT.actingOnId); return false;};
	titleEditInput.onkeypress = TOOLSCONTEXT_newLinkedSave;
	titleEditInput.select();
	//titleSave.innerHTML = 'ok';
	var titleSpace = document.createTextNode(' ');
	var titleCancel = document.createElement('a');
	TOOLSCONTEXT.dom.setClass(titleCancel, 'standardheader');
	TOOLSCONTEXT.utility.addNullHref(titleCancel);
	titleCancel.onclick = TOOLSCONTEXT_newLinkedRestoreMenu;
	titleCancel.innerHTML = 'x';
	//mainLink.appendChild(titleSave);
	mainLink.appendChild(titleSpace);
	mainLink.appendChild(titleCancel);
}

function TOOLSCONTEXT_updateOptions(triggeredBy, updatePropertyName, linkedEntity, linkedProperty, propertySet, displayProperty, accessKey) {
	var curForm = triggeredBy.form;
	var updateElement = curForm.elements[updatePropertyName];
	
	var processor = '';
	if (accessKey) {
		var processor = 'go.php?toolscontext.hash=' + accessKey;
	}
	
	var optionData = TOOLSCONTEXT.ajax.getChildContent(triggeredBy.value, linkedEntity, linkedProperty, propertySet, processor);
	updateElement.options.length = 0;
	TOOLSCONTEXT.dom.addOption(updateElement, '', '');
	for (key in optionData) {
		var curData = optionData[key];
		TOOLSCONTEXT.dom.addOption(updateElement, curData[displayProperty], curData.toolscontextid);
	}
}

function TOOLSCONTEXT_newLinkedSave(keyEvent) {
	if (!keyEvent) var keyEvent = window.event;
	if (keyEvent.keyCode == 13) {
		var result = TOOLSCONTEXT.ajax.addMenuItem(TOOLSCONTEXT.addingToMenuEntityName, TOOLSCONTEXT.addingToMenuPropertySetName, TOOLSCONTEXT.addingToMenuPrimaryPropertyName, TOOLSCONTEXT.addingToMenuEdit.value, TOOLSCONTEXT.addingToMenuCallingEntityName, TOOLSCONTEXT.addingToMenuCallingEntityId, TOOLSCONTEXT.addingToMenuSetOwner, TOOLSCONTEXT.addingToMenuPassProperties);
		if (result.statuscode != 1) {
			alert('Failed to add menu item: ' + result.statusmessage);
			TOOLSCONTEXT_newLinkedRestoreMenu();
		}
		if (TOOLSCONTEXT.addingToMenu.tagName == 'SELECT') {
			var opt = document.createElement('option');
			TOOLSCONTEXT.dom.setOptionText(opt, TOOLSCONTEXT.addingToMenuEdit.value);
			opt.value = result.id;
			opt.selected = true;
			TOOLSCONTEXT_newLinkedRestoreMenu();
			TOOLSCONTEXT.addingToMenu.appendChild(opt);
			TOOLSCONTEXT_runOnChange(TOOLSCONTEXT.addingToMenu, TOOLSCONTEXT.addingToMenuOnChange);
		} else {
			TOOLSCONTEXT_updateForm();
		}
	}
}

function TOOLSCONTEXT_deleteOption(entityName, entityId, itemEl) {
	if (!confirm('Are you sure you want to delete?')) {
		return;
	}
	TOOLSCONTEXT.ajax.deleteItem(entityName, entityId); //todo: check status response for success
	
	var labelNode = itemEl.parentNode;
	var checkboxNode = labelNode.previousSibling;
	labelNode.parentNode.removeChild(labelNode);
	checkboxNode.parentNode.removeChild(checkboxNode);
}

function TOOLSCONTEXT_newLinkedRestoreMenu() {
	TOOLSCONTEXT.addingToMenuParent.replaceChild(TOOLSCONTEXT.addingToMenu, TOOLSCONTEXT.addingToMenuSet);
	return false;
}

function TOOLSCONTEXT_commitListChanges() {
	if (!TOOLSCONTEXT.originalValues) return;
	var updateQuery = '';
	for (key in TOOLSCONTEXT.originalValues) {
		var originalValue = TOOLSCONTEXT.originalValues[key];
		var itemInput = document.getElementById(key);
		if (itemInput.value != originalValue) {
			var itemId = TOOLSCONTEXT.utility.entityIdFromElementId(itemInput.id);
			updateQuery += itemId + ':' + itemInput.value + ',';
		}
	}
	if (updateQuery == '') {
		alert('No changed items to save');
		return;
	}
	top.help.document.location = 'go.php?toolscontext.uistep=SendStatusEmail&toolscontext.uistepcustom=local&toolscontext.stepinput=' + updateQuery;
	params = new Array();
	params.save = new Array();
	params.save.enabled = false;
	params.cancel = new Array();
	params.cancel.enabled = false;
	top.registerMainChange(params);
	TOOLSCONTEXT.originalValues = new Array();
}

function TOOLSCONTEXT_cancelListChanges() {
	if (!TOOLSCONTEXT.originalValues) return;
	for (key in TOOLSCONTEXT.originalValues) {
		var originalValue = TOOLSCONTEXT.originalValues[key];
		var itemInput = document.getElementById(key);
		itemInput.value = originalValue;
	}
	params = new Array();
	params.save = new Array();
	params.save.enabled = false;
	params.cancel = new Array();
	params.cancel.enabled = false;
	top.registerMainChange(params);
	TOOLSCONTEXT.originalValues = new Array();
}

function TOOLSCONTEXT_allowCheckChange(checkboxEl, maxChecked, itemLabel) {
	maxChecked = parseInt(maxChecked);
	if (!(maxChecked > 0)) {
		return true;
	}
	if (!checkboxEl.checked) {
		//we are about to uncheck - no need to validate
		return true;
	}
	var numChecked = TOOLSCONTEXT_getNumChecked(checkboxEl);
	if (numChecked > maxChecked) {
		checkboxEl.checked = false;
		alert('Sorry, you may not select more than ' + maxChecked + ' ' + itemLabel);
		return false;
	}
}

function TOOLSCONTEXT_getNumChecked(checkboxEl) {
	var curFm = checkboxEl.fm;
	var numChecked = 0;
	var allCheckboxes = document.getElementsByName(checkboxEl.name);
	for (i = 0; i < allCheckboxes.length; i++) {
		if (allCheckboxes[i].checked) {
			numChecked++;
		}
	}
	return numChecked;
}


var checkCount = 0;

if (typeof TOOLSCONTEXT != 'undefined') {
	TOOLSCONTEXT.gridActions = true;
}

