
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="OnDocumentReady()" />
<PUBLIC:METHOD NAME="ClearWord"/>
<PUBLIC:PROPERTY NAME="Valid" GET="GetValid" />
<PUBLIC:PROPERTY NAME="MandatoryStatus" GET="GetMandatoryStatus" PUT="SetMandatoryStatus" />
<PUBLIC:EVENT NAME="AfterOnPropertyChange" ID="AfterOnPropertyChangeID" />
<PUBLIC:EVENT NAME="AfterOnKeyDown" ID="AfterOnKeyDownID" />
<PUBLIC:EVENT NAME="OnValidated" ID="ValidatedID" />

<script language="javascript">

// Fields ****************************************
	
	var sWhite = "#ffffff" 
	var sYellow = "#ffff00"  
	var sLightYellow = "#ffffe0" 

	var sUserWord="";
	var mbValid=true;
	var mbLoading=true;
	var mbDocumentReady=false;
	var moMandatoryStatus=null;
	var moRequiredBackColor=null;
	var moRecommendedBackColor=null;
	var moSetReadOnly=null;
	
// Constructor ***************************************
	moMandatoryStatus = element.getAttribute("MandatoryStatus");
	moRequiredBackColor = element.getAttribute("RequiredBackColor");
	moRecommendedBackColor = element.getAttribute("RecommendedBackColor");
	moSetReadOnly = element.getAttribute("SetReadOnly");

	if (moSetReadOnly=='true')
	{
		element.disabled=true;
		element.tabIndex=-1;
	}

	element.attachEvent("onpropertychange", OnPropertyChange);
	element.attachEvent("onkeydown", TrapKey);
	
// Procedures ****************************************

	function OnDocumentReady()
	{
		mbLoading = true;
		ValidateBackgroundColor();
		mbDocumentReady=true;
	}


	function OnPropertyChange()
	{
		if (mbDocumentReady==true)
		{
			if (event.propertyName=="value")
			{
				ValidateBackgroundColor();
				oEvent = createEventObject();
				AfterOnPropertyChangeID.fire(oEvent);
			}
		}
	}

	function ValidateBackgroundColor()
	{
		mbValid=true;
		if (moMandatoryStatus!=null)
		{
			if (((moMandatoryStatus=="Required") || (moMandatoryStatus=="Recommended")) && ((element.value == "") || (element.value == "00000000-0000-0000-0000-000000000000")))
			{
				if (moMandatoryStatus=="Required")
				{
					if (moRequiredBackColor==null)
					{
						element.style.backgroundColor = sYellow;
					}
					else
					{
						element.style.backgroundColor = moRequiredBackColor;
					}
				}
				else if (moMandatoryStatus=="Recommended")
				{
					if (moRecommendedBackColor==null)
					{
						element.style.backgroundColor = sLightYellow;
					}
					else
					{
						element.style.backgroundColor = moRecommendedBackColor;
					}
				}
				mbValid=false;
			}
			else 
			{
				element.style.backgroundColor = sWhite;
			}
		}
		
		if (mbLoading==true)
		{
			mbLoading = false;
		}
		else
		{
			oEvent = createEventObject();
			ValidatedID.fire(oEvent);
		}
	}
	
	function TrapKey()
	{
		if (mbDocumentReady==true)
		{
			var liKeyCode;		
			liKeyCode=event.keyCode;
			if (((liKeyCode>=48) && (liKeyCode<=57)) || ((liKeyCode>=96) && (liKeyCode<=105)) || ((liKeyCode>=65) && (liKeyCode<=90)))
			{
				if (sUserWord.length==0)
				{
					setTimeout("document.all." + element.id + ".ClearWord()", 3000);
				}

				sKeyPressed = String.fromCharCode(event.keyCode);
				sUserWord += sKeyPressed;
				for (var i = 0; i < element.options.length; i++)
				{
					var sTxt = element.options[i].text.toUpperCase();
					if (sTxt.indexOf(sUserWord)==0)
					{
						if (element.options[i].selected == false)
						{
							element.options[i].selected = true;
							element.fireEvent("onchange");
						}
						element.options[i].focus();
						break;
					}
				}
				event.returnValue=false;
			}
			oEvent = createEventObject();
			AfterOnKeyDownID.fire(oEvent);
		}
	}

	
	function ClearWord()
	{
		sUserWord="";
	}

	function GetValid()
	{
		return mbValid;
	}

	
	function GetMandatoryStatus()
	{
		return moMandatoryStatus;
	}

	
	function SetMandatoryStatus(psValue)
	{
		moMandatoryStatus=psValue;
		ValidateBackgroundColor();
	}

</script>

