	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	
	//The following three functions are used to Show/Hide Areas on the map
	//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	
	function Find_FindObjectBetweenFrames(szObjectName)
	{
		var oSrcObject;
		
		oSrcObject = findObject(szObjectName);
		return oSrcObject;
	}

	function Toggle_MapImages(oSrcImage,bOn)
	{
		if (oSrcImage)
		{
			if (bOn)
			{
				if (oSrcImage.style.visibility == 'hidden' || oSrcImage.style.visibility == '')
					oSrcImage.style.visibility = 'visible';
			}
			else
			{
				if (oSrcImage.style.visibility == 'visible' || oSrcImage.style.visibility == '')
					oSrcImage.style.visibility = 'hidden';
			}
		}		
	}	
	

	function ToggleImageHL(iAreaID,bOn)
	{
		var szBuildName;
		var oSrcImage;
	
		szBuildName = 'map_' + iAreaID + '_on';
		oSrcImage = Find_FindObjectBetweenFrames(szBuildName)
		Toggle_MapImages(oSrcImage,bOn);

		szBuildName = 'map_' + iAreaID + '_SecondOn';
		oSrcImage = Find_FindObjectBetweenFrames(szBuildName)
		if (oSrcImage)
			Toggle_MapImages(oSrcImage,bOn);
				
		return true;	
	}

	
	function Map_CleanMap(oSrcObject)
	{
		if (oSrcObject)
			Map_ShowHideGroup(oSrcObject);
	}
	
	function Map_ShowHideGroup(oSrcObject)
	{
//		alert(oSrcObject.options.length);
//		alert(oSrcObject.name);
		 for(var i=0; i < oSrcObject.options.length; i++) 
		 {
//		 	alert(document.images[i].name);
		 	ToggleImageHL(oSrcObject.options[i].value,0)
		}	 
	}
	
	function ShowHideImageOverlays(iAreaID,szWhatField,bOn)
	{
		var szBuildName;
		var oSrcImage;
	
		szBuildName = 'map_' + iAreaID + '_'+szWhatField;
		oSrcImage = findObject(szBuildName)
		Toggle_MapImages(oSrcImage,bOn);
			
		return true;	
	}	
	
	function Map_ShowHideTags(szWhatField,bOn)
	{
	if (aAreasMLSID)
		 for (var i=0; i<aAreasMLSID.length; i++)
				 ShowHideImageOverlays(aAreasMLSID[i],szWhatField,bOn);
	}
	
	function AutoToggleImageHL(iAreaID)
	{
		var szBuildName;
		var oSrcImage;
	
		szBuildName = 'map_' + iAreaID + '_on';
		oSrcImage = findObject(szBuildName);
	
		if (oSrcImage)
			if (oSrcImage.style.visibility == 'visible')
				oSrcImage.style.visibility = 'hidden';
			else
				oSrcImage.style.visibility = 'visible';

		szBuildName = 'map_' + iAreaID + '_SecondOn';
		oSrcImage = findObject(szBuildName);
	
		if (oSrcImage)
			if (oSrcImage.style.visibility == 'visible')
				oSrcImage.style.visibility = 'hidden';
			else
				oSrcImage.style.visibility = 'visible';
			
		return true;	
	}


function isDefined(ckVar)
    {
	
		var sObject = findObject(ckVar)
	
		if (sObject)
			return 1;
		else
			{
			return 0;
			}
	
    }


	sortitems = 1;  // Automatically sort items within lists? (1 or 0)

	//Direction 0 .... Move Item Up
	//Direction 1 .... Move Item Down
	
	kMoveItemDown = 1;
	kMoveItemUp = 0;
	//Note this functin could be used to go both direction .. pending on the object you pass it.	
	function ListSelectAll(fbox,bSelect) 
	{
	
		if ((fbox.type == 'select-one') || (fbox.type == 'select-multiple'))
		{
			//Look at all the itmes in the Not in list object
			for(var i=fbox.options.length-1; i>=0; i--) 
			{
					if(fbox.options[i].selected && bSelect == 0) 
					{
					fbox.options[i].selected = false;
				    }
					
					if(!fbox.options[i].selected && bSelect == 1) 
					{
					fbox.options[i].selected = true;
				    }
			}
		}
		
	}
	
	function MoveItem(sBox, bDirection)
	{
		var iSelectedIndex = -1;
		var iTotalSelected = 0;
		var bCanMove = false;
	
		for(var i=0; i < sBox.options.length; i++) 
		{
			if (sBox.options[i].selected && sBox.options[i].value !="")
			{
				iTotalSelected++;
				iSelectedIndex = i;
			}
		}

		//Now see if this Item can be moved up or down pending on what they want
		if (iTotalSelected == 1 && bDirection == kMoveItemUp && iSelectedIndex != 0)
		{
			bCanMove = true;
			iIndexToSwapWith = iSelectedIndex - 1;
		}
		else if (iTotalSelected == 1 && bDirection == kMoveItemDown && iSelectedIndex != sBox.options.length)
		{
			bCanMove = true;
			iIndexToSwapWith = iSelectedIndex + 1;
		}
		else
		{
			return false;
		}

		//The Item can be moved so lets swap
		if (bCanMove)
		{
			var tempText = new Object();
			var tempValue = new Object();
			tempText = sBox.options[iSelectedIndex].text;
			tempValue = sBox.options[iSelectedIndex].value;
			
			sBox.options[iSelectedIndex].text = sBox.options[iIndexToSwapWith].text;
			sBox.options[iSelectedIndex].value = sBox.options[iIndexToSwapWith].value;
			
			sBox.options[iIndexToSwapWith].text = tempText;
			sBox.options[iIndexToSwapWith].value = tempValue;
			sBox.selectedIndex = iIndexToSwapWith;

			return false;						
		}
		
		return false;
	}
	
	//Note this functin could be used to go both direction .. pending on the object you pass it.	
	function move(fbox,tbox,bSortAfterMove) 
	{
		var oGetFirstSelectedObject = null;
		
		//First lets see if we can't insert the object before the first highlighted item
//		for(var ii=0; ii<tbox.options.length; ii++) 
//		{
//			if(tbox.options[ii].selected && tbox.options[ii].value != "")
//			{
//				oGetFirstSelectedObject = tbox.options[ii];
//				break;
//			}
//		}	
		
		//Look at all the itmes in the Not in list object
		for(var i=0; i<fbox.options.length; i++) 
		{
				//If an item is selected we need to move that item to the on the list box
				if(fbox.options[i].selected && fbox.options[i].value != "") 
				{
				//Creat an Option object
				var no = new Option();
				//Insert this new object into the On The list
				if (oGetFirstSelectedObject != null){
					tbox.options.insertBefore(no,oGetFirstSelectedObject);
					//Make this object the same as
					no.value = fbox.options[i].value;
					no.text = fbox.options[i].text;
					no.innerHTML = no.text;
					
					//Auto highlight
					AutoToggleImageHL(no.value);
					}
				else
					{
					bItemWasInserted = 0;	
					//Make this object the same as
					no.value = fbox.options[i].value;
					no.text = fbox.options[i].text;
					no.innerHTML = no.text;
					//We want anything that starts with _ to be first in line
					szFirstChar = no.text.substring(0, 1);
					//Find out where to insert this item.					
					for(var ii=0; ii<tbox.options.length; ii++) 
							{
								szDstFirstChar = tbox.options[ii].text.substring(0, 1);
								if (szDstFirstChar != '_')
								{
									//alert('Compare '+tbox.options[ii].text+' > '+fbox.options[i].text);
									if((tbox.options[ii].text > fbox.options[i].text) || (szFirstChar == '_'))
									{
//										if (document.all) 
//										{
//											tbox.options[ii].insertAdjacentElement("BeforeBegin",no);
//										}	
//										else 
//										{
//											tbox.insertBefore(no,tbox.options[ii]);
//										}	

										tbox.insertBefore(no,tbox.options[ii]);
										
										no.value = fbox.options[i].value;
										no.text = fbox.options[i].text;
										no.innerHTML = no.text;
										bItemWasInserted = 1;	
										break;
									}
								}
							}						
					}
					
					if (!bItemWasInserted)
					{
						//tbox.options[tbox.options.length] = no;
						tbox.appendChild(no);
					}	
						
					//Flag this item so sthat we know it has been moved.
					fbox.options[i].value = "";
					fbox.options[i].text = "";

					//Auto highlight
					AutoToggleImageHL(no.value);
		    }
		}
		//Remove the ojbects that are selected from the list.	
		BumpUp(fbox);
		if (bSortAfterMove)
			SortD(tbox);
		return false;
	}


	function moveNoSort(fbox,tbox,bSortAfterMove) 
	{
		var oGetFirstSelectedObject = null;
		
		//First lets see if we can't insert the object before the first highlighted item
		for(var ii=0; ii<tbox.options.length; ii++) 
		{
			if(tbox.options[ii].selected && tbox.options[ii].value != "")
			{
				oGetFirstSelectedObject = tbox.options[ii];
				bItemWasInserted = 1;	
				break;
			}
		}	
		
		//Look at all the itmes in the Not in list object
		for(var i=0; i<fbox.options.length; i++) 
		{
				//If an item is selected we need to move that item to the on the list box
				if(fbox.options[i].selected && fbox.options[i].value != "") 
				{
				//Creat an Option object
				var no = new Option();
				//Insert this new object into the On The list
				if (oGetFirstSelectedObject != null){
					tbox.options.insertBefore(no,oGetFirstSelectedObject);
					//Make this object the same as
					no.value = fbox.options[i].value;
					no.text = fbox.options[i].text;
					no.innerHTML = no.text;
					
					//Auto highlight
					AutoToggleImageHL(no.value);
					}
				else
					{
					bItemWasInserted = 0;	
					//Make this object the same as
					no.value = fbox.options[i].value;
					no.text = fbox.options[i].text;
					no.innerHTML = no.text;
					//Find out where to insert this item.					
					for(var ii=0; ii<tbox.options.length; ii++) 
							{
								if(tbox.options[ii].text > fbox.options[i].text)
								{
//									if (document.all) 
//										tbox.options[ii].insertAdjacentElement("BeforeBegin",no);
										//tbox.options.add(no,1);
//									 else 
//										tbox.options.add(no,1);
										
									tbox.insertBefore(no,tbox.options[ii]);
										
									no.value = fbox.options[i].value;
									no.text = fbox.options[i].text;
									no.innerHTML = no.text;
									
									bItemWasInserted = 1;	
									break;
								}
							}						
					
					//Auto highlight
					AutoToggleImageHL(no.value);
					}
					
				if (!bItemWasInserted)
				{
					//tbox.options[tbox.options.length] = no;
					tbox.appendChild(no);
				}	
					
				//Flag this item so sthat we know it has been moved.
				fbox.options[i].value = "";
				fbox.options[i].text = "";
		    }
		}
		//Remove the ojbects that are selected from the list.	
		BumpUp(fbox);
//		if (bSortAfterMove)
//			SortD(tbox);
		return false;
	}
	
	function BumpUp(box)  
	{
		for(var i=box.options.length-1; i>=0; i--) 
			{
				//If an item is selected we need to move that item to the on the list box
				if(box.options[i].selected && box.options[i].value == "") 
				{
					box.remove(i);			
				}
			}
	}
	
		
	function SortD(obj)  
	{
		var o = new Array();
		if (obj.options==null) { return; }
		for (var i=0; i<obj.options.length; i++) {
			o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
			}
		if (o.length==0) { return; }
		o = o.sort( 
			function(a,b) { 
				if ((a.text+"") < (b.text+"")) { return -1; }
				if ((a.text+"") > (b.text+"")) { return 1; }
				return 0;
				} 
			);
	
		for (var i=0; i<o.length; i++) {
			obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
			}
	
	}


	//Note this functin could be used to go both direction .. pending on the object you pass it.	
	function moveNotSelected(fbox,tbox,bSortList) 
	{
		var oGetFirstSelectedObject = null;
		var oSomethingtod = 0;
		
		//Look at all the itmes in the Not in list object
//		for(var i=0; i<fbox.options.length; i++) 
		if (fbox && tbox)
		{
			for(var i=fbox.options.length-1; i>=0; i--)		
			{
					//Creat an Option object
					var no = new Option();
					//Insert this new object into the On The list
					if (oGetFirstSelectedObject != null){
						tbox.options.insertBefore(no,oGetFirstSelectedObject);
						//Make this object the same as
						no.value = fbox.options[i].value;
						no.text = fbox.options[i].text;
						no.innerHTML = no.text;
						
						}
					else
						{
						//Make this object the same as
						no.value = fbox.options[i].value;
						no.text = fbox.options[i].text;
						no.innerHTML = no.text;
						//tbox.options[tbox.options.length] = no;
						tbox.appendChild(no);
						}
					//Flag this item so that we know it has been moved.
					fbox.remove(i);
	//				fbox.options[i].value = "";
	//				fbox.options[i].text = "";
	//				fbox.options[i].selected = 1;
					oSomethingtod = 1;
			}
			//Remove the ojbects that are selected from the list.	

			if (tbox.name == 'AreasFrom' || tbox.name == 'FriendlyAreaID')
				Map_CleanMap(tbox);
			
			if (oSomethingtod == 1)
			{
	//			BumpUp(fbox);
				//SortD(tbox);
				if (bSortList == 1)
					SortD(tbox);
			}
		}
		else
		{
			if (!fbox)
				alert('fbox Object not located ')
			if (!tbox)
				alert('tbox Object not located ')
		}
			
		return false;
	}
	
	function MoveAll(fbox,tbox)
	{
		ListSelectAll(fbox,1);
		move(fbox,tbox,0);
	} 
	
function MoveAroundListItem(szSrcFieldName,szDstFieldName,iValueToCompareTo)
	{
	
		var iWasMoved = 0;
		var sSrcObject = findObject(szSrcFieldName)
		var sDstObject = findObject(szDstFieldName)
	
		if (sSrcObject && sDstObject)
		{
			//Lets make sure there are no selected items.
			ListSelectAll(sSrcObject,0);
			ListSelectAll(sDstObject,0);
		
			for(var i=0; i < sSrcObject.options.length; i++) 
			{
				//Lets first try to locate this item in the Src Object
				if (sSrcObject.options[i].value == iValueToCompareTo)
				{
					//Lets select this item first.
					sSrcObject.options[i].selected = 1;
					move(sSrcObject,sDstObject,0)	
					iWasMoved = 1;

					//Show selected on the map
					ToggleImageHL(iValueToCompareTo,1);
					
				}
			}
			
			//If nothing was located then we need to see if they are wanting to remove the item from
			//the dst field.
			if (!iWasMoved)
			{
				for(var i=0; i < sDstObject.options.length; i++) 
				{
					//Lets first try to locate this item in the Src Object
					if (sDstObject.options[i].value == iValueToCompareTo)
					{
						//Lets select this item first.
						sDstObject.options[i].selected = 1;
						move(sDstObject,sSrcObject,0)	
						iWasMoved = 1;
						
						//Show selected on the map
						ToggleImageHL(iValueToCompareTo,0);
					}
				}
			}
			
			return iWasMoved;
		}
		else
			{
				var szMsg = 'Could not locate\\n';
				if (!sSrcObject)
					szMsg = 'Src Object Named' + szSrcFieldName;
				if (!sDstObject)
					szMsg = 'Dst Object Named' + szDstFieldName;
					
				alert(szMsg);	
			}

		
		return false;
	}		

	
	function MapAllItemsInList(oSrcObject,bShowOnMap,szMapPostFixName) 
	{
	
		if (oSrcObject)
		{
			//Look at all the itmes in the Not in list object
			for(var i=oSrcObject.options.length-1; i>=0; i--) 
					ToggleImageHL(oSrcObject.options[i].value,1);
		}	
		
	}	
		
	function Map_Refresh()
	{
		//First wipe the map clean.
		oSrcObject = findObject('FRIENDLYAREAID')
		if (oSrcObject)
		{
			//alert('Refresh map');		
			Map_CleanMap(oSrcObject);
			MapAllItemsInList(oSrcObject,1,'on');
		}	
	}
	
	
	function Tag_AdvancedList_Toggle(szObjectOnName,szObjectOffName,bSetOnTo,bSetOffTo,szDecisionField,iState)
	{
	
		var oObjectDivOn = findObject(szObjectOnName);
		var oObjectDivOff = findObject(szObjectOffName);
		
		if (!oObjectDivOn || !oObjectDivOff)
		{
			if (!oObjectDivOn)
				alert(szObjectOnName +' Not Located');
			if (!oObjectDivOff)
				alert(szObjectOffName +' Not Located');
		}	

		if (iState == 1)
		{
				oObjectDivOn.style.display = bSetOnTo;
				oObjectDivOff.style.display = bSetOffTo;
		}
		else if (iState == 0)
		{
			if (oObjectDivOn.style.display == 'none')
			{
				oObjectDivOff.style.display = "none";
				oObjectDivOn.style.display = "block";
			}				
			else
			{
				oObjectDivOff.style.display = "block";
				oObjectDivOn.style.display = "none";
			}			
		}	
		else if (iState == 2)
		{
			var oObjectSrcField = findObject(szDecisionField);

			if (oObjectSrcField)
			{
				if (oObjectSrcField.options.length > 0)
				{
					oObjectDivOn.style.display = "none";
					oObjectDivOff.style.display = "block";
				}
				else
				{
					oObjectDivOn.style.display = "block";
					oObjectDivOff.style.display = "none";
				}	
			}

		}	

		
		return false;
	}
	
	function ChangeImagePreloaded(oSrcObject,szActionName)
	{
		//alert('Looking for '+szActionName +'.src');
		oSrcObject.src = eval(szActionName +".src");
	}

	function ChangeImage(oSrcObject,szImageName)
	{
		oSrcObject.src = szImageName;
	}