 
		function initMPCS(_instanceID) {
			// Hmm, a big assumption here that the first form in the document is our form.
			// yes, too big -- so if there is only one form on the page, that's cool, use it
			// otherwise I will name my form MPCS and it will be referenced by name 
			if(arguments.length == 0)
			{
				if(document.forms.length==1)
					var theform = document.forms[0]; 
				else
					var theform = document.MPCS;
			}
			else
			{
				var theform = document.getElementsByName(_instanceID)[0];
			}
			
			listE.init(theform);
			listF.init(theform);
		}
		function verify(frm) {		
		x = new String(frm.Location)
		x = x.substr(1,6) 
		/* Check for the Location's Existance first */
		
		if(x=='object') 
			{
				if (frm.Location.selectedIndex == -1)
					{
						alert("Please select a location.");
						return false;
					}
			} 
			
			if (frm.D.selectedIndex == -1)
			{
				alert("Please select a category.");
				return false;
			}
			else
				{
				// make sure they have chosen less than 5 categories
				counted=0;
				for(i=0;i<frm.D.length-1;i++)
					{
						if(frm.D.options[i].selected==true)
							counted=counted+1
					} 
					
					if (counted > 5)
					{
						alert("Please select max 5 categories.");
						return false;
					}
					
				}
			counted=0;
			for(i=0;i<frm.E.length-1;i++)
				{
					if(frm.E.options[i].selected==true)
						counted=counted+1
					} 
			if (counted > 5)
			{
				alert("Please select max 5 subcategories.");
				return false;
			}
			/* These are now optional as Category and Sub-category Searches can be done			
			if (frm.F.selectedIndex == -1)
			{
				alert("Please select a skill.");
				return false;
			}*/
			return true;
			
		}
		function getMPCSForm(_instanceID)
		{
				// Hmm, a big assumption here that the first form in the document is our form.
			// yes, too big -- so if there is only one form on the page, that's cool, use it
			// otherwise I will name my form MPCS and it will be referenced by name 
			
			if(arguments.length == 0)
			{
				if(document.forms.length==1)
					var theform = document.forms[0]; 
				else
					var theform = document.MPCS;
			}
			else
			{
				var theform = document.getElementById(_instanceID);
			}
			return theform;
		}
		
		function drawSelectionFeedback(displayLocation)
		{
			var ie4 = new String(document.all).substr(1,6);
			var ns4 = document.layers;
			var ns6 = document.getElementById && !document.all;  
			var displayLocation = displayLocation;
			var theform = getMPCSForm(); 
			
			// Only do this for IE Browsers
			if(ie4 == 'object') 
			{				 
				//alert('ie')
				// this code only works on IE
				var feedbackParagraph = document.all["selectionFeedback"];				
			}
			else // All others
			{ 
				//alert('Firebird and Safari')
				// This is for our Mozilla Friends
					var feedbackParagraph = document.getElementById('selectionFeedback')
			}
				var connectorStr = "<strong>Selected:</strong>";
				feedbackParagraph.innerHTML = "";
				if (displayLocation)
				{
					if (theform.Location.selectedIndex != -1)
					{
						feedbackParagraph.innerHTML = connectorStr + "<br>Location: ";
						connectorStr = "";
						for (var i = 0; i < theform.Location.options.length; i++)
						{
							if (theform.Location.options[i].selected)
							{
								feedbackParagraph.innerHTML += connectorStr + "<B>" + theform.Location.options[i].text + "</B>";
								connectorStr = ", ";
							}								
						}
					}
				}
				
				if (theform.D.selectedIndex != -1)
				{
					feedbackParagraph.innerHTML += connectorStr + "<br>Category: ";
					connectorStr = "";
					for (var i = 0; i < theform.D.options.length; i++)
					{
						if (theform.D.options[i].selected)
						{
							feedbackParagraph.innerHTML += connectorStr + "<B>" + theform.D.options[i].text + "</B>";
							connectorStr = ", ";
						}
					}
					
					if (theform.E.selectedIndex != -1)
					{
						feedbackParagraph.innerHTML += "<br>Subcategory: ";
						connectorStr = "";
						for (var i = 0; i < theform.E.options.length; i++)
						{
							if (theform.E.options[i].selected)
							{
								feedbackParagraph.innerHTML += connectorStr + "<B>" + theform.E.options[i].text + "</B>";
								connectorStr = ", ";
							}
						}
						if (theform.F.selectedIndex != -1)
						{
							feedbackParagraph.innerHTML += "<br>Skill: ";
							connectorStr = "";
							
							for (var i = 0; i < theform.F.options.length; i++)
							{
								if (theform.F.options[i].selected)
								{
									var x = new String(theform.AndOr).substr(1,6); 
									feedbackParagraph.innerHTML += connectorStr + "<B>" + theform.F.options[i].text + "</B>";
									
										if(x=='object'){
											if(theform.AndOr[0].checked==true)
												connectorStr = ' ' + theform.AndOr[0].value + ' ';
											else
												connectorStr = ' ' + theform.AndOr[1].value + ' ';}									
									else
										connectorStr = ', ';
								}
								
							}
						}
					}
				}
		}
function clearFindField()
{
 
	getMPCSForm().D.selectedIndex=-1;

	getMPCSForm().E.selectedIndex=-1;

	getMPCSForm().F.selectedIndex=-1; 
	
	document.getElementById('findfield').value=""; 
}

function clearLocationField()
	{
			getMPCSForm().Location.selectedIndex = -1; 
	}

 var findFieldDirty = false;

function updateListTimer()
{
	if (findFieldDirty)
		updateList();
	findFieldDirty = false;
}

function filterSearchStr(inString)
{
	var retVal = inString.replace(/\^/g, "\\^");
	retVal = retVal.replace(/\$/g, "\\$");
	retVal = retVal.replace(/\./g, "\\.");
	retVal = retVal.replace(/\+/g, "\\+");
	retVal = retVal.replace(/\?/g, "\\?");
	retVal = retVal.replace(/\=/g, "\\=");
	retVal = retVal.replace(/\!/g, "\\!");
	retVal = retVal.replace(/\:/g, "\\:");
	retVal = retVal.replace(/\|/g, "\\|");
	//retVal = retVal.replace(/\\/g, "\\\\");
	retVal = retVal.replace(/\//g, "\\/");
	retVal = retVal.replace(/\(/g, "\\(");
	retVal = retVal.replace(/\)/g, "\\)");
	retVal = retVal.replace(/\[/g, "\\[");
	retVal = retVal.replace(/\]/g, "\\]");
	retVal = retVal.replace(/\{/g, "\\{");
	retVal = retVal.replace(/\}/g, "\\}");
	retVal = retVal.replace(/\*/g, "\\*");
	return retVal;
}

var categories_sel, subcategories_sel, skills_sel;
var subcategories_name, skills_name;

function iterateCategories()
{ 
	var searchStr = filterSearchStr(document.getElementById('findfield').value);
	var finder = new RegExp(searchStr, "ig");
	
	var listD = getMPCSForm().D;
	var found = false;
	if (searchStr.length > 0)
	{
		for (var i = 0; i < listD.length; i++)
		{ 
			if (listD.options[i].text.search(finder) >= 0)
			{
				// alert("category: " + listD.options[i].text + " id: " + listD.options[i].value);
				categories_sel[categories_sel.length] = listD.options[i].value; // selected category
			}
			iterateSubCategories(listD.options[i].value)
		}
	}
}
function iterateSubCategories(id)
{ 
	var searchStr = filterSearchStr(document.getElementById('findfield').value);
	var finder = new RegExp(searchStr, "ig");
	x= new String(listE.options[id])
	if (x != 'undefined')
	{
	 
		// alert("id: " + id + " length of options: " + listE.options[id].length);
		for (var i = 0; i < listE.options[id].length; i += 2)
		{
			if (listE.options[id][i].search(finder) >= 0)
			{
				// alert("subcategory: " + listE.options[id][i] + " id: " + listE.options[id][i+1]);
				subcategories_name[subcategories_name.length] = listE.options[id][i];
				subcategories_sel[subcategories_sel.length] = listE.options[id][i+1]; // selected subcategory
				categories_sel[categories_sel.length] = id; // dependent of this category
			}
			iterateSkills(listE.options[id][i+1], id, listE.options[id][i]);
		}
	}
}
function iterateSkills(id, catid, subcatname)
{ 
	var searchStr = filterSearchStr(document.getElementById('findfield').value);	
	var finder = new RegExp(searchStr, "ig");
	x=new String(listF.options[id]); 
	if (x != 'undefined')
	{
		// alert("id: " + id + " length of options: " + listF.options[id].length);
		var foundone = false;
		for (var i = 0; i < listF.options[id].length; i += 2)
		{
			if (listF.options[id][i].search(finder) >= 0)
			{
				// alert("skill: " + listF.options[id][i] + " id: " + listF.options[id][i+1]);
				foundone = true;
				skills_name[skills_name.length] = listF.options[id][i];
				skills_sel[skills_sel.length] = listF.options[id][i+1]; // selected skill
				categories_sel[categories_sel.length] = catid; // dependent of this category
			}
		}
		if (foundone)
		{
			subcategories_sel[subcategories_sel.length] = id; // dependent of this subcategory
			subcategories_name[subcategories_name.length] = subcatname; // dependent of this subcategory
		}
	}

}
function updateList()
{ 
	var searchStr = filterSearchStr(document.getElementById('findfield').value);

	if (searchStr.length < 3)
		return;

	// reset selections
	getMPCSForm().D.selectedIndex = -1;
	getMPCSForm().E.selectedIndex = -1;
	getMPCSForm().F.selectedIndex = -1;
	
	//reset found arrays
	categories_sel = new Array();
	subcategories_sel = new Array();
	skills_sel = new Array();
 	subcategories_name = new Array();
	skills_name = new Array();
	// search for matches
	iterateCategories();
	// select the categories and populate subcategories
	var listD = getMPCSForm().D;
	for (var i = 0; i < categories_sel.length; i++)
	{
		for (var j = 0; j < listD.options.length; j++)
		{
			if (listD.options[j].value == categories_sel[i])
				listD.options[j].selected = true;
		}
	}
	// listE.populate();

	// select the subcategories and populate the skills
	var selectE = getMPCSForm().E;
	selectE.options.length = 0;
	for (var i = 0; i < subcategories_sel.length; i++)
	{
		//for (var j = 0; j < selectE.options.length; j++)
		//{
			//if (selectE.options[j].value == subcategories_sel[i])
				//selectE.options[j].selected = true;
		//}
		selectE.options[selectE.options.length] = new Option(subcategories_name[i], subcategories_sel[i], false, true);
	}
	// listF.populate();

	// select the skills
	var selectF = getMPCSForm().F;
	selectF.options.length = 0;
	for (var i = 0; i < skills_sel.length; i++)
	{
		//for (var j = 0; j < selectF.options.length; j++)
		//{
			//if (selectF.options[j].value == skills_sel[i])
				//selectF.options[j].selected = true;
		//}
		selectF.options[selectF.options.length] = new Option(skills_name[i], skills_sel[i], false, true);
	}
}