var
	httpRequestFSHHint = false;
	fshBean = '';
	fshHintCache = new Array();

/**
 * Show the FSH hint for the given field.
 */
function setFSHHint(field) {
	if (fshHintCache[fshBean] == undefined) {
		createFSHHintCallback();
	} else if (!fshHintCache[fshBean]) {
		// Wait for request and retry
		setTimeout("setFSHHint('"+field+"')", 500);
	} else {
		var hint = fshHintCache[fshBean][field];
		if (hint == undefined || hint == '') {
			// Default to page hint
			hint = fshHintCache[fshBean]['page'];
		}
		if (hint == undefined) hint = '';
		setFSHHintText(hint);
	}
}
	
/**
 * Fires an updateFSH event.
 */
function setFSHHintText(text) {
	fshEvent.updateFSH.fire(text);
}

/**
 * Creates the FSH Ajax request.
 */
function createFSHHintCallback(field) {
	fshHintCache[fshBean] = false;
	if (isDCQ) {
		httpRequestFSHHint = createXMLHttpRequest();
		if (!httpRequestFSHHint) {
			if (showMessage) showMessage('error.xmlhttp.fshhint');
			return false;
		}

		var requestString = 'fshhintupdate?fshhintbean=' + fshBean;
		if (field != undefined) {
			requestString += '&field=' + field.id;
		}
		httpRequestFSHHint.onreadystatechange = fshHintCallback;
		httpRequestFSHHint.open('GET', requestString, true);
		httpRequestFSHHint.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		httpRequestFSHHint.send(null);
	}
}

/**
 * The Ajax callback for the FSH request.
 */
function fshHintCallback() {
	if (httpRequestFSHHint.readyState == 4) {
		if (httpRequestFSHHint.status == 200) {
			var xmldoc = httpRequestFSHHint.responseXML;
			if (checkForTimeout(xmldoc))
				return;
			
			var fshHint = xmldoc.getElementsByTagName('fshhint');
			var fshBeanEl = xmldoc.getElementsByTagName('fshbean');
			if (fshBeanEl.length == 0) {
				setFSHHintText(fshHint.item(0).getAttribute('text'));
			} else {
				var fshBeanName = fshBeanEl.item(0).getAttribute('name');
				var hints = new Array();
				for (var i = 0; i < fshHint.length; i++) {
					hints[fshHint.item(i).getAttribute('field')] = fshHint.item(i).getAttribute('text');				
				}
				fshHintCache[fshBeanName] = hints;
			}
		} else {
			fshHintCache[fshBean] = undefined;
			if (showMessage) showMessage('error.request.fshhint', httpRequestFSHHint.status);
		}
	}
}

