/*
* The programming and software materials herein are copyright Cyberhomes LLC (CH).
* The programming and software materials are owned, held, or licensed by CH. Personal, educational,
* non-commercial, commercial or any other use of these materials, without the written permission of the
* CH, is strictly prohibited.
*/

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//		WARNING: THIS SCRIPT IS A COLLECTION OF HACKS, AND WILL REMAIN SO UNTIL WE HAVE TIME FOR A COMPLETE REWRITE.
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//		SET UP SOME SCRIPT FUNCTIONS AND VARS
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// HACK ALERT!  THESE ARE MANUAL HARD-FIXES THAT WE DIDN'T HAVE TIME TO DO MORE ELEGANTLY
//Exclude Forest Lake Area and Lino Lakes area from the all-inclusive third level for Edina
var excludeThirdLevel = new Array(15162,15164);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0, MODIFIED BY BRETT TO CHANGE DISPLAY ATTRIBUTE INSTEAD OF VISIBILITY
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'inline':(v=='hide')?'none':v; }
    obj.display=v; }	// this used to be obj.visibility
}

function MM_changeProp(objName,x,theProp,theValue) { //v6.0
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)){
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//		BUILD SEARCH LEVEL 1
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	//ITERATE THROUGH THE COLLECTION AND DETERMINE HOW MANY OPTIONS TO BUILD IN THE SELECT
	var SearchLevel1Items = 1;  //Starts at 1 because we ALWAYS have a "No Preference" option in slot 0.
	for (var i = 1; i <= TotalMenuItems; i++) {
		var TempArray = SearchLevelArray[i];
		if (TempArray[2] == 0) { SearchLevel1Items++ }
	}
	document.forms[formName].elements['Criteria/RECoSearchLevel1'].length = SearchLevel1Items-1;

	//WRITE THE OPTIONS TO THE SEARCH LEVEL MENU
	var SearchLevel1ItemCounter = 1;
		
	for (var i = 1; i <= TotalMenuItems; i++) {
		var TempArray = SearchLevelArray[i];
		if (TempArray[2] == 0) {
			document.forms[formName].elements['Criteria/RECoSearchLevel1'].options[SearchLevel1ItemCounter-1].text = TempArray[5];
			document.forms[formName].elements['Criteria/RECoSearchLevel1'].options[SearchLevel1ItemCounter-1].value = TempArray[0];
			if (TempArray[0] == SearchLevel1Default) { document.forms[formName].elements['Criteria/RECoSearchLevel1'].options[SearchLevel1ItemCounter-1].selected = true; }
			SearchLevel1ItemCounter++;
		}
	}
	//UPDATE THE CHILD MENU BASED ON WHAT'S SELECTED IN THIS MENU
	var selected = 0;
	if (document.forms[formName].elements['Criteria/RECoSearchLevel1'].selectedIndex > 0)
		selected = document.forms[formName].elements['Criteria/RECoSearchLevel1'].selectedIndex;
	BuildSearchLevel2Menu(document.forms[formName].elements['Criteria/RECoSearchLevel1'].options[selected].value);

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//		BUILD SEARCH LEVEL 2 BASED ON WHAT'S SELECTED IN SEARCH LEVEL 1
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function BuildSearchLevel2Menu(selected) {
	
	// Get a reference to the select and clear it out
	var searchLevelSelect = document.forms[formName].elements['Criteria/RECoSearchLevel2'];
	if (searchLevelSelect)
	{
	    searchLevelSelect.length = 1;
	
	    // Populate it
	    var bAnyHasChildren = false;
	    var bHasDefault = false;
    	
	    for (var i = 1; i <= TotalMenuItems; i++) {
		    if (SearchLevelArray[i][2] == selected) {
			    var opt = new Option(SearchLevelArray[i][5], SearchLevelArray[i][0]);
			    //If IsDefault = 1 select option
			    if (SearchLevelArray[i][8] == 1)
			    {
				    opt.selected = true;
				    bHasDefault = true;
			    }
			    else
				    opt.selected = false;
			    // Add it to the select
			    searchLevelSelect.options[searchLevelSelect.length] = opt;
			    // Find out if any of the items in this menu have child items
			    if (SearchLevelArray[i][6] == 0) {
				    bAnyHasChildren = true;
			    }
		    }
	    }
	    if (!bAnyHasChildren && navigator.platform.indexOf('Mac') < 0) {
		    document.forms[formName].elements['Criteria/RECoSearchLevel2'].size = 6;
		    document.forms[formName].elements['Criteria/RECoSearchLevel2'].multiple = true;
		    MM_showHideLayers('multiSelectInstructions','','show');
	    } else {
		    document.forms[formName].elements['Criteria/RECoSearchLevel2'].size = 1;
		    document.forms[formName].elements['Criteria/RECoSearchLevel2'].multiple = false;
		    MM_showHideLayers('multiSelectInstructions','','hide');
	    }


	    //SELECT NO PREFERENCE BY DEFAULT, AND LIMIT THE CHILD MENUS TO DISPLAYING NO PREFERENCE UNTIL SELECTION IS MADE
	    if (!bHasDefault)
		    searchLevelSelect.options[0].selected = true;
    		
	    if (TotalSearchLevels > 2) {
		    document.forms[formName].elements['Criteria/RECoSearchLevel3'].length = 1;
		    document.forms[formName].elements['Criteria/RECoSearchLevel3'].options[0].selected = true;	
	    }
	    if (TotalSearchLevels > 3) {
		    if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
		    document.forms[formName].elements['Criteria/RECoSearchLevel4'].length = 1;
		    document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[0].selected = true;}
	    }
	    //UPDATE THE CHILD MENU BASED ON WHAT'S SELECTED IN THIS MENU
	    if (TotalSearchLevels > 2) {
		    BuildSearchLevel3Menu(searchLevelSelect.options[searchLevelSelect.selectedIndex].value);
	    }
	}
}

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//		BUILD SEARCH LEVEL 3 BASED ON WHAT'S SELECTED IN SEARCH LEVEL 2
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function BuildSearchLevel3Menu(selected) {

	// Get a reference to the select and clear it out
	var searchLevelSelect = document.forms[formName].elements['Criteria/RECoSearchLevel3'];
	searchLevelSelect.length = 1;
	searchLevelSelect.options[0].selected = true;
	
	// Find out the selected level1 value
	var grandParentSelected = document.forms[formName].elements['Criteria/RECoSearchLevel1'].options[document.forms[formName].elements['Criteria/RECoSearchLevel1'].selectedIndex].value;

	// Find out the selected level2 value
	var ParentSelected = document.forms[formName].elements['Criteria/RECoSearchLevel2'].options[document.forms[formName].elements['Criteria/RECoSearchLevel2'].selectedIndex].value;

	// Populate it, and find out if the parent was the bottom search level
	var bAnyHasChildren = false;
	var bParentIsBottomSearchLevel = false;
	
	for (var i = 1; i <= TotalMenuItems; i++) {
		if (selected > 0 && selected == SearchLevelArray[i][0] && SearchLevelArray[i][6] == 1) {
			bParentIsBottomSearchLevel = true;
			break;
		}

		if ((selected > 0 && SearchLevelArray[i][2] == selected) || (selected <= 0 && SearchLevelArray[i][3] == grandParentSelected)) {
			var addSearchLevel = true;
			for (var j = 0; j < excludeThirdLevel.length; j++) {
				if (SearchLevelArray[i][0] == excludeThirdLevel[j] && ParentSelected < 0) {
					addSearchLevel = false;
				}
			}
			if (addSearchLevel) {
				var opt = new Option(SearchLevelArray[i][5], SearchLevelArray[i][0]);
				
				// Add it to the select
				searchLevelSelect.options[searchLevelSelect.length] = opt;
				//If IsDefault = 1 select option
				if (SearchLevelArray[i][8] == 1)
					opt.selected = true;
				else
					opt.selected = false;
				// Find out if any of the items in this menu have child items
				if (SearchLevelArray[i][6] == 0) {
					bAnyHasChildren = true;
				}
			}
		}
	}
	
	// If any of the items in this menu have children, set to single-select
	if (!bAnyHasChildren && navigator.platform.indexOf('Mac') < 0) {
		document.forms[formName].elements['Criteria/RECoSearchLevel3'].size = 6;
		document.forms[formName].elements['Criteria/RECoSearchLevel3'].multiple = true;
		MM_showHideLayers('multiSelectInstructions','','show');
	} else {
		document.forms[formName].elements['Criteria/RECoSearchLevel3'].size = 1;
		document.forms[formName].elements['Criteria/RECoSearchLevel3'].multiple = false;
		MM_showHideLayers('multiSelectInstructions','','hide');
	}
	
	// If the parent's not the bottom level, display this level
	if (!bParentIsBottomSearchLevel) {
		MM_showHideLayers('RECoSearchLevelContainer3','','show');
		MM_showHideLayers('stepNumber3','','show');
		MM_showHideLayers('MapLink3','','show');
		// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
		if (ie4 || ns6) {document.forms[formName].elements['Criteria/RECoSearchLevel3'].style.display = 'inline'};					
	} else {
		MM_showHideLayers('RECoSearchLevelContainer3','','hide');
		MM_showHideLayers('stepNumber3','','hide');
		MM_showHideLayers('RECoSearchLevelContainer4','','hide');
		var hackVal = document.forms[formName].elements['Criteria/RECoSearchLevel2'].options[document.forms[formName].elements['Criteria/RECoSearchLevel2'].selectedIndex].value;
		if (hackVal == 15015 || hackVal == 15018 || hackVal == 15025) { MM_showHideLayers('multiSelectInstructions','','hide'); }
		MM_showHideLayers('MapLink3','','hide');
		// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
		document.forms[formName].elements['Criteria/RECoSearchLevel3'].style.display = 'none';		
	}

	if (selected <= 0) {
		// Sort the select if we're using the grandparent
		// In common.js
		sortSelect(searchLevelSelect);

		// HIDE THE MAP LINK, SINCE WE DON'T HAVE A SINGLE MAP FOR ALL THE GRANDCHILDREN OF THE SELECTED GRANDPARENT SEARCH LEVEL
		if (DesignName != 'admin')
			MM_showHideLayers('MapLink3','','hide');
	}

	// HACK FOR WOODS BROTHERS, BEATRICE AREA
	// I KNOW, I KNOW, THIS IS A REAL MESS.
	if (recoID == 40000) {
		if (grandParentSelected == 40002 || grandParentSelected == 40003) {
			MM_showHideLayers('RECoSearchLevelContainer3','','hide');
			MM_showHideLayers('stepNumber3','','hide');
			MM_showHideLayers('multiSelectInstructions','','hide');
			MM_showHideLayers('MapLink3','','hide');
			// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
			if (ie4 || ns6) {document.forms[formName].elements['Criteria/RECoSearchLevel3'].style.display = 'none'};	
		}	else if (selected != 40004 && selected != 40005 && selected != 40006 && selected != 40007) {
			MM_showHideLayers('RECoSearchLevelContainer3','','show');
			MM_showHideLayers('stepNumber3','','show');
			MM_showHideLayers('multiSelectInstructions','','show');
			MM_showHideLayers('MapLink3','','show');
			// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
			if (ie4 || ns6) {document.forms[formName].elements['Criteria/RECoSearchLevel3'].style.display = 'inline'};					
		} 
		
		if(selected == 40004 || selected == 40005 || selected == 40006 || selected == 40007) {
			MM_showHideLayers('multiSelectInstructions','','hide');
		} else {
			MM_showHideLayers('multiSelectInstructions','','show');
		} 

		if(grandParentSelected == 40001 && selected == 0) {
			MM_showHideLayers('MapLink3','','hide');
		}
	}

	// If we have only the default item in here, hide it
	if (searchLevelSelect.length < 2) {
		MM_showHideLayers('RECoSearchLevelContainer3','','hide');
		MM_showHideLayers('stepNumber3','','hide');
		if (ie4 || ns6) {document.forms[formName].elements['Criteria/RECoSearchLevel3'].style.display = 'none'};	
		if (!document.forms[formName].elements['Criteria/RECoSearchLevel2'].multiple == true)
			MM_showHideLayers('multiSelectInstructions','','hide');
	}		
		
	//SELECT NO PREFERENCE BY DEFAULT, AND LIMIT THE CHILD MENUS TO DISPLAYING NO PREFERENCE UNTIL SELECTION IS MADE
	//UPDATE THE CHILD MENU BASED ON WHAT'S SELECTED IN THIS MENU
	if (TotalSearchLevels > 3) {
		if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
		document.forms[formName].elements['Criteria/RECoSearchLevel4'].length = 1;
		document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[0].selected = true;}
		BuildSearchLevel4Menu(document.forms[formName].elements['Criteria/RECoSearchLevel3'].options[document.forms[formName].elements['Criteria/RECoSearchLevel3'].selectedIndex].value)
	}

}

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//BUILD SEARCHLEVEL4 BASED ON WHAT'S SELECTED IN SEARCHLEVEL3
function BuildSearchLevel4Menu(selected) {

	//IF AN ITEM IS SELECTED IN THE PARENT SEARCH LEVEL,
	//FIND OUT IF IT IS A BOTTOM SEARCH LEVEL;
	//IF SO, HIDE THIS SEARCH LEVEL; IF NOT, SHOW THIS SEARCH LEVEL
	var isBottomSearchLevel = false;
	if (selected > 0) {
		for (var i = 1; i <= TotalMenuItems; i++) {
			var TempArray = SearchLevelArray[i];
			// IF THE PARENT SEARCH LEVEL SELECTION IS IN THE SEARCH LEVEL ARRAY
			if (selected == TempArray[0]) {	
				// DETERMINE IF THE SELECTED SEARCH LEVEL IS A BOTTOM SEARCH LEVEL
				if (TempArray[6] == 1) {
					isBottomSearchLevel = true;
					break;
				}
			}
		}
	} else if (document.forms[formName].elements['Criteria/RECoSearchLevel3'].size > 1) {
		isBottomSearchLevel = true;
	}
	if (isBottomSearchLevel || document.getElementById('RECoSearchLevelContainer3').style.display == 'none') {
		MM_showHideLayers('RECoSearchLevelContainer4','','hide');
		MM_showHideLayers('stepNumber4','','hide');
		MM_showHideLayers('MapLink4','','hide');
		// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
		if (document.forms[formName].elements['Criteria/RECoSearchLevel4'])
			document.forms[formName].elements['Criteria/RECoSearchLevel4'].style.display = 'none';		
		if (!document.forms[formName].elements['Criteria/RECoSearchLevel3'].multiple == true && !document.forms[formName].elements['Criteria/RECoSearchLevel2'].multiple == true)
			MM_showHideLayers('multiSelectInstructions','','hide');
	} else {
		MM_showHideLayers('RECoSearchLevelContainer4','','show');
		MM_showHideLayers('stepNumber4','','show');
		MM_showHideLayers('multiSelectInstructions','','show');
		MM_showHideLayers('MapLink4','','show');
		// THIS COMMAND IS NEEDED BECAUSE NS6 DOESN"T HIDE THE FORM ELEMENT WHEN THE SPAN/TABLE ROW IS HIDDEN
		if (document.forms[formName].elements['Criteria/RECoSearchLevel4'])
			document.forms[formName].elements['Criteria/RECoSearchLevel4'].style.display = 'inline';	
	}

	//IF NO PREFERENCE WAS SELECTED ABOVE, ONLY DISPLAY NO PREFERENCE IN THIS MENU
	if (selected <= 0) {
		if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
		document.forms[formName].elements['Criteria/RECoSearchLevel4'].length = 1;
		document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[0].selected = true;}
	} else {
		//FIND OUT WHAT TO SET THE NUMBER OF OPTIONS TO
		var SearchLevel4Items = 1;
		for (var i = 1; i <= TotalMenuItems; i++) {
			var TempArray = SearchLevelArray[i];
			if (TempArray[2] == selected) {
				SearchLevel4Items++
				if (TempArray[6] == 1) {
				if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
					document.forms[formName].elements['Criteria/RECoSearchLevel4'].size = 6;
					document.forms[formName].elements['Criteria/RECoSearchLevel4'].multiple = true;}
				} else {
				if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
					document.forms[formName].elements['Criteria/RECoSearchLevel4'].size = 1;
					document.forms[formName].elements['Criteria/RECoSearchLevel4'].multiple = false;}
				}
			}
		}
		if (document.forms[formName].elements['Criteria/RECoSearchLevel4'])
			document.forms[formName].elements['Criteria/RECoSearchLevel4'].length = SearchLevel4Items;
		//WRITE THE OPTIONS TO THE SEARCH LEVEL MENU
		var SearchLevel4ItemCounter = 1;
		for (var i = 1; i <= TotalMenuItems; i++) {
			var TempArray = SearchLevelArray[i];
			if (TempArray[2] == selected) {
				if (document.forms[formName].elements['Criteria/RECoSearchLevel4']){
				document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[SearchLevel4ItemCounter].text = TempArray[5];
				document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[SearchLevel4ItemCounter].value = TempArray[0];}
				//If IsDefault = 1 select option
				if (TempArray[8] == 1)
					document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[SearchLevel4ItemCounter].selected = true;
				SearchLevel4ItemCounter++;
			}
		}
	}
	if (document.forms[formName].elements['Criteria/RECoSearchLevel4'])
		document.forms[formName].elements['Criteria/RECoSearchLevel4'].options[0].selected = true;
}