






// Boolean: false if Object contains nothing but undefined or null
hasNodes = function(obj) {
	for (node in obj) {
		if ((null == node) || (undefined == node)) continue;
		return true;
	}
	return false;
}
// Object: concats a list of Objects
joinObjects = function() {
	var newObj = {};
	var objectList = new Array();
	if (!arguments.length) return newObj;
	if ((arguments.length == 1) && arguments[0].length) objectList = arguments[0];
	if (!arguments[0].length) objectList = arguments;
	for (var i=0; i<objectList.length; i++) {
		for (var item in objectList[i]) newObj[item] = objectList[i][item];
	}
	return newObj;
}
// Number: the number of items at one level of an object
getItemCount = function(data) {
	if (arguments.length == 0) return;
	var i = 0;
	for (var node in data) i++;
	return i;
}


// Constructor for nav data object
function NavigationJSDO(data) { this.data = data; }

// Array: retrieve list of items in one node of navigation (e.g. one main section's subnav items)
NavigationJSDO.prototype.getItemsInNode = function(node) {
	if (!arguments.length && !node) var node = this.data;
	var itemList = new Array();
	for (var navItem in node) itemList[itemList.length] = navItem;
	return itemList;
}
// Array: retrieve list of items in every node on one level of navigation (e.g. all main sections' subnav items)
NavigationJSDO.prototype.getItemsAtLevel = function(targetLevel, node, atLevel) {
	if (!arguments.length) var targetLevel = 1;
	if ((arguments.length < 2) && !node) var node = this.data;
	if (arguments.length < 3) var atLevel = 0;
	var itemList = new Array();
	if (atLevel == (targetLevel - 1)) {
		for (var branch in node) itemList[itemList.length] = branch;
	} else {
		for (var branch in node) itemList = itemList.concat(this.getItemsAtLevel(targetLevel, node[branch], (atLevel + 1)));
	}
	return itemList;
}
// Array: hierarchical list of any parent ids up to and including the given id
NavigationJSDO.prototype.lookupPath = function(id, data) {
	if (arguments.length == 1) var data = this.data;
	if (!data) return [];
	if (data[id]) return [id];
	for (var node in data) {
		var pathList = this.lookupPath(id, data[node]);
		if (pathList.length) return [node].concat(pathList);
	}
	return [];
}
// String: finds first item in a node that does not have subnodes
NavigationJSDO.prototype.findFirstItem = function(data) {
	if (arguments.length == 0) var data = this.data;
	for (var node in data) {
		if (hasNodes(data[node])) return this.findFirstItem(data[node]);
		else return node;
	}
	return "";
}

NavJSDO = new NavigationJSDO({"d010cb18917810048d9600145edefa37":{},"cf9c0878917810048d6e00145edefa37":{"d00d7788917810048d7b00145edefa37":{},"d00d7788917810048d7700145edefa37":{},"d00d7788917810048d7300145edefa37":{},"d00d7788917810048d7400145edefa37":{},"d00d7788917810048d7900145edefa37":{},"d00d7788917810048d7500145edefa37":{},"d00d7788917810048d7a00145edefa37":{}},"cf9c0878917810048d6f00145edefa37":{"d00e3ec0917810048d7d00145edefa37":{},"d00e3ec0917810048d7b00145edefa37":{},"d00e3ec0917810048d7c00145edefa37":{}},"cf9c0878917810048d7000145edefa37":{"d00e9898917810048d8000145edefa37":{},"d00e9898917810048d8200145edefa37":{},"d00e9898917810048d7d00145edefa37":{},"d00e9898917810048d7e00145edefa37":{},"d00e9898917810048d8100145edefa37":{}},"cf9c0878917810048d7100145edefa37":{},"d010cb18917810048d9700145edefa37":{},"d010cb18917810048d9500145edefa37":{},"cf9c0878917810048d7200145edefa37":{"d0101768917810048d8e00145edefa37":{},"d0101768917810048d9300145edefa37":{},"d0101768917810048d8f00145edefa37":{},"d0101768917810048d9400145edefa37":{},"d0101768917810048d9500145edefa37":{},"d0101768917810048d9200145edefa37":{}},"cf9c0878917810048d7300145edefa37":{"d010abd8917810048d9500145edefa37":{}}});

pageNameToIdMap = {"PreOwnedVehicleSearch_1":"d00d7788917810048d7300145edefa37","custom.nav51435f50896010048b7b0003ba76d6c7":"d010abd8917810048d9500145edefa37","QuickQuoteForm_1":"d00d7788917810048d7400145edefa37","Employment_1":"d0101768917810048d9500145edefa37","FinancePreQualForm_1":"d00e3ec0917810048d7d00145edefa37","ServiceSection":"cf9c0878917810048d7000145edefa37","Welcome_1":"d0101768917810048d8e00145edefa37","TradeInForm_1":"d00d7788917810048d7900145edefa37","custom.nav796f35088e291004855500145efa6b30":"d0101768917810048d9200145edefa37","custom.nav48c5d0107dc110048b150003ba76d6c7":"d00d7788917810048d7700145edefa37","AboutSection":"cf9c0878917810048d7200145edefa37","custom.nave8c75a0078e110048a510003ba77890f":"d00e9898917810048d7e00145edefa37","MeetOurDepartments_1":"d0101768917810048d8f00145edefa37","PaymentCalculator_1":"d00e3ec0917810048d7b00145edefa37","custom.navd057b12877b41004897c0003ba703341":"d00d7788917810048d7a00145edefa37","CorporateIncentives_1":"d00d7788917810048d7500145edefa37","NewVehicleSearch_1":"d00d7788917810048d7b00145edefa37","ServiceApptForm_1":"d00e9898917810048d8000145edefa37","FinanceSection":"cf9c0878917810048d6f00145edefa37","VehiclesSection":"cf9c0878917810048d6e00145edefa37","custom.nav9294e30069691004841d0003ba77f966":"d010cb18917810048d9500145edefa37","custom.nav51436338896010048b7b0003ba76d6c7":"cf9c0878917810048d7300145edefa37","HoursAndDirections_1":"d0101768917810048d9400145edefa37","HomePage_1":"d010cb18917810048d9600145edefa37","CustomerSupport_1":"d0101768917810048d9300145edefa37","PartsOrderForm_1":"d00e9898917810048d8200145edefa37","LeasevsFinance_1":"d00e3ec0917810048d7c00145edefa37","CorporateCoupons_1":"d00e9898917810048d8100145edefa37","ServiceSurvey_1":"d00e9898917810048d7d00145edefa37"};

// String: pageName for given id
pageNameToIdMap.reverseLookup = function(id) {
	for (var node in this) {
		if (this[node] == id) return node;
	}
	return "";
}
// String: pageName in pageNameToIdMap for given navigationId
getPageName = function(navigationId) {
	for (var node in pageNameToIdMap) {
		if (pageNameToIdMap[node] == navigationId) return node;
	}
	return "";
}
// String: navigationId in pageNameToIdMap for given pageName
getNavigationId = function(pageName) {
	return pageNameToIdMap[pageName];
}

