






// 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({"3b462ea8909a1004822400145edef087":{},"3b2d18c8909a100481ff00145edef087":{"3b437758909a1004820a00145edef087":{},"3b437758909a1004820d00145edef087":{},"3b437758909a1004820500145edef087":{},"3b437758909a1004820b00145edef087":{},"3b437758909a1004820e00145edef087":{},"3b437758909a1004820400145edef087":{},"3b437758909a1004820900145edef087":{}},"3b2d18c8909a1004820000145edef087":{"3b4480f8909a1004821000145edef087":{},"3b4480f8909a1004820f00145edef087":{},"3b4480f8909a1004820e00145edef087":{}},"3b2d18c8909a1004820100145edef087":{"3b44a808909a1004821300145edef087":{},"3b44a808909a1004821100145edef087":{},"3b44a808909a1004821200145edef087":{},"3b44a808909a1004821000145edef087":{}},"3b2d18c8909a1004820200145edef087":{},"3b462ea8909a1004822600145edef087":{},"3b462ea8909a1004822500145edef087":{},"3b2d18c8909a1004820300145edef087":{"3b456f40909a1004822100145edef087":{},"3b456f40909a1004821e00145edef087":{},"3b456f40909a1004821f00145edef087":{},"3b456f40909a1004822200145edef087":{},"3b456f40909a1004821d00145edef087":{},"3b456f40909a1004821c00145edef087":{}},"3b2d18c8909a1004820400145edef087":{"3b45f410909a1004822300145edef087":{},"3b45f410909a1004822400145edef087":{}}});

pageNameToIdMap = {"PreOwnedVehicleSearch_1":"3b437758909a1004820d00145edef087","custom.nava45da0987f64100487790003ba77f966":"3b2d18c8909a1004820400145edef087","QuickQuoteForm_1":"3b437758909a1004820500145edef087","FinancePreQualForm_1":"3b4480f8909a1004821000145edef087","ServiceSection":"3b2d18c8909a1004820100145edef087","Welcome_1":"3b456f40909a1004822100145edef087","NewModelsPage_5":"3b437758909a1004820400145edef087","AboutSection":"3b2d18c8909a1004820300145edef087","custom.nava45da0987f64100487780003ba77f966":"3b45f410909a1004822300145edef087","MeetOurDepartments_1":"3b456f40909a1004821f00145edef087","ContactUsForm_1":"3b456f40909a1004821d00145edef087","PaymentCalculator_1":"3b4480f8909a1004820f00145edef087","CorporateIncentives_1":"3b437758909a1004820e00145edef087","NewVehicleSearch_1":"3b437758909a1004820a00145edef087","custom.nava2f0f1387f64100487780003ba77f966":"3b462ea8909a1004822500145edef087","ServiceApptForm_1":"3b44a808909a1004821300145edef087","FinanceSection":"3b2d18c8909a1004820000145edef087","VehiclesSection":"3b2d18c8909a100481ff00145edef087","NewModelsPage_4":"3b437758909a1004820900145edef087","custom.nava6ec90a87f64100487b40003ba77f966":"3b45f410909a1004822400145edef087","HoursAndDirections_1":"3b456f40909a1004822200145edef087","HomePage_1":"3b462ea8909a1004822400145edef087","CustomerSupport_1":"3b456f40909a1004821e00145edef087","AdWizardMainMenu_1":"3b437758909a1004820b00145edef087","PartsOrderForm_1":"3b44a808909a1004821100145edef087","LeasevsFinance_1":"3b4480f8909a1004820e00145edef087","CorporateCoupons_1":"3b44a808909a1004821200145edef087","ServiceSurvey_1":"3b44a808909a1004821000145edef087","WebSiteSurvey_1":"3b456f40909a1004821c00145edef087"};

// 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];
}
