(function($){
	var stackTrace = new Array();
	var valueTrace = new Array();

	// Define Array.indexOf for browsers that don't implements this
	if (!Array.prototype.indexOf) {
		Array.prototype.indexOf = function(val, fromIndex) {
			if (typeof(fromIndex) != 'number') fromIndex = 0;
			for (var index = fromIndex,len = this.length; index < len; index++)
				if (this[index] == val) return index;
			return -1;
		};
	}

	$.fn.setupListsAll = function(){
		var myManagers = myObj.assetManagers.manager;
		$("#capList").empty();$("#capabilities").hide();
		$("#manager").removeOption(/./).addOption("","Select an Asset Manager");$("#manager").addOption('all','All', false);
		$("#assetClass").removeOption(/./).addOption("","Select an Asset Class");$("#assetClass").addOption('all','All', false);
		$("#strategy").removeOption(/./).addOption("","Select a Strategy");$("#strategy").addOption('all','All', false);
		$("#style").removeOption(/./).addOption("","Select a Style");$("#style").addOption('all','All', false);
		for (i in myManagers){
			for (j in myManagers[i].properties){
				if(myManagers[i].properties[j].manager != '' &&  typeof myManagers[i].properties[j].manager != 'undefined' ){
					$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);
				}
				if(myManagers[i].properties[j].assetClass != '' && typeof myManagers[i].properties[j].assetClass != 'undefined' ){
					$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);
				}
				if(myManagers[i].properties[j].strategy != '' && typeof myManagers[i].properties[j].strategy != 'undefined' ){
					$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);
				}
				if(myManagers[i].properties[j].style != '' && typeof myManagers[i].properties[j].style != 'undefined' ){
					$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);
				}
			}
		}
	};

	$.fn.getListValues = function(id,val){
		var myManagers = myObj.assetManagers.manager;
		$("#capList").empty();
		if(stackTrace.indexOf(id) == -1){stackTrace.push(id);valueTrace.push(val)}
		else{stackTrace.splice(stackTrace.indexOf(id)+1,stackTrace.length+1);valueTrace.splice(stackTrace.indexOf(id)+1,stackTrace.length+1);valueTrace[stackTrace.indexOf(id)] = val};
		level = (stackTrace.length - 1);
		switch (level){
			case 0:
				if(valueTrace[0] == "all"){
					stackTrace.splice(0,stackTrace.length+1);valueTrace.splice(0,stackTrace.length+1);
					$("document").setupListsAll();
				}else{
					
					if(stackTrace.indexOf('manager') == -1){$("#manager").removeOption(/./).addOption("","Select an Asset Manager");$("#manager").addOption('all','All', false)};
					if(stackTrace.indexOf('assetClass') == -1){$("#assetClass").removeOption(/./).addOption("","Select an Asset Class");$("#assetClass").addOption('all','All', false)};
					if(stackTrace.indexOf('strategy') == -1){$("#strategy").removeOption(/./).addOption("","Select a Strategy");$("#strategy").addOption('all','All', false)};
					if(stackTrace.indexOf('style') == -1){$("#style").removeOption(/./).addOption("","Select a Style");$("#style").addOption('all','All', false)};
					
					for (i in myManagers){
						for (j in myManagers[i].properties){
							if(eval("myManagers[i].properties[j]." + stackTrace[0]) == valueTrace[0]){
								if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false)}};
								if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false)}};
								if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false)}};
								if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false)}};
								if(myManagers[i].properties[j].capability.url){
									$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
								}
							} 
						}
					}
				}
				break;
			case 1:
				if(valueTrace[1] == "all"){
					stackTrace.splice(1,stackTrace.length+1);valueTrace.splice(1,stackTrace.length+1);
					$("document").getListValues(stackTrace[0], valueTrace[0]);
				}else{
					
					if(stackTrace.indexOf('manager') == -1){$("#manager").removeOption(/./).addOption("","Select an Asset Manager");$("#manager").addOption('all','All', false)};
					if(stackTrace.indexOf('assetClass') == -1){$("#assetClass").removeOption(/./).addOption("","Select an Asset Class");$("#assetClass").addOption('all','All', false)};
					if(stackTrace.indexOf('strategy') == -1){$("#strategy").removeOption(/./).addOption("","Select a Strategy");$("#strategy").addOption('all','All', false)};
					if(stackTrace.indexOf('style') == -1){$("#style").removeOption(/./).addOption("","Select a Style");$("#style").addOption('all','All', false)};
					
					for (i in myManagers){
						for (j in myManagers[i].properties){
							if(eval("myManagers[i].properties[j]." + stackTrace[0]) == valueTrace[0]){	
								if(eval("myManagers[i].properties[j]." + stackTrace[1]) == valueTrace[1]){
									if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);};};
									if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);};};
									if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);};};
									if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);};};
									if(myManagers[i].properties[j].capability.url){
										$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
									}
								}
							}
						}
					}
				}
				break;
			case 2:
				if(valueTrace[2] == "all"){
					stackTrace.splice(2,stackTrace.length+1);valueTrace.splice(2,stackTrace.length+1);
					$("document").getListValues(stackTrace[1], valueTrace[1]);
				}else{
					
					if(stackTrace.indexOf('manager') == -1){$("#manager").removeOption(/./).addOption("","Select an Asset Manager");$("#manager").addOption('all','All', false)};
					if(stackTrace.indexOf('assetClass') == -1){$("#assetClass").removeOption(/./).addOption("","Select an Asset Class");$("#assetClass").addOption('all','All', false)};
					if(stackTrace.indexOf('strategy') == -1){$("#strategy").removeOption(/./).addOption("","Select a Strategy");$("#strategy").addOption('all','All', false)};
					if(stackTrace.indexOf('style') == -1){$("#style").removeOption(/./).addOption("","Select a Style");$("#style").addOption('all','All', false)};
					
					for (i in myManagers){
						for (j in myManagers[i].properties){
							if(eval("myManagers[i].properties[j]." + stackTrace[0]) == valueTrace[0]){	
								if(eval("myManagers[i].properties[j]." + stackTrace[1]) == valueTrace[1]){
									if(eval("myManagers[i].properties[j]." + stackTrace[2]) == valueTrace[2]){
										if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);};};
										if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);};};
										if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);};};
										if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);};};
										$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
									}else if (valueTrace[2] == 'all'){
										stackTrace.splice(2);valueTrace.splice(2);
										if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);};};
										if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);};};
										if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);};};
										if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);};};
										if(myManagers[i].properties[j].capability.url){
											$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
										}
									}
								}
							}	
						}		
					}
				}
				break;
			case 3:
				if(valueTrace[3] == "all"){
					stackTrace.splice(3,stackTrace.length+1);valueTrace.splice(3,stackTrace.length+1);
					$("document").getListValues(stackTrace[2], valueTrace[2]);
				}else{
					
					if(stackTrace.indexOf('manager') == -1){$("#manager").removeOption(/./).addOption("","Select an Asset Manager");$("#manager").addOption('all','All', false)};
					if(stackTrace.indexOf('assetClass') == -1){$("#assetClass").removeOption(/./).addOption("","Select an Asset Class");$("#assetClass").addOption('all','All', false)};
					if(stackTrace.indexOf('strategy') == -1){$("#strategy").removeOption(/./).addOption("","Select a Strategy");$("#strategy").addOption('all','All', false)};
					if(stackTrace.indexOf('style') == -1){$("#style").removeOption(/./).addOption("","Select a Style");$("#style").addOption('all','All', false)};
					
					for (i in myManagers){
						for (j in myManagers[i].properties){
							if(eval("myManagers[i].properties[j]." + stackTrace[0]) == valueTrace[0]){	
								if(eval("myManagers[i].properties[j]." + stackTrace[1]) == valueTrace[1]){
									if(eval("myManagers[i].properties[j]." + stackTrace[2]) == valueTrace[2]){
										if(eval("myManagers[i].properties[j]." + stackTrace[3]) == valueTrace[3]){
											if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);};};
											if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);};};
											if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);};};
											if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);};};
											$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
										}else if (valueTrace[3] == 'all'){
											stackTrace.splice(3);valueTrace.splice(3);
											if(stackTrace.indexOf('manager') == -1){if(myManagers[i].properties[j].manager != ''){$("#manager").addOption(myManagers[i].properties[j].manager , myManagers[i].properties[j].manager, false);};};
											if(stackTrace.indexOf('assetClass') == -1){if(myManagers[i].properties[j].assetClass != ''){$("#assetClass").addOption(myManagers[i].properties[j].assetClass , myManagers[i].properties[j].assetClass, false);};};
											if(stackTrace.indexOf('strategy') == -1){if(myManagers[i].properties[j].strategy != ''){$("#strategy").addOption(myManagers[i].properties[j].strategy , myManagers[i].properties[j].strategy, false);};};
											if(stackTrace.indexOf('style') == -1){if(myManagers[i].properties[j].style != ''){$("#style").addOption(myManagers[i].properties[j].style , myManagers[i].properties[j].style, false);};};
											if(myManagers[i].properties[j].capability.url){
												$("#capList").append("<a href='"+myManagers[i].properties[j].capability.url+"'>"+ myManagers[i].properties[j].capability.name + "</a><br />");
											}
										}
									}
								}
							}	
						}		
					}
				}
				break;	
			default:
				$("document").setupListsAll();
				break;
		}
	};
})(jQuery);

